vlambda博客
学习文章列表

C语言 大赛现场统分

点击上方“蓝字”关注我们
C语言 大赛现场统分




愉快的一天,不得不做的三件事:

        种田,锄地,整代码!!!






【题目】


某大奖赛有n个选手参赛,m(m>2)个评委为依次参赛的选手评判打分:最高10分,最低0分。统分规则为:每个选手所得的m个评分中,去掉一个最高分,去掉一个最低分,然后平均为该选手的最后得分。根据n个选手的最后得分从高到低排出名次表,以便确定获奖名单。使用数组方法实现程序设计。





【设计思路】


C语言 大赛现场统分




【代码分析】


float f[N][M];    //存放评委对选手的成绩

float sf[N];    //存放选手最终得分

float max,min,score,total,t1;    //定义评委打分的最大值,最小值,打分分值,选手总分,和中间变量t1

int num,t2;    //定义选手的编号,和中间变量t2

int sh[N],rank[N];    //存放选手编号和选手排名

int m,n;    //定义参赛选手人数和评委人数

int i,j,k;     //用于计数

  



printf("请输入评委的人数[至少为3人]:");

scanf("%d",&m);

printf("请输入选手的人数:");

scanf("%d",&n);

printf("\n");


for(i=0;i<n;i++)

{

printf("请输入第%d位选手的编号:",i+1);

scanf("%d",&num);

sh[i]=num;

}

   输入参赛选手人数、评委人数、选手编号.




for(i=0;i<n;i++)

{

max=0;

min=10;

total=0;

printf("\n");

for(j=0;j<m;j++)

{

printf("请输入第%d位评委对编号为%d选手的评分[0~10]:",j+1,sh[i]) ;

scanf("%f",&score);


f[i][j]=score;

total=total + f[i][j];


if(f[i][j]>max)

max=f[i][j];


if(f[i][j]<min)

min=f[i][j];


total=total-max-min;

sf[i]=(float)total/(m-2);

}

 输入每位评委对每位选手的打分分值,并相加得到总分total,同时判断打分中的最大值和最小值,在总分中去掉最大值和最小值,并计算平均值,最后存入数组sf[ ]中.




for(i=0;i<n-1;i++)

{

for(j=0;j<n-i-1;j++)

if(sf[j]<sf[j+1])

{

t1=sf[j];

sf[j]=sf[j+1];

sf[j+1]=t1;


t2=sh[j];

sh[j]=sh[j+1];

sh[j+1]=t2;

}

}

 将数组sf[ ]里的得分进行排序,并同时改变数组sh[ ]里的选手编号顺序.




for(i=0;i<n;i++)

{

k=0;

for(j=0;j<i;j++)

{

if(sf[j]==sf[j+1])

k++;

}

rank[i]=i+1-k;

}

  确定数组sf[ ]里的排名,并存入数组rank[ ]中.




printf("名次\t编号\t成绩\n");

for(i=0;i<n;i++)

{

printf("%d\t%d\t%.2f\n",rank[i],sh[i],sf[i]);

}

  打印出最终的结果.







C语言 大赛现场统分




【代码展示】


C语言   大赛现场统分

#include<stdio.h>

#define N 50

#define M 10


void competition()

{

float f[N][M],sf[N];

float max,min,score,total,t1;

int num,t2;

int sh[N],rank[N];

int m,n;

int i,j,k; 

printf("-------欢迎进入大赛现场统分操作系统-------\n\n");

printf("请输入评委的人数[至少为3人]:");

scanf("%d",&m);

printf("请输入选手的人数:");

scanf("%d",&n);

printf("\n");

for(i=0;i<n;i++)

{

printf("请输入第%d位选手的编号:",i+1);

scanf("%d",&num);

sh[i]=num;

}

for(i=0;i<n;i++)

{

max=0;

min=10;

total=0;

printf("\n");

for(j=0;j<m;j++)

{

printf("请输入第%d位评委对编号为%d选手的评分[0~10]:",j+1,sh[i]) ;

scanf("%f",&score);

f[i][j]=score;

total=total + f[i][j];

if(f[i][j]>max)

max=f[i][j];

if(f[i][j]<min)

min=f[i][j];

 

total=total-max-min;

sf[i]=(float)total/(m-2);

}

for(i=0;i<n-1;i++)

{

for(j=0;j<n-i-1;j++)

if(sf[j]<sf[j+1])

{

t1=sf[j];

sf[j]=sf[j+1];

sf[j+1]=t1;

t2=sh[j];

sh[j]=sh[j+1];

sh[j+1]=t2;

}

}

for(i=0;i<n;i++)

{

k=0;

for(j=0;j<i;j++)

{

if(sf[j]==sf[j+1])

k++;

}

rank[i]=i+1-k;

}

printf("\n");

printf("名次\t编号\t成绩\n");

for(i=0;i<n;i++)

{

printf("%d\t%d\t%.2f\n",rank[i],sh[i],sf[i]);

}

 } 

 

 void main()

 {

 competition();

 }





【运行结果展示】


C语言 大赛现场统分

C语言 大赛现场统分






C语言 大赛现场统分



C语言 大赛现场统分

IT 农工要回家休息了,我们下期再见吧

记得点击“在看”进行收藏哦





更多精彩等你来看


往期精彩