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

为何我编写的求数组最小值程序始终输出0?

问题分析与修复方案

你的程序始终输出0的核心原因是read函数将用于终止输入的0也存入了数组,并且把这个0包含在了返回的有效元素个数n中。当minim函数遍历数组时,这个0会被当作正常元素参与比较,最终导致结果为0。

举个例子:若你输入5 3 2 0,read函数会把0存入arr[3],返回的n=4。minim函数会遍历arr[0]到arr[3],其中arr[3]是0,自然会被判定为最小值。

修复方案

方案1:调整读入逻辑,仅存储非0有效元素

修改read函数,先读取数值,判断非0后再存入数组,避免终止符进入数组:

int read(int v[], int size)
{
    int i = 0;
    int num;
    do
    {
        scanf("%i", &num);
        if (num != 0 && i < size) {
            v[i] = num;
            i++;
        }
    } while (num != 0 && i < size);
    return i;
}

方案2:保留原读入逻辑,剔除终止用的0

如果要保留原有的读入流程,可在返回n前检查最后一个元素是否为0,若是则将n减1:

int read(int v[], int size)
{
    int i = 0;
    do
    {
        scanf("%i", &v[i]);
        i++;
    } while (v[i-1] != 0 && i < size);
    int n = i;
    // 若最后一个元素是终止用的0,且数组有元素,就去掉这个0的计数
    if (n > 0 && v[n-1] == 0) {
        n--;
    }
    return n;
}

额外边界处理

如果用户一开始就输入0,此时数组无有效元素,minim函数访问v[0]会触发未定义行为,建议在main函数中增加判断:

int main()
{
    int arr[100];
    int n = read(arr, 100);
      
    if (n == 0) {
        printf("\n数组中没有有效元素\n");
        return 0;
    }
    int min = minim(arr, n);
    printf("\n数组的最小值是 %i\n", min);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:25:47