- C语言程序设计教程
- 张敏霞 孙丽凤 王秀鸾主编
- 1266字
- 2020-08-28 09:09:38
4.4 switch语句
从上面的介绍可知,利用嵌套的if语句结构可以处理实际问题中常常遇到的多分支选择结构。但同时也应看到如果分支较多,则嵌套的if语句层数较多,程序冗长,可读性降低,而且编写程序容易出错。对此C语言提供的switch语句,可以很方便、直接地处理多分支选择。switch语句被称为多分支选择语句,也称为开关语句,其一般形式为:
switch(表达式) { case常量表达式1: 语句1; case常量表达式2: 语句2; …… case常量表达式n: 语句n; default: 语句n+1; }
该语句的语义为,程序执行时首先计算表达式的值,并由第一个case分支开始将其逐个与case后的常量表达式值作比较,当表达式的值与某个case分支的常量表达式值相等时,则执行case后的内嵌语句,然后不再进行判断,继续执行后面case分支的内嵌语句,直到遇到break语句(关于break语句,将在第5章介绍)或者遇到语句的右花括号为止。当表达式的值与所有case分支的常量表达式均不相同时,则执行default后的内嵌语句。
【例4.8】 编写程序,输入1~10之间的任意一个数字,输出相应的英文单词。
分析:定义一个整型变量a接收从键盘输入的数字,并作为switch语句的表达式,设计10个case子句,其常量表达式分别为1~10,对应的case子句为输出相应的英文单词的语句。程序代码如下:
#include"stdio.h" main() { int a; printf("input integer number:"); scanf("%d",&a); switch(a) { case 1:printf("One\n"); case 2:printf("Two\n"); case 3:printf("Three\n"); case 4:printf("Four\n"); case 5:printf("Frive\n"); case 6:printf("Six\n"); case 7:printf("Seven\n"); case 8:printf("Eight\n"); case 9:printf("Nine\n"); case 10:printf("Ten\n"); default:printf("error\n"); } }
程序运行结果如下:
输入:8 输出:Eight Nine Ten error
本来要求输入一个数字,只输出对应的英文单词,但是当输入8之后,却执行了case 8及以后的所有内嵌语句,输出了Eight及以后的所有单词,这当然是不希望的。为什么会出现这种情况呢? 这恰恰说明了switch语句的一个特点。在switch语句中,case 常量表达式只相当于一个语句标号,表达式的值和某个语句标号(常量表达式的值)相等则转向该标号执行其后的内嵌语句,但不能在执行完该标号的内嵌语句后自动跳出整个switch结构,所以出现了继续执行所有后面case内嵌语句的情况。这是与前面介绍的if语句完全不同的,应特别注意。为了避免上述情况的发生,可以使用C语言提供的break语句适时跳出switch结构。break语句只有关键字break,没有参数,在第5章将详细介绍。修改例4.9的程序,在每一个case语句之后增加break语句,使之执行每一个case子句后均可跳出switch结构,从而避免输出不应有的结果。程序代码如下:
#include"stdio.h" main() { int a; printf("input integer number:"); scanf("%d",&a); switch(a) { case 1:printf("One\n");break; case 2:printf("Two\n");break; case 3:printf("Three\n");break; case 4:printf("Four\n");break; case 5:printf("Frive\n");break; case 6:printf("Six\n");break; case 7:printf("Seven\n");break; case 8:printf("Eight\n");break; case 9:printf("Nine\n");break; case 10:printf("Ten\n");break; default:printf("error\n"); } }
在使用switch语句时还应该注意以下几点:
① 在case后的各个常量表达式的值不能相同,否则会出现错误。
② 在case后,允许有多条语句,可以不用“{ }”括起来,也允许没有语句。
③ 各case和default子句的先后顺序可以变动,而不会影响程序执行结果,且default子句可以省略不用。
④ 从语法上来说,switch语句也是一条完整的控制语句。
⑤ break语句的作用是使控制立即跳出switch结构,恰当地使用break语句,可以控制一段程序的执行入口和出口点。例如:
switch(i) { case 1: 语句1; case 2: 语句2;break; case 3: 语句3; case 4: 语句4; case 5: 语句5;break; defau1t: 语句6; }
当i=1时,从语句1执行到语句2;i=2时,执行语句2;i=3时,从语句3执行到语句5;i=4时,从语句4执行到语句5;i=5时,执行语句5;i为其他值时,执行语句6。所以根据i的值,可以实现从不同的入口开始执行一段代码后从不同的出口退出,以满足程序的要求。