编写一个c++的代码可以实现以下要求,歌手比赛系统对一次歌手比赛的成绩进行管理,功能要求:1、依次输入每个选手的编号、姓名、十个评委的成绩,根据输入计算出总成绩和平均成绩(去掉最高分,去掉最低分)。2、显示主菜单如下:1)输入选手数据2)评委打分3)成绩排序(按平均分)4)数据查询5追加学生数据6退出系统)
时间: 2023-06-14 14:03:41 浏览: 720
以下实现以上要求的 C 代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NUM 50
#define MAX_NAME_LEN 20
struct contestant
{
int id; // 选手编号
char name[MAX_NAME_LEN]; // 选手姓名
float score[10]; // 评委打分
float total_score; // 总成绩
float avg_score; // 平均成绩
};
struct contestant contestants[MAX_NUM]; // 存储所有选手的数组
int num_contestants = 0; // 当前选手数量
// 打印主菜单
void print_menu()
{
printf("主菜单\n");
printf("1) 输入选手数据\n");
printf("2) 评委打分\n");
printf("3) 成绩排序(按平均分)\n");
printf("4) 数据查询\n");
printf("5) 追加选手数据\n");
printf("6) 退出系统\n");
}
// 输入选手数据
void input_contestant_data()
{
int i, j;
printf("请输入选手数量:");
scanf("%d", &num_contestants);
for (i = 0; i < num_contestants; i++)
{
printf("请输入第%d个选手的编号、姓名:", i+1);
scanf("%d %s", &contestants[i].id, contestants[i].name);
contestants[i].total_score = 0;
contestants[i].avg_score = 0;
for (j = 0; j < 10; j++)
{
printf("请输入第%d个选手第%d个评委的成绩:", i+1, j+1);
scanf("%f", &contestants[i].score[j]);
contestants[i].total_score += contestants[i].score[j];
}
// 计算平均成绩
float max_score = contestants[i].score[0];
float min_score = contestants[i].score[0];
for (j = 1; j < 10; j++)
{
if (contestants[i].score[j] > max_score)
{
max_score = contestants[i].score[j];
}
if (contestants[i].score[j] < min_score)
{
min_score = contestants[i].score[j];
}
}
contestants[i].avg_score = (contestants[i].total_score - max_score - min_score) / 8;
}
}
// 评委打分
void judge_scoring()
{
int contestant_id, judge_id;
float score;
printf("请输入评分选手的编号:");
scanf("%d", &contestant_id);
printf("请输入评分评委的编号:");
scanf("%d", &judge_id);
printf("请输入评分:");
scanf("%f", &score);
contestants[contestant_id-1].score[judge_id-1] = score;
// 重新计算总成绩和平均成绩
float max_score = contestants[contestant_id-1].score[0];
float min_score = contestants[contestant_id-1].score[0];
contestants[contestant_id-1].total_score = 0;
int j;
for (j = 0; j < 10; j++)
{
contestants[contestant_id-1].total_score += contestants[contestant_id-1].score[j];
if (contestants[contestant_id-1].score[j] > max_score)
{
max_score = contestants[contestant_id-1].score[j];
}
if (contestants[contestant_id-1].score[j] < min_score)
{
min_score = contestants[contestant_id-1].score[j];
}
}
contestants[contestant_id-1].avg_score = (contestants[contestant_id-1].total_score - max_score - min_score) / 8;
}
// 成绩排序
void sort_contestants_by_score()
{
int i, j, max_index;
struct contestant temp;
// 冒泡排序
for (i = 0; i < num_contestants-1; i++)
{
max_index = i;
for (j = i+1; j < num_contestants; j++)
{
if (contestants[j].avg_score > contestants[max_index].avg_score)
{
max_index = j;
}
}
if (max_index != i)
{
temp = contestants[i];
contestants[i] = contestants[max_index];
contestants[max_index] = temp;
}
}
}
// 数据查询
void query_contestant_data()
{
int contestant_id;
printf("请输入要查询的选手编号:");
scanf("%d", &contestant_id);
printf("选手编号:%d\n", contestants[contestant_id-1].id);
printf("选手姓名:%s\n", contestants[contestant_id-1].name);
printf("选手成绩:\n");
int i;
for (i = 0; i < 10; i++)
{
printf("%.1f ", contestants[contestant_id-1].score[i]);
}
printf("\n");
printf("选手总成绩:%.1f\n", contestants[contestant_id-1].total_score);
printf("选手平均成绩:%.1f\n", contestants[contestant_id-1].avg_score);
}
// 追加选手数据
void append_contestant_data()
{
int i, j, num_new_contestants;
printf("请输入要追加的选手数量:");
scanf("%d", &num_new_contestants);
for (i = num_contestants; i < num_contestants+num_new_contestants; i++)
{
printf("请输入第%d个选手的编号、姓名:", i+1);
scanf("%d %s", &contestants[i].id, contestants[i].name);
contestants[i].total_score = 0;
contestants[i].avg_score = 0;
for (j = 0; j < 10; j++)
{
printf("请输入第%d个选手第%d个评委的成绩:", i+1, j+1);
scanf("%f", &contestants[i].score[j]);
contestants[i].total_score += contestants[i].score[j];
}
// 计算平均成绩
float max_score = contestants[i].score[0];
float min_score = contestants[i].score[0];
for (j = 1; j < 10; j++)
{
if (contestants[i].score[j] > max_score)
{
max_score = contestants[i].score[j];
}
if (contestants[i].score[j] < min_score)
{
min_score = contestants[i].score[j];
}
}
contestants[i].avg_score = (contestants[i].total_score - max_score - min_score) / 8;
}
num_contestants += num_new_contestants;
}
int main()
{
int choice;
do
{
print_menu();
printf("请输入选项:");
scanf("%d", &choice);
switch (choice)
{
case 1:
input_contestant_data();
break;
case 2:
judge_scoring();
break;
case 3:
sort_contestants_by_score();
printf("排名\t编号\t姓名\t平均成绩\n");
int i;
for (i = 0; i < num_contestants; i++)
{
printf("%d\t%d\t%s\t%.1f\n", i+1, contestants[i].id, contestants[i].name, contestants[i].avg_score);
}
break;
case 4:
query_contestant_data();
break;
case 5:
append_contestant_data();
break;
case 6:
printf("感谢使用!\n");
break;
default:
printf("无效选项!\n");
break;
}
} while (choice != 6);
return 0;
}
```
使用方法:编译并运行程序,在菜单中输入相应选项即可。