c语言实现打分系统(包括去掉最高分和最低分,附解析)

我们用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;

最后一个部分就是来比较平均值的大小并且输出最高的那个平均值。

至此,代码分析完毕。

(新手写作,如有解释不清楚,请谅解,也请各位大佬指出哪里的解释有问题)

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言去掉最高分最低,可以通过以下步骤实现: 1. 首先,定义一个包含所有学生成绩的数组,并为数组中的每个元素赋值。 2. 创建一个变量,用于存储最高分最低的索引。 3. 使用循环遍历数组,比较每个元素与当前最高分最低的值。 4. 如果找到更高的数,更新最高分的索引。 5. 如果找到更低的数,更新最低的索引。 6. 循环结束后,可以根据最高分最低的索引删除对应的数组元素。 7. 最后,再次遍历数组,计算剩余数的总和和平均值。 下面是一个示例代码: ```c #include <stdio.h> #define MAX_SIZE 100 int main() { int scores[MAX_SIZE]; int num_scores; int max_index, min_index; int total_score = 0, average_score; // 输入学生成绩数量 printf("请输入学生成绩的数量:"); scanf("%d", &num_scores); // 输入学生成绩 printf("请输入学生成绩:\n"); for (int i = 0; i < num_scores; i++) { scanf("%d", &scores[i]); } // 初始化最高分最低的索引为第一个元素 max_index = min_index = 0; // 找到最高分最低的索引 for (int i = 1; i < num_scores; i++) { if (scores[i] > scores[max_index]) { max_index = i; } if (scores[i] < scores[min_index]) { min_index = i; } } // 删除最高分最低的元素(将其值设为0或其他特殊值) scores[max_index] = scores[min_index] = 0; // 计算剩余数的总和 for (int i = 0; i < num_scores; i++) { total_score += scores[i]; } // 计算平均 average_score = total_score / (num_scores - 2); // 输出结果 printf("去掉最高分最低后的剩余数总和为:%d\n", total_score); printf("去掉最高分最低后的剩余数平均值为:%d\n", average_score); return 0; } ``` 这段代码可以接收输入的学生成绩,去掉最高分最低,然后计算剩余数的总和和平均值,并将结果输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值