天天看点

C语言 switch语句

[案例] 从键盘上输入一个百分制成绩score,按下列原则输出其等级:score≥90,等级为A;80≤score<90,等级为B;70≤score<80,等级为C;60≤score<70,等级为D;

[案例] 从键盘上输入一个百分制成绩score,按下列原则输出其等级:score≥90,
等级为A;80≤score<90,等级为B;70≤score<80,等级为C;60≤score<70,等级为D;
score<60,等级为E。

main()
{
    int  score, grade;
    printf("Input a score(0~100): ");
    scanf("%d", &score);
    grade = score/10;   /*将成绩整除10,转化成switch语句中的case标号*/
    switch (grade)
    {
    case  10:
    case    9: printf("grade=A\n"); break;    
    case    8: printf("grade=B\n"); break;
    case    7: printf("grade=C\n"); break;
    case    6: printf("grade=D\n"); break;
    case    5:
    case    4:
    case    3:
    case    2:
    case    1:
    case    0: printf("grade=E\n"); break;
    default: printf("The  score  is  out  of  range!\n");    
    }
}                        
程序运行情况如下:
Input a score(0~100): 85↙
grade=B      

1.switch语句的一般形式switch(表达式)

{ case 常量表达式1:语句组;break;

case 常量表达式2:语句组;break;

case 常量表达式n:语句组;break;

[default:语句组;[break; ]]

}

2.说明

(1)执行过程当switch后面"表达式"的值,与某个case后面的"常量表达式"的值相同时,就执行该case后面的语句(组);

当执行到break语句时,跳出switch语句,转向执行switch语句的下一条。

(2)如果没有任何一个case后面的"常量表达式"的值,与"表达式"的值匹配,则执行default 后面的语句(组)。然后 ,再执行switch语句的下一条。

(3)case 常量表达式1 与 switch(表达式) 的联系:case后面的"常量表达式"的数据类型与 switch(表达式)的数据类型相同,而且switch(表达式)的数据类型决定了case后面的"常量表达式"的数据类型,也就是说case后面的"常量表达式"的数据类型要与switch(表达式)的数据类型保持一致。

3.说明

(1)switch后面的"表达式",可以是int、char和枚举型中的一种。

(2)每个case后面"常量表达式"的值,必须 各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案)。

(3)case后面的常量

表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以 必须加上break语句,以便结束switch语句。

思考题:如果去掉[案例]程序中的所有break语句,且输入的成绩为75, 输出会如何?

(4)各case及default子句的先后次序,不影响程序执行结果。

**(5)多个case子句,可共用同一语句(组)。**例如,在[ 案例]中的"case 10: "和"case 9: “共用语句"printf(“grade=A\n”); break;”,"case 5: "~"case 0: “共用语

句"printf(“grade=E\n”); break;”。

继续阅读