我们之前学到的if语句时只有两个分支可以选择,
遇到多分支的时候就要使用嵌套,
导致代码较长,
现在我们可以用switch语句来简化多分支的代码。
我们先来看一个程序:
要求按照考试成绩的等级输出百分制分数段,
A等为85分以上,
B等为70~84分,
C等为60~69分,
D等为60分以下。
成绩的等级由键盘输入。
这个就是多分支选择结构
我们直接来看代码:
#include <stdio.h>
int main()
{
char grade;
scanf("%c", &grade);
printf("Your score:");
switch (grade)
{
case'A': printf("85~100\n"); break;
case'B': printf("70~84\n"); break;
case'C':printf("60~69\n"); break;
case'D': printf("<60\n"); break;
default: printf("enter data error!\n");
}
return 0;
}
针对这个程序,里面是有很多新奇的东西的,我们就先来看一下。
从整体来分析,这个就是分段来进行程序输出的,四个case引导出条件。
也可以从中看出switch语句的一般形式:
switch(表达式)
{
case 常量1 : 语句1
case 常量2 : 语句2
… … …
case 常量n : 语句n
default : 语句n + 1
}
switch后的表达式,其值的类型应为整数类型(包括字符型)
switch像下面的花括号内是一个复合语句,
这个复合语句包含若干个语句,它是switch语句的语句体。
与具体内包含多个以关键字case开头的语句行和最多一个以default开头的行。
case后面跟一个常量或常量表达式
case ’ '和default都是起标号的作用,用来标记一个位置。
在执行switch语句的时候,计算switch后的表达式的值,然后将它与各case标号比较
如果与某一个case标号中的常量相同,流程就转到此case标号后面的语句
如果没有与switch表达式相匹配的case常量,流程就转去执行default标号后面的语句。
在整个语句中,可以没有default标号,此时如果没有与switch表达式相匹配的case常量,则不执行任何语句,流程转到switch语句的下一个语句。
各个case标号出现次序不影响执行结果。
每一个case常量必须互不相同,
否则就会出现相互矛盾的现象。
我们来看下面的一幅图:
先不考虑break的意思
现在把switch(表达式)当作一个球。
上图中的四条线分别在不同的高度,
初始判定这个球应该走哪个高度,
之后在球的路径上,四个凹下的表示break,如果关闭不会影响球在本高度的移动。
那么,如果没有break,求从2进入,结果不仅会输出2的,还会输出3和4的,
有break时,结果只会输出本高度的。
就像上面的程序,如果我们给顶数据是A,每一个case语句后面都没有break,那么结果如下:
break语句就是使流程跳出switch结构,即终止switch语句的执行。
多个case标号是可以共用一组执行语句的,
如:
本篇内容到此结束。