C中的作业和条件检查

时间:2017-05-16 05:55:53

标签: c if-statement conditional-statements operator-precedence

我遇到了以下程序,我不理解输出。

有人可以对此有所了解吗?

#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

5 个答案:

答案 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。比较的结果将是01,具体取决于条件是 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 = 2j = 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; } 循环的惯例。

  1. i&amp; j初始化为1
  2. 检查条件是否for
  3. j != 0所以j仍为1&amp;&amp;我变成2(增量后)
  4. 打印i <= 5
  5. 再次,i = 2, j =1所以j仍为1&amp;&amp;我变成3(增量后)
  6. 打印i <= 5
  7. 再次,i = 3, j =1所以j仍为1&amp;&amp;我变成4(增量后)
  8. 打印i <= 5
  9. 并且这继续,j变为0,因为当它变得大于5
  10. 时它变得暴躁