求大神帮我的程序改正错误,并接着完成这个题(我是初学者,求用我能懂的办法)题如下:“一个小组五位同学,选修了相同的4门功课.请输入每位同学的成绩,计算每位同学的总分,找出总分最
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/22 00:43:09
求大神帮我的程序改正错误,并接着完成这个题(我是初学者,求用我能懂的办法)题如下:“一个小组五位同学,选修了相同的4门功课.请输入每位同学的成绩,计算每位同学的总分,找出总分最
求大神帮我的程序改正错误,并接着完成这个题(我是初学者,求用我能懂的办法)
题如下:“一个小组五位同学,选修了相同的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
求大神帮我的程序改正错误,并接着完成这个题(我是初学者,求用我能懂的办法)题如下:“一个小组五位同学,选修了相同的4门功课.请输入每位同学的成绩,计算每位同学的总分,找出总分最
【程序】用索引排序,这样就不用交换学生的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]);
}
}
【运行结果】