Les structures de contrôle définissent la suite dans laquelle les instructions
sont effectuées.
Dans ce chapitre, nous allons voir comment les instructions de sélection connues
fonctionnent en C et nous allons faire connaissance d'un couple d'opérateurs
spécial qui nous permet de choisir entre deux valeurs à l'intérieur d'une
expression.
Constatons déjà que la particularité la plus importante des instructions de
contrôle en C est le fait que les "conditions" en C peuvent être
des expressions quelconques qui fournissent un résultat numérique.
La valeur zéro correspond à la valeur logique FAUX et toute valeur différente
de zéro est considérée comme VRAI.
La structure alternative en langage algorithmique :
Si (<Expression logique>)
Alors <Instructions si Expression logique = VRAI>
Sinon <Instructions si Expression logique = FAUX>
FinSi
La structure alternative en C
if (<Expression logique>)
{<Instructions si Expression logique = VRAI>}
else
{<Instructions si Expression logique = FAUX>}
Exemple :
int A , B , C , AIDE ;
if (A > B)
{ AIDE = A; A = C; C = AIDE; }
else
{ AIDE = B; B = C; C = AIDE; }
La partie else est facultative. On peut donc utiliser if de
la façon suivante :
if (<Expression loghique>)
{<Instructions si Expression logique = VRAI>}
Convention
En C une partie else est toujours liée au dernier if qui ne
possède pas de partie else.
Solution : pour éviter des confusions et pour forcer une certaine interprétation
d'une expression, il est recommandé de toujours utiliser des accolades {}
pour les instructions.
Exemples :
int A , B , N , MAX ;
if (N>0)
if (A>B) MAX=A;
else MAX=B;
si N > 0 et A > B alors MAX = A
si N > 0 et A < B alors MAX = B
si N <= 0 rien ne se passe
int A , B , N , MAX ;
if (N>0)
{if (A>B) MAX=A;}
else MAX=B;
si N > 0 et A > B alors MAX = A
si N > 0 et A < B rien ne se passe
si N <= 0 alors MAX = B
En combinant plusieurs structures if / else en une expression nous obtenons une structure qui est très courante pour prendre des décisions entre plusieurs alternatives :
if (
{<instructions si Expression logique 1 = VRAI>}
else if (
{<instructions si Expression logique 2= VRAI>}
else if (
{<instructions si Expression logique 3= VRAI>}
else if (
{<instructions si Expression logique 4= VRAI>}
else
{<instructions si toutes les Expressions logiques renvoient FAUX>}
Les expressions
Le bloc d'instructions lié est alors exécuté et le traitement de la commande
est terminé.
La dernière partie else traite le cas où aucune des conditions n'a
été remplie.
Elle est optionnelle, mais elle peut être utilisée très confortablement pour
détecter des erreurs.
4. Les opérateurs conditionnels
Le langage C possède une paire d'opérateurs un peu exotiques qui peut être utilisée comme alternative à if / else et qui a l'avantage de pouvoir être intégrée dans une expression :
Les opérateurs conditionnels
<Expression1> ? <Expression2> : <Expression3>
* Si
* Si <Expression1>
Exemple :
if (A>B)
MAX=A;
else
MAX=B;
peut être remplacé par :
MAX = (A > B) ? A : B;
ATTENTION ! : employés de façon irréfléchis, les opérateurs conditionnels
peuvent nuire à la lisibilité d'un programme, mais si on les utilise avec
précaution, ils fournissent des solutions très élégantes...
Exemple : printf("Vous avez %i carte%c \n", N, (N==1)
? " " : "s");
5. Instructions de cas - switch
L'instruction switch permet d'exécuter une parmi une série d'instructions,
en fonction d'une expression.
Exemple :
switch(<Expression>)
{
case "a" : <instructions> break;
case "b" : <instructions> break;
break : <instructions>
}
Les instructions sont exécutées à partir du case qui contient la valeur
correspondant à la valeur de l'expression.
On ne peut placer que des constantes char , int , ... à côté
des mots-clés case .
Si l'on ne veut exécuter qu'un cas et sauter les cas qui suivent, il faut
le faire explicitement en plaçant l'instruction break.
Si l'expression ne correspond à aucun cas, les instructions sont exécutées
à partir de l'étiquette default.