switch语句
一个switch语句允许测试一个变量同时与多个值进行比较判断的情况。
每个值称为一个case,且被测试的变量会对每个switch case进行检查(没有break)
一、格式
switch(expression)
{
case constant-expression1:
statement(s);
break;
case constant-expression2:
statement(s);
break;
....
default:
statement(s);
break;
}
二、流程图
三、注意事项
- 表达式必须是个值(
int
,byte
,short
,char
,enum
) - 一个switch中可有任意数量的case语句,每个case后跟你一个要比较的值和一个冒号。
- case的常量与switch的表达式必须是同一类型
- case只要匹配上,后面其他的case不再匹配,顺序执行代码,直到遇到break语句或}停止
- default一般用在结尾,用于上面所有case都不为真时执行。
- default的break不是必需的。default也不是必需的。
- 在有break的情况下,各个case和default出现次序不影响结果。
- case后跟的值必须互不相同。
- switch不支持字符串,浮点数
四、经典例题
- 分数转换
#include<stdio.h> int main() { char score; scanf("%c",&score); switch(score) { case 'A': printf("90分以上\n"); break; case 'B': printf("80到90分\n"); break; case 'C': printf("70到80分\n"); break; case 'D': printf("60到70分\n"); break; case 'E': printf("60分以下\n"); break; default: printf("输入错误\n"); } return 0; }
- 从键盘上输入2020年的“month”和“day”,要求通过程序输出输入的日期为2020年的第几天
#include <stdio.h> int main() { int month, day; printf("请输入月份:"); scanf("%d", &month); printf("\n请输入当前月第几天:"); scanf("%d", &day); if(day<=31 && day>=0 && month>=1 && month<=12) { switch(month) { case 1: printf("输入的日期为2020的第%d天",day); break; case 2: printf("输入的日期为2020的第%d天",day+31); break; case 3: printf("输入的日期为2020的第%d天",day+60); break; case 4: printf("输入的日期为2020的第%d天",day+91); break; case 5: printf("输入的日期为2020的第%d天",day+121); break; case 6: printf("输入的日期为2020的第%d天",day+152); break; case 7: printf("输入的日期为2020的第%d天",day+182); break; case 8: printf("输入的日期为2020的第%d天",day+213); break; case 9: printf("输入的日期为2020的第%d天",day+243); break; case 10: printf("输入的日期为2020的第%d天",day+274); break; case 11: printf("输入的日期为2020的第%d天",day+304); break; case 12: printf("输入的日期为2020的第%d天",day+334); break; default: printf("您的输入有误!"); break; } } else { printf("您的输入有误!"); } return 0; }
嵌套switch语句
可以在一个 switch 语句内使用另一个 switch 语句。
内部和外部 switch 的 case 常量可以包含共同的值。
一、格式
switch(ch1) {
case 'A':
printf("这个 A 是外部 switch 的一部分" );
switch(ch2) {
case 'A':
printf("这个 A 是内部 switch 的一部分" );
break;
case 'B': /* 内部 B case 代码 */
}
break;
case 'B': /* 外部 B case 代码 */
}
二、例题
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int a=1,b=0;
switch(a)
{
case 1:switch(b)
{
case 0:printf("***");break;
case 1:printf("@@@");break;
}
case 2:printf("$$$\n");break;
default:printf("###");
}
return 0;
}
三、注意事项
内部switch匹配成功,执行完语句通过break跳出内部switch后,不会再进行外部switch的匹配,顺序执行代码。
例:
#include <stdio.h>
int main()
{
int a=1,b=0;
switch (a)
{
case 1:
switch (b)
{
case 0: printf("**0**");break;
case 1: printf("**1**");break;
}
case 2: printf("**2**");break;
}
return 0;
}
上述代码可抽象为下列代码
结果: