if for循环中的条件

时间:2011-08-15 08:56:45

标签: c

该程序输出1.我无法理解它是如何输出1的,因为for循环将在包含值12的a[2][3]处失败。因此12将被分配给k并且输出必须是12。

#include<stdio.h>

int main()
{
    int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
    int i,j,k=99;
    for(i=0;i<3;i++)
    {
        for(j=0;j<4;j++)
        {
            if(a[i][j]<k)
            {
                k=a[i][j];
                printf("%d\n",k);
            }
        }
    }
    printf("Res:%d\n",k);
    return 0;
}

3 个答案:

答案 0 :(得分:2)

第一次通过循环时,if被评估为[0] [0]&lt; k为1&lt; 99这是真的。 如果if是[1] [0]&lt; 1,那么第二次通过he循环。 k为2&lt; 1,其评估为假,因此不更新k的值 k永远不会重新分配另一个值,因此最后k = 1。

答案 1 :(得分:1)

在此行中,您正在更改K值

  

K = A [i] [j];

你运行的第一个itteration会将k改为1,这就是第二次迭代失败的原因。在每次尝试时,如果声明工作,你的k将比一个单位少一个单位

答案 2 :(得分:1)

一些意见:

调用变量k不会告诉我们您使用它的内容。如果你称之为arrayMin那么它对我们来说会更清楚。使用ij进行循环索引很好,这是预期的。

分配k=99会对数组的内容做出假设,从而产生脆弱的代码。最好不要做出假设并从分配arrayMin = a[0][0]

开始

您的程序既小又简单,您可以在纸上自行完成。这样做可以帮助你了解发生了什么。使用调试器单步执行它也会有所帮助。