switch(表达式)
{
case 常量表达式1: 语句序列1;//break;
case 常量表达式2: 语句序列2;//break;
case 常量表达式3: 语句序列3;//break;
//...
case 常量表达式n: 语句序列n;//break;
//default: 语句序列 n+1;//break;
}
众所周知,Switch 和 If-Else 都是用来判断条件并选择路径的语句,但C语言中,一般我们要求switch后面“表达式”的多种结果两两不同、可以列举。对于基本的百分制分数和等级的转化问题,可以用最基本的 if 语句,自然也可以用 switch 语句来实现,毕竟无论是等级还是分数都是可以列举的常量。参考标准如下:
分数区间 | 等级 |
---|---|
90~100 | A |
80~89 | B |
70~79 | C |
60~69 | D |
0~60 | E |
#include <stdio.h>
//convert the percentage scale to the grading system
int main()
{
int score;
scanf("%d",&score);
switch(score)
{
case 100:printf("A");break;
case 99: printf("A");break;
case 98: printf("A");break;
case 97: printf("A");break;
case 96: printf("A");break;
case 95: printf("A");break;
case 94: printf("A");break;
case 93: printf("A");break;
case 92: printf("A");break;
case 91: printf("A");break;
case 90: printf("A");break;
case 89: printf("B");break;
case 88: printf("B");break;
case 87: printf("B");break;
case 86: printf("B");break;
case 85: printf("B");break;
case 84: printf("B");break;
case 83: printf("B");break;
case 82: printf("B");break;
case 81: printf("B");break;
case 80: printf("B");break;
case 79: printf("C");break;
case 78: printf("C");break;
case 77: printf("C");break;
case 76: printf("C");break;
case 75: printf("C");break;
case 74: printf("C");break;
case 73: printf("C");break;
case 72: printf("C");break;
case 71: printf("C");break;
case 70: printf("C");break;
//......以此类推
}
return 0;
}
首先,case后面的“常量表达式”相当于入口,break则相当于强制出口。
因此我们可以如下简化:
#include <stdio.h>
//convert the percentage scale to the grading system
int main()
{
int score;
scanf("%d",&score);
switch(score)
{
case 100:
case 99: case 98: case 97: case 96: case 95:
case 94: case 93: case 92: case 91: case 90:
printf("A");break;
case 89: case 88: case 87: case 86: case 85:
case 84: case 83: case 82: case 81: case 80:
printf("B");break;
case 79: case 78: case 77: case 76: case 75:
case 74: case 73: case 72: case 71: case 70:
printf("C");break;
//......以此类推
}
return 0;
}
其次,科学计数法中,99可以记作9.9×101,即9.9e+01,倘若我们可以将99除以10,并将9.9近似看作9,即90—99→9、80—89→8,70—79→7,那么以此类推,需要列举的情况将被进一步简化。
#include <stdio.h>
//convert the percentage scale to the grading system
int main()
{
int score;
scanf("%d",&score);
switch(score/10)//eg. 5/3=1; 5*1.0/3=1.666667
{
case 10: case 9: printf("A");break;
case 8: printf("B");break;
case 7: printf("C");break;
case 6: printf("D");break;
case 5: case 4: case 3: case 2: case 1: case 0:
printf("E");break;
default: printf("ERROR");break;
}
return 0;
}
最后,顺带一提,从逻辑上来说在最后一个case(或default)的子句中添加break是没必要的;但是,如果今后再添加或者顺序调换的时候,这个break可能会“救”你。