Année universitaire 2003-2004

DEUG MIAS
Module Info 2
Travaux dirigés


Séance 5:

  • Itérations.

  • TD 5 :Itérations
    1. Pour chacun de ces fragments de code, on suppose que l'entrée est la suivante:
    5 1 -3  -8  -12
    n = 50;
     for (k = 1; k <= 4; k++)
      scanf("%d",&x);
    printf(%d \n", n+x);
       
    n = 50;
     for (k = 1; k <= 4; k++)
      {    scanf("%d",&x);
       printf(%d \n", n+x);
       n = n-x;
      }

    Quelle est la sortie dans chaque cas?
    2. Après exécution du code qui suit, est-ce que la variable total contient la somme des entiers de 7 à 25? Expliquer.
         for (count = 7.0; count <= 25.0; count++)
          total = total + count

    3. Après exécution du code qui suit, que contient la variable total? Expliquer.
         total = 0;
         for (count = 1; count <= 15; count++)
          total = total + 2 * count

    4. Quel est le résultat de l'exécution du code qui suit? Expliquer.
         for (count = 1; count < choice; count++)
          {
           printf("clown\n");
           scanf("%d",&choice);
          }

    5. Le but du code qui suit est d'imprimer tous les entiers pairs entre 2 et 14. Est-il correct? Expliquer.
         for (i = 1; i <= 7; i++)
          {
           i = i+1
           printf("%d \n", i);
          }

    6. Quel est le résultat de l'exécution du code qui suit? Expliquer.
         for (i = -3; i <= -1; i++)
          printf("Watch out. \n");

    7. On suppose qu'à l'instruction scanf on tape :
    1 -2 -3 -4 -5<return>
    Quel est le résultat de l'exécution du code qui suit?Expliquer.
         sum = 0
         for (i = -5; i <= -1; i++)
          {
           scanf("%d",&data);
           sum = sum + data;
          }
         printf("%d \n", sum);

    8. Quelle est l'entrée qui produit en sortie 4 6 8 10 12? Expliquer.
         scanf("%d",&data);
         for (count = data; count <= 2 * data; count++)
          printf("%d \n", 2 * count - data);

    Est-ce qu'on peut obtenir en sortie 72 76 82 90 100 ...?
    9. Supposons qu'on tape en entrée 3 4 5 6. Qu'obtient-on en sortie?
         scanf("%d %d %d",&a, &b, &c);
         for (i = 1; i <= a; i++)
          {
           c = b - c;
           b = c;
           a = b + c;
           printf("%d \n", a);
          }

    10. Est-ce que ces deux fragments de code font la même chose?
    counter = 3;
    while (counter < 5)
      while (counter > 2)
       counter = counter + 1;
    printf("%d \n", counter);
      
    counter = 3;
    while ((counter < 5) && (counter > 2))
      counter = counter + 1;
    printf("%d \n", counter);

    Qu'obtient-on si l'on permutte les 2 while dans le code de gauche?
    11. Etant donné ces deux lignes d'entrée:
    4 8
    6 2 3
    qu'obtient-on en sortie à l'exécution du code qui suit? Expliquer.
       scanf("%d %d",&x,&y);
       while (x < y)
        {
         x = y - 3;
         scanf("%d", &y);
        }
       printf("%d \n", x);

    12. Qu'obtient-on en sortie à l'exécution du code qui suit? Expliquer.
       counter = 10;
       y = 10;
       while (( counter != 5) || (y > 7))
        {
         printf("circus \n");
         counter = y - 3;
         y = counter + 2;
        }

    Est-ce que la valeur initiale de counter a une importance?
    Changer les valeurs initiales des variables de manière à obtenir une boucle infinie.
    Pour chacun des morceaux de code qui suivent, indiquer si le résultat est toujours une boucle infinie, parfois ou jamais. Si la réponse est parfois expliquer dans quelles conditions le résultat est une boucle infinie.
    scanf("%d",&data);
    while (data < 7)
     printf("%d \n", data);
    -------------------------------
    scanf("%d",&data);
    while ((data > 5) || (data < 7))
     {
      printf("%d \n", data);
      scanf("%d",&data);
     }
    --------------------------------
    scanf("%d",&data);
    while ((data > 5) && (data < 7))
     {
      printf("%d \n", data);
      scanf("%d",&data);
     }
    scanf("%d",&data);
    while ((data < 5) || (data > 7))
     printf("%d \n", data);
    ----------------------------------
    scanf("%d",&data);
    while ((data < 5) || (data > 7))
     {
      printf("%d \n", data);
      scanf("%d",&data);
     }
    ----------------------------------
    scanf("%d",&data);
    while ((data < 5) && (data > 7))
     printf("%d \n", data);


    Commentaires pascal.lafourcade@lsv.ens-cachan.fr