解题思路:
字符加偏移量。
注意优质题解里用switch语句来做是很直观明了的,这里我就不多说了。我要说的是提供一种新的思路来解这题。
在这种等级判断中,主要依靠十位以上的数字来判断等级,而与个位数无关,即:
表1:
分数段 | 等级 |
10*(100) | A |
9*(90~99) | A |
8*(80~89) | B |
7*(70~79) | C |
6*(60~69) | D |
5*(50~59) | E |
4*(40~49) | E |
3*(30~39) | E |
2*(20~29) | E |
1*(10~19) | E |
0 | E |
则可以用整型数除于10来得到我们想要的数字。也就是把个位数屏蔽掉。
其次再定义一个字符变量并为它赋值为A(char grade='A'),通过加上相应的步长(即偏移量)来得到相应等级的输出。(字符加一个数字,其实是拿字符的ASCII值来加这个数值的)
表2:
grade+0 | A |
grade+1 | B |
grade+2 | C |
grade+3 | D |
grade+4 | E |
grade+5 | F |
grade+6 | G |
grade+7 | H |
grade+8 | I |
grade+9 | J |
grade+10 | K |
为此我们注意到100分的情况和50分及以下的情况都为特殊的情况,而其他情况的步长与十位上的数字之和都为9,比如表2的等级B所对应的步长为1,而表1的等级B所对应的数为8;同理也可看出:表2的等级C所对应的步长为2,而表1的等级C所对应的数为7。
这样我们就可以通过9-十位上的数字来得出步长,在考虑特殊情况,100分的时候令步长=0,50分以下(不用包含50)的时候令步长=4。
注意事项:
参考代码:
#include"stdio.h"
void main()
{
int num;
char grade='A';
scanf("%d",&num);
num/=10; //屏蔽个位上的数字
num=9-num;
if(num==-1)//100分时的情况,因为9-10=-1
num=0;
if(num>4)//50分以下的情况
num=4;
printf("%c\n",grade+num);//加步长,字符输出
}
0.0分
2 人评分
C语言训练-大、小写问题 (C语言代码)浏览:2421 |
数组输出 (C语言代码)错误???浏览:602 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1327 |
程序员的表白 (C语言代码)浏览:706 |
【蟠桃记】 (C语言代码)浏览:697 |
C语言考试练习题_一元二次方程 (C语言代码)浏览:606 |
1024题解浏览:879 |
Tom数 (C语言代码)浏览:517 |
1054题解浏览:516 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1496 |