VIII. Boucles▲
VIII-A. Et les Shadoks pédalèrent pendant 15 tours▲
Afin d'effectuer un certain nombre de fois une tâche, nous utilisons l'instruction for de la façon suivante (avec i, une variable de type entier [int par exemple]) :
for (i=point de départ; i<point d'arrivée; i=i+pas) {
instruction(s) répétées(s);
}Ceci est rigoureusement équivalent à cela :
i=point de départ;
while (i<point d'arrivée) {
instruction(s) répétées(s);
i=i+pas;
}Par souci de simplicité, nous dirons simplement que l'incantation suivante :
for (i=0; i<15; i++) {
instr;
}signifie que l'on va exécuter instr pour i variant de 0 à 14 inclus (<15) c'est-à-dire 15 fois.
#include <stdio.h>
int main () {
int i;
for (i=0; i<15; i++){
printf("Je me répète pour i valant %d\n",i);
}
printf("L'instruction a été répétée... 15 fois\n");
return 0;
}VIII-B. Syntaxe▲
De la même façon que le if, le for ne nécessite pas d'accolades s'il n'y a qu'une instruction à répéter.
for (i=0; i<15; i++) {
printf("Je me répète pour i valant %d\n",i);
}par :
for (i=0; i<15; i++)
printf ("Je me répète pour i valant %d\n",i);VIII-C. Notion de double boucle▲
Il est possible de remplacer les instructions contenues dans une boucle par une autre boucle afin de réaliser une double boucle. Nous obtenons donc :
Pour i allant de ... à ... {
...
Pour j allant de ... à ... {
...
}
}#include <stdio.h>
int main () {
int i;
int j;
for (i=0; i<5; i++){
printf("\nJe suis dans la boucle i, i vaut %d\n",i);
for (j=3; j>0; j--)
printf("Je suis dans la boucle j, j vaut %d\n",j);
}
return 0;
}
Exercice n°7.1 — Étoiles
p.11En utilisant une double boucle, écrire un programme qui affiche une étoile, passe à la ligne, affiche deux étoiles, passe à la ligne, affiche trois étoiles… jusqu'à cinq étoiles afin d'obtenir ceci :
*
**
***
****
*****VIII-D. Et les Shadoks fêtèrent Noël…▲
VIII-D-1. Affichage des ramures du sapin▲
Exercice n°7.2 — Sapin
À l'aide d'une double boucle, réalisez un cône pour dessiner le haut du sapin sur 10 lignes.
Vous devriez obtenir ceci :
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
Instructions :
- sur la ligne n° 1, afficher 9 espaces puis 1 étoile ;
- sur la ligne n° 2, afficher 8 espaces puis 3 étoiles ;
- sur la ligne n° 3, afficher 7 espaces puis 5 étoiles ;
- sur la ligne n° i, afficher 10-iespaces puis 2*i-1 étoiles.
Nous obtenons donc par exemple pour l'affichage des étoiles sur la ligne i :
for (j=0; j<((2*i)-1); j++) {
printf ("*");
}VIII-D-2. Affichage du tronc▲
Exercice n°7.3 — Tronc
Pour poursuivre le sapin, il nous faut maintenant dessiner le tronc. Écrivez la suite du programme en dessinant le tronc à l'aide du caractère @. Vous devriez obtenir ceci (juste pour le tronc) :
@@@
@@@
@@@VIII-E. Table Ascii▲
Les codes Ascii (c'est‐à‐dire les nombres qui représentent les caractères en informatique) vont de 0 à 255.
Exercice n°7.4 — Code Ascii
Écrivez un programme qui fait afficher, sur des lignes successives, les codes Ascii avec les caractères qui leur correspondent (vous pouvez commencer l'affichage à partir du code 32 et vous arrêter au code 127).
Pour faire afficher le caractère associé à un code Ascii, vous utiliserez l'instruction ci‐dessous (le %3d signifie que le nombre va être affiché en utilisant un emplacement qui fait trois caractères de long) :
printf ("%3d : %c", code_ascii, code_ascii);int i = 65;
printf("%3d : %c", i, i); // affichera 65 : A
Exercice n°7.5 — Un beau tableau
Même chose, mais avec un joli affichage, par exemple sous la forme d'un tableau sur huit colonnes…
VIII-F. Corrigés des exercices du chapitre▲
Corrigé de l'exercice n°7.1 — Étoiles
#include <stdio.h>
#include <stdlib.h>
int main () {
int i;
int j;
for (i=1; i<=5; i++){
for (j=1; j<=i; j++){
printf ("*");
}
printf ("\n");
}
return 0;
}Nous aurions aussi pu écrire :
#include <stdio.h>
#include <stdlib.h>
int main () {
int i;
int j;
for (i=1; i<=5; i++){
for (j=1; j<=i; j++) // pas d'accolades nécessaires...
printf("*");
printf("\n");
}
return 0;
}
Corrigé de l'exercice n°7.2 — Sapin
#include <stdio.h>
#include <stdlib.h>
int main () {
int i;
int j;
for (i=1; i<=10; i++) {
for (j=0;j<10-i;j++) // les espaces...
printf(" ");
for (j=0; j<(i*2-1); j++)
printf("*");
printf("\n");
}
return 0;
}
Corrigé de l'exercice n°7.3 — Tronc
Vous ajoutez ceci :
...
for (i=1; i<=3; i++)
printf(" @@@\n");
...
Corrigé de l'exercice n°7.4 — Code Ascii
#include <stdio.h>
#include <stdlib.h>
int main () {
int i;
int j;
for (i=32; i<128; i++)
printf("%3d %c\n",i,i);
return 0;
}
Corrigé de l'exercice n°7.5 — Un beau tableau
#include <stdio.h>
#include <stdlib.h>
int main () {
int i;
int j;
for (i=4; i<16; i++) {
for(j=0; j<8; j++) {
printf("%3d %c ",i*8+j,i*8+j);
}
printf("\n");
}
return 0;
}VIII-G. À retenir▲
Retenez l'équivalence entre les deux programmes suivants :
for (i=1; i<100; i=i+2) {
printf("i vaut:%d",i);
}i=1;
while (i<100) {
printf("i vaut:%d",i);
i=i+2;
}

