请C高手帮我查找这个小程序的错误,我实在无能为力了……

来源:百度知道 编辑:UC知道 时间:2024/09/23 14:25:23
#include "stdio.h"
#define renshu 3
#define kemushu 3
main()
{
struct student
{
char name[20];
char num[20];
int chengji[kemushu];
int pingjun;
int sum;
}st[renshu+1];
int q,w;
for(q=0;q<renshu;q++)
{
printf("请输入第%d位同学的姓名:",q+1);
scanf("%s",st[q].name);
printf("请输入第%d位同学的学号:",q+1);
scanf("%s",st[q].num);
for(w=0;w<kemushu;w++)
{
printf("请输入第%d位同学的第%d门成绩:",q+1,w+1);
scanf("%d",&st[q].chengji[w]);
}
}
for(q=0;q<renshu;q++)//计算总成绩和平均分
{
for(w=0;w<kemushu;w++)
{
st[q].sum+=st[q].chengji[w];
}
st[q].pingjun=st[q].sum/kemushu;
}
for(q=0;q<renshu;q++)//根据平均分排序
{
for(w=0;w<kemushu;w++)
{
if(st[q].pingjun<st[q+1].pingjun)
{
st[renshu]

楼上的回复是错误的!

楼主的问题在这个冒泡算法写错了:
for(q=0;q<renshu;q++)//根据平均分排序
{
for(w=0;w<kemushu;w++)
{
if(st[q].pingjun<st[q+1].pingjun)
{
st[renshu]=st[q];
st[q]=st[q+1];
st[q+1]=st[renshu];
}
}
}

改正后的冒泡算法如下:
for(q=0;q<renshu;q++)//根据平均分排序
{
for(int k = q + 1; k < renshu; k++)
{
if(st[q].pingjun<st[k].pingjun)
{
st[renshu]=st[k];
st[k]=st[q];
st[q]=st[renshu];
}
}
}

还有个错误就是求平均分也有问题,应该强制转成float或者double

回答完毕!

for(q=0;q<renshu-1;q++)//根据平均分排序
{
struct student temp;
if(st[q].pingjun<st[q+1].pingjun)
{
temp=st[q];
st[q]=st[q+1];
st[q+1]=temp;
}
}
只能用临时变量来做交换暂存,