问题是输出按平均分排序后的学生信息 大佬们帮忙看看程序怎么调整,现在的结果输出来就是乱的,求帮忙!

#include<stdio.h>
#define N  10
#define M   5
struct Student
{
    int num;
    char name[20];
    int Chinesescore;
    int Mathscore;
    int Englishscore;
    int Physicsscore;
    int Chemistryscore;
    float aver1[10];
    int num1;
}stu[N]= { {10101,"Yang",95,97,95,89,82},{10102,"Wang",98,90,86,91,86},{10103,"Xu",82,86,73,66,75},{10104,"Li",84,65,75,75,63},{10105,"Xie",95,96,76,72,81},{10106,"Yue",72,83,64,82,84},{10107,"Hu",83,84,65,72,93},{10108,"Liu",63,84,72,95,88},{10109,"Hou",97,77,68,84,76},{10110,"Zhao",77,68,88,91,86} };

void average1(float array[10][5])
{
    int i, j, t, tmp;
    float aver1[10], sum = 0;
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < M; j++)
        {
            sum = sum + array[i][j];
        }
        aver1[i] = sum / M;
        printf("第%d个学生的平均分为:%.2f\n", i + 1, aver1[i], sum = 0);
    }
    for (j = 0; j < 9; j++)
    {
        for (i = 0; i < 9 - j; i++)
            if (aver1[i] < aver1[i + 1])
            {
                t = aver1[i]; aver1[i] = aver1[i + 1]; aver1[i + 1] = t;
                tmp = stu[i].num; stu[i].num = stu[i + 1].num; stu[i + 1] .num= tmp;
            }
    }
    printf("平均分由大到小排序后:\n");
    for (i = 0; i < 10; i++)
        printf("%d  %.2f\n",stu[i].num, aver1[i]);
}


void average2(float array[5][10])
{
    int i, j;
    float aver2[5], sum = 0;
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 10; j++)
        {
            sum = sum + array[i][j];
        }
        aver2[i] = sum / 10;
        printf("第%d门的平均分为:%.2f\n", i+1,aver2[i], sum = 0);
    }
}

void high1(float array[5][10])
{
    int i=0,j=0,t, max = array[i][0];
    for (i= 0; i < 5; i++)
    {
        t = 0;
        max = array[i][0];
        for (j=0;j<10;j++)
        {
            if (max < array[i][j])
            {
                max = array[i][j];
                t = j;
            }
        }
        printf("第%d门课程最高分所对应的学生学号和姓名为:NO.:%d\nname:%s\n", i + 1, stu[t].num, stu[t].name);
    }
}

void high2(float array[5][10])
{
    int i, j,maxArr[5] = { 0 },t = maxArr[0],s=0;
    for (i = 0; i < 5; i++)
    {
        int max = array[i][0];
        for (j = 0; j < 10; j++)
            if (max < array[i][j])
                max = array[i][j];
                maxArr[i] = max;
    }
    for (i = 0; i < 5; i++)
    {
        if (t < maxArr[i + 1])
        {
            t = maxArr[i + 1];
            s = i ;
        }
    }
    printf("所有成绩中最高分的学生学号、姓名、课程为:NO.:%d\nname:%s\n第%d门课程\n", stu[s].num, stu[s].name, s+1);
}

