c语言switch判断成绩,c语言判断学生成绩等级用switch
C语言中,从键盘输入一个学生成绩,用switch输出成绩和档次.(分类方法:90分及以上为"优秀",80-89分为"中等"
switch里有三种写法,第一种就是每个单独写出来如:(这种如果数据多的话不推荐,比如这题)
switch(score) {
case 90: case 91://...case 100:
//优秀。。
break;
case 80:case 81:case 82: //...case 89:
//中等。。
break;
}
第二种就是进行缩小范围,如:(这种如果数据分布很有规律就用,比如这题)
switch(score/10) {
case 10: case 9: //优秀..
break;
case 8: //中等
break;
}
第三种是函数的写法,这适用于数据分布无规律而不能进行缩小范围时,假如90~96为优秀,97~100为特优秀的话,可以这样,如:(这种适用于数据分布无规律)
int score_fun(int score)
{
if(score = 97)
return 1;
if(score = 90)
return 2;
if(score = 80)
return 3;
}
//....
switch(score_fun(score)) {
case 1: //特优秀。。
break;
case 2: //优秀。。
break;
case 3: //中等。。
break;
}
c语言作业 老师要求用switch 来判定学生分数等级
首先指出你的疑问:因为你的switch语句在最后一个if语句中,也就是说,当分数为s=0s=49时才执行switch语句,此时x==5。于是就执行case 5了。
修改:把switch语句与if语句并列。
更好的:你为什么用了if语句还要用switch语句呢,直接在if语句中输出不就行了吗?
还有输入quit退出的问题:建议使用scanf在接收字符串n。接收字符串n后判断是否等于”quit“,如果等于则break,退出while循环,否则往下执行。判断时可以用strcmp函数进行判断,也可以逐个的对字符串n进行判断。
为什么要用scanf而不用gets:当进行下一次的输入时,上次输入完分数后的回车会被这次的gets给吃掉;于是就会发现,当进行这次的输入时,”please enter your name“, ”please enter your score.“会同时出现。
下面是我帮你修改的程序,基本上没动。
#includestdio.h
#includeconio.h
int main()
{
int s,x;
char n[5];
while(1)
{
printf("\n please enter your name:");
scanf("%s", n);
if(n[0]=='q' n[1]=='u' n[2]=='i' n[3]=='t')
{
break;
}
else printf("\n please enter your score.");
scanf("%d",s);
if(s=80s=100)
{
x=1;
}
else if(s=70s=79)
{
x=2;
}
else if(s=60s=69)
{
x=3;
}
else if(s=50s=59)
{
x=4;
}
else if(s=0s=49)
{
x=5;
}
switch(x)
{
case 1:
printf("HD");
break;
case 2:
printf("D");
break;
case 3:
printf("C");
break;
case 4:
printf("C");
case 5:
printf("N");
break;
default:
printf("\n please enter a number between 0 and 100");
}
}
return 0;
}
这是我自己随意修改的:
#includestdio.h
#includeconio.h
#include string.h
int main()
{
int s,x;
char n[5];
while(1)
{
printf("\n please enter your name:");
scanf("%s", n);
if(strcmp(n, "quit")==0)
{
break;
}
else printf("\n please enter your score.");
scanf("%d",s);
if(s=80s=100)
{
printf("HD");
}
else if(s=70s=79)
{
printf("D");
}
else if(s=60s=69)
{
printf("C");
}
else if(s=50s=59)
{
printf("C");
}
else if(s=0s=49)
{
printf("N");
}
else
{
printf("\n please enter a number between 0 and 100");
}
}
return 0;
}
C语言中switch case 评估成绩的问题
第一个程序和第二个程序的区别:if(score=100score=0)
如果分数是不规范的(负数或大于一百):
第一个程序就不会进入switch语句;
第二个程序在分数不规范的情况下,会打印:score is wrong,但是语句会接着往下执行,最后printf("%c",grade);这句也被执行了,所以出现了不是预期的结果。
修改方法有很多,有问题可以再联系。
希望对你有帮助。