c语言编程实现选手得分题。定义N个评委给M个选手打分的二维整型数组a[N][M],其分数均从键盘读入。每个选手的计分方法是:去掉一个最高分,去掉一个最低分,其余分数的平均作为参赛选手的最后得分。输出每个选手的最后得分,按大到小的顺序排序输出。
时间: 2024-12-12 15:32:28 浏览: 46
计算机二级c语言资料-计算机二级c语言编程练习题之求除一个2×m整型二维数组中最大元素的值.zip
在 C 语言中,你可以通过以下几个步骤实现选手得分题:
1. 首先,你需要定义一个二维整数数组 `a` 来存储评委对每个选手的评分。由于数组大小未知,可以使用动态内存分配(如 `malloc` 或者 `calloc`)来初始化。
```c
int *a, N, M;
scanf("%d %d", &N, &M); // 读取评委数量和选手数量
a = (int*) malloc(N * M * sizeof(int)); // 动态分配内存
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
scanf("%d", &a[i*M + j]); // 逐行输入评委评分
}
}
```
2. 排序得分:接下来需要计算每个选手的最终得分,并将结果放入另一个数组 `scores` 中。为了得到最大和最小值并删除它们,可以使用两个指针法。然后,对于剩余的评分,求平均值并存储。
```c
int scores[M];
for (int i = 0; i < M; i++) {
int maxIndex = i, minIndex = i;
for (int j = i+1; j < N*M - M + 1; j++) { // 避免越界
if (a[j] > a[maxIndex]) {
maxIndex = j;
} else if (a[j] < a[minIndex]) {
minIndex = j;
}
}
int sum = 0, count = N - 2; // 去掉最高和最低,保留N-2个分数
for (int k = 0; k < N*M && k != maxIndex && k != minIndex; k++) {
sum += a[k];
count++;
}
scores[i] = sum / count;
}
// 对scores数组进行降序排列
qsort(scores, M, sizeof(int), compare); // 使用快速排序或其他排序函数
```
3. 输出结果:最后,遍历已排序的 `scores` 数组并输出每个选手的得分。
```c
void compare(const void* a, const void* b) {
return *(int*)b - *(int*)a;
}
for (int i = 0; i < M; i++) {
printf("选手%d 的最终得分为: %d\n", i+1, scores[i]);
}
```
阅读全文