SWITCH——选择结构

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

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值