崩漏吃什么:如何用C语言实现下面问题

来源:百度文库 编辑:神马品牌网 时间:2024/04/17 00:27:46
请问怎样用C语言实现下面一个问题:某次比赛有20个评委,要求对每个参赛选手评分,条件:去掉最高分和最低分,求各选手的平均分!

int main(int argc, char* argv[])
{
int point[20];
int sum=0;

for(int i=0;i<20;i++)
{
printf("请输入分数%d:",i+1);
scanf("%d",&point[i]);
}

int max=point[0],min=point[0];
for(i=0;i<20;i++)
{
if(point[i]>max)
max=point[i];
else if(point[i]<min)
min=point[i];
else
sum+=point[i];
}
printf("平均分为:\n%d\n",sum/18);

return 0;
}
输出:
请输入分数1:5
请输入分数2:7
请输入分数3:4
请输入分数4:8
请输入分数5:3
请输入分数6:9
请输入分数7:3
请输入分数8:8
请输入分数9:5
请输入分数10:6
请输入分数11:7
请输入分数12:8
请输入分数13:9
请输入分数14:0
请输入分数15:6
请输入分数16:5
请输入分数17:4
请输入分数18:6
请输入分数19:7
请输入分数20:8
平均分为:
4
Press any key to continue

#define MA 10 /*最高允许分*/
#define MI 0 /*最低允许分*/
main()
{
float score[20];
int i,sign;
float sum=0,max=MA,min=MI;
for(i=0;i<20;i++)
{
do
{
sign=1;
printf("请输入评委 %d 的亮分: ",i+1);
scanf("%f",&score[i]);
if(score[i]>MA||score<MI)
{
printf("输入的分数超出范围,请重新输入!\n");
sign=0;
}
}
while(sign==0);
sum+=score[i];
}
for(i=0;i<20;i++)
{
max=max?score[i]:max>score[i];
min=min?score[i]:min<score[i];
}
sum=(sum-max-min)/18;
printf("去掉一个最高分 %.2f\n去掉一个最低分 %.2f \n最后平均分: %.2f\n",max,min,sum);
}

个人觉得这个答案相当可以
首先它解决了楼上最高分和最低分固定的问题,在编程风格上也还可以。
另外楼上用两重循环好像十分不必要。

#include<stdio.h>

main()
{
double total = 0.0, score[20], max, min, value;
int i;

for(i = 0; i < 20; i++) {
printf("请第%d位评委输入分数", i+1);
scanf("%lf", &score[i]);
if(i == 0)
max = min = score[i];
else {
if(score[i] > max)
max = score[i];
if(score[i] < min)
min = score[i];
}
total += score[i];
}
value = (total - max - min);
printf("去掉一个最高分 %.3f\n去掉一个最低分 %.3f\n最后平均分: %.3f\n", max, min, value);
return 0;
}

我就编主程序了.

int i,j,b;
float c;
float a[20];

for(i=0;i<19;i++)
for(j=i+1;j<20;j++)
if(a[i]<a[j])
{ b=a[i];a[i]=a[j];a[j]=b;
}
a[0]=0;a[19]=0;
for(i=0;i<20;i++)
c+=a[i];

c=c/20;
printf('%f',c) ;

此程序每次可以计算一个人的成绩.接受数值语句和main()函数自己作吧.
注:我没在c语言上运行.

fanyangye写的对的.
就是最后一个FOR循环写快了吧.
max=max<score[i]?score[i]:max;
min=min>score[i]?score[i]:min;