#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("多少個學(xué)生:");
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]);
}
}我的思路是先把打的分?jǐn)?shù)存入一個數(shù)組,去掉一個最高分,去掉一個最低分,再求平均得分。再把平均得分存入另一個數(shù)組中,按降序排列輸出成績。?!,F(xiàn)在問題是平均數(shù)可能是一個小數(shù),不能存入一個int型的數(shù)組,然后我就把小數(shù)存入一個float型的數(shù)組中,但在執(zhí)行swap函數(shù)的時候又報錯,請教一下應(yīng)該怎么修改程序使其正常運(yùn)行,感謝!錯誤提示如下:83 25 ?[Error] cannot convert 'float*' to 'int*' for argument '1' to 'void swap(int*, int*)'
- 1 回答
- 0 關(guān)注
- 1505 瀏覽
添加回答
舉報
0/150
提交
取消