< Branchements conditionnels | TutoCFrench | Les fonctions >
Notions :
while
for
break
continue
while
L'instruction while
permet d'exécuter un bloc d'instructions tant qu'une condition est vraie :
while (
condition)
;
Par exemple, pour afficher les entiers de 0 à 9 :
i = 0; while (i<10) { printf("%d\n", i); i++; }
for
L'instruction for
permet, tout comme l'instruction while
, d'exécuter un bloc d'instructions tant qu'une condition est vraie mais en plus elle permet de définir explicitement une initialisation et une opération :
for (
instruction d'initialisation ;
condition ;
opération )
;
Concrètement, cela permet une écriture beaucoup plus concise qu'avec while
.
Par exemple, pour afficher les entiers de 0 à 9 :
for (i=0; i<10; i++) printf("%d\n", i);
Voici ce qui se passe :
i=0
est effectuée
i<10
est testée. Si elle est vrai, ce qui est le cas pour i ayant des valeurs de 1 à 9, l'instructions du corps de la boucle, ici printf("...");
est effectuée. Sinon, la boucle est terminée
i++
est effectuée
Il est possible de procéder à plusieurs initialisations et à plusieurs opérations en les séparant par des virgules. On peut aussi procéder à plusieurs tests en utilisant les connecteurs logiques &&
ou ||
:
for (i=0, j=1; i<10 && j<100; i++, j=j*2) printf("%d %d\n", i, j);
do... while
C'est une variante de la boucle while
vue précédement :
do
;
while(
condition);
Par exemple, pour afficher les entiers de 0 à 9 :
i = 0; do { printf("%d\n", i); i++; } while (i<10);
break
et continue
L'instruction break
permet de sortir d'une itération :
i=0; while (1) { /* la condition est toujours vraie */ printf("%d\n", i); i++; if (i>10) break; }
L'instruction continue
est rarement utilisée, elle permet de passer directement à l'itération suivante.
Certaines erreurs sont très courantes quand on débute la programmation en C et particulièrement quand on commence à utiliser les boucles. Voici un certain nombre de pièges à éviter.
Oublier d'initialiser les variables :
Ici, i n'est pas initialisé, ce qui rend le déroulement de l'itération imprévisible :
/* oups ! on a oublie d'initialiser 'i' */ while (i<10) { printf("hello world !\n"); i++; }
Utiliser une condition toujours vraie (ou fausse) :
Ici, la condition ne sera jamais vraie, donc la boucle ne sera jamais exécutée :
i=0; while (i>10) { /* on a mis '>' ou lieu de '<' */ printf("hello world !\n"); i++; }
Oublier d'incrémenter les variables :
Une erreur très fréquente est d'oublier d'incrémenter i, il en résulte une boucle infinie :
i = 0; while (i<10) { printf("%d\n", i); }
Les ;
en trop :
Attention aux ;
en trop. La boucle suivante ne fait rien pendant 10 fois puis affiche la phrase "hello world !" une seule fois :
for (i=0; i<10; i++); printf("hello world !\n");
Confondre ;
et ,
:
A l'intérieur du for
, on sépare les parties d'initialisation, de test et d'opération par des ;
. Attention donc à ne pas confondre avec les ,
:
for (i=0, i<10, i++) /* ERREUR : des ',' au lieu des ';' */ printf("hello world !\n");
1. "simple.c" : afficher 5 fois la lettre 'x'
2. "boucle1.c" : afficher les nombres de 10 à 1
3. "boucle2.c" : affichier les nombre de 20 à 1 en comptant de trois en trois
4. "mult.c" : afficher les tables de multiplication de 1 à 9
5. "puis.c" : programme qui saisit deux nombres entiers non signés et calcule le premier à la puissance du second
6. "calc.c" : faire une mini calculette 4 opérations qui prend 2 opérandes, 1 opérateur, et affiche le résultat :
$ calc > 3 4 + 7 > 5 6 * 30
Note : pour la saisie, vous pouvez vous baser sur la syntaxe suivante :
scanf("%d %d %c", &a, &b, &c);
7. "premier.c" : saisir un nombre et indiquer si il est premier
8. "bits.c" : afficher un nombre entier en binaire
#include <stdio.h> int main() { int i; for (i=0; i<5; i++) printf("x"); printf("\n"); return 0; }
#include <stdio.h> int main() { int i; for (i=10; i>0; i--) printf("%d\n", i); return 0; }
#include <stdio.h> int main() { int i; for(i=20; i>0; i=i-3) printf("%d\n", i); return 0; }
#include <stdio.h> int main() { int i, j; for (i=1; i<=9; i++) { printf("-- Table des %d --\n", i); for (j=0; j<=10; j++) printf("%d x %d = %d\n", i, j, i*j); printf("\n"); } return 0; }
#include <stdio.h> int main() { int i, n, exp, total; printf("> "); scanf("%d", &n); /* saisie de n */ printf("> "); scanf("%d", &exp); /* saisie de l'exposant */ total = 1; for (i=0; i<exp; i++) total *= n; printf("%d\n", total); return 0; }
puis.c dans un style de programmation plus concis
#include <stdio.h> int main() { int n, exp, total; printf("> "); scanf("%d %d", &n, &exp); total = 1; while(exp--) total *= n; printf("%d\n", total); return 0; }
#include <stdio.h> int main() { char op; int a, b, tot; while(1) { printf("> "); scanf("%d %d %c", &a, &b, &op); switch (op) { case '+' : tot = a + b; break; case '-' : tot = a - b; break; case '/' : tot = a / b; break; case '*' : tot = a * b; break; default : printf("opérateur inconnu\n"); return 1; } printf("%d\n", tot); } return 0; }
#include <stdio.h> int main() { int i, n; printf("> "); scanf("%d", &n); i = 2; while (i<n) { if (n%i == 0) { printf("%d est divisible par %d\n", n, i); return 0; } i++; } printf("%d est premier\n", n); return 0; }
#include <stdio.h> int main() { int n, i; scanf("%d", &n); for (i=31; i>=0; i--) (n & (1 << i)) ? printf("1") : printf("0"); printf("\n"); return 0; }
< Branchements conditionnels | TutoCFrench | Les fonctions >