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

如何修改现有C语言程序 使其输出输入自然数的最大值与次大值

实现方案

你可以在原有代码基础上增加次大值的存储和更新逻辑即可,以下是修改后的完整代码:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <limits.h> // 引入头文件使用INT_MIN标准常量

int main(void) {
    int i = 0, num, max_place = -1;
    int max = INT_MIN;
    int second_max = INT_MIN; // 新增次大值存储变量

    printf("Start enter numbers, bruh (please end input with 0):\n");

    scanf("%d", &num);
    while (num != 0) {
        if (num > max) {
            // 新数比最大值大,原最大值降级为次大值,更新最大值
            second_max = max;
            max = num;
            max_place = i;
        } else if (num > second_max && num < max) {
            // 新数介于次大值和最大值之间,仅更新次大值
            // 如果需要把和最大值相等的数也算作次大值,可以把上面的<max改成<=max
            second_max = num;
        }
        i++;
        scanf("%d", &num);
    }

    if (max_place == -1) {
        printf("Numbers were not entered");
    } else {
        printf("\nMax number was on %d place, value: %d, bruh", max_place + 1, max);
        if (second_max == INT_MIN) {
            printf("\nNo valid second largest number (only 1 number entered)");
        } else {
            printf("\nSecond largest number value: %d", second_max);
        }
    }

    return 0;
}

关键逻辑说明

  • 数值更新规则:
    • 新输入值大于当前最大值时,原最大值自动变为次大值,新值作为新的最大值
    • 新输入值小于最大值但大于当前次大值时,直接更新次大值
    • 如果需求允许将和最大值相等的重复值算作次大值,只需要把else if判断里的num < max条件改为num <= max即可
  • 边界处理:
    • 仅输入1个有效自然数时,会提示不存在次大值
    • 用标准库的INT_MIN替代手写魔数,兼容性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:36:05