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

作者&投稿:平诞 (若有异议请与网页底部的电邮联系)
C语言作业,用switch结构写程序判断分数对应的等级~

scanf("%d %d", &x, &y);这个地方需要输入两次,x的赋值和y的,把y的去掉就好了
int y = 0; 上面改成这样!

[每天五分钟,学会C++]24:成绩等第制——switch语句(小学生也能学的C++入门教程)

首先指出你的疑问:因为你的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;
}

#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代码规范不好,看得我头有点大。。。

#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代码规范不好,看得我头有点大。。。

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);
}

修改后的代码如下,望采纳!
自己对比一下
#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;
}
}
}
}


民和回族土族自治县18284016798: c语言作业 老师要求用switch 来判定学生分数等级 -
锐翔纳洁: 首先指出你的疑问:因为你的switch语句在最后一个if语句中,也就是说,当分数为s>=0&&s<=49时才执行switch语句,此时x==5.于是就执行case 5了. 修改:把switch语句与if语句并列. 更好的:你为什么用了if语句还要用switch语句呢,直接...

民和回族土族自治县18284016798: C语言中switch语句的用法 -
锐翔纳洁: 在每个case语句后加上break语句(即在每个printf语句后加上一句break;),执行break后直接跳出switch.这样就只输出一个了

民和回族土族自治县18284016798: C语言题求解,解决后给分.(要求用 switch语句来编程) -
锐翔纳洁: /* 输入两门课的成绩,如果两门成绩都在60 分以上.则输出“it is pass.” 只要有一门低于60 分就输出“it is not pass.” 如果输入的任何一门成绩不 在 0-100范围内则输出 “it is error.”.*/ #include int main() { int a,b; printf("请输入两门课的...

民和回族土族自治县18284016798: 请帮忙编写一道c语言编程题 :输入2005年的任一个月,输出这个月的天数,要求使用switch语句,输入输出示例 -
锐翔纳洁: #include<stdio.h> main() {int n;printf("请输入2005年的任一个月(输入q就退出):"); while(scanf("%d",&n)==1){switch(n){case 1:printf("这个月有31天\n");break;case 2:printf("这个月有28天\n");break;case 3:...

民和回族土族自治县18284016798: c语言,编写程序,要求对两个实数实现简单的加减乘除运算的功能(用switch)语句 -
锐翔纳洁: #include <stdio.h> void main() { float a,b;char ch; scanf("%f%c%f",&a,&ch,&b); switch(ch) { case '+': printf("%f",a+b);break; case '-': printf("%f",a-b);break; case '*': printf("%f",a*b);break; case '/': { if(b==0) printf("算式无意义"); else {printf("%f",a/b);break;} } default: printf("运算符号有误"); } }

民和回族土族自治县18284016798: C语言题如图(需用switch语句) -
锐翔纳洁: #include<stdio.h> int main() { // 金额的四个梯度 int arrAmount[] = { 1000, 500, 200, 0 }; // 每个梯度对应的折扣 double arrDiscount[] = { 0.7, 0.8, 0.9, 1.0 }; int index = -1, i = 0; double discount = 1.0, realAmount = 0; printf("请输入金额:"); ...

民和回族土族自治县18284016798: c语言switch语句怎么用 -
锐翔纳洁: switch(表达式){ case常量表达式1: 语句1; case常量表达式2: 语句2; … case常量表达式n: 语句n; default : 语句n+1; }每一case语句之后增加break 语句, 使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果.

民和回族土族自治县18284016798: 简单的C语言题 编写一程序,要求输入x的值,输出y的值.要求分别用switch语句和嵌套的if语句写. -
锐翔纳洁: #include<stdio.h>void main() {int x,k;scanf("%d",&x); if(x<0&&x>-5) k=-1; else if (x=0) k=0; else if(x>0&&x<10) k=1; switch(k) { case -1: printf("y=%d",x); break; case 0: printf("y=%d",0); break; case 1: printf("y=%d",x+1); break; } }

民和回族土族自治县18284016798: 如何用C语言中switch语句编写学生成绩问题? -
锐翔纳洁: #includevoid main() { double score; printf("请输入分数:\n"); scanf("%lf",&score); switch((int)(score/10))//switch((int)score/10)出现严重错误,switch(((int)score)/10)出现严重错误, { case 10: case 9:printf("A(最好)\n");break; ...

民和回族土族自治县18284016798: 请高手 帮忙做一道c语言题 编程,把百分制成绩转换成5级记分制,要求用switch语句. 90分以上(包括90): -
锐翔纳洁: #include "stdio.h" #include "stdlib.h"int main() {int score,level;char band;printf("Input Score:");scanf("%d",&score);level=score/10;switch(level){case 10:case 9: band='A'; break;case 8: band='B'; break;case 7: band='C'; ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网