La structure for en Pascal et la structure pour en langage algorithmique sont utilisées pour faciliter la programmation de boucles de comptage. La structure for en C est plus générale et beaucoup plus puissante.
La structure for en C
for ( <expr1> ; <expr2> ; <expr3> ) <bloc d'instructions>
est équivalent à :
<expr1>; while ( <expr2> ) { <bloc d'instructions> <expr3>; }
<expr1> est évaluée une fois avant le
passage de la boucle.
Elle est utilisée pour initialiser les données de la boucle.
<expr2> est évaluée avant chaque passage
de la boucle.
Elle est utilisée pour décider si la boucle est répétée
ou non.
<expr3> est évaluée à la fin de
chaque passage de la boucle.
Elle est utilisée pour réinitialiser les données de
la boucle.
Le plus souvent, for est utilisé comme boucle de comptage :
for ( <init.> ; <cond. répétition> ; <compteur> ) <bloc d'instructions>
Exemple
int I; for (I=0 ; I<=20 ; I++) cout<<"Le carré de "<<I<<" est "<<I*I;
En pratique, les parties <expr1> et <expr2> contiennent souvent plusieurs initialisations ou réinitialisations, séparées par des virgules.
Exemple
int n, tot; for (tot=0, n=1 ; n<101 ; n++) tot+=n; cout<<"La somme des nombres de 1 à 100 est "<<tot;
Exemple
Cet exemple nous présente différentes variations pour réaliser le même traitement et nous montre la puissance de la structure for. Les expressions suivantes lisent un caractère au clavier et affichent son code numérique en notation binaire :
/* a */ /* notation utilisant la structure while */ int C, I; C=getchar(); I=128; while (I>=1) { cout<<C/I); C=%I; I/=2; }
/* b */ /* notation utilisant for - très lisible - */ /* préférée par les débutants en C */ int C, I; C=getchar(); for (I=128 ; I>=1 ; I/=2) { cout<<C/I; C=%I; }
/* c */ /* notation utilisant for - plus compacte - */ /* préférée par les experts en C */ int C, I; C=getchar(); for (I=128 ; I>=1 ; C%=I, I/=2) cout<<C/I;
/* d */ /* notation utilisant for - à déconseiller - */ /* surcharge et mauvais emploi de la structure */ int C, I; for(C=getchar(),I=128; I>=1 ;cout<<C/I,C%=i,i/=2) ;