Les structures répetetifs
Une boucle permet de répéter plusieurs fois un bloc d'instructions.
structure : while (expression) instruction
Tant que l'expression est vraie (!=0), on effectue l'instruction, qui peut être simple (terminée par ;), bloc (entre {}) ou vide (; seul). L'expression est au moins évaluée une fois. Tant qu'elle est vraie, on effectue l'instruction, dès qu'elle est fausse, on passe à l'instruction suivante (si elle est fausse dès le début, l'instruction n'est jamais effectuée).
exemple :
#include <stdio.h> void main(void) { float nombre,racine=0; puts("entrez un nombre réel entre 0 et 10"); scanf("%f",&nombre); while (racine*racine<nombre) racine+=0.01; printf("la racine de %f vaut %4.2f à 1%% près\n", nombre, racine); }
Exercice (while_puiss) : faire un programme qui affiche toutes les puissances de 2, jusqu'à une valeur maximale donnée par l'utilisateur. On calculera la puissance par multiplications successives par 2. Cliquez ici pour une solution. Exercice (while_err) : que fait ce programme ?
#include <stdio.h> #include <math.h> #define debut 100 #define pas 0.01 void main(void) { float nombre=debut; int compte=0,tous_les; puts("afficher les résultats intermédiaires tous les ? (333 par exemple) ?"); scanf("%d",&tous_les); while (fabs(nombre-(debut+(compte*pas)))<pas) { nombre+=pas; if (!(++compte%tous_les)) printf("valeur obtenue %12.8f, au lieu de %6.2f en %d calculs\n", nombre,(float)(debut+(compte*pas)), compte); } printf("erreur de 100%% en %d calculs\n",compte); }
structure : do instruction while (expression); (attention au ; final)
comme while, mais l'instruction est au moins faite une fois, avant la première évaluation de l'expression.
exemple :
#include <stdio.h> void main(void) { int a; do { puts("entrez le nombre 482"); scanf("%d",&a); } while (a!=482); puts("c'est gentil de m'avoir obéi"); } Exercice (do_while) : écrivez un programme de jeu demandant de deviner un nombre entre 0 et 10 choisi par l'ordinateur. On ne donnera pas d'indications avant la découverte de la solution, où l'on indiquera le nombre d'essais. La solution sera choisie par l'ordinateur par la fonction rand () qui rend un entier aléatoire (déclarée dans stdlib.h ).
structure : for ( expr_initiale;expr_condition;expr_incrémentation) instruction
Cette boucle est surtout utilisée lorsque l'on connaît à l'avance le nombre d'itération à effectuer. L'expr_initiale est effectuée une fois, en premier. Puis on teste la condition. On effectue l'instruction puis l'incrémentation tant que la condition est vraie. L'instruction et l'incrémentation peuvent ne jamais être effectuées. La boucle est équivalente à :
expr_initiale; while (expr_condition) { instruction expr_incrémentation; } Une ou plusieurs des trois expressions peuvent être omises, l'instruction peut être vide. for(;;); est donc une boucle infinie. exemple :
{ char c; for(c='Z';c>='A';c--)putchar(c); }
Exercice (for) : faire un programme qui calcule la moyenne de N notes. N et les notes seront saisies par scanf. Le calcul de la moyenne s'effectue en initialisant une variable à 0, puis en y ajoutant progressivement les notes saisies puis division par N.
[Precédent] [Sommaire] [Suivant] [Haut] |