c语言习题:唱歌比赛有n名选手,m名评委。 编程实现: (1)评分标准为:去掉两个最高分和两个最低分后取平均分。 (2)每位选手演唱完毕后,现场显示每位评委的打分, 和选手的最后得分。 (3)比赛结束后,从高分到低分,显示所
时间: 2024-05-15 21:12:25 浏览: 8
有选手的名次和得分。
以下是一份C语言实现代码:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_JUDGE 20 // 最多评委数量
#define MAX_PLAYER 100 // 最多选手数量
int main() {
int n, m; // n为选手数量,m为评委数量
int i, j, k; // 循环计数器
int scores[MAX_PLAYER][MAX_JUDGE]; // 所有选手的得分矩阵
int rank[MAX_PLAYER]; // 存储每个选手的排名
float average[MAX_PLAYER]; // 存储每个选手的平均得分
// 输入选手数量和评委数量
printf("请输入选手数量和评委数量:");
scanf("%d%d", &n, &m);
// 输入每个选手的得分
printf("请依次输入每个选手的得分:\n");
for (i = 0; i < n; i++) {
printf("选手%d的得分:\n", i + 1);
for (j = 0; j < m; j++) {
scanf("%d", &scores[i][j]);
}
}
// 计算每个选手的平均得分
for (i = 0; i < n; i++) {
// 先对每个选手的得分排序
for (j = 0; j < m - 1; j++) {
for (k = j + 1; k < m; k++) {
if (scores[i][j] > scores[i][k]) {
int temp = scores[i][j];
scores[i][j] = scores[i][k];
scores[i][k] = temp;
}
}
}
// 去掉两个最高分和两个最低分
float sum = 0.0;
for (j = 2; j < m - 2; j++) {
sum += scores[i][j];
}
average[i] = sum / (m - 4);
}
// 输出每个选手的得分
printf("每个选手的得分如下:\n");
for (i = 0; i < n; i++) {
printf("选手%d的得分:", i + 1);
for (j = 0; j < m; j++) {
printf("%d ", scores[i][j]);
}
printf(",最终得分:%.2f\n", average[i]);
}
// 按得分从高到低排序
for (i = 0; i < n; i++) {
rank[i] = i;
}
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (average[i] < average[j]) {
int temp = rank[i];
rank[i] = rank[j];
rank[j] = temp;
}
}
}
// 输出排名
printf("比赛结束,排名如下:\n");
for (i = 0; i < n; i++) {
printf("第%d名:选手%d,得分:%.2f\n", i + 1, rank[i] + 1, average[rank[i]]);
}
return 0;
}
```
该程序首先要求输入选手数量和评委数量,然后依次输入每个选手的得分。接着计算每个选手的平均得分,并输出每个选手的得分和最终得分。最后按得分从高到低排序,输出排名。