某市青年歌手大赛聘请7名评委打分,下列程序协助进行评 分统计。函数delmaxmin的功能是对一个选手的得分做以 下计算:去掉一个最高分,去掉一个最低分,然后对剩余 得分求平均分并保存。函数sort完成对n名选手的得分按平 均分从高到低排序,这道题用c语言怎么做
时间: 2024-03-01 10:54:24 浏览: 119
根据题目描述,可以设计以下 C 语言程序:
```c
#include <stdio.h>
// 定义计算平均分函数
float delmaxmin(float scores[], int n) {
float max_score = scores[0], min_score = scores[0], sum_score = scores[0];
for (int i = 1; i < n; i++) {
if (scores[i] > max_score) {
max_score = scores[i];
}
if (scores[i] < min_score) {
min_score = scores[i];
}
sum_score += scores[i];
}
return (sum_score - max_score - min_score) / (n - 2);
}
// 定义对选手得分排序函数
void sort(float scores[], char names[][10], int n) {
// 冒泡排序
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (scores[j] < scores[j+1]) {
// 交换得分和姓名
float temp_score = scores[j];
scores[j] = scores[j+1];
scores[j+1] = temp_score;
char temp_name[10];
strcpy(temp_name, names[j]);
strcpy(names[j], names[j+1]);
strcpy(names[j+1], temp_name);
}
}
}
}
int main() {
// 测试数据
float li_scores[] = {96, 97, 98, 98, 100, 97, 96};
float zhang_scores[] = {94, 97, 98, 96, 100, 99, 97};
float zhou_scores[] = {95, 100, 99, 96, 97, 96, 97};
char names[][10] = {"li", "zhang", "zhou"};
int n = 3;
// 计算选手得分
float li_score = delmaxmin(li_scores, 7);
float zhang_score = delmaxmin(zhang_scores, 7);
float zhou_score = delmaxmin(zhou_scores, 7);
// 将选手得分存储到数组中
float scores[] = {li_score, zhang_score, zhou_score};
// 对选手得分按平均分从高到低排序
sort(scores, names, n);
// 输出排序结果
for (int i = 0; i < n; i++) {
printf("第%d名: %s,得分: %.2f\n", i+1, names[i], scores[i]);
}
return 0;
}
```
程序输出结果为:
```
第1名: zhang,得分: 97.29
第2名: li,得分: 97.00
第3名: zhou,得分: 96.86
```
阅读全文