一、什么是分支语句
如果条件满足才能做某件事情,如果条件不满足就做另外一件事情,或者什么也不做。分支语句又被称为“判断语句”,正因为有了判断,才让程序有了很多的分支选择。
二、分支语句的分类
2.1 if 语句
2.1.1 if语句的语法结构
单分支:
if(表达式)
{
语句;
}
双分支:
if(表达式)
{
语句1;
}
else
{
语句2;
}
多分支:
if(表达式1)
{
语句1;
}
else if(表达式2)//此处else if语句可以有多个
{
语句2;
}
else
{
语句3;
}
注 :当只有一条执行语句时可以省略语句体的大括号,但一般建议写上,使代码可读性更高。
2.1.2 执行方式
当表达式为真时则执行其语句体,为假则跳过其语句体,继续执行下一条语句。
0表示假,非0表示真
2.1.3 else的匹配与{}
#include <stdio.h> int main() { int a = 0; int b = 2; if (a == 1) if (b == 2) printf("你好\n"); else printf("hello\n"); return 0; }
提问:输出结果是什么?
正确答案是:什么也不输出。是不是有的同学会认为是输出hello,那么这里就要探讨一下else究竟和哪个if匹配?
当我们在编译器中输入这段代码时:
从图片中可以看出编译器自动让else和离它近的if对齐了,确实如此,else是和它离的最近的if匹配的。这种问题在我们自己写代码的时候出现的少,但在做题时一定要多注意,谨防掉入else悬空的陷阱中。
如果我们想输出hello呢?
只需要加大括号即可
2.2 switch语句
2.2.1 switch语句的语法结构
switch(整型表达式)
{
case 整形常量表达式:
语句;
case 整形常量表达式:
语句;
case 整形常量表达式:
语句;
......
}
2.2.2 执行方式
当整形表达式值为整型常量表达式值时,则执行其语句。执行完该语句后,接着执行下面的语句。
示例:
#include<stdio.h> int main() { int day = 2; switch (day) { case 1:printf("星期一\n"); case 2:printf("星期二\n"); case 3:printf("星期三\n"); case 4:printf("星期四\n"); case 5:printf("星期五\n"); case 6:printf("星期六\n"); case 7:printf("星期天\n"); } return 0; }
它的编译结果为
如果我只想输出星期二怎么办?
这就要用到break语句了。
2.2.3 switch语句中的 break
在switch语句中,我们没办法直接实现分支,
搭配break
使用才能实现真正的分支。
break的作用是跳出当前循环或者代码块
示例:
#include<stdio.h> int main() { int day = 2; 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; } return 0; }
那当day=8或者其他值的时候该怎么办呢?
2.2.4 default子句
default:
语句;
示例:
#include<stdio.h> int main() { int day = 9; 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: printf("输入错误\n"); } return 0; }
当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。
每个switch语句中只能出现一条default子句。
可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子。
注:在每个 switch 语句中都放一条default子句是个好习惯 。