2016-04-30 95 views
-1

所以我知道代码的输出是8 2,但有人可以告诉我 i和j的值是如何在每一步后改变。分析代码与步骤

这里是链接的代码:

using namespace std; 

int main() 
{ 
    int i; int j = 0; 
    for (i = 0; i < 7; i++) 
    { 
     if(i % 2 == 1) 
     { 
      i = i + 2; j++; 
     } 
     else 
     { 
      j = j + 2; 
     } 
     j--; 
    } 

    cout << i <<" "<< j; 
} 
+2

你见过在现场调试?现在是一个很好的观察这个神奇工具的地方:-) – Klaus

+0

如果你只是在循环的开始位置后面插入一个'cout << i <<“”<< j;'的副本,在每次迭代开始时,会得到'i'和'j'的值。除了第一次,这些也是前一次迭代之后的值。如上所述,最后一次迭代结束时的值仍将在循环后打印。 –

回答

4

这将是

int i; int j = 0;   // i==? j==0 
---------------------------------------------- 
    for (i = 0;    // i==0 j==0 
       i < 7;   // TRUE 
    if(i % 2 == 1)    // FALSE 
    j = j + 2;     // i==0 j==2 
    j--;      // i==0 j==1 
         i++) // i==1 j==1 
---------------------------------------------- 
       i < 7;   // TRUE 
    if(i % 2 == 1)    // TRUE 
    i = i + 2; j++;    // i==3 j==2 
    j--;      // i==3 j==1 
         i++) // i==4 j==1 
---------------------------------------------- 
       i < 7;   // TRUE 
    if(i % 2 == 1)    // FALSE 
    j = j + 2;     // i==4 j==3 
    j--;      // i==4 j==2 
         i++) // i==5 j==2 
---------------------------------------------- 
       i < 7;   // TRUE 
    if(i % 2 == 1)    // TRUE 
    i = i + 2; j++;    // i==7 j==3 
    j--;      // i==7 j==2 
         i++) // i==8 j==2 
---------------------------------------------- 
       i < 7;   // FALSE 
+0

较少的单词小代码和很好的解释。 :) +1 – surajsn

+0

非常感谢您的帮助,我很快理解它,并且您展示了每一步,谢谢:D –

-1

简化你的代码从if-true删除j++,在if_elseif-false改变j=j+2j++使j--将被删除。而且理解代码变得更容易。

int main() 
{ 
    int i; int j = 0; 
    for (i = 0; i < 7; i++) 
    { 
     if(i % 2 == 1) 
     { 
      i = i + 2;//add 2 in i for odd i 
     } 
     else 
     { 
      j++; //add 1 in j for even i 
     } 

    } 

    cout << i <<" "<< j; 
} 

说明:

i=0,j=0 

Since, i=0 (even) 
j=1 (even so j++) 
i=1 (i++ for-loop) 

i=3 (odd so add 2) 
i=4 (i++ for-loop) 
j=1 (unchanged) 

i=4 (even) 
j=2 (even so j++) 
i=5 (i++ for-loop) 

i=7 (odd so add 2) 
j=2 (unchanged) 
i=8 (i++ for-loop) 

i=8 (i<7 for-loop exit) 

i=2 & j=8

+0

为什么downvote? –

+0

也许有人觉得这不是问题的答案。由于您修改了原始代码,因此这显然不是对原始代码的一步一步解释。你会得到相同的结果,但这是无关紧要的。 – 4386427

+0

@ 4386427最初的答案是我的回答,我在那里找到原始代码。但是由于该代码看起来效率低下(不必要的增量和减量),我只是修改它。 –