C语言习题:唱歌比赛有n名选手,m名评委。 编程实现: (1)评分标准为:去掉两个最高分和两个最低分后取平均分。 (2)每位选手演唱完毕后,现场显示每位评委的打分, 和选手的最后得分。 (3)比赛结束后,从高分到低分,显示所有选手的成绩
时间: 2023-06-19 13:09:36 浏览: 139
(完整版)C语言编程练习题绝对经典!.doc
以下是一份 C 语言代码,实现了这个唱歌比赛的评分和排名功能:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100
#define MAX_M 10
int n, m;
int scores[MAX_N][MAX_M]; // 所有选手的分数
double averages[MAX_N]; // 所有选手的平均分
// 从大到小排序所有选手的成绩
void sort_scores() {
int i, j;
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
if (averages[i] < averages[j]) {
// 交换两个选手的成绩
double temp = averages[i];
averages[i] = averages[j];
averages[j] = temp;
int k;
for (k = 0; k < m; k++) {
int temp_score = scores[i][k];
scores[i][k] = scores[j][k];
scores[j][k] = temp_score;
}
}
}
}
}
// 计算一个选手的平均分
double calc_average(int player) {
int i, j;
int min1 = 101, min2 = 101, max1 = -1, max2 = -1; // 最高分和最低分
double sum = 0.0;
for (i = 0; i < m; i++) {
int score = scores[player][i];
printf("评委%d的分数:%d\n", i + 1, score);
sum += score;
if (score < min1) {
min2 = min1;
min1 = score;
} else if (score < min2) {
min2 = score;
}
if (score > max1) {
max2 = max1;
max1 = score;
} else if (score > max2) {
max2 = score;
}
}
double avg = (sum - min1 - min2 - max1 - max2) / (m - 4);
printf("选手%d的最终得分为:%.2f\n", player + 1, avg);
return avg;
}
int main() {
printf("请输入选手人数和评委人数:");
scanf("%d %d", &n, &m);
int i, j;
for (i = 0; i < n; i++) {
printf("选手%d的成绩:\n", i + 1);
for (j = 0; j < m; j++) {
scanf("%d", &scores[i][j]);
}
averages[i] = calc_average(i);
}
printf("比赛结束,所有选手的成绩为:\n");
sort_scores();
for (i = 0; i < n; i++) {
printf("第%d名:选手%d,成绩为%.2f分\n", i + 1, i + 1, averages[i]);
}
return 0;
}
```
你可以在本地编译并运行它,根据提示输入选手人数和评委人数,以及每位选手的分数,程序就会输出每位评委的打分和选手的最终得分,以及比赛结束后所有选手的成绩排名。
阅读全文