Structure conditionnelle if-else

29 Aug 2019 29 Aug 2019 9841 vues ESSADDOUKI Mostafa 8 min de lecture

Structures conditionnelles en C

Définition — Structure conditionnelle Une structure conditionnelle permet d'exécuter un bloc d'instructions seulement si une condition est vérifiée. En C, toute expression non nulle est considérée comme vraie, et zéro comme fausse. Les structures disponibles sont if, if-else, if-else if-else et l'imbrication de ces formes.
StructureUsageNb de branches
ifExécuter si condition vraie, sinon ne rien faire1
if-elseChoisir entre deux alternatives2
if-else if-elseChoisir parmi plusieurs alternativesN
if imbriquéConditions hiérarchiques dépendantesN (arborescent)
? : (ternaire)Expression conditionnelle compacte2

1. Structure if


Syntaxe C
if (condition) {
    /* instructions exécutées si condition != 0 (vraie) */
}

Le bloc entre accolades n'est exécuté que si condition est évaluée à une valeur non nulle. Si la condition est fausse (0), le bloc est ignoré et l'exécution reprend après l'accolade fermante.

Exemple n°1 — Détecter un nombre négatif

#include <stdio.h>

int main(void)
{
    int a;

    printf("Saisir une valeur : ");
    scanf("%d", &a);

    if (a < 0) {
        printf("La valeur de a est négative\n");
    }

    printf("Good bye !\n");
    return 0;
}
Sortie (saisie : 5)
Saisir une valeur : 5
Good bye !
Sortie (saisie : -3)
Saisir une valeur : -3
La valeur de a est négative
Good bye !

2. Structure if-else


Syntaxe C
if (condition) {
    /* exécuté si condition vraie */
}
else {
    /* exécuté si condition fausse */
}

Exactement l'un des deux blocs est exécuté — jamais les deux, jamais aucun. C'est la structure de choix binaire fondamentale.

Exemple n°2 — Positif ou négatif/nul

#include <stdio.h>

int main(void)
{
    int a;

    printf("Saisir une valeur : ");
    scanf("%d", &a);

    if (a < 0) {
        printf("La valeur de a est négative\n");
    }
    else {
        printf("La valeur de a est positive ou nulle\n");
    }

    printf("Good bye !\n");
    return 0;
}
Sortie (saisie : 5)
Saisir une valeur : 5
La valeur de a est positive ou nulle
Good bye !
Sortie (saisie : -3)
Saisir une valeur : -3
La valeur de a est négative
Good bye !

3. Structure if-else if-else


Syntaxe C
if (condition1) {
    /* exécuté si condition1 vraie */
}
else if (condition2) {
    /* exécuté si condition1 fausse ET condition2 vraie */
}
else if (condition3) {
    /* exécuté si condition1, condition2 fausses ET condition3 vraie */
}
else {
    /* exécuté si toutes les conditions sont fausses */
}

Les conditions sont évaluées de haut en bas, dans l'ordre. Dès qu'une condition est vraie, son bloc est exécuté et les branches suivantes sont ignorées. Le bloc else final est optionnel.

Exemple n°3 — Signe d'un entier (3 cas)

#include <stdio.h>

int main(void)
{
    int a;

    printf("Saisir une valeur : ");
    scanf("%d", &a);

    if (a < 0) {
        printf("La valeur de a est négative\n");
    }
    else if (a > 0) {
        printf("La valeur de a est positive\n");
    }
    else {
        printf("La valeur de a est nulle\n");
    }

    printf("Good bye !\n");
    return 0;
}
Sorties pour 5, -3 et 0
Saisir une valeur : 5
La valeur de a est positive
Good bye !

Saisir une valeur : -3
La valeur de a est négative
Good bye !

Saisir une valeur : 0
La valeur de a est nulle
Good bye !

Exemple n°4 — Note et mention (application pratique)

#include <stdio.h>

int main(void)
{
    int note;

    printf("Saisir une note (0-20) : ");
    scanf("%d", ¬e);

    if (note < 0 || note > 20) {
        printf("Note invalide\n");
    }
    else if (note >= 16) {
        printf("Mention : Très bien\n");
    }
    else if (note >= 14) {
        printf("Mention : Bien\n");
    }
    else if (note >= 12) {
        printf("Mention : Assez bien\n");
    }
    else if (note >= 10) {
        printf("Mention : Passable\n");
    }
    else {
        printf("Mention : Insuffisant\n");
    }

    return 0;
}
Sortie (saisie : 15)
Saisir une note (0-20) : 15
Mention : Bien
Astuce — Ordonner les conditions du plus restrictif au plus large Dans un if-else if, l'ordre des conditions est crucial. Placer les cas les plus spécifiques en premier :
/* Incorrect — la condition >= 10 absorbe tout */
if (note >= 10)   printf("Passable ou mieux\n");
else if (note >= 16) printf("Jamais atteint !\n"); /* mort */

