设计大赛现场统分系统(C语言)

题目描述:

某大赛有n个选手参赛,m个评委为参赛选手评判打分,最高10分,最低0分。统分规则为:每个选手得到的m个评分中去掉一个最高分,去掉一个最低分,然后平均为该选手的最后得分。确定好所有选手的最后得分后从高到低排出名次表,以此确定获奖名单。

设计思路:

首先申请一个二维数组记录所有评委给各位选手的分数,然后申请3个一维数组,其中含有记录总得分的sum[n]数组,计算排名的数组还有计算平均分的浮点数类型数组。最后只需要打印输出就可以了。

程序如下:

#include<stdio.h>
int main()
{
int n,m,i,j,min,max;
printf("input the number of the player:");
scanf("%d",&n);
printf("input the number of the judge:");
scanf("%d",&m);
int a[n][m],c[n],sum[n];
float b[n];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
printf("第%d位评委给第%d位选手的分数是:",j+1,i+1);
scanf("%d",&a[i][j]);
}
for(i=0;i<n;i++)                //求每位选手的得分平均值,记录在b[i]中 
{
sum[i]=0;
min=10;
max=0;
for(j=0;j<m;j++)
{
sum[i]+=a[i][j];
if(min>a[i][j])
min=a[i][j];
if(max<a[i][j])
max=a[i][j];
}
b[i]=(sum[i]-min-max)/(float)(m-2);        //求平均值 
c[i]=1;
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(b[j]<b[i])
c[j]++;
for(i=0;i<n;i++)
{
printf("第%d位选手平均分数为%.2f,名次是第%d。\n",i+1,b[i],c[i]);
}
return 0;
 } 

易出错点在于函数循环中最小值和最大值的赋初值问题,在计算每一位选手分数时,都要给min和max初值,否则有可能出现第一个人的最高分一直被后面人沿用这样的情况。

在计算平均值时就会出现错误。

最后运行的程序结果见图:


以及在VMware的Linux虚拟机上运行的结果:


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值