n个评委评分,m个选手参赛,计算并输出参赛选手的最后得分。计算方法为去 除一个最高分和一个最低分,其余的进行平均,得出参赛选手的最后得分。按从大到小的顺序输出参赛选手的最后得分。用c语言解答
时间: 2024-12-23 12:22:43 浏览: 10
Java歌手比赛评委打分-按照设计好的流水线去掉一个最高分和一个最低分计算出平均成绩.docx
在 C 语言中,你可以使用数组来存储评委的评分,然后通过遍历数组,对每个选手的分数进行处理。以下是一个简单的步骤描述以及伪代码:
1. 定义两个数组,`scores[]` 存储所有选手的原始分数,`finalScores[]` 用于存放处理后的最终得分。
2. 初始化这两个数组,比如 `scores[0]` 到 `scores[m-1]` 分别对应 m 个选手的初始分数。
3. 对于每个选手(即数组索引 i 从 0 到 m-1),执行以下操作:
a. 找出当前选手的最高分和最低分,可以分别用两个变量 `maxScore` 和 `minScore` 记录,初始化为数组第一个元素。
b. 遍历评委评分数组 `scores[i]`,更新 `maxScore` 和 `minScore`。
c. 删除最高分和最低分,将剩余评委的平均分赋值给 `finalScores[i]`。平均分 = (总分数 - 最高分 - 最低分) / (评委数 - 2)。
4. 使用 `qsort()` 函数对 `finalScores` 数组进行降序排序,这样最后结果就是按照分数从大到小排列的了。
5. 输出 `finalScores` 中的值,注意使用循环遍历数组,并显示对应的选手编号。
以下是简化的伪代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void removeExtremes(int scores[], int finalScores[], int n, int m);
void sortScores(int scores[], int finalScores[], int m);
int main() {
// 初始化分数数据
int scores[m], finalScores[m];
// ... (填充选手分数)
// 去除极端分数并计算平均分
removeExtremes(scores, finalScores, n, m);
// 排序并输出
sortScores(scores, finalScores, m);
for (int i = 0; i < m; ++i) {
printf("选手 %d 的最终得分为 %.2f\n", i+1, finalScores[i]);
}
return 0;
}
// 函数原型
void removeExtremes(int scores[], int finalScores[], int n, int m) {
// ... (去除最高分和最低分)
}
// 函数原型
void sortScores(int scores[], int finalScores[], int m) {
// ... (降序排序)
}
```
请注意,这只是一个基本的框架,实际编写时需要处理边界条件、错误检查等细节。上述函数的实现(如去除极端分数和排序)你需要自己实现。
阅读全文