La structure alternative


sommaire du chapitre :

Introduction

1. If / Else

2. If sans Else

3. If / Else If / ... / Else

4. Les opérateurs conditionnels

5. Instructions de cas - switch


Introduction

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.

retour au sommaire


1. If / Else

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; }

retour au sommaire


2. If sans Else

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

retour au sommaire


3. If / Else If / ... / Else

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 ( <Expression logique 1>)
{<instructions si Expression logique 1 = VRAI>}
else if (<Expression logique 2>)
{<instructions si Expression logique 2= VRAI>}
else if (<Expression logique 3>)
{<instructions si Expression logique 3= VRAI>}
else if (<Expression logique 4>)
{<instructions si Expression logique 4= VRAI>}
else
{<instructions si toutes les Expressions logiques renvoient FAUX>}

Les expressions sont évaluées du haut vers le bas jusqu'à ce que l'une d'elles soit différente de zéro.
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.

retour au sommaire


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 <Expression1> fournit une valeur différente de zéro, alors la valeur de <Expression2> est fournie comme résultat
* Si <Expression1> fournit la valeur zéro, alors la valeur de <Expression3> est fournie comme résultat

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");

retour au sommaire


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.

retour au sommaire
chapitre suivant