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

使用三元运算符(无循环)在C语言中找最大负数、最小正数的问题排查

问题原因与修复方案

你的代码在获取最大负数时出错,核心问题是初始值设置不合理:
当输入的第一个数是正数(比如示例中的1),max会被初始化为0。但所有负数都小于0,后续判断b < 0 && b > max时,b > max(比如-2>0)永远不成立,导致max始终保持0,不会被任何负数更新。

同样的,如果输入第一个数是负数,mmin会被初始化为0,后续正数都大于0,b < mmin也永远不成立,mmin会一直是0,这也是潜在的bug。


修复方案

给max和mmin设置合理的初始值:

  • 找最大负数时,初始值设为最小整数INT_MIN,这样任何负数都比它大,只要遇到负数就能更新;如果第一个数是负数,直接用它初始化。
  • 找最小正数时,初始值设为最大整数INT_MAX,这样任何正数都比它小,只要遇到正数就能更新;如果第一个数是正数,直接用它初始化。

需要引入头文件<limits.h>来使用INT_MIN和INT_MAX,修复后的代码如下:

#include <stdio.h>
#include <limits.h>

int main() {
    int a, b, c, d, e, f;
    scanf("%d %d %d %d %d %d", &a, &b, &c, &d, &e, &f);

    int max = (a < 0 ? a : INT_MIN);
    int mmin = (a > 0 ? a : INT_MAX);
    
    max = (b < 0 && b > max ? b : max);
    max = (c < 0 && c > max ? c : max);
    max = (d < 0 && d > max ? d : max);
    max = (e < 0 && e > max ? e : max);
    max = (f < 0 && f > max ? f : max);
    
    mmin = (b > 0 && b < mmin ? b : mmin);
    mmin = (c > 0 && c < mmin ? c : mmin);
    mmin = (d > 0 && d < mmin ? d : mmin);
    mmin = (e > 0 && e < mmin ? e : mmin);
    mmin = (f > 0 && f < mmin ? f : mmin);
    
    printf("The max negative number is: %d\n", max);
    printf("The min positive number is: %d\n", mmin);
}

测试输入1 -2 3 -4 5 -6时,max初始为INT_MIN,处理b=-2时,-2 > INT_MIN成立,max更新为-2;后续的-4、-6都比-2小,不会改变max,最终输出最大负数为-2,最小正数为1,符合预期。

内容的提问来源于stack exchange,提问作者Minh Công Nguyễn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:12:41