c语言作业 老师要求用switch 来判定学生分数等级

如下是我自己写的#include<stdio.h>
#include<conio.h>
int main()
{
int s,x;
char n[5];
while(1){
printf("\n please enter your name:");
gets(n);
if(n!="q[0]"&&"u[1}"&&"i[2]"&&"t[3]")
printf("\n please enter your score.");
scanf("%d",&s);
if(s>=80&&s<=100){
x=1;
}
else if(s>=70&&s<=79){
x=2;
}
else if(s>=60&&s<=69){
x=3;
}
else if(s>=50&&s<=59){
x=4;
}
else if(s>=0&&s<=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;
}
不知道为什么只有case 5有作用,其他都不会显示结果?这是为什么?还有要求输入“quit”就退出,这个咋么写?

首先指出你的疑问:因为你的switch语句在最后一个if语句中,也就是说,当分数为s>=0&&s<=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.“会同时出现。

下面是我帮你修改的程序,基本上没动。

#include<stdio.h>
#include<conio.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>=80&&s<=100)
{
x=1;
}
else if(s>=70&&s<=79)
{
x=2;
}
else if(s>=60&&s<=69)
{
x=3;
}
else if(s>=50&&s<=59)
{
x=4;
}
else if(s>=0&&s<=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;
}

这是我自己随意修改的:

#include<stdio.h>
#include<conio.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>=80&&s<=100)
{
printf("HD");
}
else if(s>=70&&s<=79)
{
printf("D");
}
else if(s>=60&&s<=69)
{
printf("C");
}
else if(s>=50&&s<=59)
{
printf("C");
}
else if(s>=0&&s<=49)
{
printf("N");
}
else
{
printf("\n please enter a number between 0 and 100");
}
}
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-05-15
#include<conio.h>
#include <stdio.h>

int main()
{
int s,x;
char n[5];
while(1)
{
printf("\n please enter your name:");
gets(n);
if(n[0]=='q' && n[1]=='u' && n[2]=='i' && n[3]=='t' && n[4]=='\0') //这样就可以输入quit就退出了
break;
printf("\n please enter your score.");
scanf("%d",&s);
getchar(); //这里要用getchar吸收掉scanf按下回车时产生的换行符
if(s>=80 && s<=100)
{
x=1;
}
else if(s>=70 && s<=79)
{
x=2;
}
else if(s>=60 && s<=69)
{
x=3;
}
else if(s>=50 && s<=59)
{
x=4;
}

else if(s>=0 && s<=49)
{
x=5;
} //这里漏了个},导致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;
}

已经通过编译,不懂追问,望采纳~~
P.S LZ代码规范不好,看得我头有点大。。。本回答被提问者采纳
第2个回答  2019-12-02
#include<conio.h>
#include
<stdio.h>
int
main()
{
int
s,x;
char
n[5];
while(1)
{
printf("\n
please
enter
your
name:");
gets(n);
if(n[0]=='q'
&&
n[1]=='u'
&&
n[2]=='i'
&&
n[3]=='t'
&&
n[4]=='\0')
//这样就可以输入quit就退出了
break;
printf("\n
please
enter
your
score.");
scanf("%d",&s);
getchar();
//这里要用getchar吸收掉scanf按下回车时产生的换行符
if(s>=80
&&
s<=100)
{
x=1;
}
else
if(s>=70
&&
s<=79)
{
x=2;
}
else
if(s>=60
&&
s<=69)
{
x=3;
}
else
if(s>=50
&&
s<=59)
{
x=4;
}
else
if(s>=0
&&
s<=49)
{
x=5;
}
//这里漏了个},导致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;
}
已经通过编译,不懂追问,望采纳~~
P.S
LZ代码规范不好,看得我头有点大。。。
第3个回答  2012-05-15
1.关于只有case5有作用是因为你 x=5后面漏了一个“}”这样只有在符合s>=0&&s<=49的时候才能够执行switch选择语句...
2.你的case4后面漏打了一个break啊....
3.你将循环语句的条件改成while(n != "quit"),将n的第一次输入改在while前
另外你这句话是? printf("\n please enter a number between 0 and 100");
switch结构default后面的东西是不会运行的吧...

整个while我觉得这么写好点:
gets(n);
while(n!="quit"){
if(n!="q[0]"&&"u[1}"&&"i[2]"&&"t[3]")
printf("\n please enter your score.");
scanf("%d",&s);
if()
。。。//四个判断语句将x赋值
switch(x){
case 1:。。
case 2:。。
case 3:。。
case 4:。。
default;
}
printf("\n please enter your name:");
gets(n);
}
第4个回答  2012-05-15
修改后的代码如下,望采纳!
自己对比一下
#include<stdio.h>
int main()
{
int s;
char n[5];
while(1){
printf("please enter your name:");
scanf("%s",&n);
printf("please enter your score:(1~100):");

scanf("%d",&s);
if(s>100||s<0)
printf("您输入的成绩有误!请从新输入!\n");
else{
int flag=s/10;
switch(flag){
case 10:
case 9:
case 8:
printf("成绩等级是:A\n");
break;
case 7:
printf("成绩等级是:B\n");
break;
case 6:
printf("成绩等级是:C\n");
break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:
printf("成绩等级是:D\n");
break;
default:
break;
}
}
}
}

c语言作业 老师要求用switch 来判定学生分数等级
首先指出你的疑问:因为你的switch语句在最后一个if语句中,也就是说,当分数为s>=0&&s<=49时才执行switch语句,此时x==5。于是就执行case 5了。修改:把switch语句与if语句并列。更好的:你为什么用了if语句还要用switch语句呢,直接在if语句中输出不就行了吗?还有输入quit退出的问题:建议使用sc...

用switch语句怎样判断成绩等级
C语言用switch语句进行成绩等级判断可以采用以下的代码:main(){int i,a;scanf("%d",&a);i=a\/10;switch a {case '10':case '9': printf("A"); break;case '8': printf("B"); break;case '7': printf("C"); break;case '6': printf("D");else printf("E");} } ...

C语言中从键盘输入一个学生成绩,如何用switch输出成绩和档次?_百度...
switch里有三种写法,第一种就是每个单独写出来如:(这种如果数据多的话不推荐,比如这题)\\x0d\\x0aswitch(score) {\\x0d\\x0a case 90: case 91:\/\/...case 100:\\x0d\\x0a \/\/优秀。。\\x0d\\x0a break;\\x0d\\x0a case 80:case 81:case 82: \/\/...case 89:\\x0d...

编写C语言程序 用switch结构或if语句 输入成绩 输出等级
include \\x0d\\x0aint main() {\\x0d\\x0a int s, d;\\x0d\\x0a printf("输入成绩(百分制): ");\\x0d\\x0a scanf("%d", &s);\\x0d\\x0a d = s \/ 10;\\x0d\\x0a switch (d) {\\x0d\\x0a case 10:\\x0d\\x0a printf("满分。\\n");\\x0d\\x...

用C语言处理。用switch语句编程实现以下功能:
按分数段评定出成绩的相应等级,90以上为“excellent”,80~89为“good”,70~79为“medium”,60~69为“pass”,59以下为“not pass”。**\/ include <stdio.h> int main(){ int value = 0;scanf("%d",&value);switch(value\/10){ case 9:printf("excellent");break;case 8:printf("...

C语言 使用switch语句,将百分制成绩转换为等级分:90以上A,80-89为B...
{int a,s;scanf("%d",&a);s=a \/ 10;switch (s){ case 10:printf("A");break;case 9:printf("A");break;case 8: printf("B");break;case 7:printf("C");break;case 6:printf("D");break;default:printf("F");break;} getch();} 程序中getch();为winTC编译器所必须的。

c语言 输入一个学生成绩,判断优、良、及格?
include<stdio.h> int main(){ int nscore = 0;scanf("%d",&nscore);if ( nscore > 90 ){ printf("成绩优!\\n");} else if ( nscore > 80 ){ printf("成绩良!\\n");} else if ( nscore > 60 ){ printf("成绩及格!\\n");} else { printf("成绩不及格!\\n");} retu...

c语言中用 switch 怎么写然后输入一个分数根据分数段输出 ABCDE。_百度...
常用的方法 就是把分数除10 然后对结果进行switch 事先编好程序,要求分别用if语句和switch语句实现。运行程序,并检查结果是否正确。② 再运行一次程序,输入分数为负值(如-70),这显然是输入时出错,不应给出等级。修改程序,使之能正确处理任何数据:当输入数据大于100或小于0时,通知用户“输入...

C语言问题,要求用switch语句,输入百分制成绩,要求输出成绩等级为A B...
问号处是(int)score\/10。这个意思是分数除10比如说85分。除10等于8。就是8

C语言中switch case 评估成绩的问题
如果分数是不规范的(负数或大于一百):第一个程序就不会进入switch语句;第二个程序在分数不规范的情况下,会打印:score is wrong,但是语句会接着往下执行,最后printf("%c",grade);这句也被执行了,所以出现了不是预期的结果。修改方法有很多,有问题可以再联系。希望对你有帮助。

相似回答