C语言在校园歌手大赛中,有10个评委为选手打分,分数为0-100,选手最后的 得分方法为:去掉一个最高分和一个最低分后其余8个评委打分的平均分。
时间: 2024-05-05 18:20:39 浏览: 328
那么,这道题目需要编写一个C语言程序来实现上述得分计算方法。首先,我们需要定义一个数组来存储10个评委所打的分数,然后对数组进行排序,去掉最高分和最低分,剩余8个分数求平均即可。
以下是实现上述方法的C语言代码:
```
#include <stdio.h>
#include <stdlib.h>
// 定义一个比较函数,用于排序
int cmp(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}
int main() {
int scores[10]; // 存储10个评委的分数
int sum = 0; // 存储除去最高分和最低分后的总分数
// 输入10个评委的分数
printf("请输入10个评委的分数:\n");
for (int i = 0; i < 10; i++) {
scanf("%d", &scores[i]);
}
// 对分数进行排序
qsort(scores, 10, sizeof(int), cmp);
// 去掉最高分和最低分
for (int i = 1; i < 9; i++) {
sum += scores[i];
}
// 输出最终得分
printf("选手的得分为:%d\n", sum / 8);
return 0;
}
```
相关问题
使用c语言,校园歌手大赛共有10位评委对每一位参赛选手进行评分,评分规则是:从10位评委的评分中,除去一个最高分和一个最低分,剩余的分数取平均值,作为选手最后的得分。请编写一个程序,输入某选手的10个分数(也可以生成随机数代替输入,分值在[80,100]之间),输出其最后的得分(结果保留两位小数)
好的,这是一个用 C 语言编写的程序,实现对选手得分的处理:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
int main() {
int scores[N];
int i, j, temp;
float sum = 0;
float final_score;
// 生成随机分数
srand((unsigned)time(NULL));
for (i = 0; i < N; i++) {
scores[i] = rand() % 21 + 80;
}
// 排序并计算得分
for (i = 0; i < N - 1; i++) {
for (j = i + 1; j < N; j++) {
if (scores[i] > scores[j]) {
temp = scores[i];
scores[i] = scores[j];
scores[j] = temp;
}
}
}
for (i = 1; i < N - 1; i++) {
sum += scores[i];
}
final_score = sum / 8;
// 输出结果
printf("选手的分数为:");
for (i = 0; i < N; i++) {
printf("%d ", scores[i]);
}
printf("\n");
printf("选手的最终得分为:%.2f\n", final_score);
return 0;
}
```
该程序首先定义了一个常量 `N`,表示评委的数量。然后使用 `srand` 和 `rand` 函数生成 10 个随机分数,范围在 80 到 100 之间。接着,使用冒泡排序算法将分数从小到大排序,然后计算去掉最高分和最低分后的 8 个分数的平均值,作为最终得分。最后,输出选手的分数和最终得分。
注意到,由于 C 语言没有内置的保留小数位数的函数,所以需要使用 `%f` 输出浮点数,并结合格式控制符 `"%.2f"` 来保留两位小数。
8号选手参加校园歌手大赛,编程读入20个整数(0-100之间)并存入数组中做为评委打分。最后得分计算规则:先计算20个数的平均分,然后去掉所有与平均分相差10分以上的分数,最后把剩下的分数再取平均做为最后得分。如果没有剩下分数,此次打分无效。C语言
在C语言中,你可以按照以下步骤实现这个功能:
1. 首先,你需要定义一个数组来存储输入的20个整数,并使用`scanf()`函数从用户那里读取数据。
```c
#include <stdio.h>
#define MAX_SCORES 20
int scores[MAX_SCORES];
```
2. 使用`scanf()`读取并存储20个整数。
```c
for (int i = 0; i < MAX_SCORES; i++) {
printf("请输入第%d个评委的评分:", i + 1);
scanf("%d", &scores[i]);
}
```
3. 计算平均分。这里可以遍历一次数组求和,然后除以数组长度。
```c
double average;
int sum = 0;
for (int i = 0; i < MAX_SCORES; i++) {
sum += scores[i];
}
average = (double)sum / MAX_SCORES;
```
4. 找出与平均分相差大于10分的分数,并计数。
```c
int num_valid_scores = 0;
for (int i = 0; i < MAX_SCORES; i++) {
if (abs(scores[i] - average) <= 10) {
num_valid_scores++;
}
}
```
5. 如果有有效分数,计算剩余分数的平均值;否则打印提示信息表示打分无效。
```c
if (num_valid_scores > 0) {
double valid_sum = 0;
for (int i = 0; i < MAX_SCORES && num_valid_scores > 0; i++) {
if (abs(scores[i] - average) <= 10) {
valid_sum += scores[i];
num_valid_scores--;
}
}
if (num_valid_scores == 0) {
printf("最终得分为:%.2f\n", valid_sum / num_valid_scores);
} else {
printf("由于存在与平均分相差超过10分的分数,无法计算有效得分。\n");
}
} else {
printf("所有分数均与平均分相差超过10分,打分无效。\n");
}
```
阅读全文
相关推荐








