【知识点】
switch(表达式) {
case 常量1:语句1
case 常量2:语句2
……
case 常量n:语句n
default:语句n+1
}
(1) 括号内的“表达式”,其值的类型应为整数类型(包括字符型)。
(2) 花括号内是一个复合语句,内包含多个以关键字case开头的语句行和最多一个以default开头的行。case后面跟一个常量(或常量表达式),它们和default都是起标号作用,用来标志一个位置。执行switch语句时,先计算switch后面的“表达式”的值,然后将它与各case标号比较,如果与某一个case标号中的常量相同,流程就转到此case标号后面的语句。如果没有与switch表达式相匹配的case常量,流程转去执行default标号后面的语句。
(3) 可以没有default标号,此时如果没有与switch表达式相匹配的case常量,则不执行任何语句。
(4) 各个case标号出现次序不影响执行结果。
(5) 每一个case常量必须互不相同;否则就会出现互相矛盾的现象。
(6) case标号只起标记的作用。在执行switch语句时,根据switch表达式的值找到匹配的入口标号,在执行完一个case标号后面的语句后,就从此标号开始执行下去,不再进行判断。因此,一般情况下,在执行一个case子句后,应当用break语句使流程跳出switch结构。最后一个case子句(今为default子句)中可不加break语句。
(7) 在case子句中虽然包含了一个以上执行语句,但可以不必用花括号括起来,会自动顺序执行本case标号后面所有的语句。当然加上花括号也可以。
(8) 多个case标号可以共用一组执行语句。
【示例1】
要求按照考试成绩的等级输出百分制分数段,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;
}
【示例2】
要求按照百分制分数段输出考试成绩的等级,85分以上为A等,70~84分为B等,60~69分为C等, 60分以下为D等。成绩的等级由键盘输入。
#include <stdio.h>
int main() {
int x,score;
scanf("%d",&score);
x=score/10;
if(score>=80 && score<=84) x=7;
switch(x) {
case 8:
case 9:
case 10:printf("A\n");break;
case 7:printf("B\n");break;
case 6:printf("C\n");break;
default:printf("D\n");
}
return 0;
}