作业帮 > 综合 > 作业

求大神帮我的程序改正错误,并接着完成这个题(我是初学者,求用我能懂的办法)

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/08/10 20:17:11
求大神帮我的程序改正错误,并接着完成这个题(我是初学者,求用我能懂的办法)
题如下:“一个小组五位同学,选修了相同的4门功课.请输入每位同学的成绩,计算每位同学的总分,找出总分最高的同学是第几号同学,最后按总分对二维数组排序,并输出排序后的每位学生信息.”
我根据问题自己编了一下,发现引用a【i】【0】的时候出了问题,要怎么改啊?接下来怎么编啊?
#include
void main()
{
\x05int i,j,s=0,max,a[5][6]={{1001},{1002},{1003},{1004},{1005}};
\x05for(i=0;i
求大神帮我的程序改正错误,并接着完成这个题(我是初学者,求用我能懂的办法)
【程序】用索引排序,这样就不用交换学生的6个数据了.
#define N 5
void main()
{   int i,j,s,index[N]; //index存放索引,内容是学生存储序号(a数组第1下标值)顺序表示排序顺序
    float a[N][6],max; //学号,成绩1,成绩2,成绩3,成绩4,总分
    for ( i=0;i<N;i++ )
    { index[i]=i; a[i][0]=1001+i;
      printf("请连续输入学号为%d同学的4门成绩(以空格间隔):",(int)a[i][0]);
      scanf("%f %f %f %f",&a[i][1],&a[i][2],&a[i][3],&a[i][4]);
    }
    for ( i=0;i<N;i++ ) { a[i][5]=0; for ( j=0;j<4;j++ ) a[i][5]+=a[i][j+1]; }
    max=0; s=0; for ( i=0;i<N;i++ ) if ( max<a[i][5] ) { max=a[i][5]; s=i; }
    printf("总分最高的同学的学号是:%d\n",(int)a[s][0]);
    for ( i=0;i<N-1;i++ ) //根据总分,将索引排序,索引顺序(下标0~N)将是总分从大到小顺序
        for ( j=i+1;j<N;j++ )
            if ( a[index[i]][5]<a[index[j]][5] )
            { s=index[i]; index[i]=index[j]; index[j]=s;
            }
    printf("按总分从高到低顺序的成绩单:\n");
    printf("学号\t语文\t数学\t英语\t科学\t总分\n");
    for ( i=0;i<N;i++,printf("\n") )    { printf("%d\t",(int)a[index[i]][0]);      for ( j=1;j<6;j++ ) printf("%.1f\t",a[index[i]][j]);    }
}【运行结果】