SWITCH——选择结构

it2025-04-03  7

switch(表达式) { case 常量表达式1: 语句序列1//break; case 常量表达式2: 语句序列2//break; case 常量表达式3: 语句序列3//break; //... case 常量表达式n: 语句序列n;//break; //default: 语句序列 n+1;//break; }

众所周知,Switch 和 If-Else 都是用来判断条件并选择路径的语句,但一般我们要求switch后面“表达式”的多种结果两两不同、可以列举。对于基本的百分制分数和等级的转化问题,可以用最基本的 if 语句,自然也可以用 switch 语句来实现,毕竟无论是等级还是分数都是可以列举的常量。参考标准如下:

分数区间等级90~100A80~89B70~79C60~69D0~60E #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可能会“救”你。

最新回复(0)