复制
收藏
提问
简洁
为丰富校园文化生活,学校拟组织 一场歌手大赛。比赛之中设置有评 委组,每名选手演唱完毕之后会由 评委组的十名评委打分。 1为保证比赛公平公正,防止作弊 和恶意打分,计算得分时会先去掉 最高分和最低分,再计算平均分。 本实例要求编写程序,实现根据需 求计算平均分的功能, 2 如果评委输入的不是0-10的数字, 或其他字符,提示输入无效
1天前
全网
文档
学术
百科
知识库
回答简洁模式
深入研究一些
歌手大赛评分系统设计
为丰富校园文化生活,学校拟组织一场歌手大赛。比赛之中设置有评委组,每名选手演唱完毕之后会由评委组的十名评委打分。为保证比赛公平公正,防止作弊和恶意打分,计算得分时会先去掉最高分和最低分,再计算平均分。本实例要求编写程序,实现根据需求计算平均分的功能。
功能要求
- 输入每个选手的数据包括编号、姓名、十个评委的成绩,根据输入计算出总成绩和平均成绩(去掉最高分,去掉最低分)。
- 如果评委输入的不是0-10的数字,或其他字符,提示输入无效。
设计思路
- 定义一个结构体来存储选手信息,包括选手编号、姓名和评委打分。
- 编写函数来计算每个选手的平均分,去掉最高分和最低分。
- 编写函数来验证评委输入的有效性。
代码实现
#include <stdio.h>
#include <stdlib.h>
// 定义选手结构体
typedef struct {
int id;
char name[50];
float scores[10];
float average;
} Singer;
// 计算平均分
void calculate_average(Singer *singer) {
float sum = 0.0, max = 0.0, min = 10.0; // 假设分数在0到10之间
for (int i = 0; i < 10; i++) {
float score = singer->scores[i];
sum += score;
if (score > max) max = score;
if (score < min) min = score;
}
singer->average = (sum - max - min) / 8.0;
}
// 验证输入有效性
int validate_input(float score) {
if (score < 0 || score > 10) {
return 0; // 输入无效
}
return 1; // 输入有效
}
int main() {
Singer singer;
printf("请输入选手编号:");
scanf("%d", &singer.id);
printf("请输入选手姓名:");
scanf("%s", singer.name);
printf("请输入10位评委的打分(0-10):\n");
for (int i = 0; i < 10; i++) {
float score;
printf("评委%d的打分:", i + 1);
scanf("%f", &score);
if (!validate_input(score)) {
printf("输入无效,请重新输入0-10之间的数字。\n");
i--; // 重新输入当前评委的分数
} else {
singer.scores[i] = score;
}
}
calculate_average(&singer);
printf("选手%s的平均得分是:%.2f\n", singer.name, singer.average);
return 0;
}
代码说明
- 结构体定义:定义了一个
Singer
结构体,包含选手编号、姓名、评委打分和平均分。 - 计算平均分:
calculate_average
函数用于计算选手的平均分,去掉最高分和最低分。 - 验证输入有效性:
validate_input
函数用于验证评委输入的分数是否在0-10之间。 - 主函数:主函数中,首先输入选手的编号和姓名,然后循环输入10位评委的打分,并验证输入的有效性。最后调用
calculate_average
函数计算平均分并输出结果。
注意事项
- 输入的分数必须在0-10之间,否则会提示输入无效并要求重新输入。
- 计算平均分时,去掉一个最高分和一个最低分,然后计算剩余8个分数的平均值。
通过以上代码,可以实现歌手大赛评分系统的基本功能,确保评分的公平性和准确性。
你觉得结果怎么样?