Les tests de conditions permettent de ne pas exécuter systématiquement
certaines instructions, mais seulement dans certains cas bien prévus par
le programmeur. Dans ce contexte nous étudierons:
L'instruction if permet de ne faire exécuter
certaines instructions que dans le cas où une certaine condition est remplie
(VRAI).
La syntaxe est:
Construction sans bloc d'instructions :
if (condition) /*
si la condition est évaluée à VRAI l'instruction sera exécutée */
instruction;
ou
Construction avec bloc
d'instructions :
ifexemples
(condition) /*
si la condition est évaluée à FAUX le bloc d'instructions ne sera pas exécuté
*/
{ /*
accolade de début de bloc d'instructions */
instruction_1;
...
instruction_n; /* les accolades permettent
d'exécuter plusieurs instructions au lieu d'une seule */
} /*
accolade de fin de bloc d'instructions */
#include<stdio.h> /* on a besoin de cette bibliothèque car on utilise la fonction "printf" */
main()
{ /* accolade
de début de main */
int x=5,y=3;
/* déclaration des variables */
if
((x>y) &&
(x>0)) /* SI x
est supérieur à y ET si x est positif, le bloc suivant est exécuté */
printf("x
est plus grand que y et est positif."); /* rien
ne s'affiche si x est inférieur ou égal à y ou si x est négatif ou nul
*/
} /* accolade
de fin de main */
ou
#include<stdio.h> /* on a besoin de cette bibliothèque car on utilise la fonction "printf" */
main()
{ /* accolade
de début de main */
int x=5,y=3;
/* déclaration des variables */
if
((x>y) && (x>0)) /*
SI x est supérieur à y ET si x est positif, le bloc suivant est exécuté
*/
{
/* accolade de début de bloc d'instructions
*/
printf("x
est plus grand que y.\n"); /* rien ne s'affiche
si x est inférieur ou égal à y */
printf("x
est plus grand que 0."); /* ou si x est
négatif ou nul */
}
/* accolade de fin de bloc d'instructions
*/
} /* accolade
de fin de main */
Dans certains cas, on voudra faire exécuter des instructions non seulement
si la condition du if est VRAI, mais également
exécuter d'autres instructions si la condition est FAUX
.
La syntaxe est :
Construction sans bloc d'instructions :
if (condition) /*
si la condition est évaluée à VRAI l'instruction 1 sera exécutée */
instruction_1;
else /* si la condition est évaluée
à FAUX l'instruction 2 sera exécutée */
instruction_2;
ou
Construction avec bloc
d'instructions :
if (condition) /*
si la condition est évaluée à FAUX le bloc d'instructions suivant ne sera
pas exécuté */
{ /*
accolade de début de bloc d'instructions (1 à n)*/
instruction_1;
...
instruction_n; /* les accolades permettent
d'exécuter plusieurs instructions au lieu d'une seule */
} /*
accolade de fin de bloc d'instructions (1 à n)*/
else /*
si la condition est évaluée à VRAI le bloc d'instructions suivant ne sera
pas exécuté */
{ /*
accolade de début de bloc d'instructions (1 à m)*/
instruction_1;
...
instruction_m; /* les accolades permettent
d'exécuter plusieurs instructions au lieu d'une seule */
} /*
accolade de fin de bloc d'instructions (1 à m)*/
#include<stdio.h> /* on a besoin de cette bibliothèque car on utilise la fonction "printf" */
main()
{ /* accolade
de début de main */
int
x=5,y=3; /* déclaration
des variables */
if
((x>y) &&
(x>0)) /* SI x
est supérieur à y ET si x est positif, le bloc suivant est exécuté */
printf("x
est plus grand que y et est positif."); /* rien
ne s'affiche si x est inférieur ou égal à y ou si x est négatif ou nul
*/
else
printf("x est plus petit
que y ou est négatif."); /* rien ne s'affiche
si x est supérieur à y ou si x est positif */
} /* accolade de fin de main */
ou
#include<stdio.h> /* on a besoin de cette bibliothèque car on utilise la fonction "printf" */
main()
{ /* accolade
de début de main */
int
x=5,y=3; /* déclaration
des variables */
if
((x>y) && (x>0)) /*
SI x est supérieur à y ET si x est positif, le bloc suivant est exécuté
*/
{
/* accolade de début de bloc d'instructions
VRAI*/
printf("x
est plus grand que y.\n"); /* rien ne s'affiche
si x est inférieur ou égal à y */
printf("x
est plus grand que 0."); /* ou si x est
négatif ou nul */
}
/* accolade de fin de bloc d'instructions
VRAI*/
else
{
/* accolade de début de bloc d'instructions
FAUX*/
printf("x
est plus petit que y.\n"); /* rien ne s'affiche
si x est supérieur à y */
printf("x
est plus petit que 0."); /* ou si x est
positif */
}
/* accolade de fin de bloc d'instructions
FAUX*/
} /* accolade
de fin de main */
Remarque: Il est également possible d'imbriquer les if, afin d'affiner les tests. Chaque else correspond au dernier if auquel aucun else n'a été attribué.
#include<stdio.h> /* on a besoin de cette bibliothèque car on utilise la fonction "printf" */
main()
{ /* accolade
de début de main */
int
x=5,y=3; /* déclaration
des variables */
if
(x>0)
{ /*
accolade de début de bloc d'instructions VRAI*/
printf("x
est positif.\n"); /* si x est positif, cette instruction
est exécutée */
if
(x>y) /* if imbriqué dans le
bloc d'instructions du premier if */
printf("x
est supérieur à y.\n"); /* si x est supérieur à
y cette instruction est exécutée */
else
printf("x
est compris entre 0 et y.\n"); /* si x est inférieur
ou égal à y, cette instruction est exécutée */
}
/* accolade de fin de bloc d'instructions
VRAI*/
else
printf("x
est négatif ou nul.\n"); /* si x est négatif ou
nul, cette instruction est exécutée */
} /* accolade de fin de main */
Il peut arriver que selon les différentes valeurs d'une variable, on doive effectuer un traitement précis. Cela peut se faire en imbriquant une série de if ; cependant cette imbrication peut souvent devenir fastidieuse si le nombre de valeurs possibles est élevé. L'instruction switch remplace avantageusement la suite de if imbriqués.
Sa syntaxe est :
switch(nom_de_variable) /*
on teste la valeur de "nom_de_variable" */
{ /*
accolade de début du bloc contenant les différents cas */
case valeur_1: instructions_1; break;
/* si cette valeur = valeur 1, on exécute la ou les
instructions 1 */
case valeur_2: instructions_2; break;
/* si cette valeur = valeur 2, on exécute la ou les
instructions 2 */
...
case valeur_n: instructions_n; break; /*
si cette valeur = valeur n, on exécute la ou les instructions n*/
default: instructions_m; break;
/* sinon on exécute la ou les instructions m (ceci
est optionnel) */
} /*
accolade de fin du bloc contenant les différents cas */
Les instructions break et l'option default ne sont pas obligatoires, mais il faut faire attention lors de leur absence.
Si la valeur_i (i<n) est égale à la valeur de "nom_de_la_variable", alors l'exécution du programme continue à partir de l'instruction i.
Si aucune valeur_i n'est égale à l'expression, alors deux cas peuvent se présenter :
Dans le cas où on a exécuté une instruction_i (i compris entre 1 et n) :
Exemples :
Construction avec des entiers :
#include<stdio.h>
/* on a besoin de cette bibliothèque car on utilise
la fonction "printf" */
main()
{ /* accolade
de début de main */
int
x=5; /* déclaration de la variable */
switch(x)
/* on teste la valeur de x*/
{
/* accolade de début du bloc contenant les
différents cas */
case
1: printf("x vaut 1");
break;
/* si x=1, cette instruction est exécutée
*/
case
2: printf("x vaut 2");
break;
/* si x=2, cette instruction est exécutée
*/
case
3: printf("x vaut 3");
break;
/* si x=3, cette instruction est exécutée
*/
case
4: printf("x vaut 4");printf("x
est un carre"); break;
/* si x=4, ces deux instructions sont exécutées
*/
case
5: printf("x vaut 5");
break;
/* si x=5, cette instruction est exécutée
*/
default:
printf("x est supérieur à 5"); break;
/* si x n'est pas dans un des ces cas, cette instruction est exécuté */
}
/* accolade de fin du bloc contenant les différents
cas */
}
/* accolade de fin de main */
ou
Construction avec des caractères
#include<stdio.h> /* on a besoin de cette bibliothèque car on utilise la fonction "printf" */
main()
{ /* accolade
de début de main */
char x='E'; /*
déclaration de la variable */
switch(x)
/* on teste la valeur de x*/
{ /*
accolade de début du bloc contenant les différents cas */
case
'A': printf("x vaut A");
break;
/* si x="A", cette instruction est
exécutée */
case
'B': printf("x vaut B");
break;
/* si x="B", cette instruction est
exécutée */
case
'C': printf("x vaut C");
break;
/* si x="C", cette instruction est
exécutée */
case
'D': printf("x vaut D");printf("x
est avant E"); break;
/* si x="D", ces deux instructions
sont exécutées */
case
'E': printf("x vaut E");
break;
/* si x="E", cette instruction est
exécutée */
default:
printf("x est supérieur à E"); break;
/* si x n'est pas dans un des ces cas, cette instruction est exécuté */
} /*
accolade de fin du bloc contenant les différents cas */
} /* accolade
de fin de main */