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]);
}
打印出最终的结果.
【代码展示】
#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();
}
【运行结果展示】
IT 农工要回家休息了,我们下期再见吧
记得点击“在看”进行收藏哦
往期精彩