- C语言程序设计案例精粹
- 崔丹等编著
- 67字
- 2024-12-22 15:11:11
5.6 嵌套switch语句
嵌套的switch语句是指在一个switch语句中,某个case下会再嵌入一个或多个switch语句,用于进一步作分支选择。嵌套的switch遵循所有简单switch语句的规则。
5.6.1 嵌套switch语句的定义
与嵌套if语句类似,嵌套的switch语句应用更加复杂,也更加接近实际问题。其一般表达形式为:
switch(表达式1) { case常量表达式1: switch(表达式2) { case常量表达式 11: 语句段11 case常量表达式12: 语句段12 …… case常量表达式1m: 语句段1m default: 语句段1m+1 } case常量表达式2: 语句段2; …… case常量表达式n: 语句段n; default: 语句段n+1; }
嵌套switch语句的执行规则为:首先计算表达式1,将外围常量表达式与表达式1的值作比较,若常量表达式1与表达式1相同,则进入嵌套switch执行,此时仍然首先计算表达式2,然后判断嵌套的各case中常量表达式与表达式2的值是否相等,若相等,则执行相应的语句段。
5.6.2 嵌套switch语句的执行与应用
嵌套的switch语句执行与简单switch语句执行类似,两者并无明显差别。需要注意的是,嵌套switch语句中的break语句仅对当前的switch语句起作用,并不会跳出整个switch语句。
范例5.10 SwitchAarlineSearch.c
SwitchAarlineSearch.c查询一周七天的航班情况。例如,要查周五上午的航班,则输入5和m(morning),然后输出星期五上午的航班时间表。星期可使用整型数字,可输入m(代表上午)、a(代表下午)和e(代表晚上)来查看不同时间段的航班信息。(光盘\chat5\ SwitchAarlineSearch.c)
01 #include<stdio.h> 02 main() 03 { 04 unsigned int weekday=0; 05 char c; 06 printf("请输入星期数 和m(上午), a(下午)or e(晚上): \n"); 07 scanf("%d%c", &weekday, &c); //输入参数 08 switch(weekday) //外层switch结构 09 { 10 case 1: //相同属性 11 case 2: //相同属性 12 case 3: //相同属性 13 case 4: //相同属性 14 case 5: //相同属性 15 { 16 switch(c) //嵌套switch 17 { 18 case' m' : //morning 19 { 20 printf("To Beijing:06:20,07:30,10:15,11:50\n"); 21 printf("To Shanghai:06:10,07:40,10:05,11:00\n"); 22 printf("To NewYork:08:15,10:20,11:35\n"); 23 break; 24 } 25 case' a' : //afternoon 26 { 27 printf("To Beijing: 12:20,14:30,15:15,17:50\n"); 28 printf("To Xian : 12:10,14:40,15:05,17:00\n"); 29 printf("To NewYork: 12:15,13:20,16:35\n"); 30 break; 31 } 32 case' e' : //evening 33 { 34 printf("To Beijing: 18:20,20:30,21:15,22:50\n"); 35 printf("To Shanghai: 20:10,20:40,21:05,22:00\n"); 36 printf("To Chengdu: 21:15,22:20,23:35\n"); 37 break; 38 } 39 default: printf("错误:您输入的参数不正确\n"); 40 } 41 break; 42 } 43 case 6: //相同属性 44 case 7: //相同属性 45 { 46 switch(c) 47 { 48 case' m' : //morning 49 { 50 printf("To Beijing:06:20,07:30,10:15,11:50\n"); 51 printf("To Shanghai:06:10,07:40,10:05,11:00\n"); 52 printf("To NewYork:08:15,10:20,11:35\n"); 53 printf("To HongKong:08:35,10:10,11:25\n"); 54 break; 55 } 56 case' a' : //afternoon 57 { 58 printf("To Beijing: 12:20,14:30,15:15,17:50\n"); 59 printf("To Xian : 12:10,14:40,15:05,17:00\n"); 60 printf("To NewYork: 12:15,13:20,16:35\n"); 61 printf("To Sydney: 12:30,14:60,15:55,17:30\n"); 62 break; 63 } 64 case' e' : //evening 65 { 66 printf("To Beijing: 18:20,20:30,21:15,22:50\n"); 67 printf("To Shanghai: 20:10,20:40,21:05,22:00\n"); 68 printf("To Chengdu: 21:15,22:20,23:35\n"); 69 printf("To QingDao: 18:50,20:10,20:20,20:55,23:10,23:55\n"); 70 break; 71 } 72 default:printf("错误:您输入的参数不正确\n"); 73 } 74 break; 75 } 76 default: printf("错误:您输入的参数不正确\n"); 77 } 78 }
程序第10到14行界定,对星期一、星期二、星期三、星期四和星期五具有相同的航班信息,第43和44行界定星期六和星期天具有相同航班信息。对每天的航班信息,又分为上午、中午和晚上三个时间段的航班。对输入的时间段作分支,根据不同时段输出不同的航班信息。
程序执行时输入5e,按回车键。
请输入星期数 和m(上午), a(下午) or e(晚上): 5e
输出结果为:
To Beijing: 18:20, 20:30, 21:15, 22:50 To Shanghai: 20:10, 20:40, 21:05, 22:00 To Chengdu: 21:15, 22:20, 23:35
作者心得:
程序中多次出现多个case共用一段语句段的情况,这样的目的是体现多条case具有相同的属性,读者在编写程序时应尽量注意,这样的设计应以注释表达出来,以便于程序阅读。