Les instructions conditionnelles.
Les instructions d'un programme sont exécutées dans l'ordre où elles sont écrites. Cet ordre peut être modifié si l'on désire qu'une instruction ne soit exécutée qu'en fonction d'une certaine condition. On utilise alors les instructions conditionnelles.1. L'instruction IF.
Cette instruction permet de tester une condition et d'exécuter une instruction en fonction du résultat.
Son format est le suivant :
if (expression)
instructions1;
else
instructions2;
Où expression est une expression conditionnelle.
Cette instruction teste la valeur de l'expression. Si celle-ci est vraie (non nulle), alors "instruction1" est exécutée, sinon c'est "instruction2" qui est exécutée.
Remarques : - La partie else n'est pas obligatoire.
- "instructions1" et "instructions2" peuvent être des instructions simples ou des blocs d'instructions encadrés par des accolades.
Exemples :
/* cet exemple calcule le maximum et le minimum de deux nombres i et j */
int i, j, max, min;
if (i>=j)
{
max=i;
min=j;
}
else
{
max=j;
min=i;
}
1.1. Imbrication des IF :
Il est possible d'avoir un if à l'intérieur d'un autre if, c'est l'imbrication.
Exemple :
int i, j, max, min;
if (i>=j)
if (i==j)
printf("i et j ont la même valeur");
else
{
max =i;
min =j;
}
else
{
max =j;
min =i;
}
printf("Le plus grand nombre est %d, le plus petit est %d", max, min);
Il faut rester très prudent lors de l'utilisation de if imbriqués.
Exemple :
if (expression1)
if (expression2)
instructions1;
else
instructions2;
Il n'y a qu'un seul else pour deux if et il faut donc savoir que tout else se rapporte toujours au if le plus proche. Pour la clarté du programme, il est donc utile d'indenter le programme, c'est à dire de décaler les différentes instructions de façon que le if et le else qui lui est associé soient dans le même alignement.
2. L'instruction SWITCH.
Il peut arriver que selon les différentes valeurs d'une variable, on doive effectuer un traitement bien précis.
Cela peut se faire en imbriquant une série de if, mais si le nombre de valeurs possibles est élevé, cela peut devenir fastidieux. Dans ce cas, on préférera l'instruction switch qui remplace avantageusement la suite de if imbriqués.
Son format est le suivant :
switch (expression)
{
case valeur1 : instruction1; break;
case valeur2 : instruction2; break;
...
case valeurn : instructionN; break;
default: instructionD;
}
Où expression doit être de type entier, caractère ou tout autre type énumératif (c'est-à- dire que toutes ses valeurs possibles sont connues). Elle ne peut donc être de type réel ou string. instructionx peut être une instruction simple ou un bloc d'instructions.
Les instructions break et l'option default ne sont pas obligatoires.
Rôle de l'instruction SWITCH :
- Elle détermine la valeur de l'expression.
- Elle compare cette valeur aux différentes valeurs mentionnées après le case.
Si la valeur x est égale à l'expression, alors l'exécution du programme continue à partir de l'instruction x.
Si aucune valeur x n'est égale à l'expression, alors :
- Soit on a mentionné l'option default et le programme continue son exécution à partir de l'instructionD
- Soit on n'a pas précisé cette option et le programme ignore l'instruction switch.
Dans le cas où l'on a exécuté une instruction x (x compris entre 1 et N) :
- Si on a placé un break après cette instruction, le programme reprend son exécution à partir de l'accolade fermante }, délimitant le bloc switch.
-Si le break n'est pas mentionné, les instructions correspondant aux case suivants seront exécutées, jusqu'à ce qu'on rencontre un break ou jusqu'à la fin du switch.
Exemple :
char choix;
choix=getch();
switch (choix)
{
case 'A' : TRAITEMENT_1;
case 'B' : TRAITEMENT_2; break;
case 'C' : TRAITEMENT_3; break;
default : printf("Pas de valeur");
}
Si choix = 'A' TRAITEMENT_1 et TRAITEMENT_2 seront exécutés.
Si choix = 'B' TRAITEMENT_2 sera exécuté.
Si choix = 'C' TRAITEMENT_3 sera exécuté.
Pour toutes les autres valeurs de CHOIX, le message "Pas de valeur" sera affiché.
Il faut bien maîtriser cette instruction pour placer judicieusement les break.
No comments:
Post a Comment