#include<stdio.h>
double main()
{
int a,b,i;
char name[10];
double goal[30][30];
double score(double array[30],int b);
printf("请输入歌手数量和评委数量:");
scanf("%d%d",&a,&b);
for(i=0;i<a;i++)
{
gets(name);//输入选手姓名
scanf("%lf",goal[a]);//逐个输入评委所给分数
printf( "%lf",score(goal[a],b) );
}
}
double score(double array[30],int b)
{
int i;
double aver,max,min;
double sum=0;
max=array[0];
min=array[0];
for(i=0;i<b;i++)
{
if(array[i]>max){max=array[i];}
if(array[i]<min){min=array[i];}
sum=array[i]+sum;
}
aver=(sum-max-min)/b;
return(aver);
}
题目如下
【选作题 2】某歌手大赛,共 m 个歌手,有 n 个评委给歌手打分,分
数采用百分制,去掉一个最高分,去掉一个最低分,然后取
平均分,得到歌手的成绩。n 个分数由键盘输入,编写程序
计算某歌手的成绩。(假设 m≤50,n≤10)
要求:(1)设计一个函数计算一个歌手的成绩;
(2)在主函数中完成下面功能:输入评委数 n 和歌手数 m;
对每个歌手输入 n 个评委的分数;调用上面的函数;
输出全部歌手的最终分数;
(3)对 m 个歌手的分数采用一个二维数组来存放。
修改了一下,如下:
#include<stdio.h>
int main()
{
int a,b,i,j;
char name[10];
double goal[30][30];
double score(double array[][30],int star,int b);
for(i=0;i<30;i++){
for(j=0;j<30;j++){
goal[i][j]=-1;
}
}
printf("请输入歌手数量和评委数量:");
scanf("%d%d",&a,&b);
for(i=0;i<a;i++)
{
while(getchar()!='\n')
continue;
printf("请输入歌手的姓名:");
gets(name);//输入选手姓名
printf("请评委给歌手%s依次打分:",name) ;
for(j=0;j<b;j++){
scanf("%lf",&goal[i][j]);
}
printf( "歌手%s最后得分为:%lf\n",name,score(goal,i,b) );
}
}
double score(double array[][30],int star,int b)
{
int j;
double aver,max,min;
double sum=0;
max=array[star][0];
min=array[star][0];
for(j=0;j<30;j++)
if(array[star][j]!=-1){
if(array[star][j]>max){max=array[star][j];}
if(array[star][j]<min){min=array[star][j];}
sum=array[star][j]+sum;
}else{
break;
}
}
aver=(sum-max-min)/(b-2);
return(aver);
}
是计算的单个歌手的平均值,score函数里的参数star为歌手成绩的数组存放行数,所以能计算相应歌手的平均成绩。
运行图: