SWITCH——选择结构

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

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

分数区间 等级
90~100 A
80~89 B
70~79 C
60~69 D
0~60 E
#include 
//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 
//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 
//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可能会“救”你。

你可能感兴趣的:(大一,C语言,switch,c语言)