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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
参考技术A #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代码规范不好,看得我头有点大。。。本回答被提问者采纳
参考技术B #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代码规范不好,看得我头有点大。。。
参考技术C 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);
参考技术D 修改后的代码如下,望采纳!
自己对比一下
#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 语言程序设计~实训~急急急!!!

实训一:C的运行环境
 实训内容
从命令行参数输入姓名和性别,在屏幕上显示hello 姓名先生(或女士),例如:
命令行输入test 李四 女,结果显示:hello 李四女士
实训二:分支结构
 实训内容
给学生写评语,若学生成绩在60-69则打印“及格”,70-89“良好”,90-100“优秀”,60以及“不及格”,请分别用 if-else语句和switch语句编程。
实训三:循环结构
 实训内容
1 、编程统计全班学生成绩。要求每次用键盘输入一个学生的2门分数,计算输出每个学生的总分和平均分。如果平均大于等于85为优秀;60-85为通过。统计出成绩优秀的学生及及格学生的人数。
2、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如同一因子是1,2,3,而6=1+2+3因此6是一个完数。编程找出1000之内的所有完数。
实训四:数组
 实训内容
1、有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格、以及其它字符的个数。
2、有一行电文,已按下面规律译成密码。
A->Z a->z
B->Y b->y
C->X c->x ………
即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求编程序将密码译回原文,并打印出密码和原文。
实训五:C函数
 实训内容
1、编一函数判别某一数是否为素数,若是,返回值为1,否则,返回值为0。在main函数中调用该函数。
2、用递归法将一个整数n转换成字符串,例如输入483,应输出字符串“384”。N的位数不确定,可以是任意位数的整数。

这五道大题,总共分8个小题,非常急!!!求助各位编程高手,对于你们来说应该很简单吧?

需要 详细的流程图 和源代码~!

谢谢!!

天啊,你什么学校毕业的,这么简单,我才大一,c只学了一半我都基本会做。这样吧,我选择性的给你做几个,要给我分哈

2,完数

#include <stdio.h>
void main()

int i,j,sum=0;
for (i=2;i<=1000;i++)

for (j=1;j<=i/2;j++)
if (i%j==0) sum=sum+j;
if (sum==i) printf("%d\n",sum);
sum=0;




实在没心情写了,用switch的很不想写。就是c的教材上都有的例题。

一下是统计字符那个题

#include <stdio.h>
void main()

char a[1000],b[1000];
int i,j,c[1000],num=0;
scanf ("%s",&a);
for (i=0;i<1000;i++)

c[i]=0;

for (i=0;a[i]!='\0';i++)

for (j=0;j<=num;j++)

if (a[i]==b[j])

c[j]++;
break;

if (j==num&&a[i]!=b[num])

b[num]=a[i];
c[num]++;
num++;
break;



for (i=0;i<=num-1;i++)

printf("%c",b[i]);
printf("%d个\t",c[i]);

printf("\n");


一下为求素数

#include <stdio.h>
void main()

int a,i;
scanf ("%d",&a);
for (i=2;i<=a/2;i++)

if (a%i==0)

printf("不是素数\n");
break;



if (i==a/2) printf("是素数\n");

参考技术A 实训是针对你的.既然是求助,只需点拨一下即可.这些题太基础了,只要看看书应该会的.按你的要求"详细的流程图和源代码"要在电脑上打出来是很琐碎的.很多人会不屑一顾,因为那30分不值得付出那么多精力. 参考技术B 虽然简单,但也费时。30分做8题无语... 参考技术C 有300分 我立即做... 参考技术D 不会呀

以上是关于c语言作业 老师要求用switch 来判定学生分数等级的主要内容,如果未能解决你的问题,请参考以下文章

采用switch语句设计一个程序,对给定的学生成绩score评判其等级这个程序怎么编啊??

作业三

C语言程序求助

关于学生信息管理的C语言编程问题求救(一定要是C语言编程,谢谢)

第一次作业

第二次C语言作业