La structure itérative qui commence par le mot-clé while permet la répétition de l'exécution d'une portion de code.
int i = 0; while (i < 100) { printf("x"); i = i + 10; }
Immédiatement après le mot-clé while, on trouve entre parenthèses la condition de la boucle, puis (de préférence après un saut de ligne) le corps de la boucle, qui est formé d'une seule instruction (souvent un bloc).
Lors de l'éxécution, cette structure passe par les étapes suivantes :
Remarque Il est possible (et parfois souhaitable) que le corps ne soit pas exécuté du tout.
Le compilateur ne peut pas détecter une boucle infinie, c'est à dire un code qui à l'exécution ne sortira jamais de la structure itérative. Vous devez donc concevoir soigneusement vos boucles pour éviter cette situation.
Remarque Depuis la console, il est possible d'envoyer à votre programme un signal d'arrêt en appuyant sur Contrôle C. Vous pourrez ainsi mettre fin à vos erreurs embarrassantes.
Cette variante de la boucle précédente présente un comportement parfois utile.
int i = 0; do { printf("x"); i = i + 10; } while (i < 100);
Lors de l'exécution, cette structure passe par les étapes suivantes :
L'intérêt majeur est que le corps sera exécuté au moins une fois dans tous les cas.
Le fait que cette forme de boucle soit légèrement plus rapide que les autres ne rentre généralement pas en ligne de compte quand on doit choisir entre les trois, car la lisibilité est le facteur le plus important.
La dernière forme de boucle est la plus détaillée (ce qui est très appréciable).
int i; for(i = 0; i < 100; i = i + 10) { printf("x"); }
En plus du corps et de la condition, la boucle for nécessite deux autres instructions : l'initialisation et l'évolution.
Lors de l'éxécution, cette structure passe par les étapes suivantes :
La présence des deux éléments supplémentaires diminue les chances de boucle infinie en obligeant le développeur à expliciter la situation initiale ainsi que son évolution à chaque tour de boucle. Vous remarquerez que dans les exemples des deux autres sortes de boucles, ces informations devaient tout de même être fournies pour que le programme marche.
Séquence. Écrivez un programme qui demande deux entiers puis affiche dans l'ordre croissant tous les entiers compris entre ces deux valeurs (au sens large).
Faites trois versions de votre programme, et utilisez une forme de boucle différente pour chaque.
Filtrage. Reprenez le programme de l'exercice 5 du sujet sur les réels. Modifiez-le pour que lorsque l'utilisateur rentre un investissement qui n'est pas compris entre 1000 € et 50000 €, on lui repose la question jusqu'à ce qu'il donne un montant approprié.
Table. Écrivez un programme qui demande un entier, puis affiche la table de multiplication correspondante.
entrez un entier : 5 5 x 1 = 5 5 x 2 = 10 5 x 3 = 15 5 x 4 = 20 5 x 5 = 25 5 x 6 = 30 5 x 7 = 35 5 x 8 = 40 5 x 9 = 45 5 x 10 = 50
Remarque Notez l'alignement des colonnes. Dans la chaîne de format de printf, on peut ajouter une option de format pour indiquer un nombre minimum de caractères à insérer, et si nécessaire des espaces seront rajoutés à gauche.
int i=17; printf("i=%12d\n", i); /* affiche "i= 17\n" */
Division. Écrivez un programme qui demande à l'utilisateur une valeur entière positive ou nulle, puis une valeur entière strictement positive, et qui affiche ensuite le quotient et le reste de la division euclidienne de la première valeur par la deuxième, en utilisant dans vos calculs seulement des additions et des soustractions.
Entrez une valeur >= 0 : 46 Entrez une valeur > 0 : 7 --> 46 = 6 x 7 + 4
Tables. Écrivez un programme qui affiche plusieurs tables de multiplication. Avant l'affichage de chaque table, le programme demandera à l'utilisateur sur quel entier baser la table. S'il répond -1, le programme s'arrêtera sans rien afficher de plus.
Bornes. Écrivez un programme qui laisse l'utilisateur saisir autant d'entiers naturels qu'il le souhaite. Lorsque celui-ci saisit la valeur -1, cela signifie que la saisie est terminée. Le programme affiche alors seulement la plus petite et la plus grande des valeurs saisies.