Vous êtes sur la page 1sur 5

Programmation C/Itrations

Programmation C/Itrations
Boucle for
Syntaxe
for (initialisation ; condition ; itration) bloc Une boucle for commence par l' initialisation, puis excute le bloc de code tant que la condition est vrifie et en appelant l'itration aprs chaque bloc. On peut tout de suite remarquer que la boucle for du C est beaucoup plus puissante qu'une boucle for classique, dans le sens o elle ne correspond pas forcment un nombre fini de tours de boucle. La norme C99 permet maintenant de dclarer des variables dans la partie initialisation de la boucle for. Ces variables ne peuvent qu'tre de classe automatic ou register. Leur porte est limite la boucle. Elles n'interfrent pas avec les variables de mme nom dclares en dehors de la boucle. Leur utilisation pourrait conduire de possibles optimisations du code par le compilateur.

Exemples
Exemple 1 int i; for (i = 0 ; i < 10 ; i++) { printf("%d\n", i); } En C99 : for (int i = 0 ; i < 10 ; i++) { printf("%d\n", i); } Cet exemple est une boucle for normale, l'indice de boucle i est incrment chaque tour et le bloc ne fait qu'afficher l'indice. Ce code affiche donc les 10 premiers entiers en partant de 0. Le bloc de code tant rduit une instruction, on aurait pu crire : int i; for (i = 0 ; i < 10 ; i++) printf("%d\n", i); Exemple 2 int i = 0; for( ; i != 1 ; i = rand() % 4) { printf("je continue\n"); }

Programmation C/Itrations Ce deuxime exemple montre plusieurs choses : 1. l'initialisation de la boucle a t omise, en fait n'importe laquelle des trois parties peut l'tre (et mme les trois la fois, ce qui rsulte en une boucle infinie) ; 2. l'expression itration est rellement une expression, on peut y faire appel des fonctions ; 3. le nombre d'itrations n'est pas fixe, le programme affichera je continue un nombre (pseudo-)alatoire de fois.

Boucle while
Syntaxe
while (condition) bloc Une boucle while excute le bloc d'instructions tant que la condition est vrifie.

Exemple
int i = 0; while (i < 10) { printf("%d\n", i); i = i + 1; } Cet exemple est le mme que celui vu prcdement pour la boucle for, il affiche les dix premiers entiers partir de 0.

Boucle do-while
Syntaxe
do bloc while (condition); Cette boucle est une lgre variante de la prcdente. Elle excute donc le bloc au moins une fois, et ce jusqu' ce que la condition soit fausse (ou tant que la condition est vraie).

Exemple 1
#include <stdio.h> int main(void) { int i = 0; do { printf("%d\n", i); i = i + 1; } while (i < 10); return 0;

Programmation C/Itrations } Exemple identique celui de la boucle while au dessus, on affiche les nombres de 0 jusqu' 9.

Exemple 2
#include <stdio.h> int main(void) { char c; do { printf("Veuillez taper la lettre 'o'\n"); scanf("%c", &c); } while (c != 'o'); return 0; } Cette fois on voit l'utilit de la boucle do-while, la variable est initialise dans la boucle. On doit tester sa valeur la fin de l'itration. Tant que l'utilisateur n'aura pas tap la lettre o, le programme redemandera de taper la lettre.

Arrt et continuation des boucles


Il arrive frquemment qu'en valuant un test l'intrieur d'une boucle, on aimerait arrter brutalement la boucle ou alors sauter certains cas non significatifs. C'est le rle des instructions break et continue. break permet de sortir immdiatement d'une boucle for, while ou do-while. noter que si la boucle se trouve elle-mme dans une autre boucle, seule la boucle o l'instruction break se trouvait est stoppe. continue permet de recommencer la boucle depuis le dbut du bloc. Dans le cas de la boucle for, le bloc li l'incrmentation sera excut, puis dans tous les cas, la condition sera teste.

Saut inconditionnel (goto)


Cette instruction permet de continuer l'excution du programme un autre endroit, dans la mme fonction. On l'utilise de la manire suivante : goto label; O label est un identificateur quelconque. Cet identificateur devra tre dfini quelque part dans la mme fonction, avec la syntaxe suivante : label: Ce label peut tre mis n'importe quel endroit dans la fonction, y compris avant ou aprs le goto, ou dans un autre bloc que l o sont utiliss la ou les instructions goto pointant vers ce label. Les labels doivent tre uniques au sein d'une mme fonction, mais on peut les rutiliser dans une autre fonction. Un cas o l'emploi d'une instruction goto est tout fait justifi, par exemple, est pour simuler le dclenchement d'une exception, pour sortir rapidement de plusieurs boucles imbriques. void boucle(void) { while (1)

Programmation C/Itrations { struct Evenement_t * event; attend_evenement(); while ((event = retire_evenement())) { switch (event->type) { case FIN_TRAITEMENT: goto fin; /* ... */ } } } fin: /* ... */ } Dans ce cas de figure, il serait possible d'utiliser aussi un boolen qui indique que le traitement est termin, pour forcer la sortie des boucles. L'utilisation de goto dans cet exemple ne nuisant pas la lisibilit du programme et tant tout aussi efficace, il est tout fait lgitime de l'utiliser. Il faut cependant noter que cette instruction est souvent considre comme viter. En effet, elle provoque un saut dans le code, qui se voit beaucoup moins bien que les structures de contrle comme if ou while, par exemple. De fait, la pratique a montr qu'un abus de son utilisation rend un code source rapidement peu comprhensible, et difficilement maintenable. L'article de Edsger W. Dijsktra Go to considered harmful [1] (en), datant de 1968, est l'exemple le plus connu de cette critique, qui a donn naissance la programmation structure.

Rfrences
[1] http:/ / www. acm. org/ classics/ oct95/

Sources et contributeurs de l'article

Sources et contributeurs de l'article


Programmation C/ Itrations Source: http://fr.wikibooks.org/w/index.php?oldid=236402 Contributeurs: Alveric, Dhenry, Guillaumito, Thierry46, Tpierron, 16 modifications anonymes

Licence
Creative Commons Attribution-Share Alike 3.0 Unported http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/

Vous aimerez peut-être aussi