遇到多分支选择的时候可以使用if-else嵌套来完成,但是当分支比较多的情况吗,嵌套的if语句也会响应的增多,程序就会变得冗长,程序的可读性也就会因此降低。
针对多分支结构,C语言提供了switch-case语句。
switch-case语句的基本结构:
switch(表达式){ //表达式的值必须为整数类型(包括字符型)
case 常量1:语句1;
case 常量2:语句2;
case 常量3:语句3;
......
default: 语句4;
}
在执行switch语句时,先计算表达式的值,依次和case后面的常量比较,如果值相同的话就转去执行那个case后面的语句,并且一直执行到花括号结束。如果没有值相同,就转去执行default后面的语句。
如果需要表达式的值和case常量的值相同的话,只执行该case常量语句,我们需要在对应的case语句后面加上break;
,使其跳出switch语句。
switch(表达式){ //表达式的值必须为整数类型(包括字符型)
case 常量1:语句1;break;
case 常量2:语句2;break;
case 常量3:语句3;break;
......
default: 语句4;
}
/*
* 输入一个等级,输出对应的分数段
* A:80~90
* B:60~79
* C:0~59
*/
int main()
{
char ch;
scanf("%c",&ch);
switch(ch){
case 'A' :
printf("80~100");
break;
case 'B':
printf("60~79");
break;
case 'C':
printf("0~59");
break;
default:
printf("输入不合法");
}
return 0;
}
break可以跳出switch结构,当都去掉break语句后,执行后:
/*
* 输入一个2022年的日期,输出该天是2022年的第几天
*/
int main()
{
int month,day; //定义两个整型变量,month月,day天
int n = 0; //是2022的第n天
scanf("%d %d",&month,&day);
switch (month) {
case 12:
n+=30;
case 11:
n+=31;
case 10:
n+=30;
case 9:
n+=31;
case 8:
n+=31;
case 7:
n+=30;
case 6:
n+=31;
case 5:
n+=30;
case 4:
n+=31;
case 3:
n+=28;
case 2:
n+=31;
case 1:
n+=day;
}
printf("%d",n);
return 0;
}
大概思路:如果输入1月份的day天,直接输出day天。如果输入是2月份的day天,就需要用day加上一月份天数。