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

题如下:“一个小组五位同学,选修了相同的4门功课。请输入每位同学的成绩,计算每位同学的总分,找出总分最高的同学是第几号同学,最后按总分对二维数组排序,并输出排序后的每位学... 题如下:“一个小组五位同学,选修了相同的4门功课。请输入每位同学的成绩,计算每位同学的总分,找出总分最高的同学是第几号同学,最后按总分对二维数组排序,并输出排序后的每位学生信息。”
我根据问题自己编了一下,发现引用a【i】【0】的时候出了问题,要怎么改啊?接下来怎么编啊?

#include<stdio.h>
void main()
{
int i,j,s=0,max,a[5][6]={{1001},{1002},{1003},{1004},{1005}};
for(i=0;i<5;i++)
{
printf("请输入学号为%d同学的4门成绩:",a[i][0]);
for(j=1;j<5;j++)
scanf("%d",&a[i][j]);
}
for(i=0;i<5;i++)
{
s=0;
for(j=1;j<5;j++)
s=s+a[i][j];
a[i][6]=s;
}
max=0;
for(i=1;i<5;i++)
{if(a[i][6]>a[max][6])max=i;}
printf("总分最高的是%d同学,成绩为:%d",a[max][0],a[max][6]);

}
展开
 我来答
cdyzxy
推荐于2017-10-06 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:84%
帮助的人:3672万
展开全部

【程序】用索引排序,这样就不用交换学生的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]);

    }
}

【运行结果】

renshijie1018
2013-11-27 · TA获得超过1006个赞
知道小有建树答主
回答量:1063
采纳率:94%
帮助的人:957万
展开全部
已测试通过
#include<stdio.h>
void main()
{
int i,j,temp,k,sum,max,a[5][6]={{1001},{1002},{1003},{1004},{1005}};
for(i=0;i<5;i++)
{
sum=0;
printf("请输入学号为%d同学的4门成绩:",a[i][0]);
for(j=1;j<5;j++)
{
scanf("%d",&a[i][j]);
sum+=a[i][j];
}
a[i][j]=sum;
}
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
if(a[j][5]<=a[j+1][5])
{
for(k=0;k<6;k++)
{
temp=a[j][k];
a[j][k]=a[j+1][k];
a[j+1][k]=temp;
}
}
printf("总分最高的是%d同学,成绩为:%d",a[0][0],a[0][5]);

}
追问
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
if(a[j][5]<=a[j+1][5])
这是什么意思?行和列交换了?
追答
那个是冒泡排序
for(k=0;k<6;k++)
{
temp=a[j][k];
a[j][k]=a[j+1][k];
a[j+1][k]=temp;
}
这个是交换
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式