大佬们看看这是咋回事啊?我想要学生学号按平均分也能排序输出来,这是啥问题呢?求解决

大佬们看看这是咋回事啊?我想要学生学号按平均分也能排序输出来,这是啥问题呢?求解决

问题描述:

 

你排序的时候只互换了平均分数组的顺序,学号数组也要跟着调整顺序

在第二层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;
}