void input(float array[10][5])
{
    int i, j, t;
    float aver1[10], sum = 0;
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < M; j++)
        {
            sum = sum + array[i][j];
        }
        aver1[i] = sum / M;
    }
    for (j = 0; j < 9; j++)
    {
        for (i = 0; i < 9 - j; i++)
            if (aver1[i] < aver1[i + 1])
            {
                t = aver1[i]; aver1[i] = aver1[i + 1]; aver1[i + 1] = t;
            
            }
    }
    printf("按照平均分排序后每个学生的相关信息:\n");
    printf("学号  姓名  语文成绩  数学成绩  英语成绩  物理成绩  化学成绩  平均分  排名\n");
    for (i = 0; i < 10; i++)
        printf("%d  %s     %d       %d        %d        %d        %d      %.2f     %d\n", stu[i].num, stu[i].name, stu[i].Chinesescore, stu[i].Mathscore, stu[i].Englishscore, stu[i].Physicsscore, stu[i].Chemistryscore, stu[i].aver1,stu[i].num1);
}
int main()
{
    float aver1[10];
    float aver2[5];
    float a[10][5] = { {95,97,95,89,82},{98,90,86,91,86},{82,86,73,66,75},{84,65,75,75,63},{95,96,76,72,81},{72,83,64,82,84},{83,84,65,72,93},{63,84,72,95,88},{97,77,68,84,76},{77,68,88,91,86} };
    float b[5][10] = { {95,98,82,84,95,72,83,63,97,77},{97,90,86,65,96,83,84,84,77,68},{95,86,73,75,76,64,65,72,68,88},{89,91,66,75,72,82,72,95,84,91},{82,86,75,63,81,84,93,88,76,86} };
    average1(a);
    average2(b);
    high1(b);
    high2(b);
    input(a);
    return 0;

 

high1() 和 high2()功能相类似,所以只做了high1的修改,其他修改完善,最大问题是结构体设计不合理,供参考:

#include<stdio.h>
#define N  10
#define M   5
struct Student
{
    int   num;
    char  name[20];
    int   Chinesescore;
    int   Mathscore;
    int   Englishscore;
    int   Physicsscore;
    int   Chemistryscore;
    float aver1;
    int   num1;
}stu[N]= { {10101,"Yang",95,97,95,89,82},{10102,"Wang",98,90,86,91,86},
           {10103,"Xu",82,86,73,66,75},{10104,"Li",84,65,75,75,63},
           {10105,"Xie",95,96,76,72,81},{10106,"Yue",72,83,64,82,84},
           {10107,"Hu",83,84,65,72,93},{10108,"Liu",63,84,72,95,88},
           {10109,"Hou",97,77,68,84,76},{10110,"Zhao",77,68,88,91,86} };

void average1(struct Student stu[])
{
    int i, j;
    float sum;
    struct Student tmp;
    for (i = 0; i < N; i++)
    {
        sum = stu[i].Chinesescore + stu[i].Mathscore + stu[i].Englishscore
                                  + stu[i].Physicsscore + stu[i].Chemistryscore;
        stu[i].aver1 = sum / M;
        printf("第%2d个学生的平均分为:%.2f\n", i + 1,stu[i].aver1);
    }
    printf("\n");
    for (j = 0; j < N-1; j++)
    {
        for (i = 0; i < N-j-1; i++)
            if (stu[i].aver1 < stu[i + 1].aver1)
            {
                tmp = stu[i]; stu[i] = stu[i + 1]; stu[i + 1] = tmp;
            }
    }
    printf("平均分由大到小排序后:\n");
    for (i = 0; i < 10; i++){
        stu[i].num1 = i+1;    //排名赋值
        printf("%d  %.2f\n",stu[i].num, stu[i].aver1);
    }
    printf("\n");
}


void average2(struct Student stu[])
{
    int i, j;
    float aver2[5],sum;
    
    for (i = 0; i < M; i++)
    {
        sum = 0;
        for (j = 0; j < N; j++)
        {
              switch(i){
                  case 0: sum += stu[j].Chinesescore;  break;
                  case 1: sum += stu[j].Mathscore;     break;
                  case 2: sum += stu[j].Englishscore;  break;
                  case 3: sum += stu[j].Physicsscore;  break;
                  case 4: sum += stu[j].Chemistryscore;break;
              }
        }
        aver2[i] = sum/N;
        printf("第%2d门的平均分为:%.2f\n", i+1,aver2[i]);
    }
    printf("\n");
}

void high1(struct Student stu[])
{
    int i,j,t,max;
    for (i= 0; i < M; i++)
    {
        switch(i){
                  case 0: max = stu[0].Chinesescore;  t=0;break;
                  case 1: max = stu[0].Mathscore;     t=0;break;
                  case 2: max = stu[0].Englishscore;  t=0;break;
                  case 3: max = stu[0].Physicsscore;  t=0;break;
                  case 4: max = stu[0].Chemistryscore;t=0;break;
        }
        for (j=0;j < N;j++)
        {
            switch(i){
                  case 0: if(max < stu[j].Chinesescore)  {max=stu[j].Chinesescore;  t=j;}break;
                  case 1: if(max < stu[j].Mathscore)     {max=stu[j].Mathscore;     t=j;}break;
                  case 2: if(max < stu[j].Englishscore)  {max=stu[j].Englishscore;  t=j;}break;
                  case 3: if(max < stu[j].Physicsscore)  {max=stu[j].Physicsscore;  t=j;}break;
                  case 4: if(max < stu[j].Chemistryscore){max=stu[j].Chemistryscore;t=j;}break;
            }
        }
        printf("第%d门课程最高分所对应的学生学号和姓名为:NO.:%d Name:%s\n",i+1,stu[t].num,stu[t].name);
    }
    printf("\n");
}
/*
void high2(float array[5][10])
{
    int i, j,maxArr[5] = { 0 },t = maxArr[0],s=0;
    for (i = 0; i < 5; i++)
    {
        int max = array[i][0];
        for (j = 0; j < 10; j++)
            if (max < array[i][j])
                max = array[i][j];
                maxArr[i] = max;
    }
    for (i = 0; i < 5; i++)
    {
        if (t < maxArr[i + 1])
        {
            t = maxArr[i + 1];
            s = i ;
        }
    }
    printf("所有成绩中最高分的学生学号、姓名、课程为:NO.:%d\nname:%s\n第%d门课程\n", stu[s].num, stu[s].name, s+1);
}
   */
void output(struct Student stu[])
{
    int i;
    printf("按照平均分排序后每个学生的相关信息:\n");
    printf("学号    姓名 语文成绩 数学成绩 英语成绩 物理成绩 化学成绩 平均分 排名\n");
    for (i = 0; i < 10; i++)
        printf("%5d\t%s\t%4d\t%4d\t%4d\t%4d\t%4d\t%6.2f\t%4d\n", stu[i].num, stu[i].name,
                          stu[i].Chinesescore, stu[i].Mathscore, stu[i].Englishscore,
                     stu[i].Physicsscore, stu[i].Chemistryscore, stu[i].aver1,stu[i].num1);

}

int main()
{

    average1(stu);
    average2(stu);
    high1(stu);
    //high2(b);
    output(stu);
    
    return 0;
}