在c语言当中还有另外一条语句也可以实现程序的分支结构
switch语句
switch(数据){
case 值1:
语句1
case 值2:
语句2
...
default:
语句n
}
在switch后面的括号当中会出现一个表达式或者具体的数值,根据然后匹配相等的数值的 case 开始执行,一直执行到switch结构的最后,如果值都不相等,那么会执行default后面的内容
比如说,我们希望使用 1~4 来代表四个季节,输入季节的代号,打印出季节的名字,我们的程序可能会这样写
#include <stdio.h>
int main(){
int month;
scanf("%d",&month);
switch(month){
case 1:
printf("春季");
case 2:
printf("夏季");
case 3:
printf("秋季");
case 4:
printf("冬季");
default:
printf("输入有误");
}
}
但是这样会出现问题
这里一定要注意,switch 语句是从case 之后一直执行到 switch 结束,而不是只执行匹配的case后面的部分,如果需要只执行匹配的 case,可以加上break
break 的作用就是,程序执行到 break ,就会结束switch结构
把程序修改一下
#include <stdio.h>
int main(){
int month;
scanf("%d",&month);
switch(month){
case 1:
printf("春季");
break;
case 2:
printf("夏季");
break;
case 3:
printf("秋季");
break;
case 4:
printf("冬季");
break;
default:
printf("输入有误");
}
}
这样执行的结果就满足要求了
而有的时候,并不是所有的case后面都需要加上break,
比如我们 把1~3月称为第一季度,4~6月称为第二季度,7~9月称为第三季度,10~12月称为第四季度,然后需要我们输入月份输出是第几季度
#include <stdio.h>
int main(){
int month;
scanf("%d",&month);
switch(month){
case 1:
case 2:
case 3:
printf("第一季度季");
break;
case 4:
case 5:
case 6:
printf("第二季度季");
break;
case 7:
case 8:
case 9:
printf("第三季度季");
break;
case 10:
case 11:
case 12:
printf("第四季度季");
break;
default:
printf("输入有误");
}
}
在这个程序里,多个 case 共享一个break,
switch 语句和 if 语句都可以实现程序的分支结构,但是使用的具体情形有所不同
if语句基本上在任何情况下都可以使用;
switch语句只有在判断条件是具体值的时候才可以使用,也就是说switch不能进行范围判断,但是再某些情况下,使用switch可以更容易的实现功能