首页 > 解决方案 > C中最小正数二维数组中的嵌套if循环

问题描述

我有这个奇怪的问题,当我运行以下代码片段时,它给了我错误的答案。我试图从二维数组中找到最小的正数。

我尝试将两个 if 条件合二为一,放置括号,交换 if 条件。但是,当我调试时,我看到,如果大于 0 条件,控制永远不会进入内部。

float smallest(float b[3][4]);
int main()
{
    float a[3][4],result;
    int i, j;
    printf("\nEnter 12 numbers into the array:\n");
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 4; j++)
        {
            scanf("%f", &a[i][j]);
        }
        printf("\n");
    }


    result=smallest(a);
    printf("\nSamllest positive number is %.1f", result);
    system("pause");
    return 0;
}
float smallest(float b[3][4])
{
    int i, j;
    float min = b[0][0];
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 4; j++)
        {
            if (b[i][j]<min)
                if (b[i][j]>0)
                    min = b[i][j];
        }
    }
    return min;
}

在数组中输入 12 个数字:-5 4 9 7

6 2 3 1

-7 5 4 7

最小的正数是 -5.0

标签: carrays

解决方案


这是因为您在示例中设置minb[0][0]which is -5,因此唯一if (b[i][j]<min)为 true 的数字是-7. 但你的第二个如果只有当数字大于时才为真0。对于 ,这是错误的-7,因此min = b[i][j];此代码永远不会执行。

初始化minFLT_MAX应该没问题。(尽管如果数组只包含负数,这可能会出现问题。)


推荐阅读