/* Correct — du plus restrictif au plus large */
if (note >= 16)   printf("Très bien\n");
else if (note >= 10) printf("Passable ou mieux\n");

4. Structure if imbriquée

On peut placer un if-else à l'intérieur d'un autre if-else. Chaque else est associé au if le plus proche qui n'a pas encore de else.


Syntaxe C
if (condition_externe) {
    if (condition_interne) {
        /* condition_externe ET condition_interne vraies */
    }
    else {
        /* condition_externe vraie, condition_interne fausse */
    }
}
else {
    /* condition_externe fausse */
}

Exemple n°5 — Signe avec if imbriqué

#include <stdio.h>

int main(void)
{
    int a;

    printf("Saisir une valeur : ");
    scanf("%d", &a);

    if (a <= 0) {
        if (a == 0) {
            printf("La valeur de a est nulle\n");
        }
        else {
            printf("La valeur de a est négative\n");
        }
    }
    else {
        printf("La valeur de a est positive\n");
    }

    printf("Good bye !\n");
    return 0;
}
Sorties pour 5, -3 et 0
Saisir une valeur : 5
La valeur de a est positive
Good bye !

Saisir une valeur : -3
La valeur de a est négative
Good bye !

Saisir une valeur : 0
La valeur de a est nulle
Good bye !
Danger — Le piège du dangling else Sans accolades, le else est associé au ifle plus proche — ce qui peut être différent de ce qu'on attend :
/* Apparence trompeuse — indentation ne détermine pas l'association */
if (a > 0)
    if (a > 10)
        printf("a > 10\n");
else               /* associé au if (a > 10), pas au if (a > 0) ! */
    printf("a <= 10\n");

/* Comportement voulu — accolades pour lever l'ambiguïté */
if (a > 0) {
    if (a > 10)
        printf("a > 10\n");
}
else {             /* associé au if (a > 0) — comportement clair */
    printf("a <= 0\n");
}

5. Accolades optionnelles

Instruction unique sans accolades Lorsque le corps d'un if ou else contient une seule instruction, les accolades peuvent être omises. Les deux formes sont équivalentes :
/* Avec accolades */
if (a <= 0) {
    printf("négatif ou nul\n");
}
else {
    printf("positif\n");
}

/* Sans accolades — équivalent */
if (a <= 0)
    printf("négatif ou nul\n");
else
    printf("positif\n");
Attention — Toujours utiliser les accolades par précautionOmettre les accolades est source d'erreurs lors des modifications ultérieures. Ajouter une deuxième instruction sans ajouter les accolades ne produit pas d'erreur de compilation mais change silencieusement le comportement :
/* Intention : afficher les deux messages si a < 0 */
if (a < 0)
    printf("Négatif\n");
    printf("Valeur : %d\n", a);  /* toujours exécuté — hors du if ! */

/* Correct */
if (a < 0) {
    printf("Négatif\n");
    printf("Valeur : %d\n", a);
}

6. Opérateur ternaire ? :

Opérateur ternaire L'opérateur ternaire ? : est une forme compacte de if-else utilisable directement dans une expression. Il évalue une condition et retourne l'une de deux valeurs.

Syntaxe C
variable = (condition) ? valeur_si_vrai : valeur_si_faux;

Exemple n°6 — Maximum de deux entiers

#include <stdio.h>

int main(void)
{
    int a = 10, b = 7;

    /* Avec if-else */
    int max1;
    if (a > b)
        max1 = a;
    else
        max1 = b;
    printf("max (if-else)  = %d\n", max1);

    /* Avec opérateur ternaire — équivalent */
    int max2 = (a > b) ? a : b;
    printf("max (ternaire) = %d\n", max2);

    /* Utilisation directe dans printf */
    printf("a est %s\n", (a % 2 == 0) ? "pair" : "impair");

    return 0;
}
Sortie
max (if-else)  = 10
max (ternaire) = 10
a est pair
Astuce — Quand utiliser le ternaire Le ternaire est adapté aux expressions simples sur une seule ligne (initialisation, argument de fonction). Pour des blocs avec plusieurs instructions, préférer if-else pour la lisibilité. Ne jamais imbriquer plusieurs ternaires — le code devient illisible.

Récapitulatif

StructureComportementCas d'usagePiège courant
ifExécute si vrai, ignore si fauxVérification ponctuelleOublier les accolades
if-elseUn seul des deux blocs exécutéChoix binaireDangling else sans accolades
if-else if-elsePremière condition vraie exécutéeChoix multiple exclusifOrdre des conditions (plus restrictif d'abord)
if imbriquéConditions hiérarchiquesDécisions dépendantesAssociation else / if ambiguë
? :Expression conditionnelle compacteInitialisation, argumentImbrication illisible

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.