2017-10-18 4 views
0

Salut quelqu'un pourrait-il m'expliquer comment la boucle suivante s'imprime 45. Je suppose que je ne comprends pas très bien comment ces boucles imbriquées fonctionnent:Explication d'une boucle imbriquée

#include <stdio.h> 

int main() { 
    int x, y, n; 
    n = 0; 
    for (x = 0; x < 10; x++) 
     for (y = 0; y < x; y++) 
      n++; 

    printf("%d\n", n); 
} 
+2

Avez-vous essayé de parcourir ce code avec un ([Débogueur] https://stackoverflow.com/questions/25385173/what-is-a-debugger -et-comment-peut-il-aider-moi-diagnostiquer-des problèmes) ou _execute_-il sur le papier (essayez avec un petit x)? – litelite

+0

Regardez l'état de la boucle interne 'for', regardez * jusqu'à combien * ça compte. Vous pouvez également essayer d'ajouter des instructions debug 'printf' pour montrer l'évolution des valeurs de' x, y et n' (mais n'oubliez pas d'ajouter '{...}' pour placer les instructions dans les blocs appropriés). – AntonH

+0

Pas vraiment sûr de ce que vous attendez de nous, passer à travers serait le plus facile à défaut, juste à sec courir. – George

Répondre

6

décompacter la première boucle sur l'aide à vous comprendre. Si vous avez fait que vous obtenez le code comme ceci:

#include <stdio.h> 
int main() { 
    int x, y, n; 
    n = 0; 

    /* x=0 */ 
    for (y=0; y<0; y++) 
     n++; /* doesn't get hit n=0 */ 

    /* x=1 */ 
    for (y=0; y<1; y++) 
     n++; /* gets hit once n=1 */ 

    /* x=2 */ 
    for (y=0; y<2; y++) 
     n++; /* gets hit twice n=3 */ 

    /* x=3 */ 
    for (y=0; y<3; y++) 
     n++; /* gets hit three times n=6 */ 

    /* x=4 */ 
    for (y=0; y<4; y++) 
     n++; /* gets hit four times n=10 */ 

    /* x=5 */ 
    for (y=0; y<5; y++) 
     n++; /* gets hit five times n=15 */ 

    /* x=6 */ 
    for (y=0; y<6; y++) 
     n++; /* gets hit six times n=21 */ 

    /* x=7 */ 
    for (y=0; y<7; y++) 
     n++; /* gets hit seven times n=28 */ 

    /* x=8 */ 
    for (y=0; y<8; y++) 
     n++; /* gets hit eight times n=36 */ 

    /* x=9 */ 
    for (y=0; y<9; y++) 
     n++; /* gets hit nine times n=45 */ 

    /* x=10 exit loop */ 

    printf ("%d\n", n); /* prints 45 */ 
} 
+0

oohh Je l'obtiens maintenant merci beaucoup pour l'aide –