2016-04-30 14 views
-1

So weiß ich die Ausgabe des Codes ist 8 2 aber könnte mir jemand zeigen, wie der Wert von ich und j ändern nach jedem Schritt bitte. HierAnalysieren Code mit Schritten

ist der Link für den Code:

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

Haben Sie einen Debugger in Ihrem Leben gesehen? Jetzt ist ein guter Punkt, um nach dem magischen Werkzeug Ausschau zu halten :-) – Klaus

+0

Wenn Sie einfach eine Kopie von 'cout << i <<" "<< j;' gleich nach dem Anfang '{' der Schleife einfügen, Sie ' Ich werde zu Beginn jeder Iteration einen Ausdruck der Werte von "i" und "j" erhalten. Außer zum ersten Mal sind dies auch die Werte nach der vorherigen Iteration. Die Werte am Ende der letzten Iteration würden immer noch nach der Schleife gedruckt, wie Sie es jetzt tun. –

Antwort

4

Es wird

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

Weniger Wörter kleiner Code und großartige Erklärung. :) +1 – surajsn

+0

Vielen Dank für deine Hilfe, ich habe es wirklich schnell verstanden und du hast jeden Schritt gezeigt, danke: D –

-1

Vereinfachte Code durch j++ von if-true Entfernen Ändern j=j+2-j++ in if-false so dass j-- nach dem if_else soll entfernt werden. Und auch das Verstehen von Code wird einfacher.

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; 
} 

Erläuterung:

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

Warum der Downvote? –

+0

Vielleicht fühlte jemand, dass dies keine Antwort auf die Frage war. Da Sie den ursprünglichen Code geändert haben, ist dies offensichtlich keine Schritt-für-Schritt-Erklärung des ursprünglichen Codes. Sie erhalten das gleiche Ergebnis, aber das ist irgendwie irrelevant. – 4386427

+0

@ 4386427 Das Down-Vote war für meine frühere Antwort, wo ich es für den ursprünglichen Code zurückverfolgt hatte. Aber da dieser Code ineffizient aussah (mit unnötigen Inkrementen und Dekrementen), habe ich ihn einfach modifiziert. –