多路分支switch-case结构相对复杂,需要将语句形式和执行过程进行逐一讲解,尤其是break在switch语句中的使用。通过示例对比有无break的区别,从而理解break的含义和作用。
switch多路分支结构及其应用是重难点,最后需要通过具体示例来讲解switch的应用。
1、switch结构形式
注1:switch()中的表达式是有值的,且与常量1...常量n的类型相同;
注2:当switch()中的表达式值与某个case后的常量相等时,则执行相应的语句序列。若后面有break,则执行break跳出一层switch结构;若后面没有break,则继续执行下一个case后的语句,因为switch()中的表达式不再与case后的常量进行比较大小了。
注3:当switch()中的表达式值与所有case后的常量都不相等时,则执行default后的语句,且default可以放在任意位置,一般都是放在所有case之后。
注4:case与常量之间有一个空格,且常量后面有:号。
2、有无break的区别
注:由于i=10,所以执行case 10后面的i+=1,即i=i+1=10+1=11。然后执行break跳出一层switch结构,即printf()上面的}后面。最后执行printf()输出结果为i=11。
注:由于i=10,所以执行case 10后面的i+=1,即i=i+1=10+1=11。然后继续执行case 11后面的i+=1,以及default后面的i+=1,即得到i=13,因为switch(i)中的i值不再与case常量进行比较了。最后执行printf()输出结果为i=13。
3、可与if-elseif-else相互转换
上节课我们讲了一个成绩分级的if-else-if代码:
#include "stdio.h"
int main()
{
int score;
scanf("%d",&score);
if(score>=90) printf("A");
else if(score>=80) printf("B");
else if(score>=70) printf("C");
else if(score>=60) printf("D");
else printf("E");
return 0;
}
它可以转换为switch代码形式,如下:
#include "stdio.h"
int main()
{
int score,t;
scanf("%d",&score);
t=score/10; //得到10、9、8、7、6、5...
switch(t)
{
case 10:;
case 9: printf("A"); break;
case 8: printf("B"); break;
case 7: printf("C"); break;
case 6: printf("D"); break;
default: printf("E");
}
return 0;
}
注1:从上面看,case 10和case 9共用了“printf("A"); break;”,因为存在分数为100分的情况;
注2:default语句后面没有break,因为这里default语句放在最后,后面直接就是},意味switch结构结束了,没有必要再加break。
运行结果如下:
与成绩分级的if-else-if代码结果相同。