我们用c语言实现计算多名选手中平均分最高的并打印最高的平均分
下面是具体的代码。
#include <stdio.h>
#include<string.h>
int main(void) {
int a, b, c = 0, d, f = 0, z = 0, x = 0, n = 0;
float e = 0;
float arr[100][20] = { 0 };
float g[100] = { 0 };
printf("请输入同学人数");
scanf("%d", &a);
printf("请输入评委人数");
scanf("%d", &b);
printf("请输入选手得分");
for (int i = 0; i < a; i++) {
for (int o = 0; o < b; o++) {
scanf("%f", &arr[i][o]);
}
}
第一部分我们创建一个二维数组和一个一维数组,二维数组用来存储选手的每个选手的分数,一维数组用来存储选手的平均分。
我们先输入同学的人数,评委的人数和选手的得分。
在这里我们选择用一个双循环来进行输入。
for (int k = 0; k < a; k++) {
for (int i = 0; i < b; i++) {
for (int o = 0; o < b; o++) {
if (arr[k][i] > arr[k][o]) {
c += 1;
}
if (arr[k][i] >= arr[k][o]) {
n += 1;
}
}
if (n == b && z == 0) {
arr[k][i] = 0;
z += 1;
}
if (c == 0 && x == 0) {
arr[k][i] = 0;
x += 1;
}
c = 0;
n = 0;
}
z = 0;
第二部分我们用来去除每位选手的最高分和最低分(将其数值变为0)。
在这里我们使用了三层循环,第一层是是用来变化选手的,比如从选手1变成选手2。
我们这里进行比较的思路是先固定数组的一个元素(可能用固定这个词表述不当),然后让这个固定的元素与数组内的其它元素进行比较,比如arr[k][0]会与arr[k][1],[k][2]等等元素进行比较(当然还包括它本身)。有关c变量的那个 if 语句是用来寻找最小值的,有关n变量的 if 语句是用来寻找最大值的。
因此第二层循环是用来固定数组的一个元素,第三层循环用来去除最值的。
这里使用z,x是避免重复去除,比如一个数组里有两个相同的最大值,为了避免重复去除,我们才引用z,x变量。
for (int i = 0; i < a; i++) {
for (int k = 0; k < b; k++) {
e += arr[i][k];
}
g[i] = e / (b - 2);
e = 0;
}
第三部分我们来计算每个数组里的平均值
因为我们去除了最高分和最低分,所以我们在计算平均值的时候要减去2。
最后让之前定义的一维数组储存我们的平均值
for (int i = 0; i < a; i++) {
for (int k = 0; k < a; k++) {
if (g[i] >= g[k]) {
f += 1;
}
}
if (f == (a)) {
printf("%f", g[i]);
break;
}
f = 0;
}
return 0;
最后一个部分就是来比较平均值的大小并且输出最高的那个平均值。
至此,代码分析完毕。
(新手写作,如有解释不清楚,请谅解,也请各位大佬指出哪里的解释有问题)