帮我看下这个C语言程序的问题出在哪里

2024-11-25 17:35:57
推荐回答(4个)
回答1:

我看了你的程序,觉得你的程序需要用结构体才行,并做了修改。完整的程序如下:
#include
#define N 50
struct student{
int a,b,c,d,sum;
char string[10];
};
int main()
{
student stu[N],temp;
int i,n,p,j;
printf("输入学生人数:\n");
scanf("%d",&n);
for(i=0;i{
printf("第%d个学生姓名: 学号: 语文成绩: 数学成绩: 英语成绩:\n ",i+1);
scanf("%s %d %d %d %d",&stu[i].string,&stu[i].a,&stu[i].b,&stu[i].c,&stu[i].d);
printf("%s的总分为%d\n",stu[i].string,stu[i].b+stu[i].c+stu[i].d);
}
printf("语文的分数与姓名排序为:" );
for(j=0;j{ for (p=0;pif (stu[p].b>stu[p+1].b)
{ temp=stu[p];
stu[p]=stu[p+1];
stu[p+1]=temp;
}
}
for(p=0;pprintf("%d %s,",stu[p].b,stu[p].string);
printf("\n");

printf("数学的分数与姓名排序为:" );
for(j=0;j{ for (p=0;pif (stu[p].c>stu[p+1].c)
{ temp=stu[p];
stu[p]=stu[p+1];
stu[p+1]=temp;
}
}
for(p=0;pprintf("%d %s,",stu[p].c,stu[p].string);
printf("\n");

printf("英语的分数与姓名排序为:" );
for(j=0;j{ for (p=0;pif (stu[p].d>stu[p+1].d)
{ temp=stu[p];
stu[p]=stu[p+1];
stu[p+1]=temp;
}
}
for(p=0;pprintf("%d %s,",stu[p].d,stu[p].string);
printf("\n");

printf("总分数和姓名排序为:" );
for(i=0;istu[i].sum=stu[i].b+stu[i].c+stu[i].d;

for(j=0;j{
for (p=0;pif (stu[p].sum>stu[p+1].sum)
{ temp=stu[p];
stu[p]=stu[p+1];
stu[p+1]=temp;
}
}
for(p=0;pprintf("%d %s,",stu[p].sum,stu[p].string);
printf("\n");

return 0;
}

回答2:

大致看了下,给分数排序的时候没纪录一个id ,这样排下来分数是按顺序排了,名字却还是原来的排序,比如:小王 2 ,小李 5, 小张 3
排下来变成: 2 小王,3 小李, 5 小张 这样就乱了
主要就是这里吧,在排序的时候应该给每个学生加一个编号的属性,排序只是改变编号顺序,读取的时候按编号读取就不会乱了,或者每次排序的时候所有的数值都要跟着变幻位置,比如
if (b[p]>b[p+1])
{ temp=b[p];
b[p]=b[p+1];
b[p+1]=temp;
}
} 里面应该写成
if (b[p]>b[p+1])
{ temp=b[p];
b[p]=b[p+1];
b[p+1]=temp;

temp=c[p];
c[p]=c[p+1];
c[p+1]=temp;
....
}
}
有说的不对的地方见谅

回答3:

你可以再编译时候直接百度一下错误,上面会有解释的

回答4:

不想看!