C语言输入得分,去掉一个最高分一个最低分,计算平均分

Problem Description
青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。

Input
输入数据有多组,每组占一行,每行的第一个数是n(2<n<=100),表示评委的人数,然后是n个评委的打分。

Output
对于每组输入数据,输出选手的得分,结果保留2位小数,每组输出占一行。

Sample Input
3 99 98 97
4 100 99 98 97

Sample Output
98.00
98.50

程序1 :
#include
#define N 10
#define M 50

//本程序对歌手的打分均限定在整数范围
//若需处理成小数形式,只要将数据类型设定为float即可

void main()
{
static char name[M+1][]={
"";
"singer1 name";
......
"singer50 name"
}; //50位歌手名字
static int scores[M+1]; //50位歌手得分
int i,j;

for (i=1;i100))
{
printf("\nThe score must be less than 100 or larger than 60.\n");
scanf("d%",&data[1]);
}

score=0;
Tmax=data[1];
Tmin=data[1];

for (i=2;i100))
{
printf("\nThe score must be less than 100 and larger than 60.\n");
scanf("d%",&data[i]);
}

if (data[i]Tmax)
{
score+=Tmax;
Tmax=data[i];
}
else score+=data[i];
}

//直接输出去掉一个最高分及一个最低分之后的平均值
return score/(N-2);
}

void sort_out(char name[M+1][],int sco[M+1])
{
int i,j;
static int flag[M+1];

//利用flag记录歌手的位次
for (i=1;i
#include

#define N 6 //参赛选手人数
#define M 5 //评委人数

struct compete
{
int score[N*M]; //存放每个选手分数的数组
char num[N]; //存放选手序号的数组

}comp[N];

main()
{
int i,j,k,max[N],min[N],average[N],sum[N]={0};

for(i=0;imax[i])max[i]=comp[i].score[k]; //最大值放入max 中
if(comp[i].score[k]<min[i])min[i]=comp[i].score[k]; //最小值放入min中
}

average[i]=sum[i]-max[i]-min[i]/M-2; //计算平均值并放入average数组
putchar('\n');
}

for(i=0;i<N;i++) //打印出每个选手的得分情况
{
printf("\n%s号选手的得分情况如下: \n\n",comp[i].num);
printf("%10s%10s%10s%10s\n","总分","平均分","最高分","最低分");
printf("%10d%10d%10d%10d\n",*(sum+i),*(average+i),*(max+i),*(min+i));
}

getch();
}