已知5个学生的4门课的成绩,要求求出每个学生的平均成绩,然后对平均成绩从高到低将各学生的成

#include <stdio.h>
void main()
{
int a[5][4]={{94,78,87,76},{66,87,75,69},{100,98,89,77},{82,58,72,84},{82,73,67,54}};
int i,j,sum;
float average,b[5],t;
for(i=0;i<5;i++)
{
sum=0;
for(j=0;j<4;j++)
sum=sum+a[i][j];
b[i]=sum/4.0;
printf("average%d=%4.2f\n",i+1,b[i]);
}
for(j=0;j<4;j++)
for(i=0;i<4-j;i++)
if(b[i]>b[i+1])
{t=b[i];b[i]=b[i+1];b[i+1]=t;}
for(i=0;i<5;i++)
printf("%d\n",b[i]);
}
我的做法有什么不对啊

问题很多
首先
for(j=0;j<4;j++)
sum=sum+a[i][j];
b[i]=sum/4.0;
b[i]赋值要在循环里面做。
其次
排序 你这样排出来的结果应该是小到大
再次
printf("%d\n",b[i]);
b[]数组时float型的%d输出格式也不正确
我改过之后为
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[5][4]={{94,78,87,76},{66,87,75,69},{100,98,89,77},{82,58,72,84},{82,73,67,54}};
int i,j,sum;
float average,b[5],t;
for(i=0;i<5;i++)
{
sum=0;
for(j=0;j<4;j++)
{
sum=sum+a[i][j];
b[i]=sum/4.0;
}
printf("average%d=%4.2f\n",i+1,b[i]);
}
for(j=0;j<4;j++)
for(i=j+1;i<5;i++)
if(b[i]>b[j])
{
t=b[i];
b[i]=b[j];
b[j]=t;
}
for(i=0;i<5;i++)
printf("%.2lf\n",b[i]);
system("pause");
return 0;
}
但是这不是最好的方法
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-07-02
我要搞分先生
先学会冒泡法再做
^_^
第2个回答  2009-07-02
j
第3个回答  2009-07-02
多半是排序上出了问题
相似回答