C for循环中的if条件
该程序输出1。我无法理解它是如何输出1的,因为for循环将在包含值12的C for循环中的if条件,c,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[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;
}
#包括
int main()
{
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int i,j,k=99;
对于(i=0;i在这一行中,您正在更改K值
k=a[i][j]
您运行的第一次迭代将k更改为1,这就是第二次迭代失败的原因。在每次迭代中,您的k将比if语句正常工作时的k值少一个单位
k=a[i][j]
您运行的第一次迭代将k更改为1,这就是第二次迭代失败的原因。在每次迭代中,您的k将比if语句第一次通过循环时的应值少一个单位,if将被评估为[0][0] k永远不会被重新分配另一个值,因此在k=1结束时。第一次通过循环时,if被评估为[0][0]一些注释:
调用变量k
并不能告诉我们您使用它的目的。如果您调用它arrayMin
,我们会更清楚。使用i
和j
作为循环索引是可以的,这是意料之中的
分配k=99
会对数组的内容进行假设,因此会产生脆弱的代码。最好不要进行假设,从分配arrayMin=a[0][0]
您的程序很小,很简单,您可以在纸上自己运行。这样做可以帮助您了解发生了什么。使用调试器单步执行也会有所帮助。一些评论:
调用变量k
并不能告诉我们您使用它的目的。如果您调用它arrayMin
,我们会更清楚。使用i
和j
作为循环索引是可以的,这是意料之中的
分配k=99
会对数组的内容进行假设,因此会产生脆弱的代码。最好不要进行假设,从分配arrayMin=a[0][0]
你的程序很小,很简单,你可以自己在纸上运行。这样做可以帮助你看到发生了什么。使用调试器单步执行也会有帮助。a[i][j]i==0,j==0等于1,1小于99,因此它输出1@Beata:您是否曾尝试在调试器中运行您的程序?@yi_H:抱歉,我没有尝试在调试器中运行。我使用的是visual studio。这是一个典型的函数,用于查找最小值,因此1是正确的。若要查找最大值,请将k
指定给a[i][j]>k
并以k=MIN_INT;
或类似的开头。a[i][j]i==0,j==0等于1,1小于99,因此它输出1@Beata:您是否曾尝试在调试器中运行您的程序?@yi_H:抱歉,我没有尝试在调试器中运行。我使用的是visual studio。这是一个典型的函数,用于查找最小值,因此1是正确的。若要查找最大值,请将k
指定给a[i][j]>k
并以k=MIN_INT;
或类似的开头。抱歉..以后我将尝试在纸上解决简单的示例。抱歉..以后我将尝试在纸上解决简单的示例。