题目:模拟比赛评分系统。评分规则:7名评委进行打分,去掉最高分与最低分,计算5名评委总分为选手成绩。输入选手信息包括(编号、姓名、国籍、评委评分和成绩)。设有10名选手,根据比赛总成绩,输出前三名的编号、姓名、国籍和成绩。
#include<stdio.h>
#include<string.h>
//定义选手信息结构体
struct player
{
char number[20];//编号
char name[20];//姓名
char nation[20];//国籍
float score[7];//评分
float grade;//总成绩
};
int main()
{
struct player sport[10];//定义选手结构体数组
int i,j,k,a;
for(i=0;i<10;i++)
{
sport[i].grade=0;
//输入选手编号、姓名和国籍信息
scanf("%s %s %s",sport[i].number,sport[i].name,sport[i].nation);
//输入评委评分
for(j=0;j<7;j++)
{
scanf("%f",&sport[i].score[j]);
}
//通过对评分排序,易于取出最低最高分,然后计算选手总分
for(j=0;j<7;j++)
{
int temp;
for(k=j;k<7;k++)
{
if(sport[i].score[j]>sport[i].score[k])
{
temp=sport[i].score[j];
sport[i].score[j]=sport[i].score[k];
sport[i].score[k]=temp;
}
}
}
for(j=1;j<6;j++)
{
sport[i].grade=sport[i].grade+sport[i].score[j];
}
printf("%s %s %s %f\n",sport[i].number,sport[i].name,sport[i].nation,sport[i].grade);
}
//定义中间值,用于交换信息位置
struct player temp;
for(i=0;i<10;i++)
{
for(a=i;a<10;a++)
{
if(sport[i].grade<sport[a].grade)
{
strcpy(temp.number,sport[i].number);
strcpy(sport[i].number,sport[a].number);
strcpy(sport[a].number,temp.number);
strcpy(temp.name,sport[i].name);
strcpy(sport[i].name,sport[a].name);
strcpy(sport[a].name,temp.name);
strcpy(temp.nation,sport[i].nation);
strcpy(sport[i].nation,sport[a].nation);
strcpy(sport[a].nation,temp.nation);
temp.grade=sport[i].grade;
sport[i].grade=sport[a].grade;
sport[a].grade=temp.grade;
}
}
}
for(i=0;i<3;i++)
printf("%s %s %s %f\n",sport[i].number,sport[i].name,sport[i].nation,sport[i].grade);
return 0;
}