循环内部的条件和循环块内部的相同条件。 为什么这两个给出不同的输出?
for (i=0;i <5;i++)
{
printf("\n");
for (j=0;j <5;j++)
if (i!=j)
printf (" i= %d j= %d ",i,j);
}
for (i=0;i <5;i++)
{
printf("\n");
for (j=0;j <5 &&i!=j;j++)
printf (" i= %d j= %d ",i,j);
}
`
答案 0 :(得分:0)
第一个示例中的内部循环在每次迭代时检查i != j
,但仍然在0,...,4范围内迭代j
的所有值。
然而,第二个示例中的内部循环会在其条件
时立即停止执行j < 5 && i != j
是假的。这个内部循环并不总是执行5次迭代:如果i != j
的值为j
小于5
,则循环退出。
答案 1 :(得分:0)
它们产生不同的输出,因为内部循环绝不等同。
测试i != j
不影响第一种形式的内循环迭代次数 - 迭代次数始终为5
,if (i != j) ...
将在每次循环迭代。
但是,在第二批代码中,i != j
现在是循环条件的一部分,因此循环将在五次迭代后或第一次发现i != j
为假时终止(即if { {1}})。
如果i == j
为零,请考虑两批代码中发生的情况。
在第一批代码中,内部循环总是迭代五次,并为i
的所有值生成输出。对于等于零的j != i
,这意味着会生成四行输出(i
,每个值j
,1
,2
,{{1但不适用于3
)。
在第二批代码中,4
等于零,0
在i
(零)的第一个值上将为false,因此内部循环体将永远不会被执行 - 并且不会为i != j
的后续值执行循环体。不会产生任何输出。