输入10名学生的学号(学号为整数)和四门课的成绩,计算出每位学生的平均分,然后按平均成绩由高到低的顺序

我自己写的,但是不知道哪个地方有问题,比较成绩高低也出不来。
#include<stdio.h>
void main ()
{int i,j,k,l,temp,a[10][6];
printf("input student number and score\n");
for(i=0;i<10;i++)
{a[i][5]=0;
for(j=0;j<5;j++)
{scanf("%d",&a[i][j]);
a[i][5]=a[i][5]+a[i][j]-a[i][0];
}
a[i][5]=a[i][5]/4;
}
for(i=0;i<10-1;i++)
{k=i;
for(l=i+1;l<10;l++)
{if(a[l][5]<a[k][5])
k=l;
}
temp=a[i][j];a[i][j]=a[k][j];a[k][j]=temp;
}
for(i=0;i<10;i++)
for(j=0;j<=6;j++)
{
if(j==6)
printf("\n");
printf("%d\t",a[i][j]);
}
}

错误1: a[i][5]=a[i][5]+a[i][j]-a[i][0];
你在每次循环输入中都见了学号
错误2:for(i=0; i<10-1; i++)
{
k=i;
for(l=i+1; l<10; l++)
{
if(a[l][5]<a[k][5])
k=l;
}
temp=a[i][j];
a[i][j]=a[k][j];
a[k][j]=temp;
}
你的选择排序有问题,既然想要对学生进行排序,那就要再来一个循环,对每个科目,以及学号,平均分都进行排序
修改好的程序:
#include<stdio.h>
int main ()
{
int i,j,k,l,temp,a[10][6];
printf("input student number and score\n");
for(i=0; i<10; i++)
{
a[i][5]=0;
for(j=0; j<5; j++)
{
scanf("%d",&a[i][j]);
a[i][5]=a[i][5]+a[i][j];
}
a[i][5]=(a[i][5]-a[i][0])/4;
}
for(i=0; i<10-1; i++)
{
k=i;
for(l=i+1; l<10; l++)
{
if(a[l][5]<a[k][5])
k=l;
}
for(j=0;j<6;j++){
temp=a[i][j];
a[i][j]=a[k][j];
a[k][j]=temp;
}
}
for(i=0; i<10; i++)
for(j=0; j<=6; j++)
{
if(j==6)
printf("\n");
else
printf("%d\t",a[i][j]);
}
return 0;
}追问

行了行了,可以了,刚才看错了~谢谢哈~

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-23
我随便写了一个,你看看吧!
#include<stdio.h>
#include<stdlib.h>
int comp(const void*a,const void*b)
{
return ((int*)b)[5] - ((int*)a)[5];
}
int main()
{
int a[10][6];
int i = 0,j;
for(;i < 10;i++){
for(j = 0;j < 5;j++){
scanf("%d",&a[i][j]);
}
a[i][j] = (int)((a[i][1] + a[i][2] + a[i][3] + a[i][4])/4);
}
qsort(a,10,sizeof(int)*6,comp);
printf("%6s%6s%6s%6s%6s%6s\n","NO.","sub-A","sub-B","sub-C","sub-D","ave");
for(i = 0;i < 10;i++){
for(j = 0;j < 6;j++){
printf("%6d",a[i][j]);
}
printf("\n");
}
return 0;
}本回答被提问者采纳
相似回答