题目
有十个选手参加歌唱比赛,十个裁判对每个选手的演唱进行打分,去掉一个最高分,去掉一个最低分,剩下分数的平均值作为每位选手最后的成绩。
要求
- 采用结构体定义每个选手的参赛编号,姓名以及十个裁判打出的分数;
- 从键盘输入每个选手的相关信息:参赛编号,姓名和十个得分;
- 计算每位选手的最后得分,并按分数由高到低排序;
- 查询功能:输入参赛选手的名次、编号或姓名(三个条件都能实现),便可输出该选手的得分以及排名;
- 以上功能采用菜单操作方式;设计程序中要求用到结构体、文件读写等相关知识内容。
前往GitHub 查看
代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MEM 10 //有10名选手
struct Member_information //选手信息
{
int num; //编号
char name[16]; //姓名
float score_o[10]; //原始分数 10个
float score; //平均分数
}member[MEM];
int i,j;
void input_information() //输入每一个选手的信息
{
int flag;
for (i=0;i<MEM;i++)
{
flag=1;
while(flag)
{
flag=0;
printf("\n请输入选手的编号: ");
scanf("%d",&member[i].num);
getchar();
for (j=i-1;j>=0;j--) //若存在相同编号,要求重新输入
{
if (i != 0 && member[i].num == member[j].num)
{
printf("此编号已存在,请重新输入\n");
flag=1;
}
}
}
printf("请输入%d号选手的姓名: ",member[i].num);
gets(member[i].name);
for (j=0;j<10;j++)
{
printf("第%2d个裁判的打分: ",j+1);
scanf("%f",&member[i].score_o[j]);
}
getchar();
}
system("cls");
printf("\n-------数据录入完毕-------\n");
}
void sort_num() //将裁判打的分数用选择法 由小到大排序
{
int k;
float temp;
for (i=0;i<MEM;i++)
{
for (j=0;j<10;j++)
{
temp=member[i].score_o[j];
for (k=j+1;k<10;k++)
{
if (member[i].score_o[j] > member[i].score_o[k