该程序输出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;
}
答案 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
那么它对我们来说会更清楚。使用i
和j
进行循环索引很好,这是预期的。
分配k=99
会对数组的内容做出假设,从而产生脆弱的代码。最好不要做出假设并从分配arrayMin = a[0][0]
您的程序既小又简单,您可以在纸上自行完成。这样做可以帮助你了解发生了什么。使用调试器单步执行它也会有所帮助。