大佬们看看这是咋回事啊?我想要学生学号按平均分也能排序输出来,这是啥问题呢?求解决
问题描述:
答
你排序的时候只互换了平均分数组的顺序,学号数组也要跟着调整顺序
在第二层for循环的if语句里修改为:
if(avg[i] < avg[i+1])
{
t = avg[i]; avg[i] = avg[i+1]; avg[i+1] = t;
tmp = stu[i]; stu[i] = stu[i+1]; stu[i+1] = tmp;
}
在前面加上Student tmp;这个变量的声明
下面for打印的时候,直接使用i打印就可以了,s没用
如有帮助,请采纳一下吧,谢谢。
答
如果要将平均分等与学号,姓名等相关联,最好是结构体重新设计下,修改如下,供参考:
#define N 5
#define M 5
struct Student{
int num;
char name[20];
float score[M];
float aver;
}stu[N]={{10101,"Tang",95,97,95,89,82,0},{10102,"Wang",98,90,86,91,86,0},{10103,"Xu",82,86,78,66,75,0},
{10104,"Li",84,65,75,75,68,0},{10105,"Xie",95,96,76,72,81,0}};
void averagel(struct Student stu[])
{
int i,j;
float sum;
struct Student tmp;
for(i=0;i<N;i++){
sum=0;
for(j=0;j<M;j++){
sum += stu[i].score[j];
}
stu[i].aver=sum/M;
printf("第%2d个学生的平均分为: %6.2f\n",i+1,stu[i].aver );
}
for(i=0;i<N-1;i++)
for(j=0;j<N-i-1;j++)
if(stu[j].aver<stu[j+1].aver)
{tmp=stu[j];stu[j]=stu[j+1];stu[j+1]=tmp;}
printf("平均分由大到小排序:\n");
for(i=0;i<N;i++)
printf("NO.%d Aver:%.2f\n",stu[i].num,stu[i].aver);
}
int main()
{
int i;
averagel(stu);
return 0;
}