Les boucles - Langage C


Chapitre 5: Les boucles - Langage C



Les boucles, dans un programme, permettent de répéter certaines instructions plusieurs fois sans avoir à recoder plusieurs fois ces instructions. En C il existe trois types de boucles, nous parlerons de chacune d'elle. Les voici :

  • for
  • while
  • do / while


La boucle for



La boucle for teste une condition avant d'exécuter les instructions qui lui sont associées. Voilà sa synthaxe :

Code c:
for (expression1 ; expression2 ; expression3) 
  {
        instructions à réaliser
  }


expression1 sera une initialisation d'une variable dit de contrôle qui servira lors du test de condition de réalisation des instructions de la boucle.

expression2 ce sera justement la condition pour que la boucle s'exécute.

expression3 permettra de modifier la valeur de la variable de contrôle à chaque passage de la boucle.

N'oubliez pas de séparer ces 3 expressions par un " ; "


Voyons maintenant son fonctionnement à travers un programme qui se chargera d'afficher 3 fois le terme "Hello world!"

Code c:
int main()
  {
         int i = 0; /* voilà notre variable de contrôle */

         for ( i = 0 ; i < 3 ; i++)
             {
                  printf("Hello World !\n");
             }

         return 0;
  }


En testant ce code vous devriez avoir quelque chose comme :

Code console:
Hello World!
Hello World!
Hello World!


Détaillons maintenant le code que nous venons de créer :

Code c:
 for (i = 0 ; i < 3 ; i++)


  • i = 0 : On commence par initialiser notre variable de contrôle à 0 ( ne pas oublier de la déclarer avant dans le programme ? )
  • i < 3 : C'est la condition pour que la boucle s'exécute, tant que i sera inférieur 3 les instructions à l'intérieur de la boucle continuerons de s'exécuter
  • i++ : (équivalent à i + 1 [dorénavant préférer le ++ plutôt que le + 1 sur une variable ou le -- plutôt que le - 1]) Cette expression signifie qu'on ajoutera 1 à la variable i à chaque passage de boucle.


Voilà comment on pourrait traduire cette boucle en français :

Commence avec i = 0 ;
Faire tant que i < 3 ;
Rajoute 1 à chaque passage de la boucle ;

Afficher le message "Hello World!"
Reviens au début
Rajoute 1
i = 1 donc < 3 On peux recommencer
Afficher le message "Hello World!"
Reviens au début
Rajoute 1
i = 2 donc < 3 On peux recommencer
Afficher le message "Hello World!
Rajoute 1
i = 3 donc i < 3 est validé Quitte la boucle
Fin du programme.

Voilà sommairement ce que fait notre programme. ?

Il n'y a pas de ";" a la fin du for c'est une erreur assez répandu chez ceux qui débute donc faites y attention ?


Continuons maintenant avec la boucle while


La boucle while



La boucle while, tout comme la boucle for ne permet l'exécution d'instructions que si une condition vérifiée, avant l'exécution des instructions, est vrai (TRUE). Voici sa synthaxe :

Code c:
while ( condition )
{
    instructions(s)
}


voyons son fonctionnement à travers le même programme que tout à l'heure à savoir : afficher trois fois le message "Hello World !"

Code c:
int main()
  {
       int i = 0;

       while ( i < 3 )
       {
               printf("Hello World !\n");
               i++;
        }

        return 0;
  }


Détaillions :

On commence comme d'habitude par initialiser notre variable de contrôle (i). Ensuite on rentre dans la boucle car la condition est vérifiée ( i vaut 0 donc est bien < à 3 ) Puis on affiche le fameux hello world!. On ajoute 1 à la variable i. Le programme retourne au début, recommence à exécuté les instructions car àa ce moment i vaut 1 ... et ainsi de suite jusqu'à ce que i soit égal à 3 lors du test de condition, ce qui fera quitter la boucle au programme.

Il n'y a pas non plus de ";" à la fin du while


Vous commencez à comprendre le principe des boucles ?
C'est bien ?

Il ne nous en reste plus qu'une à voir : la boucle do / while

La boucle do / while



La boucle do / while diffère des autres dans le sens où les instructions qui lui sont rattachées s'exécutent au moins une fois. Cela étant du à sa synthaxe :

Code c:
do 
{
       instruction(s) à réaliser
}while (condition);


Comme vous pouvez le voir la condition pour que la boucle se réalise se situe à la fin de la boucle. Or comme vous le savez déjà peu être, votre ordinateur lit le programme de bas en haut ce qui fait que les instructions d'une boucle do / while s'exécute au moins une fois

Ici ne pas oublier le " ; " à la fin du while


petite mise en garde sur les boucles infinie



Utiliser des boucles dans un programme c'est bien, mais si on ne fait pas attention à ce que l'on écrit on peut vite arriver à ce que l'on appel une boucle infinie, c'est à dire une boucle dont la condition est toujours vrai, donc qui ne s'arrêtera jamais et bloquera votre programme. Heureusement les systèmes d'exploitation actuel savent faire face à ce genre de problème et vous n'aurez pas de mal à arrêter votre programme.

Voici des exemples de boucle infinie (à éviter de reproduire donc ?)

Code c:
while (1)
{
     printf("Boucle infinie !");
}

/* 1 est toujours vrai */

for ( i = 0 ; i < -1 ; i++)
{
     printf("Boucle infinie !");
}

/* i vaut 0 au départ donc sera TOUJOURS supérieur a -1 dans cette boucle ! */

do
{
     printf("Boucle infinie !");
}while (4 < 5);

/* 4 est toujours supérieur à 5 */


Soyez attentif et pensez votre code avant de le compiler ?

Conclusion



Voilà vous savez maintenant comment faire une boucle dans un programme C.
Pourquoi ne pas vous entrainer en créant un petit programme qui fera autant de tour que l'utilisateur voudra ? et qui affichera le nombre de tours effectués ?

Essayer d'avoir un rendu comme celui ci :

Code console:
Combien de tour SVP : 3

Nombre de tours dans la boucle : 1
Nombre de tours dans la boucle : 2
Nombre de tours dans la boucle : 3

Sortie de la boucle...


Ou vous pouvez tout aussi bien tenter de créer une calculette multi-fonctions ou encore des petits programmes de révisions des dates historiques par exemple.
Dans le prochain chapitre nous parlerons des fonctions, éléments majeurs dans la programmation.




:))Blogger ;)) ;;) :DBlogger ;) :p :(( :) :(Smiley =(( =)) :-* :x b-(:-t8-}

أضف تعليق

جميع الردود تعبّر عن رأي كاتبيها فقط. حريّة النقد والرد متاحة لجميع الزوار بشرط أن لا يكون الرد خارج نطاق الموضوع وأن يكون خال من الكلمات البذيئة.
siege auto
شكرا لك ولمرورك