我遇到了以下程序,我不理解输出。
有人可以对此有所了解吗?
#include <stdio.h>
int main()
{
int i=1,j=1;
for(;j;printf("%d %d\n",i,j))
j=i++ <=5;
return 0;
}
它的输出是:
2 1
3 1
4 1
5 1
6 1
7 0
答案 0 :(得分:4)
#include <stdio.h>
int main()
{
int i=1,j=1;
//for(initialisation; condition; operations)
// here no initialisation,
// 1. condition is j, if j is true
// 2. then it will execute block statements
// 3. then finally it execute operations, here printf
// 4. again check step 1.
for(;j;printf("%d %d\n",i,j))
j=i++ <=5; // j = (i <= 5); i++;
return 0;
}
您的问题可以简化如下
#include <stdio.h>
int main()
{
int i=1,j=1;
while(j) {
j = (i++ <=5);
printf("%d %d\n",i,j);
}
return 0;
}
答案 1 :(得分:2)
由于Ajay已经为原始代码提供了替代代码(为方便起见,我将其复制粘贴在下面)
#include <stdio.h>
int main()
{
int i=1,j=1;
while(j) {
j = (i++ <=5);
printf("%d %d\n",i,j);
}
return 0;
}
现在,让我们看看while循环的执行情况
i = 1,j = 1,j为真,在循环中,j =(1 <= 5)=真= 1,i = 2(后增量)。
i = 2,j = 1,j为真,在循环中,j =(2 <= 5)=真= 1,i = 3(后增量)。
i = 3,j = 1,j为真,在循环中,j =(3 <= 5)=真= 1,i = 4(后增量)。
i = 4,j = 1,j为真,在循环中,j =(4 <= 5)=真= 1,i = 5(后增量)
i = 5,j = 1,j为真,在循环中,j =(5 <= 5)=真= 1,i = 6(后增量)。
i = 6,j = 1,j为真,在循环中,j =(6 <= 5)=假= 0,i = 7(后增量)。
i = 7,j = 0,j为False,不在循环中。
程序停止。
希望这个执行解释有所帮助。
答案 2 :(得分:1)
以下声明:
j=i++ <=5;
在递增变量之前评估变量i
的值。此评估值用于比较<= 5
。比较的结果将是0
或1
,具体取决于条件是 false 还是 true 。
在这种情况下,它与在两个单独的语句中编写它具有相同的效果:
j = i <= 5;
++i;
答案 3 :(得分:1)
for
循环的语法:
for (initialization Statement; check condition; increment/decrements operation)
{
// codes
}
初始化语句仅执行一次。然后,评估检查条件。如果条件为 true(非零),则执行for循环体内的代码并更新更新表达式。如果condition是 false(0),则for循环终止。
在您的代码中,
j = 1
然后条件变为 true 并进入for
循环体。然后,检查
j = i++ <= 5 = true
,控件转到递增/递减操作部分并打印i = 2
和j = 1
。
然后,再次重复编码,直到测试条件为 false 。
答案 4 :(得分:1)
同样可以用这种方式表示:
remote.<remote>.mirror
这里,按照#include <stdio.h>
int main()
{
int i,j;
for(i=1,j=1;j!=0;){
j=i++ <=5;
printf("%d %d\n",i,j);
}
return 0;
}
循环的惯例。
for
j != 0
所以j仍为1&amp;&amp;我变成2(增量后)i <= 5
i = 2, j =1
所以j仍为1&amp;&amp;我变成3(增量后)i <= 5
i = 3, j =1
所以j仍为1&amp;&amp;我变成4(增量后)i <= 5