语句概念
语句(statement)是C程序的基本构建块。一条语句相当于一条完整的
计算机指令。在C中,大部分语句都以分号结尾。
在我们使用分支语句和循环语句当中,常常会用到花括号括起一条或者多条语句的称为复合语句。
了解完语句的概念,接下来就来了解下分支语句。
分支语句
if语句
定义:
if ( expression )
statement
如果对expression求值为真(非0),则执行statement;否则,跳过statement。
举个例子
代码:
int age=0; scanf("%d",&age); if(age<18) { printf("未成年\n"); }
这是C语言if语句的基本写法。
在代码程序中,会根据你的岁数判断是否小于18,如果是就执行括号中的语句。否则跳过该语句。
if else 语句
定义:
if ( expression )
statement1
else
statement2
如果expression为真(非0),则执行statement1;如果expression为假或0,则执行else后面的statement2。
还是以上面例子为为例:
代码:
int age=0; scanf("%d",&age); if(age<18) { printf("未成年\n"); } else { printf("成年人\n"); }
如果年龄小于18,就执行if语句,否则就会执行else语句
else if 语句
else if是对if语句进行拓展,当我们有多条件进行选择时,可以用到else if进行选择,称为多分支语句。
例子:
char type; scanf("%c",&type); if(type=='A') { printf("A型血\n"); } else if(type=='B') { printf("B型血\n"); } else if(type=='O') { printf("O型血\n"); } else { printf("AB型血\n"); }
这个就是对if语句有多个选择,当一块语句执行后,其他直接跳过,所以上下语句是有联系的。
那如果代码是这样呢
char type; scanf("%c",&type); if(type=='A') { printf("A型血\n"); } if(type=='B') { printf("B型血\n"); } if(type=='O') { printf("O型血\n"); } if(type=='AB') { printf("AB型血\n"); }
这样子存在多条if语句,把每条if语句是单独的一部分,执行完一条if语句,需要对下一条if语句进行判断是否执行。这样子程序执行命令就会增多,所以,如果条件是相关的且只需判断一次,那么就用多分支语句。
嵌套的if语句
先看代码:
int num=0; scanf("%d",&num); if(num>20) { if(num%2==0) { printf("这是一个大于20的偶数\n"); } else { printf("这是一个大于20的奇数\n"); } } else { printf("这是一个小于20的数\n"); }
很明显,先判断数是否大于20,再判断它的奇偶性,最终得出结果。
注意事项
如果你细心的话,会发现我每一个if语句都会用花括号进行括起,且进行一定的缩进,C并不要求一定要缩进,但这是标准风格。但如果有多条语句,而没有使用花括号括起,只会执行一条语句。
这是你想要的效果:
然后写了代码:
int num=0; scanf("%d",&num); if(num>20) if(num%2==0) printf("这是一个大于20的偶数\n"); else printf("这是一个小于20的数\n");
实际效果:
如果没有花括号括起,那么语句就会遵循就近原则,else寻找最近的if语句进行匹配,只有括起来才知道你想要与哪个if语句进行匹配。所以,我建议每个语句都括起花括号来,这样不但让人读起代码来一目了然,并且不会犯上面那种低级错误。
switch语句
当我们面对某个条件进行多分支判断时,可以使用switch语句,
这是switch的构造:
switch ( 整型表达式)
{
case 常量1:
语句
case 常量2:
语句
default : <–可选
语句
}
在这里switch后面的圆括号必须是整型类型的表达式(包括char类型).case之后用整型常量,default跟if语句中的else意思差不多,如果表达的值与所有的case标签的值都不匹配,那么就会跳转到default语句上执行。注意:default可以出现在case标签中的任意位置,当然,delault是可以选择的。
switch语句和break语句
先说一下break:程序执行到循环中的break语句时,会终止包含它的循环,并继续执行,虽然switch不是一个循环语句,但是没有break时,执行某一case标签后,该case标签之后的case标签语句也会执行。
下一阶段。
在我们使用switch语句时,常常和break进行搭配使用,这样子才能实现真实的分支。
int day=0; scanf("%d",&day); switch (day) { case 1: printf("星期一\n"); break; case 2: printf("星期二\n"); break; case 3: printf("星期三\n"); break;; case 4: printf("星期四\n"); break;; case 5: printf("星期五\n"); break;; case 6: printf("星期六\n"); break;; case 7: printf("星期日\n"); break;; default: break; }
当你输入数字时,如果是1到7,哪个数字,就会进行打印相应的星期,如果是其他数字,就会直接进入default跳出switch。
请看下面例子:
这种写法也叫做多重标签。所以如果程序内执行某条语句之后跳出程序,就用break进行截止跳出。
if语句和switch语句
如果是根据整型类型和常量来进行判断,优先使用switch语句。因为使用switch,程序通常运行快一些,生成的代码少一些。在不满足switch条件下(浮点型整型等),就使用if语句。