急求c语言程序:M 个学生,每个学生学N 门课,所以有N门成绩, 求每人的平均成绩,并按平均成绩从大到小排序

有 M 个学生,每个学生学N 门课,所以有N门成绩,
求每人的平均成绩,并按平均成绩从大到小排序,
按排序结果输出。

第1个回答  2011-06-15
VC++6.0调试通过
==========结果======================
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
Src=

** No=1 **
1.0 2.0 3.0
** No=2 **
4.0 5.0 6.0
** No=3 **
7.0 8.0 9.0
** No=4 **
10.0 11.0 12.0
** No=5 **
13.0 14.0 15.0
********Desc=*********
2.00, 5.00, 8.00, 11.00, 14.00,
Press any key to continue
======================
#include <stdio.h>

#define M 5
#define N 3

main()
{
int i,j,k;
float sum,temp;
float a[M][N];//={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
float aver[M];

for(i=0;i<M;i++)
for(j=0;j<N;j++)
{scanf("%f,",&a[i][j]); }

printf("Src=\n");
for(i=0;i<M;i++)
{
printf("\n** No=%d **\n", i+1);
for(j=0;j<N;j++)
printf("%5.1f\t",a[i][j] );

}

for(i=0;i<M;i++)
{
sum=0;
for(j=0;j<N;j++)
sum +=a[i][j];
aver[i] = sum / N;
}
for(j=0;j<M;j++)
{
for (i=0;i<M-j-1;i++)
if (aver[i]>aver[i+1])
{
temp=aver[i];
aver[i]=aver[i+1];
aver[i+1]=temp;
}
}
printf("\n********Desc=*********\n");
for(i=0;i<M;i++)
printf("%7.2f,",aver[i] );
printf("\n");
}本回答被提问者采纳
第2个回答  2011-06-20
#include "stdio.h"
#include "string.h"
#define N 5
#define M 3
struct stu
{ char name[10];
char xh[10];
int score[M];
int total;
double avg;
}s[N];
input( struct stu s[N] )
{ int i,j;
printf("请输入学生姓名\n");
for(i=0;i<N;i++)
scanf("%s",&s[i].name);
printf("请输入学生学号\n");
for(i=0;i<N;i++)
scanf("%s",&s[i].xh);

printf("请输入M门课的成绩\n");
for(i=0;i<N;i++)
for(j=0;j<M;j++)
scanf("%d",&s[i].score[j]);
}
jisuan(struct stu s[N] )
{ int i,j;

for(i=0;i<N;i++)
for(j=0;j<M;j++)
{
s[i].total+=s[i].score[j];
s[i].avg=s[i].total/3.0;
}
}
print(struct stu s[N] )
{ int i,j;
printf("打印N个学生的所有数据\n");
printf("姓名\t学号\t语文\t数学\t英语\t总分\t平均分\n");
for(i=0;i<N;i++)
{ printf("%s\t%s\t",s[i].name,s[i].xh );
for(j=0;j<M;j++)
printf("%d\t",s[i].score[j]);
printf("%d\t%f\n",s[i].total,s[i].avg);
}
}
printmax(struct stu s[N] )
{ int i,j,k,base,max=0 ;
base=s[0].total;
for(i=0;i<N;i++)
if(s[i].total>=base)
{ max=s[i].total;
k=i;
}
printf("最高分数的学生是\n");
printf("姓名\t学号\t语文\t数学\t英语\t总分\t平均分\n");
printf("%s\t%s\t",s[k].name,s[k].xh );
for(j=0;j<M;j++)
printf("%d\t",s[k].score[j]);
printf("%d\t%f\n",s[k].total,s[k].avg);

}
main()
{ input(s);
jisuan(s);
print(s);
printmax(s);
} 编译通过
第3个回答  2011-06-21
可以使用一个二维数组
求出平均成绩之后进行冒泡排序即可
第4个回答  2011-06-14
我学VF的