/ )
( 1
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
CHAPITRE V
/ )
( 2
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
if...else et switch
do...while, while et for
/ )
( 3
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
1) L’instruction if
if (expression)
instruction_1
else
instruction_2
if (expression)
instruction_1
/ )
( 4
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
est équivalent à
1) L’instruction if
if ( ++i < limite) printf ("OK") ;
i = i + 1 ;
if ( i < limite ) printf ("OK") ;
if ( i++ < limite ) ......
i = i + 1 ;
if ( i-1 < limite ) ......
if ( ( c=getchar() ) != '\n' ) ......
c = getchar() ;
if ( c != '\n' ) ......
/ )
( 5
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
1) L’instruction if
if ( ++i < max && ( (c=getchar()) != '\n') ) ......
++i ;
c = getchar() ;
if ( i<max && ( c!= '\n' ) ) ......
Car dans la première instruction
c = getchar()
n’est pas évaluée lorsque la condition ++i<max est fausse
/ )
( 6
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
1) L’instruction if
if (a<=b) if (b<=c) printf ("ordonné") ;
else printf ("non ordonné") ;
if (a<=b) if (b<=c) printf ("ordonné") ;
else printf ("non ordonné") ;
Un else se rapporte toujours au dernier if rencontré auquel un else n’a pas encore
été attribué.
/ )
( 7
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
Facturation avec remise.
Il lit en donnée un simple prix hors taxes
et calcule le prix TTC correspondant (avec un taux de TVA constant de 18,6 %).
Il établit ensuite une remise dont le taux dépend de la valeur obtenue, à savoir :
1) L’instruction if
/ )
( 8
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
1) L’instruction if
#define TAUX_TVA 18.6
main()
{
double ht, ttc, net, tauxr, remise ;
printf("donnez le prix hors taxes : ") ;
scanf ("%lf", &ht) ;
ttc = ht * ( 1. + TAUX_TVA/100.) ;
if ( ttc < 1000.) tauxr = 0 ;
else if ( ttc < 2000 ) tauxr = 1. ;
else if ( ttc < 5000 ) tauxr = 3. ;
else tauxr = 5. ;
remise = ttc * tauxr / 100. ;
net = ttc - remise ;
printf ("prix ttc %10.2f\n", ttc) ;
printf ("remise %10.2f\n", remise) ;
printf ("net à payer %10.2f\n", net) ;
}
donnez le prix hors taxes : 500
prix ttc 593.00
remise 0.00
net à payer 593.00
___________________________________________
donnez le prix hors taxes : 4000
prix ttc 4744.00
remise 142.32
net à payer 4601.68
/ )
( 9
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
2) Instruction switch
switch (expression)
{ case constante_1 : [ suite_d’instructions_1 ]
case constante_2 : [ suite_d’instructions_2 ]
..............
case constante_n : [ suite_d’instructions_n ]
default : [ suite_d’instructions ]
}
/ )
( 10
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
2) Instruction switch
main()
{
int n ;
printf ("donnez un entier : ") ;
scanf ("%d", &n) ;
switch (n)
{ case 0 : printf ("nul\n") ;
break ;
case 1 : printf ("un\n") ;
break ;
case 2 : printf ("deux\n") ;
break ;
}
printf ("au revoir\n") ;
}
donnez un entier : 0
nul
au revoir
______
donnez un entier : 2
deux
au revoir
______
donnez un entier : 5
au revoir
/ )
( 11
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
2) Instruction switch
main()
{
int n ;
printf ("donnez un entier : ") ;
scanf ("%d", &n) ;
switch (n)
{ case 0 : printf ("nul\n") ;
case 1 : printf ("un\n") ;
case 2 : printf ("deux\n") ;
}
printf ("au revoir\n") ;
}
donnez un entier : 0
nul
un
deux
au revoir
______
donnez un entier : 2
deux
au revoir
/ )
( 12
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
2) Instruction switch
main()
{
int n ;
printf ("donnez un entier : ") ;
scanf ("%d", &n) ;
switch (n)
{ case 0 : printf ("nul\n") ;
break ;
case 1 : printf ("un\n") ;
break ;
case 2 : printf ("deux\n") ;
break ;
default : printf ("grand\n") ;
}
printf ("au revoir\n") ;
}
donnez un entier : 2
deux
au revoir
_______
donnez un entier : 25
grand
au revoir
/ )
( 13
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
2) Instruction switch
main()
{
int n ;
printf ("donnez un entier : ") ;
scanf ("%d", &n) ;
switch (n)
{ case 0 : printf ("nul\n") ;
break ;
case 1 :
case 2 : printf ("petit\n") ;
case 3 :
case 4 :
case 5 : printf ("moyen\n") ;
break ;
default : printf ("grand\n") ;
}
}
donnez un entier : 1
petit
moyen
______
donnez un entier : 4
moyen
______
donnez un entier : 25
grand
/ )
( 14
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
L’instruction switch limite les valeurs des étiquettes à des valeurs entières ; en effet, il ne faut pas oublier que la comparaison d’égalité de la valeur d’une expression flottante à celle d’une constante flottante est relativement aléatoire, compte tenu de la précision limitée des calculs
Seulement, il est possible d’employer des constantes de type caractère, étant donné qu’il y aura systématiquement conversion en int
2) Instruction switch
switch(c)
{ case 'a' : ......
case 132 : .....
......
}
switch (n)
{ case 'A' : .....
case 559 : .....
.......
}
Avec c est de type char
Avec n est du type int
/ )
( 15
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
La syntaxe autorise des expressions constantes
2) Instruction switch
#define LIMITE 20
.....
switch (n)
{ .....
case LIMITE-1 : ......
case LIMITE : ......
case LIMITE+1 : ......
}
/ )
( 16
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
3) L’instruction do… while
do instruction
while (expression) ;
do c = getchar() ; while ( c != 'x') ;
do instruction while (1) ;
/ )
( 17
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
3) L’instruction do… while
main()
{
int n ;
do
{
printf ("donnez un nb >0 : ") ;
scanf ("%d", &n) ;
printf ("vous avez fourni %d\n", n) ;
}
while (n<=0) ;
printf ("réponse correcte") ;
}
donnez un nb >0 : -3
vous avez fourni -3
donnez un nb >0 : -9
vous avez fourni –9
donnez un nb >0 : 12
vous avez fourni 12
réponse correcte
/ )
( 18
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
3) L’instruction do… while
do {
printf ("donnez un nb > 0 : ") ;
scanf ("%d", &n) ;
}
while ( printf("vous avez fourni %d", n), n<= 0 );
do printf ("donnez un nb >0 : ") ;
while (scanf("%d", &n), printf ("vous avez fourni %d", n), n <= 0 );
do { }
while ( printf ("donnez un nb > 0 :"), scanf ("%d", &n),
printf ("vous avez fourni %d", n), n <= 0 ) ;
Notez bien que la condition de poursuite doit être la dernière expression évaluée, compte tenu du fonctionnement de l’opérateur séquentiel.
/ )
( 19
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
3) L’instruction do… while
do { } while ( (c=getchar()) != 'x' ) ;
do c = getchar() ;
while ( c != 'x' ) ;
Lit des caractères au clavier jusqu’à ce qu’elle ait obtenu le caractère x.
Elle est équivalente à :
/ )
( 20
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
4) L’instruction while
main()
{
int n, som ;
som = 0 ;
while (som<100)
{
printf ("donnez un nombre : ") ;
scanf ("%d", &n) ;
som += n ;
}
printf ("somme obtenue : %d", som) ;
}
donnez un nombre : 15
donnez un nombre : 25
donnez un nombre : 12
donnez un nombre : 60
somme obtenue : 112
La condition de poursuite est examinée avant chaque parcours de la boucle et non après. Une telle boucle peut très bien n’être parcourue aucune fois si la condition est fausse dès qu’on l’aborde
/ )
( 21
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
4) L’instruction while
while (expression)
instruction
Notez la présence de parenthèses pour délimiter la condition de poursuite. Remarquez que, la syntaxe n’impose aucun point-virgule de fin (il s’en trouvera naturellement un à la fin de l’instruction qui suit si celle-ci est simple)
Lorsque la condition de poursuite est une expression qui fait appel à l’opérateur séquentiel, n’oubliez pas qu’alors toutes les expressions qui la constituent seront évaluées avant le test de poursuite de la boucle.
while ( printf ("donnez un nombre : ") , scanf ("%d", &n), som<=100)
som += n ;
Différente de l’exemple précédent
/ )
( 22
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
4) L’instruction while
while ( expression1, expression2 ) ;
Equivalente à
do expression1
while ( expression2 ) ;
/ )
( 23
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
5) L’instruction for
main()
{
int i ;
for ( i=1 ; i<=5 ; i++ )
{
printf ("bonjour ") ;
printf ("%d fois\n", i) ;
}
}
bonjour 1 fois
bonjour 2 fois
bonjour 3 fois
bonjour 4 fois
bonjour 5 fois
/ )
( 24
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
5) L’instruction for
Le programme précédent est équivalent au suivant :
main()
{
int i ;
i = 1 ;
while (i<=5)
{
printf ("bonjour ") ;
printf ("%d fois\n", i) ;
i++ ;
}
}
/ )
( 25
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
5) L’instruction for
for ( [ expression_1 ] ; [ expression_2 ] ; [ expression_3 ] )
instruction
Les crochets [ et ] signifient que leur contenu est facultatif
for ( expression_1 ; expression_2 ; expression_3) instruction
expression_1 ;
while (expression_2)
{ instruction
expression_3 ;
}
Equivalente à
/ )
( 26
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
5) L’instruction for
i = 1 ;
for ( ; i<=5 ; i++ )
{
printf ("bonjour ") ;
printf ("%d fois\n", i) ;
}
i = 1 ;
for ( ; i<=5 ; )
{
printf ("bonjour ") ;
printf ("%d fois\n", i) ;
i++ ;
}
Equivalente à
Lorsque l’expression_2 est absente, elle est considérée comme vraie
/ )
( 27
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
5) L’instruction for
for ( i=0, j=1, k=5 ; ... ; ... )
j=1 ; k=5 ;
for ( i=0 ; ... ; ... )
Equivalente à
De même
i=0 ; j=1 ; k=5 ;
for ( ; ... ; ...)
for ( i=1 ; i <= 5 ; printf("fin de tour"), i++ )
{ instructions }
for ( i=1 ; i<=5 ; i++ )
{ instructions
printf ("fin de tour") ;
}
Equivalente à
/ )
( 28
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
5) L’instruction for
for ( ; ; ) instruction
Boucle infinie dont on pourra sortir par une instruction break
/ )
( 29
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
6) Les instructions de branchement inconditionnel : break, continue et goto
main()
{
int i ;
for ( i=1 ; i<=10 ; i++ )
{
printf ("début tour %d\n", i) ;
printf ("bonjour\n") ;
if ( i==3 ) break ;
printf ("fin tour %d\n", i) ;
}
printf ("après la boucle") ;
}
début tour 1
bonjour
fin tour 1
début tour 2
bonjour
fin tour 2
début tour 3
bonjour
après la boucle
/ )
( 30
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
6) Les instructions de branchement inconditionnel : break, continue et goto
/ )
( 31
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
6) Les instructions de branchement inconditionnel : break, continue et goto
main()
{
int i ;
for ( i=1 ; i<=5 ; i++ )
{
printf ("début tour %d\n", i) ;
if (i<4) continue ;
printf ("bonjour\n") ;
}
}
début tour 1
début tour 2
début tour 3
début tour 4
bonjour
début tour 5
bonjour
/ )
( 32
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
6) Les instructions de branchement inconditionnel : break, continue et goto
main()
{
int n ;
do
{
printf ("donnez un nb>0 : ") ;
scanf ("%d", &n) ;
if (n<0)
{
printf ("svp >0\n") ;
continue ;
}
printf ("son carré est : %d\n", n*n) ;
}
while(n) ;
}
donnez un nb>0 : 4
son carré est : 16
donnez un nb>0 : -5
svp >0
donnez un nb>0 : 2
son carré est : 4
donnez un nb>0 : 0
son carré est : 0
En cas de boucles imbriquées, l’instruction continue ne concerne que la boucle la plus interne.
/ )
( 33
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
6) Les instructions de branchement inconditionnel : break, continue et goto
main()
{
int i ;
for ( i=1 ; i<=10 ; i++ )
{ printf ("début tour %d\n", i) ;
printf ("bonjour\n") ;
if ( i==3 ) goto sortie ;
printf ("fin tour %d\n", i) ;
}
sortie : printf ("après la boucle") ;
}
début tour 1
bonjour
fin tour 1
début tour 2
bonjour
fin tour 2
début tour 3
bonjour
après la boucle
/ )
( 34
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
Exercice 1
1) Soit le petit programme suivant :
#include <stdio.h>
main()
{
int i, n, som ;
som = 0 ;
for (i=0 ; i<4 ; i++)
{ printf ("donnez un entier ") ;
scanf ("%d", &n) ;
som += n ;
}
printf ("Somme : %d\n", som) ;
}
Écrire un programme réalisant exactement la même chose, en employant, à la place de l’instruction for :
● une instruction while,
● une instruction do... while.
/ )
( 35
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
Exercice 2
2) Calculer la moyenne de notes fournies au clavier avec un dialogue de ce type :
note 1 : 12
note 2 : 15.25
note 3 : 13.5
note 4 : 8.75
note 5 : -1
moyenne de ces 4 notes : 12.37
Le nombre de notes n’est pas connu a priori et l’utilisateur peut en fournir autant qu’il le désire.
Pour signaler qu’il a terminé, on convient qu’il fournira une note fictive négative. Celle-ci ne devra naturellement pas être prise en compte dans le calcul de la moyenne.
/ )
( 36
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
Exercice 3
3) Afficher un triangle rempli d’étoiles, s’étendant sur un nombre de lignes fourni en donnée et se présentant comme dans cet exemple :
*
**
***
****
*****
/ )
( 37
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
Exercice 4
4) Écrire un programme qui affiche la table de multiplication des nombres de 1 à 10, sous la forme suivante :
/ )
( 38
Langage C
I. II. III. IV. V. VI. VII. VIII. IX.
Les instructions de contrôle
Exercice 5
5) Afficher un triangle isocèle formé d'étoiles. La hauteur du triangle (c'est-à-dire le nombre de lignes) sera fournie en donnée, comme dans l'exemple ci-dessous. On s'arrangera pour que la dernière ligne du triangle s'affiche sur le bord gauche de l'écran.