一道C语言作业!!!
输入n个学生m门课程的成绩,求每们学生的平均成绩,差按平均成绩排序输出前10名学生的各科成绩。要求排序和输出分别在被调函数中进行。
#include <stdlib.h>
#define N 20
#define M 6
void sort(float a[][M+2]);
void print_scores(float a[][M+2],int n);
int main(){
float scores[N][M+2];
float sco;
int i,j;
for(i=0;i<N;i++){
printf("Please input No.%d's scores:",i+1);
for(j=1;j<M+1;j++){
scanf("%f",&sco); /*这里如果直接用sacnf("%f",&scores[i][j])会出错,*/
/*而用一个变量传值却不会出错,不知道为什么?*/
scores[i][j]=sco;
}
scores[i][0]=i+1; /*存每名学生的学号*/
scores[i][M+1]=0; /*存每名学生的平均成绩*/
printf("\n");
}
for(i=0;i<N;i++){
for(j=1;j<M;j++)
scores[i][M+1]+=scores[i][j];
scores[i][M+1]/=M;
}
for(i=0;i<N;i++){
printf("No.%.0f's scores:",scores[i][0]);
for(j=1;j<M+1;j++)
printf(" %.1f ",scores[i][j]);
printf("\n");
}
sort(scores);
print_scores(scores,10);
getch();
}
void sort(float a[][M+2]){
int i,j,temp;
int maxi;
for(i=0;i<N-1;i++){
maxi=i;
for(j=i+1;j<N;j++)
if(a[maxi][M+1]<a[j][M+1])
maxi=j;
if(maxi!=i){
for(j=0;j<M+2;j++){
temp=a[i][j];
a[i][j]=a[maxi][j];
a[maxi][j]=temp;
}
}
}
}
void print_scores(float a[][M+2],int n){
int i,j;
for(i=0;i<n;i++){
printf("No.%.0f's scores:",a[i][0]);
for(j=1;j<=M+1;j++)
printf(" %.1f ",a[i][j]);
printf("\n");
}
}