1.switch多分支选择语句的一般格式:
switch(判别表达式)
{ case 常量表达式1:语句1
case 常量表达式2:语句2
......
case 常量表达式n:语句n
default: 语句n+1
}
执行过程:首先求解判别表达式的值,然后从上至下依次与每个case后的常量比较。如果相等,那么就执行这一分支及其以后的所有分支。如果都不等,那么就执行default分支。
例子:
用字符来代表成绩水平,规定A代表[90-100]、B代表[80-90)、C代表[70-80)、D代表[60-70)、E代表[0-60)。
请编程输入一个字符,输出这个字符所代表的分数范围。若输入的字符不是ABCDE,输出:Error!
解答:
#include<stdio.h>
int main()
{
char s;
scanf("%c",&s);
switch(s){
case 'A': printf("[90-100]"); break;
case 'B': printf("[80-90)"); break;
case 'C': printf("[70-80)"); break;
case 'D': printf("[60-70)"); break;
case 'E': printf("[0-60)"); break;
default: printf("Error!");
}
return 0;
}
2.注意事项(非常重要)
(1)switch后的括号中的表达式必须是整型、字符型或枚举型,不能是实型等无序不可数的类型。其中{}不能省略。
(2)case后必须是常量或常量表达式,不能是变量。
(3)每个case是一个分支,case后只能是常量,常量后是冒号。冒号的后面就是分支语句序列,如果是多条语句,不用定义成复合语句。default也是一个分支,该分支也可以省略。
(4)break语句
break语句的一般形式是:break;
它的功能是跳出switch结构,这样就可以阻止以后的分支执行了。
(5)default也起标号的作用,代表所有case标号之外的标号,即default可以出现在语句体中任何标号位置上,而不会影响程序的执行结果。在switch语句体外可以没有default标号。
(6)其中case后的常量表达式不能是取值范围
例子:
用字符来代表成绩水平,规定A代表[90-100]、B代表[80-90)、C代表[70-80)、
D代表[60-70)、E代表[0-60)。请编程输入一个成绩(整数),输出代表该成绩的
字符。若输入的数据不在0-100之间,输出X。
#include<stdio.h>
int main()
{
int a;
scanf("%d",&a);
switch(a/10){
case 10: printf("A"); break;
case 9: printf("A"); break;
case 8: printf("B"); break;
case 7: printf("C"); break;
case 6: printf("D"); break;
case 5: printf("E"); break;
case 4: printf("E"); break;
case 3: printf("E"); break;
case 2: printf("E"); break;
case 1: printf("E"); break;
case 0: printf("E"); break;
default: printf("X");
}
return 0;
}
显然如果case要判断多个值,一个一个写太慢了,所以可以写case 1:case 2:case 3:......case n:printf(“?”);
#include<stdio.h>
int main()
{
int a;
scanf("%d",&a);
switch(a/10){
case 10: printf("A"); break;
case 9: printf("A"); break;
case 8: printf("B"); break;
case 7: printf("C"); break;
case 6: printf("D"); break;
case 0:case 1:case 2:case 3:case 4:case 5: printf("E"); break;
default: printf("X");
}
return 0;
}