C高手帮帮忙
有M位选手参赛,N个评委打分,计算各位选手的最后得分是去掉一个最高分和一个最低分后进行算术平均。要求程序能输入m(<=11), n(<=7)和输入并保存每个评委对每个选手所打的分数,再计算每个选手的最后得分,然后按高分到低分顺序依次输出所有选手的成绩。
程序代码:
#include <stdio.h>
void sort(double dinput[], int ilen);
/*main function*/
int main(void)
{
char c;
int m, n, i, j;
double isum=0.0, *dperson, *iscore;
FILE *finput;
printf("请输入选手的人数m和评委的人数n,并以空格分隔:\n");
scanf("%d %d", &m, &n);
iscore=(double *)malloc(sizeof(double)*n);
dperson=(double *)malloc(sizeof(double)*m);
if (iscore==NULL || dperson==NULL)
{
printf("所需内存分配失败!\n");
return 1;
}
finput=fopen("score.txt", "w");
if (finput==NULL)
{
printf("文件打开失败!\n");
return 1;
}
printf("选手的人数m=%d,评委的人数n=%d\n", m, n);
for (i=0; i<m; i++)
{
printf("请输入对第%d位选手的评分:\n", i+1);
fprintf(finput, "%d: ", i+1);
for (j=0; j<n; j++)
{
printf("第%d位评委的评分是:\n", j+1);
scanf("%lf", &iscore[j]);
fprintf(finput, "%.3lf ", iscore[j]);
isum+=iscore[j];
}
sort(iscore, n);
printf("去掉一个最低分%.3lf,去掉一个最高分%.3lf\n", iscore[0], iscore[n-1]);
printf("%d号选手的平均成绩是%.3lf:\n", i+1, (isum-iscore[0]-iscore[n-1])/(n-2));
fprintf(finput, "%.3lf", (isum-iscore[0]-iscore[n-1])/(n-2));
fputs("\n", finput);
dperson[i]=(isum-iscore[0]-iscore[n-1])/(n-2);
isum=0.0;
}
printf("选手的最终成绩如下:\n");
sort(dperson, m);
for (i=0; i<m; i++)
{
printf("%.3lf ", dperson[i]);
}
printf("\n");
free(iscore);
free(dperson);
fclose(finput);
return 0;
}
/*sort double function*/
void sort(double dinput[], int ilen)
{
int i, j;
double dtemp;
for (i=0; i<ilen-1; i++)
{
for(j=0; j<ilen-1-i; j++)
{
if (dinput[j]>dinput[j+1])
{
dtemp=dinput[j];
dinput[j]=dinput[j+1];
dinput[j+1]=dtemp;
}
}
}
}
