【C语言】“分⽀与循环第一章:开启创新之门,探索无尽可能性的第一篇章“1:https://developer.aliyun.com/article/1474618
二、switch语句
除了if语句,C语言还可以用switch语句来实现分支结构。switchswitch
语句是⼀种特殊形式的的elif…else 结构,⽤于判断条件有多个结果的情况。它把多重else改成更易⽤、可读性更好的形式。
switch (expression) { case value1: statement case value2: statement default: statement }
上⾯代码中,根据表达式expression
不同的值就执⾏相应的case
分支。如果找不到对应的值,就执行default
分支
注:
• switch
后的 expression
必须是整型表达式
• case
后的值,必须是整形常量表达式
2.1 if语句和switch语句的对⽐
练习:输⼊任意⼀个整数值,计算除3之后的余数
#include <stdio.h> int main() { int n = 0; scanf("%d", &n); if(n%3 == 0) printf("整除,余数为0\n"); else if(n%3 == 1) printf("余数是1\n"); else printf("余数是2\n"); return 0; }
改为switch语句:
#include <stdio.h> int main() { int n = 0; scanf("%d",&n); switch(n%3) { case 0: printf("整数,余数0\n"); break; case:1 printf("余数是1\n"); break; case:2 printf("余数是2\n"); break; } return 0; }
通过上述的代码中,我们要注意的点有:
1.case
和后边的数字之间必须有空格
2. 每⼀个case
语句中的代码执⾏完成后,需要加上 break
,才能跳出这个switch语句。
2.2 switch语句中的break
如果我们把前面代码的break去掉,又会发生什么情况呢?
#include <stdio.h> int main() { int n = 0; scanf("%d", &n); switch(n%3) { case 0: printf("整除,余数为0\n"); case 1: printf("余数是1\n"); case 2: printf("余数是2\n"); } return 0 }
输出:
分析:13 除以3余数是1,那为什么又多出一行“余数是2”呢?
原因是switch语句是按分支运行的,只有switch语句中使用break才能跳出switch语句,如果一个分支case语句后没有break语句,代码会继续走,不会停,又可能执行其他case语句中的代码,直到break语句结束。就如上面代码就执行了case 中的语句。
2.3 switch语句中的default
在使⽤switch语句的时候,使⽤比如switch 后表达式中的值⽆法匹
配代码中的case 语句的时候,这时候要不就不做处理,要不就得在
switch
语句中加⼊default
⼦句。(与 if
和 else
相似)
switch (expression) { case value1: statement case value2: statement default: statement }
switch
后边的expression
的结果不是default
⼦句。如果以这样完成代码:value1
,也不是value2
的时候,就会执⾏default
⼦句。
输⼊⼀个1~7的数字,打印对应的星期⼏
例如:
输⼊:1 输出:星期⼀
输⼊:2 输出:星期⼆
输⼊:3 输出:星期三
输⼊:4 输出:星期四
输⼊:5 输出:星期五
输⼊:6 输出:星期六
输⼊:7 输出:星期天
#include <stdio.h> int main() { 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; } return 0; }
如果改为要求:
1.输⼊1-5,输出的是“⼯作⽇”;
2.输⼊6-7,输出“休息⽇;
这时我们可以借助上面所谈到的
switch
没有break
语句就会一直执行下去,因此:
#include <stdio.h> int main() { int day = 0; scanf("%d", &day); switch(day) { case 1: case 2: case 3: case 4: case 5: printf("⼯作⽇\n"); break; case 6: case 7: printf("休息⽇\n"); break; } return 0;
注:在switch
语句中,case
和default
的顺序问题是有规定的吗?default必须放在最后吗?实际上,在switch语句中,case
和default
语句的顺序没有具体要求,只要满足实际需求即可。然而,通常我们会将default
子句放在最后进行处理。