c语言学校进行歌唱比赛。每位选手演唱完毕后,由十位评委打分(分数为整数,满分100分)。 评分规则是,去掉一个最高分,去掉一个最低分,计算其他八位评委的平均分。 输入格式: 在一行中,输入十位评委给出的分数
时间: 2024-01-18 16:03:47 浏览: 47
好的,我可以回答你的问题。对于这个问题,我可以提供以下代码实现:
```c
#include <stdio.h>
int main() {
int scores[10];
int sum = 0;
int max = 0, min = 100;
// 读取评委打分
for (int i = 0; i < 10; i++) {
scanf("%d", &scores[i]);
sum += scores[i];
if (scores[i] > max) {
max = scores[i];
}
if (scores[i] < min) {
min = scores[i];
}
}
// 去掉一个最高分和一个最低分
sum = sum - max - min;
// 计算平均分
int avg = sum / 8;
printf("平均分为: %d分\n", avg);
return 0;
}
```
这个程序首先读取十位评委打分,然后找出最高分和最低分,去掉它们,计算剩下八个评委的平均分,并输出结果。注意,在这个程序中,我们假设输入的分数都是合法的整数,并且不进行任何错误处理。
相关问题
c语言学校进行歌唱比赛。每位选手演唱完毕后,由十位评委打分(分数为整数,满分100分)。 评分规则是,去掉一个最高分,去掉一个最低分,计算其他八位评委的平均分。 输入格式: 在一行中,输入十位评委给出的分数,空格隔开。 输出格式: 去掉一个最高分,去掉一个最低分,计算其他八位评委的平均分。结果保留一位小数。
以下是本题的 C 代码实现:
```c
#include <stdio.h>
int main() {
int scores[10], i, max, min;
double sum = 0.0;
// 输入评委给出的分数
for (i = 0; i < 10; i++) {
scanf("%d", &scores[i]);
}
// 找出最高分和最低分
max = min = scores[0];
for (i = 1; i < 10; i++) {
if (scores[i] > max) {
max = scores[i];
}
if (scores[i] < min) {
min = scores[i];
}
}
// 去掉一个最高分和一个最低分
for (i = 0; i < 10; i++) {
if (scores[i] != max && scores[i] != min) {
sum += scores[i];
}
}
// 计算其他八位评委的平均分
printf("%.1f", sum / 8.0);
return 0;
}
```
解释一下代码的思路:
首先,我们定义一个整型数组 `scores` 存储评委给出的分数,以及一个变量 `i` 作为循环计数器,以及一个变量 `max` 和 `min` 分别表示最高分和最低分,以及一个双精度浮点数变量 `sum` 作为分数的总和。
接下来,我们使用 `for` 循环输入评委给出的分数,使用 `scanf()` 函数读入整数。
然后,我们使用 `for` 循环找出最高分和最低分,可以使用 `if` 语句和比较运算符实现。
接下来,我们使用 `for` 循环遍历分数数组,去掉一个最高分和一个最低分,计算其他八位评委的分数总和。
最后,我们计算其他八位评委的平均分,即将分数总和除以8,并使用 `printf()` 函数输出结果,保留一位小数(使用字符串格式化语法 `%.1f`)。
C语言习题:唱歌比赛有n名选手,m名评委。 编程实现: (1)评分标准为:去掉两个最高分和两个最低分后取平均分。 (2)每位选手演唱完毕后,现场显示每位评委的打分, 和选手的最后得分。 (3)比赛结束后,从高分到低分,显示所有选手的成绩
以下是一份 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;
}
```
你可以在本地编译并运行它,根据提示输入选手人数和评委人数,以及每位选手的分数,程序就会输出每位评委的打分和选手的最终得分,以及比赛结束后所有选手的成绩排名。