c语言数组问题关于比较大小

某班级有10名同学,每名同学的信息有座位号(整数)、语文成绩、数学成绩、英语成绩,请编写程序完成如下功能:
1.录入并保存10位同学的信息。
2.按照便于查看的方式输出10位同学的信息。
3.根据用户输出的座位号,科目序号(1:语文成绩,2:数学成绩,3:英语成绩)修改成绩。
4.输出每门课程的最高成绩及对应学生座位号。
5.输出总成绩最高学生的所有信息。
6.输出每门课程的总分和平均分。
7.按照总分由高到低对所有学生进行排序并输出。

img

img

img

img


不知道哪里出了问题,题4和题5都有问题,但可以运行,急!

运行结果:

img

代码:

#include <stdio.h>
#include <stdlib.h>

void getmax(int grad[][3],int max[3],int s[3])
{
    for(int m=0;m<3;m++)
    {
        max[m] = grad[0][m];
        s[m] = 1;
        for(int n = 0;n<10;n++)
        {
            if(grad[n][m] > max[m])
            {
                max[m] = grad[n][m];
                s[m] = n+1;
            }
        }
    }
}

void allmax(int grade[10][3])
{
    int all[10];
    int tmax,number,max1,max2,max3;
    for(int i=0;i<10;i++)
    {
        for(int a=0;a<3;a++)
        {
            all[i]=all[i]+grade[i][a];
        }
    }

    tmax=all[0];
    number=1;
    max1=grade[0][0];max2=grade[0][1];max3=grade[0][2];
    for(int j=1;j<10;j++)
    {
        if(all[j]>tmax)
        {
            tmax=all[j];
            number=j+1;
            max1=grade[j][0];max2=grade[j][1];max3=grade[j][2];
        }
    }
    printf("总成绩最高的学生信息为座位号:%d 语文:%d 数学:%d 英语:%d\n",number,max1,max2,max3);
}

//6
void average(int grad[10][3])
{
    int s[3]={0};
    for(int i=0;i<3;i++)
    {
        s[i] = 0;
        for(int j = 0;j<10;j++)
            s[i] += grad[i][j];
    }
    printf("语文总分:%d  平均分:%.2f\n",s[0],s[0]/10.0);
    printf("数学总分:%d  平均分:%.2f\n",s[1],s[1]/10.0);
    printf("英语总分:%d  平均分:%.2f\n",s[2],s[2]/10.0);
}


//7
void sort(int grad[][3])
{
    int zh[10]; //座位号
    for(int i=1;i<=10;i++)
        zh[i-1] = i;
    for(int i=0;i<9;i++)
    {
        for(int j=0;j<9-i;j++)
        {
            int s1 = grad[j][0] + grad[j][1] + grad[j][2];
            int s2 = grad[j+1][0] + grad[j+1][1] + grad[j+1][2];
            if(s1 < s2)
            {
                //交换座位号
                int t = zh[j];
                zh[j] = zh[j+1];
                zh[j+1] = t;
                //交换成绩
                for(int k = 0;k<3;k++)
                {
                    t = grad[j][k];
                    grad[j][k] = grad[j+1][k];
                    grad[j+1][k] = t;
                }
            }
        }
    }
    //输出
    for(int i=0;i<10;i++)
    {
        int s = grad[i][0] + grad[i][1]+grad[i][2];
        printf("座位号:%d  总分:%d  语文成绩:%d  数学成绩:%d  英语成绩:%d\n",zh[i],s,grad[i][0],grad[i][1],grad[i][2]);
    }
}

int main()
{
    int grad[10][3]; //成绩
    int zh[10]; //座位号
    //1
    printf("请按座位号输入三门课的成绩\n");
    for(int i = 0;i<10;i++)
    {
        zh[i] = i+1; //座位号
        scanf("%d,%d,%d",&grad[i][0],&grad[i][1],&grad[i][2]);
    }
    //2
    for(int i=1;i<=10;i++)
    {
        printf("%d,%d,%d,%d",i,grad[i-1][0],grad[i-1][1],grad[i-1][2]);
        printf("\n");
    }
    //3
    printf("请输入所需修改成绩的同学的座位号、成绩标号和分数,输入0表示不用修改\n");
    int a,b,c,d;
    scanf("%d",&a);
    while(a!=0)  //输入座位号,输入0表示结束
    {
        scanf("%d,%d",&b,&c);
        grad[a-1][b-1] = c;
        scanf("%d",&a);
    }
    //4
    int s[3];
    int max[3];
    getmax(grad,max,s);
    printf("座位号:%d  语文成绩max: %d\n",s[0],max[0]);
    printf("座位号:%d  数学成绩max: %d\n",s[0],max[1]);
    printf("座位号:%d  英语成绩max: %d\n",s[0],max[2]);
    //5
    allmax(grad);

    //6
    average(grad);

    //7.
    sort(grad);
    return 0;
}



```c
#include <stdio.h>
#include <stdlib.h>

int main()
{
  int grade[10][3];
  printf("请按座位号输入三门课的成绩\n");
  for(int i=0;i<10;i++)
   {
         scanf("%d ,%d,%d",&grade[i][0],&grade[i][1],&grade[i][2]);

            }
   for(int i=1;i<=10;i++)
   {
        printf("%d,%d ,%d,%d",i,grade[i-1][0],grade[i-1][1],grade[i-1][2]);
        printf("\n");
            }
 printf("请输入所需修改成绩的同学的座位号、成绩标号和分数,输入0表示不用修改\n");
 int a,b,c;
 scanf("%d",&a);
 while(a!=0){
    scanf("%d,%d,%d",&a,&b,&c);
    grade[a][b-1]=c;
 }
 int s[3];
 int max[3];
  getmax(grade,max,s);
  printf("座位号:%d  语文成绩max:%d\n",s[0],max[0]);
  printf("座位号:%d  数学成绩max:%d\n",s[1],max[1]);
  printf("座位号:%d  英语成绩max:%d\n",s[2],max[2]);
 int all[10];
 int tmax,number,max1,max2,max3;
 allgrade(grade,all);
 allmax(all,grade,tmax,number,max1,max2,max3);


    return 0;
}

void getmax(int grade[][3],int max[3],int s[3])
{
   for(int m=0;m<3;m++)
    {   max[m]=grade[0][m];
       for(int n=0;n<10;n++)
       {  if(grade[n][m]>max[m])
        { max[m]=grade[n][m];
          s[m]=n+1;
        }
          else
         {
             max[m]=grade[0][m];
             s[m]=1;
         }

       }
    }
}
int allgrade(int grade[10][3],int all[10])

{  for(int i=0;i<10;i++)
    {
        for(int a=0;a<3;a++)
   {
       all[i]=all[i]+grade[i][a];
            }
    }
     return all;
}
void allmax(int all[10],int grade[10][3],int tmax,int number,int max1,int max2,int max3)
{   for(int i=0;i<10;i++)
    {
        for(int a=0;a<3;a++)
   {
       all[i]=all[i]+grade[i][a];
            }
    }

    tmax=all[0];
    for(int j=1;j<10;j++)
    {
        if(all[j]>tmax)
           {
                tmax=all[j];
                number=j+1;
                max1=grade[j][0];max2=grade[j][1];max3=grade[j][2];
           }
        else
            {tmax=all[0];
            number=1;
            max1=grade[0][0];max2=grade[0][1];max3=grade[0][2];}
    }
    printf("总成绩最高的学生信息为座位号:%d 语文:%d 数学:%d 英语:%d\n",number,max1,max2,max3);
}






```

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632