C语言:控制语句
前言
现实生活中完成一件事情无外乎三种情况:
- 按照怎样的顺序去执行----顺序
- 遇到选择了如何去选择----分支
- 某件事可能要多做几次----循环
编程也是一样,最基本的结构就是这三种情况。
顺序
#includeint main(void){ int num;//创建变量 scanf("%d",&num);//输入变量的值 return 0;}
上述代码中,我们需要先创建变量,再使用它,而不能使用完它再创建,这就是顺序。
循环
-
什么是“真” 什么是“假”
C语言规定:0为“假”,其他的数字为“真”。
如果一个表达式成立,例如5>3,这个表达式恒成立,则为真,会返回数字1(每个表达式都会返回一个值),相反,如果写成5<3,则这个表达式会返回0,就为假。
-
while循环
#includeint main(void){ while(1) { printf("xxxx\n"); } return 0;}
while()循环括号里面是判断是否可以进入循环的条件,如果括号里的条件成立,即为真,就进入循环,否则不进入循环。括号里面是1,那么就进入循环,
执行完循环里面的语句后,会再次回到while()循环的条件进行判断,1永远为真,所以就会一直循环,造成死循环。
运行结果如下:
这里只截取到一部分,实际上会一直打印
-
for循环
for(exp1;exp2;exp3)循环括号内部分为三个部分,exp1是初始化,只在for循环开始时执行一次,exp2是判断条件,exp3是调整部分,这三部分中间用分号隔开。
#includeint main(void){ int i; for(i=0;i<10;i++) { printf("%d ",i); } return 0;}
这段代码即用for循环打印了0-9的数字 ‘
-
do while循环
do while循环不管三七二十一先执行一次循环体内部的语句,然后再进行判断是否循环
#includeint main(void){ int i = 0; do { printf("%d",i); }while(i); return 0;}
注意:do while循环的while后面是有分号的,而while循环和for循环括号后面是不可以加分号的
分支
当我们遇到好多种情况需要去抉择的时候我们应该如何去选择呢,这就需要分支语句
-
if语句
#includeint main(void){int num;scanf("%d", &num);if (num > 0){printf("%d > 0\n",num);}else if (num < 0){printf("%d < 0\n",num);}else{printf("%d = 0\n",num);}return 0;}
上述代码即为if语句的例子,输入num,符合哪种情况就进入哪一个代码段
使用if语句需要注意的事项
- 每个if语句后面只能跟一个语句,如果有多个语句需要用大括号括起来
- else if可以有无数多种
- else 的情况是除了if 和 else if 之外的所有情况
- 如果代码段没有用大括号括起来,那么else语句会和离else语句最近的if 匹配
例如如下代码:
#includeint main(void){int num;scanf("%d", &num);if (num > 0)printf("%d > 0\n", num);if (num < 0)printf("YES\n");elseprintf("NO\n");return 0;}
代码运行结果如下:
有人疑惑,为什么else 语句也会执行?
实际上,和else 语句离的最近的是2号if语句并不是1号if()语句,如何避免这种情况呢?就是每个情况都用大括号括起来,不管有几个语句,都用大括号括起来,这样可以使代码之间的关系一目了然,可读性提高,不至于造成上面的情况。
优化后如下:
#includeint main(void){int num;scanf("%d", &num);if (num > 0){ printf("%d > 0\n", num);}if (num < 0){printf("YES\n"); }else{ printf("NO\n");}return 0;}
-
switch语句
#includeint main(void){int day;scanf("%d", &day);switch (day){case 1:printf("今天是周%d",day);break;case 2:printf("今天是周%d", day);break;case 3:printf("今天是周%d", day);break;case 4:printf("今天是周%d", day);break;case 5:printf("今天是周%d", day);break;case 6:printf("今天是周%d", day);break;case 7:printf("今天是周%d", day);break;default:printf("输入错误");break;}return 0;}
switch()括号里的判断条件是整数
case 后面的数字即为switch括号里的数字
如果有一种情况符合,就从这个case 进入,一直执行后面的语句,知道遇到第一个break才停止,如果没有遇到break,就会执行完后面所有的情况
例如:
#includeint main(void){int day;scanf("%d", &day);switch (day){case 1:case 2:case 3:case 4:case 5:printf("工作日\n");break;case 6:case 7:printf("休息日\n");default:printf("输入错误");break;}return 0;}
输入2,就会进入case 2,一直执行到遇到break
default 语句可有可无,是除了列出来的case 的所有情况,所有case 情况的顺序没有要求,任意位置都可以
//有任何疑惑和看法欢迎留言