【C语言初阶】分支语句 —— switch语句
文章目录
3 switch
语句
switch
语句是一种多分支选择语句。
当遇到如下例子时:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期日
如果继续使用 if
语句实现上述内容,会变得复杂繁琐,而此时就可以使用 switch
语句进行代替。
3.1 switch
- 流程图
3.2 switch
语句的语法
switch(expression)
{
case constant-expression :
statement(s);
break; /* 可选择的 */
case constant-expression :
statement(s);
break; /* 可选择的 */
/* 可以有任意数量的 case 语句 */
...
default : /* 可选择的 */
statement(s);
break; /* 可选择的 */
}
解释说明:
1 switch(expression)
switch
语句中的 expression
表达式必须是一个整型表达式。
2 case constant-expression :
:这样用来表示程序跳转的标识称为标签(label)。
在一个 switch
中可以有任意数量的 case
语句。每个 case
后跟一个要比较的值和一个冒号。
标签的值必须是整型常量(整型常量表达式),不可以是变量。
不允许多个标签同为一个值。
当被测试的变量等于 case
中的常量时,case
后跟的语句将被执行,直到遇到 break
语句为止。
3 break;
执行 break
语句之后,程序会跳出将它围起来的 switch
语句。
4 default :
当控制表达式的判断结果与任何一个 case
都不一致的时候,程序就会跳转到 default :
继续执行。
5 在最后一个 case
的末尾也加上 break
语句的话,就可以灵活对 case
的增加或删除了。
6 switch
语句中的 case
标签可以根据具体实现要求任意顺序书写,当然不同的标签顺序会影响程序的执行结果。
简要总结:
//switch语句中的表达式必须是一个整型表达式。
//case语句是分支入口,switch中可以由任意数量的case分支。
//不同case分支后的整型常量表达式的值不能相同。
//break语句用来跳出一层switch语句,根据实际需求添加。
//当switch表达式的值不满足任意case分支时,程序会跳转到default子句执行;若此时也无default子句,则跳过 switch语句继续执行后续其他语句。
//switch语句中的case分支与default子句位置可以是任意的,不同的分支顺序会影响程序的执行结果,根据实际需求书写。
3.3 switch
中的 break
语句
当遇到 break
语句时,switch
终止,控制流将跳转到 switch
语句后的下一行,继续执行后续语句。
3.3.1 示例1
输入一个数字,打印对应的星期。
代码示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
//输入一个数字,打印对应的星期
int day = 0;
printf("星期几?(1~7):>");
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:
printf("输入错误,请重新输入!\n");
break;
}
return 0;
}
解释说明:
1 输入 day
的值后,遇到 switch
语句,判断表达式 day
的结果,根据结果在 case
分支中寻找相同的值。
找到后,就跳转到对应的 case
分支,按照书写顺序执行后面的语句,如果遇到 break
语句就跳出 switch
语句。
如果没找到相同的值。就跳转到 default
子句,继续执行。
3.3.2 示例2
判断今天是工作日还是休息日。
代码示例:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
//判断今天是工作日还是休息日
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
default:
printf("输入错误,请重新输入!\n");
break;
}
return 0;
}
解释说明:
1 case 1: 、case 2: 、case 3: 、case 4: 、case 5:
case 6: 、case 7:
不同的分支实现相同的效果。
2 当表达式的结果与 case
分支匹配成功后,case
会顺序执行后续语句,直到遇到 break
语句跳出 switch
为止。
3 break
语句的作用是把语句列表划分为不同的分支。
3.4 default
子句
如果表达式的值与所有的 case
标签的值都不匹配,就会跳过所有语句,继续执行 switch
后的其他语句。
如果不想忽略不匹配所有标签的表达式的值时,可以添加 default
子句。
3.4.1 注意要点
-
default
可以写在任意一个case
标签可以出现的位置。也就是说default
的书写位置任意。 -
每个
switch
语句中只能出现一条default
子句。 -
可以在每个
switch
语句中都添加一条default
子句,并在其后再加上一条break
语句。
3.4.2 switch
语句的练习
switch
的嵌套
代码示例:
#include<stdio.h>
int main()
{
//switch练习题
int n = 1;
int m = 2;
switch (n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch (n)//17行,switch允许嵌套使用
{
case 1:
n++;
case 2:
m++;
n++;
break;//24行
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d,n = %d\n", m, n);//5 3
return 0;
}
解释说明:
1 switch
语句中可以嵌套 switch
语句。见第17行。
2 break
语句只能跳出一层 switch
语句。见第24行。
3 case
分支中如果没有遇到 break
语句,就会继续执行后续语句。
总结:
本节介绍了分支语句中的switch
语句;给出了 switch
语句的使用规则、以及break
在switch
语句中的作用;同时又讲解了 switch
中 default
子句的用法。
感谢您的阅读!如有任何错误,欢迎您的批评指正!