C语言找错 题目:从键盘输入一个班(不超过30人)学生某门课的成绩,

从键盘输入一个班(不超过30人)学生某门课的成绩,当输入成绩为负值时,则输入结束,统计并输出不及格人数并打印不及格学生的成绩,按成绩高低排序,输出该班最高分及最低分。下面... 从键盘输入一个班(不超过30人)学生某门课的成绩,当输入成绩为负值时,则输入结束,统计并输出不及格人数并打印不及格学生的成绩,按成绩高低排序,输出该班最高分及最低分。
下面是我的程序代码,运行时却发现人数超过30人后仍可继续输入,求大神帮忙找一下错误在哪。马上要交了,急求啊!!!

#include<stdio.h>
#define N 30
main()
{
int a[N],i=0,j,k,m=0,t;
do
{
printf("输入学生成绩a[%d]=",i);
scanf("%d",&a[i]);
i++;
}
while(a[i-1]>=0);
k=i-2;
for(i=0;i<k;i++)
{
for(j=i+1;j<k+1;j++)
if(a[i]>a[j]){
t=a[i];a[i]=a[j];a[j]=t;
}
if(a[i]<60){
printf("不及格成绩a[%d]=%d\n",i,a[i]);
m++;
}
}
printf("不及格人数m=%d\n",m);
printf("该班最高成绩a[%d]=%d\n",k,a[k]);
printf("该班最低成绩a[0]=%d\n",a[0]);
getch();
}
展开
 我来答
阳顶天鹿鼎记
推荐于2017-12-16 · TA获得超过502个赞
知道小有建树答主
回答量:675
采纳率:100%
帮助的人:394万
展开全部

只有你输入的成绩为负数时才会停止让你输入,因为你有判断while(a[i-1]>=0);

所以如果你输入的大于零他会一直让你输入;

另外使用getch,应包含头文件#include <conio.h>

完整代码

#include<stdio.h>
#include <conio.h>
#define N 30
void main()
{
int a[N],i=0,j,k,m=0,t;
do
{
printf("输入学生成绩a[%d]=",i);
scanf("%d",&a[i]);
i++;
}
while(a[i-1]>=0);
k=i-2;
for(i=0;i<k;i++)
{
for(j=i+1;j<k+1;j++)
if(a[i]>a[j]){
t=a[i];a[i]=a[j];a[j]=t;
}
if(a[i]<60){
printf("不及格成绩a[%d]=%d\n",i,a[i]);
m++;
}
}
printf("不及格人数m=%d\n",m);
printf("该班最高成绩a[%d]=%d\n",k,a[k]);
printf("该班最低成绩a[0]=%d\n",a[0]);
getch();
}
更多追问追答
追问
可是你的程序除了头文件加了一个以外,不是和我的是一样的么?这样的话会导致超过30时还能继续输入啊!怎么才能解决这个问题呢?
追答
如果想解决的话,就把while条件换成
while(i<30);就是执行30次循环。
低调_浪子
2014-06-17 · 超过12用户采纳过TA的回答
知道答主
回答量:26
采纳率:0%
帮助的人:23.3万
展开全部
do
{
printf("输入学生成绩a[%d]=",i);
scanf("%d",&a[i]);
i++;
}
while(a[i-1]>=0); //这行改为 while(i<N); 就可以了
//a[i-1] 当i>30,会越界,但是不会退出循环。

如果对你有帮助 请采纳
追问
这样改的话,越界问题解决了,但是输入负值时不能结束的问题又出来了···求解怎么同时解决这两个问题···
追答
do
{
printf("输入学生成绩a[%d]=",i);
scanf("%d",&a[i]);
i++;
}
while(i=0);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huohuo411
2014-06-17 · TA获得超过404个赞
知道小有建树答主
回答量:218
采纳率:0%
帮助的人:123万
展开全部
整体功能稳定啊
问题是
getchar();
函数名称不能缩写的!
还有,要求是30人,可是你的循环次数应该试着30
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式