#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*)'
1 回答
- 1 回答
- 0 关注
- 1461 浏览
添加回答
举报
0/150
提交
取消