if语句中只有两个分支可供选择,而实际问题中常常需要用到多分支的选择。这时C语言提供switch语句直接处理多分支选择。
switch语句的一般形式:
switch(表达式)
{
case 常量1 : 语句1
case 常量2 : 语句2
......
case 常量n : 语句n
default : 语句n+1
}
注意:
① switch一般形式中括号内的“表达式”,其值类型应该是整数类型(包括字符型)。
② switch下面的花括号内是一个复合语句。这个复合语句包括若干语句,它是switch语句的语句体。语句体内包括多个以关键字case开头的语句行和最多一个 default 开头的行。
③ case后面跟一个常量(或常量表达式),如case 'A'
,它们和default都是起标号的作用,用来标志一个位置。执行switch语句时,先计算switch后面的“表达式”的值,然后将它与各case标号比较,如果与某一个case标号中的常量相同,流程就转到此case标号后面的语句。
④ 各个case标号出现次序不影响执行结果。例如:可以先出现“default”,然后出现“case ‘B’,……”。
⑤ 每一个case常量必须互不相同,否则就会出现互相矛盾的现象。
⑥一般情况下,在执行完一个case子句后,应当用break语句使流程跳出switch结构,即终止switch语句的执行。最后一个case子句(今为default子句)中可不必加break语句,因为流程已经到了switch结构的结束处。
利用switch-case,要求按照考试成绩的等级输出百分制分数段,
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;
}
利用switch-case,给上面程序改写,即给出成绩判断等级
#include <stdio.h>
int main(){
int score;
scanf("%d",&score);
printf("Your grade:");
if (score > 100 || score < 0) {
printf("输入有误");
return;// 这里就直接退出了
}
switch(score/10)
{
case 10:
case 9:printf("A\n");break;
case 8:printf("B\n");break;
case 7:printf("C\n");break;
case 6:
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:printf("D\n");break;
default:printf("enter data error\n");
}
return 0;
}