#include<stdio.h> #define N 40 void getscore(int score[],int m); void sortscore(int score[],int n,int m); float averofscore(int score[]); void sortdata(int data[],int n); void swap(int *x,int *y); void printdata(int data[],int n); int main() { int score[N]={0};int data[N]={0};int i,m,n,a; printf("多少个学生:"); scanf("%d",&n); printf("多少个裁判:"); scanf("%d",&m); for(i=0;i<n;i++) { getscore(score,n); sortscore(score,n,m); a=averofscore(score); data[i]=a; } sortdata(data,n); printdata(data,n); return 0; } void getscore(int score[],int m) { int i; printf("请打分(中间用空格隔开):"); for(i=0;i<m;i++) { scanf("%d",&score[i]); } } void sortscore(int score[],int n,int m) { int max=score[0];int min=score[0];int i,maxscore,minscore;int maxindex=0;int minindex=0; for(i=0;i<m;i++) { if(score[i]>max) { max=score[i]; maxindex=i; } } for(i=0;i<m;i++) { if(score[i]<min) { min=score[i]; minindex=i; } } score[minindex]=0;score[maxindex]=0; } float averofscore(int score[]) { int i,n;float sum; for(i=0;i<n;i++) { sum+=score[i]; } return sum/n; } void sortdata(int data[],int n) { int i,k,j; for(i=0;i<n-1;i++) { k=i; for(j=k+1;j<n;j++) { if(data[k]<data[j]) k=j; } if(k!=i) swap(&data[k],&data[i]); } } void swap(int *x,int *y) { int temp; temp=*x; *x=*y; *y=temp; } void printdata(int data[],int n) { int i; printf("降序排列中.....\n"); for(i=0;i<n;i++) { printf("%d\t",data[i]); } }
我的思路是先把打的分数存入一个数组,去掉一个最高分,去掉一个最低分,再求平均得分。再把平均得分存入另一个数组中,按降序排列输出成绩。。。现在问题是平均数可能是一个小数,不能存入一个int型的数组,然后我就把小数存入一个float型的数组中,但在执行swap函数的时候又报错,请教一下应该怎么修改程序使其正常运行,感谢!
错误提示如下:83 25 [Error] cannot convert 'float*' to 'int*' for argument '1' to 'void swap(int*, int*)'