> 文档中心 > C语言:控制语句

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 情况的顺序没有要求,任意位置都可以


//有任何疑惑和看法欢迎留言