《论语?述而》有“择其善者而从之,其不善者而改之”,C语言有“择其适者而从之,其不适者而弃之”,岂不妙哉?
所谓的控制语句(亦称为分支语句)就是控制整够程序的执行流程,说白了就是“如果怎样那么就做相应的处理”。
先给大家罗列出C语言所提供的基本控制语句关键字:
if //单控条件语句
if-else //配对条件语句
if-else if-else//流水线配对语句
switch-case//开关语句
从单词字面含义大家就知道 if是如果之意嘛,else是否则之意嘛,switch译为开关,基本语法如下:
单控条件语句:
if(Controlling Expression)//控制表达式
{
TODO SOMETHINGS
}
{}所囊括的是在控制表达式为真时所执行的语句,称为块语句;
配对条件语句
if(Controlling Expression)//控制表达式
{
TODO SOMETHINGS
}
else
{
TODO SOMETHINGS
}
如果条件不成立,在自动执行else语句块部分;
流水线配对语句
if(Controlling Expression)//控制表达式
{
TODO SOMETHINGS
}
else if(Controlling Expression)
{
TODO SOMETHINGS
}
else
{
TODO SOMETHINGS
}
如果有一个条件成立,则其他条件判断语句就不执行,即不进行判断操作,这样一来就节省程序执行时间了。
开关语句
switch(Controlling Expression)
{
case 常量表达式:语句列表
case 常量表达式:语句列表
case 常量表达式:语句列表
…..
}
也即判断哪个case的常量表达式与Controlling Expression相匹配,那么就执行相应的语句列表。
其实控制语句的语法部分就这么多。但不禁要问一句,讲这么一点真的够了吗?显然不够,在实际项目开发时,往往所遇到的问题是一些教科书上所不曾提及到的。我们下面来讲解这些知识点。
稍稍深入:
①单单一个if语句多用于判断某个条件是否成立,不成立则直接结束整够函数的调用或者结束整够程序,配已return关键字得以实现,语法如下:
if(Controlling Expression)
{
…
return ;
}
②if-else配对形式,中的else总是与最近的if配对,在实际开发时千万注意配对层次的关系
③if-else if-else这种配对形式,多用于多分支判断语句,主要是对if-else的功能扩展,最后的else语句可有可无,就相当于switch中的default语句,但逻辑自己要清楚
④switch-case这个语句可以说是对if-else if-else语句功能的弱化而得来的,原因在于,switch的Controlling Expression只能是整形,而且case后面跟的表达式必须是常量,要在编译期间就能够确认。
深入部分其实也就是一些总结性质的东西,这个是要记住的。下面讲一些注意事项
①if语句如果是判断的浮点数的大小关系的话,最好是判断的一个范围,这个知识点涉及到浮点型数据的精度问题,后面会有讲
②switch-case语句中的break与default问题,这些事很多初学者犯错的地方,每一个case语句后都必须加break语句,default语句中的break可有可无,但是这个可有可无是基于你对C语言是非常了解的情况下才行,给大家举个例子
switch(day)
{
default …
break;//这里的break能少吗?如果少了,则至少有一个case语句被执行
case 1:
…
break;
case 2:
…
break;
…
}
下面给初学者附上一个猜数游戏,程序不是很难,主要就是用的控制语句实现的,大家有兴趣的话,可以自己写一下
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
main()
{
int magic,a,i=0,count=0;
again:printf("input magic:");i++;
scanf("%d",&magic);
srand(time(NULL));a=rand()%10+1;
for(;i<=10;)
{
count++;
if(magic==a)
{ printf("right\n");
printf("magic=a=%d\n",magic,a);
break;}
if((magic>a)&&i<=9)
{printf("big\nagain ");goto again;}
if((magic>a)&&i==10){printf("big\n");goto end;}
if((magic<a)&&i<=9)
{printf("small\nagain ");goto again;}
if((magic<a)&&i==10){printf("small\n");goto end;}
}
end:printf("count=%d\n",count);
if(count>=10)
printf("over\n");
}