c语言程序设计 : 有8个评委,5个歌手,评委为每个歌手打分。去掉最高分和最低分,求每个歌手的平均分。

2025-04-16 15:42:40
推荐回答(4个)
回答(1):

如果你想简单一点就
初始化二维数组再进行运算:
#define pw 8 /*评委数目*/
#define gs 5 /*歌手数目*/
main()
{
int i,j,max,min,sum,ave[gs];
int a[gs][pw]={{1,1,1,1,1,1,1,1}, /*先初始化分数再进行运算*/
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1}};
for(i=0;i {
sum=0;max=0;min=10000;/*初始化累加值,最大值,最小值*/
for(j=0;j {
sum=sum+a[i][j];
if (max if (min>a[i][j]) min=a[i][j];
}
ave[i]=(sum-max-min)/(pw-2);/*(累加值-最大值-最小值)/(评委总数-2)*/
printf("avepoint of gs[%d]:=%d\n",i+1,ave[i]);/*输出每个歌手的评价分数*/
}
getch();
}

以下是在运算中输入分数:
#define pw 8 /*评委数目*/
#define gs 5 /*歌手数目*/

main()
{
int i,j,max,min,sum;
int a[gs][pw],ave[gs];

for(i=0;i for(j=0;j {
printf("[%d]point of gs[%d]:",j+1,i+1);
scanf("%d",&a[i][j]);
}

for(i=0;i {
sum=0;max=0;min=10000;/*初始化累加值,最大值,最小值*/
for(j=0;j {
sum=sum+a[i][j];
if (max if (min>a[i][j]) min=a[i][j];
}
ave[i]=(sum-max-min)/(pw-2);/*(累加值-最大值-最小值)/(评委总数-2)*/
printf("avepoint of gs[%d]:=%d\n",i+1,ave[i]);/*输出每个歌手的评价分数*/
}
getch();
}

回答(2):

float ave( float m[8]) //处理一个歌手的平均分
{ float max, min, sum=0;
int i;
max=min=sum=m[0];
for(i=1;i<8;i++)
{ if (max < m[i] ) max=m[i];
if ( min > m[i] ) min=m[i];
sum+=m[i];
}
sum=sum-max-min;
return sum/6.0;
}
main()
{ float score[5][8], mark[5];
int i,j;
for(i=0;i<5;i++)
{ for(j=0;j<8;j++)
scanf("%f",&score[i][j]); //输入一个歌手的分数
mark[i]=ave(score[i]); //得到一个歌手的平均分
}
for(i=0;i<5;i++)
printf("%d %f\n",i,mark[i]); // 输出歌手的代号和分数
}

回答(3):

创建一个5*8的二维数组score[5][8],每一维的8个值表示8个评委对一个歌手的评分。
然后对每一维找出最高分和最低分所在的位置,跳过这样的两个位置对其余的求平均值就解决问题了。

回答(4):

#include
#include
main()
{ float a[5][9],max,min,s;
int i,j;
for(i=0;i<5;i++)
{s=0;
for(j=0;j<8;j++)
{scanf("%f",&a[i][j]);
if(j==0){max=a[i][j];min=a[i][j];}
else
{if(a[i][j]>max)max=a[i][j];
if(a[i][j] s=s+a[i][j];
}
a[i][8]=(s-max-min)/6;
}
for(i=0;i<5;i++)printf("%.2f ",a[i][8]);
system("PAUSE");
}