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

函数无法返回值问题(已解决):获取三个数的最大最小值

三个数求最大最小值函数返回0的问题解决

你的代码能正常编译但输出0,核心是两个错误:

1. 赋值方向完全搞反

在largest和smallest函数中,你写的是first = number这类语句——number是未初始化的局部变量,默认值随机(这里刚好是0),你把这个无效值赋值给了参数,完全搞反了赋值逻辑。正确的应该是把判断出的最大/最小值赋值给number,也就是number = first这种形式。

2. 逻辑判断漏洞百出

以largest函数为例,你的条件first>second && second>third只覆盖了first > second > third这一种严格递减的情况,但像first > third > second、second > first > third这类情况完全没覆盖到,会导致错误进入else分支返回错误值。smallest函数的逻辑问题同理。

修正后的代码

#include <stdio.h>

int smallest(int first, int second, int third);
int largest(int first, int second, int third);

int main()
{
    int first_number, second_number, third_number, largest_number, smallest_number;
    
    printf("Enter the 1. number:");
    scanf("%d", &first_number);
    printf("Enter the 2. number:");
    scanf("%d", &second_number);
    printf("Enter the 3. number:");
    scanf("%d", &third_number);
    
    largest_number = largest(first_number, second_number, third_number);
    smallest_number = smallest(first_number, second_number, third_number);
    
    printf("Among the numbers you entered,\nthe largest was %d and the smallest was %d.", largest_number, smallest_number);
    
    return 0;
}

int largest(int first, int second, int third)
{
    int number = first; // 先假设第一个数是最大值
    if (second > number) {
        number = second; // 如果第二个数更大,更新最大值
    }
    if (third > number) {
        number = third; // 如果第三个数更大,更新最大值
    }
    return number;
}

int smallest(int first, int second, int third)
{
    int number = first; // 先假设第一个数是最小值
    if (second < number) {
        number = second; // 如果第二个数更小,更新最小值
    }
    if (third < number) {
        number = third; // 如果第三个数更小,更新最小值
    }
    return number;
}

这种写法逻辑简洁,能覆盖所有数值组合的情况,同时修正了赋值方向的问题,运行后就能得到正确的最大、最小值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:25:20