if语句 使用场景:某些代码,在满足条件的时候才执行
利用if语句对数据进行判断,从而执行不同的代码
格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 if(关系表达式){ 语句体; } #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int a, b; printf("请输入两个数字:"); scanf("%d %d", &a, &b); if (a < b) { printf("大的数字为:%d",b); if (a>b) { printf("大的数字为:%d", a); } } else { printf("两个数字一样大"); } return 0; }
细节1:在C语言当中,如果判断的结果是一个数字,非0表示条件成立,0表示条件不成立
细节2:如果大括号里面的语句体只有一行,那么大括号可以省略不写(但是还是写的好)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 if(关系表达式) { 语句体A; } else { 语句体B; } #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { double w; printf("请输入人的温度:"); scanf("%lf",&w); if (w > 37.5) { printf("温度过高,语音警报"); } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 if(关系表达式A){ 语句体A; } else if(关系表达式B){ 语句体B; } else if(关系表达式C){ 语句体C; } else{ 语句体N; } #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { / 需求: 键盘录入游戏氪金的总额度,不同的额度VIP等级也不一样 1~99元 : 尊贵的VIP1 100~499元 : 尊贵的VIP2 500~999元 : 尊贵的VIP3 1000~1999元 : 尊贵的VIP4 * 2008~5000元 : 顶级的VIP5* / int money; printf("录入游戏氪金的总额度:\n"); scanf("%d", &money); if (money ==0) { printf("0冲玩家\n"); } else if (money>=1 && money<=99) { printf("尊贵的VIP1\n"); } else if(money>=100 && money<=499) { printf("尊贵的VIP2\n"); } else if (money >= 500 && money <= 999) { printf("尊贵的VIP3\n"); } else if (money >= 10000 && money <= 1999) { printf("尊贵的VIP4\n"); } else { printf("顶级的VIP5\n"); } return 0; }
switch语句 作用:把所有的选择一一列举出来,根据不同的条件任选其一
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 switch(表达式){ case 值1: 语句体1; break; case 值2: 语句体2; break; . default: 语句体n; break; } #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { //需求:键盘录入月份数,输出输出对应的季节。 //春季:3、4、5月份 //夏季 : 6、7、8月份 //秋季 : 9、18、11月份 //冬季 : 12月份到次年的2月份 int month; printf("请输入月份:"); scanf("%d",&month); switch (month) { case 12: case 1: case 2: printf("冬季\n"); break; case 3: case 4: case 5: printf("春季\n"); break; case 6: case 7: case 8: printf("夏季\n"); break; case 9: case 10: case 11: printf("秋季\n"); default: printf("没有这个月份\n"); break; } return 0; }
执行流程:
首先计算表达式的值。
依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。如果所有的case后面的值和表达式的值都不匹配,就会执行default里面的语句体,然后结束整个switch语句
格式细节说明:
表达式:计算结果只能为(字符/整数)
case:值只能是(字符 /整数)的字面量,不能是变量
case:值不允许重复
break:表示中断,结束的意思,结束switch语句
defaut:所有情况都不匹配,执行该处的内容 defaut可以写在任意位置,甚至可以省略不写
switch和if第三种格式各自的使用场景:
switch:有限个case进行匹配的情况,10个左右
if:一般是对一个范围进行判断
case穿透的规则:
还是根据小括号中表达式的结果去匹配对应的case
执行对应case里面的代码
如果在执行的过程中,遇到了break,那么直接结束整个switch,但是如果没有遇到break,就会继续执行下面case中的代码,直到遇到break,或者把整个switch中所有的代码全部执行完了,才会结束
细节:case穿透只会往下穿,不会回上面
循环结构 循环:重复的执行某件事情
for循环 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 for(初始化语句;条件判断语句;条件控制语句){ 循环体语句 } //每段代码是单独的,用的时候注释掉其他 #include<stdio.h> int main() { for (int i = 0; i <5; i++) { printf("你早睡了吗?\n"); } //需求:在实际开发中,如果要获取一个范围中的每一个数据时,就会用到循环 //要求1 : 打印1 - 5 //要求2 : 打印5 - 1 for (int i = 1; i <= 5; i++) { printf("%d\t", i); } printf("\n"); for (int j = 5; j >= 1; j--) { printf("%d\t", j); } //需求:在实际开发中,如果要获取一个范围中的每一个数据时,也会用到循环。 // 要求:求1 - 5之间的和 //变量的生命周期:变量只在所属的大括号中有效 int s=0; for (int i = 1; i <= 5; i++) { s = i + s; } printf("%d\n", s); //需求:在实际开发中,如果要获取一个范围中的每一个数据时,会用到循环。 // 但是,如果不想获取所有的数据,而是获取其中符合要求的数据,此时就需要循环和其他语句结合使用了。 // 比如:求1 - 100之间的偶数和 int s = 0; for (int i = 1; i <= 100; i++) { if (i%2==0)//判断,只有当前的数字是偶数的时候,才进行累加 { s = i + s; } } printf("%d\n", s); //需求:键盘录入两个数字,表示一个范围。 //统计这个范围中。 //既能被6整除,又能被8整除数字有多少个 ? int a, b,count=0;//count用来统计个数 printf("请输入两个数字代表范围:"); scanf("%d %d",&a,&b); if (a < b) {//判断输入的两个哪个数字较大 for (int i = a; i <= b; i++) { if (i % 6 == 0 && i % 8 == 0) { / *printf("%d\n",i);* / count++; } } } else { for (int i = b; i <= a; i++) { if (i % 6 == 0 && i % 8 == 0) { / *printf("%d\n",i);* / count++; } } } printf("既能被6整除,又能被8整除数字有%d个\n",count); return 0; }
初始化语句:循环的开始条件
条件判断语句:循环的结束条件
条件控制语句:控制循环次数的
循环体语句:要重复执行的代码
执行流程: 1执行初始化语句 2执行条件判断语句,看其结果是否成立 成立:执行循环体语句 不成立:结束循环
3执行条件控制语句 4回到2继续执行条件判断语句
初始化语句只执行一次
判断语句成立,循环继续
判断语句不成立,循环结束
while循环 1 2 3 4 5 6 7 8 9 10 11 12 13 14 初始化语句 while(条件判断语句{ 循环体语句 条件控制语句 }; #include<stdio.h> int main() { //打印三遍你好! int n=1; while (n <= 3) { n++; printf("你好!\n"); } }
for和while的对比 相同点:运行规则都是一样的
for 和 while 的区别:
for循环中:知道循环次数或者循环的范围 while循环:不知道循环的次数和范围,只知道循环的结束条件
例题 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #include<stdio.h> int main() { //给你一个整数 n,请你判断该整数是否是2的幕次方举例 : //n = 1 输出 : yes 2的0次方 //n = 2 输出 : yes 2的1次方 //n = 3 输出 : no //n = 4 输出 : yes 2的2次方 //n = 5 输出 : no //规则:任意的一个数字,不断的除以2,, 最终都会得到数字1 //循环的结束条件是什么 ? 1,结果是1的时候,就可以结束了 yes //结果无法被2再次整除了,也可以结束了,no int n; printf("请输入一个整数:"); scanf("%d", &n); //利用循环不断的除以2 //小括号里面写的是:什么情况下,循环可以继续执行,跟上面的推断是反过来的 while (n > 1 && n % 2==0) { { n = n / 2; } } if (n == 1) { printf("yes\n"); } else { printf("no\n"); } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include<stdio.h> int main() { //需求:世界最高山峰是珠穆朗玛峰(8844.43米 = 8844430毫米) // 假如我有一张足够大的纸,它的厚度是0.1毫米。 // 请问,我折叠多少次,可以折成珠穆朗玛峰的高度 ? //思路: // 利用循环折叠纸张,当纸张的厚度超过珠穆朗玛峰的高度,循环就结束了 // 循环的结束条件 : 纸张的厚度 > 穆朗玛峰的高度 int height= 8844430; double paper = 0.1; int count = 0; //利用循环折兽纸张 //小括号里面的内容:什么情况下,循环可以继续执行,跟上面的结束条件是反过来的 while (paper <= height) { paper = paper * 2; count++; } printf("折叠%d次,可以折成珠穆朗玛峰的高度\n", count); }
do…while语句 格式
1 2 3 4 5 初始化语句; do { 循环体语句; 条件控制语句; }while(条件判断语句);
从上到下执行;先执行后判断,循环体至少执行一次
1 2 3 4 5 6 7 8 9 10 11 #include<stdio.h> int main() { //do while打印1-5 int t=1; do { printf("%d\n", t); t++; } while (t <= 5); return 0; }
无限循环 三种格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include<stdio.h> int main() { for (;;) { printf("无限循环\n"); } / while (1) { printf("无限循环\n"); } do { printf("无限循环\n"); * } while (1);* / return 0; } //注意点:无限循环因为永远停不下来,所以下面不能再写其他的代码了
跳转控制语句 跳转控制语句:在循环的过程中,跳到其他语句上执行
Break 不能单独书写,只能写在switch,或者是循环中,表示结束,跳出的意思
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include<stdio.h> int main() { / 找符合要求的数字 * 在1~100之间,找第一个既能被3,又能被5整除的数字* / / int i=0; while (i < 100) { i++; if (i % 3 == 0 && i % 5 == 0) { printf("%d\n", i); break; } * }* / for (int i = 1; i <= 100; i++) { if (i % 3 == 0 && i % 5 == 0) { printf("%d\n", i); break; } } return 0; }
Continue 只能写在循环中,表示跳过本次循环,继续执行下次循环
1 2 3 4 5 6 7 8 9 10 11 #include<stdio.h> int main() { //小全全早上一共买了5个包子,吃到第三个包子时,发现里面有个虫子。直接扔掉不吃了,开始吃下一个包子 for (int i = 1; i <= 5; i++) { if (i == 3) { continue; } printf("在吃第%d个包子\n", i); } return 0; }
嵌套循环 循环嵌套:循环里面还有其他循环
1.先判断最外层循环条件,若满足条件则进入第一层循环体;
2.进入第一层循环体后进行第二层循环条件判断,若满足判断条件,进入第二层循环体;
3.由内而外执行循环体操作;
4.执行完第一次内循环体操作后,进行内循环体变量累加,再次执行内循环体操作,直到不满足进入内循环体条件为止;
5.执行外循环体操作;
6.在第一次外循环体操作完成后,外循环体变量累加,回到步骤1,判断是否满足进入外循环体条件,若满足条件,再次依次执行上述步骤,直到不满足进入外循环体条件为止;
7.彻底退出嵌套循环操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #include<stdio.h> int main() { //打印矩形 for (int i = 1; i <= 3; i++) { for (int j = 1; j <= 5; j++) { printf("*"); } printf("\n"); } printf("\n"); //打印三角形 //解释代码 // 打印第一行的* 内循环:1~5 // 打印第二行的* 内循环:2~5 // 打印第三行的* 内循环:3 ~5 //..... for (int i = 1; i <= 5; i++) { for (int j = i; j <= 5; j++) { printf("*"); } printf("\n"); } printf("\n"); for (int i = 1; i <= 5; i++) { for (int j = 1; j <= i; j++) { printf("*"); } printf("\n"); } printf("\n"); //打印乘法表 for (int i = 1; i <= 9; i++) {//多少行 for (int j = 1; j <= i; j++) {//多少列 int a = i * j; printf("%d*%d=%d\t", j, i, a);// \t:制表符 长度可变的大空格 } printf("\n"); } return 0; }
\t:制表符 长度可变的大空格
会根据前面字母的个数在后面补空格,让整体的长度达到8或者8的倍数,最少补1个,最多补8个
作用:打印表格数据的时候,可以对齐