You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求数组的三个最大值与两个最小值:C语言代码错误修正求助

修正C语言找数组最小/次小值及三个最大值的代码

原代码的核心错误

  • 遍历对象错误:随机生成的数值存在M数组,但你遍历的是未初始化的a数组,a内全是垃圾值,直接导致逻辑完全失效。
  • 变量未初始化:min和smin没有设置初始值,栈上未初始化变量的数值是随机垃圾值,无法正确参与比较。
  • 次小值赋值错误:else if分支里错误地将smin赋值为a[1],应该赋值为当前遍历的数组元素。
  • 逻辑冗余:a[i] != min的判断多余,若a[i]等于min,前面的a[i] < min不成立,且此时a[i]不可能小于smin(smin至少等于min)。

修正后的完整代码

#include <stdio.h>
#include <stdlib.h>
#include <time.h> // 用于初始化随机种子

#define N 9

int main() {
    int M[N], i;
    // 定义并初始化最值变量
    int first_max, second_max, third_max;
    int min, second_min;

    // 初始化随机种子,确保每次运行生成不同随机序列
    srand((unsigned int)time(NULL));

    // 生成-10到9的随机数组并打印
    for (i = 0; i < N; i++) {
        M[i] = rand() % 20 - 10;
        printf("%d\t", M[i]);
    }
    printf("\n");

    // 将最值变量初始化为数组第一个元素,确保从有效数据开始比较
    first_max = second_max = third_max = M[0];
    min = second_min = M[0];

    // 遍历数组查找三个最大值和两个最小值
    for (i = 1; i < N; i++) {
        // 处理最大值逻辑
        if (M[i] > first_max) {
            third_max = second_max;
            second_max = first_max;
            first_max = M[i];
        } else if (M[i] > second_max) {
            third_max = second_max;
            second_max = M[i];
        } else if (M[i] > third_max) {
            third_max = M[i];
        }

        // 处理最小值逻辑
        if (M[i] < min) {
            second_min = min;
            min = M[i];
        } else if (M[i] < second_min) {
            second_min = M[i];
        }
        // 若需要次小值严格大于最小值,可添加判断条件:&& M[i] != min
    }

    // 输出结果
    printf("\n三个最大值:%d, %d, %d\n", first_max, second_max, third_max);
    printf("两个最小值:%d, %d\n", min, second_min);

    return 0;
}

额外说明

  • 加入srand((unsigned int)time(NULL))初始化随机种子,避免每次运行生成完全相同的随机数组。
  • 同时实现了任务要求的三个最大值和两个最小值查找逻辑。
  • 关于最小值的重复处理:如果允许次小值等于最小值(数组存在多个相同最小值时),保留现有逻辑即可;如果需要次小值严格大于最小值,可在else if分支添加&& M[i] != min判断。

内容的提问来源于stack exchange,提问作者Bob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:55:31