4.3 多分支选择结构
在C语言中还提供了一种多路判定语句switch,在这种结构里可以实现,一个条件符合时程序执行若干条语句。
1、语法形式
switch(表达式)
{ case 常量表达式1:语句序列1
case 常量表达式2:语句序列2
.
.
.
case 常量表达式n:语句序列n
default: 语句序列n+1
}
其中,
①switch、case和default是C语言关键字,default是可以缺省的项;
②switch后的表达式必须为整型或字符型表达式;
③case后的常量表达式称为标号,且标号须互不相同,case与标号之间必须留有空格;
④必要时,某些case标号后的语句序列可以不写,但冒号不可省;
⑤语句序列可以是一条也可以是多条,且多条不需组合成复合语句。
2、执行过程
首先计算switch后表达式的值,然后寻找与其相等的case标号,如果找到了则从该case后的语句序列开始执行下去,不再进行判断,直至遇break或switch结构结束;如果没有找到与switch表达式的值相等的case标号,则执行default后的语句序列或退出switch结构(default缺省的情况下)。
这里提到了break,它是一个使程序立即从switch结构或循环中退出的语句,在下一章会详细介绍。具体程序中到底要不要使用break,需要针对实际问题而定。
3、举例
设变量grade是字符型的,代表成绩的等级,以下程序段则实现根据学生成绩的等级来输出相应的分数范围:
switch(grade)
{case ‘A’:printf(“90~100\n”);break;
case ‘B’:printf(“80~89\n”); break;
case ‘C’:printf(“70~79\n”); break;
case ‘D’:printf(“60~69\n”); break;
case ‘E’:printf(“ 0~59\n”); break;
default: printf(“error!\n”);
}
执行以上程序段时,若grade的值为‘A’则输出结果是:90~100回车;若grade的值为‘D’则输出结果是:60~69回车;若grade的值超出A-E这五个等级之外,例如’G’则输出结果是:error!回车。
如果将所有的break语句去掉,程序变成:
switch(grade)
{case ‘A’:printf(“90~100\n”);
case ‘B’:printf(“80~89\n”);
case ‘C’:printf(“70~79\n”);
case ‘D’:printf(“60~69\n”);
case ‘E’:printf(“ 0~59\n”);
default: printf(“error!\n”); }
则程序找到一个入口之后会一直执行到switch结束,例如,若grade的值为‘C’则输出结果是:70~79
60~69
0~59
error!
显然,后面三行的信息我们是不需要的,所以实际应用中要善于使用break语句。