Langage C:Structures de contrôle
Un article de WikiTuto.
Sommaire |
Introduction
Normalement, les instructions s'effectuent séquentiellement, c'est à dire l'une après l'autre. Pour accéder à une autre instruction que la suivante, on a trois solutions : le branchement inconditionnel, le branchement conditionnel et la boucle.
Boucles
Une boucle permet de répéter plusieurs fois un bloc d'instructions.
While (tant que)
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>
int 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
int 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);
}
Cliquez ici pour une solution.
Do While (faire tant que)
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>
int main(void)
{
int a;
do
{
puts("veuillez entrer le nombre 482");
scanf("%d",&a);
}
while (a!=482);
puts("c'est gentil de m'avoir obéi");
}
Les boucles sont la solution à employer pour effectuer plusieurs fois la même instruction (ou bloc d'instructions). L'exemple ci-dessus montre l'utilisation d'un do-while pour une action qu'on a prévu d'effectuer une seule fois normalement, mais que peut-être on effectuera plusieurs fois. Donc en C on ne dit jamais "faire X, si erreur recommencer X", mais "faire X tant que erreur".
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). Cliquez ici pour une solution.
For (pour)
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érations à 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. Cliquez ici pour une solution.
Voir aussi
- Instructions
- Structures de contrôle
- Déclaration et stockage des variables
- Fonctions
- Variables scalaires
- Tableaux
- Structures et unions
Auteur :Patrick TRAU. Copyright : utilisation de ces documents libre pour tout usage personnel. Utilisation autorisée pour tout usage public non commercial, à condition de citer son auteur (Patrick TRAU, IPST, Université Louis Pasteur Strasbourg, email : Patrick.Trau (à) ipst-ulp.u-strasbg.fr ) et de me signaler tout usage intensif. Utilisation commerciale interdite sans accord écrit de ma part.



