Structures conditionnelles en C
if, if-else, if-else if-else et l'imbrication de ces formes.| Structure | Usage | Nb de branches |
|---|---|---|
if | Exécuter si condition vraie, sinon ne rien faire | 1 |
if-else | Choisir entre deux alternatives | 2 |
if-else if-else | Choisir parmi plusieurs alternatives | N |
if imbriqué | Conditions hiérarchiques dépendantes | N (arborescent) |
? : (ternaire) | Expression conditionnelle compacte | 2 |
1. Structure if
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;
}Saisir une valeur : 5 Good bye !
Saisir une valeur : -3 La valeur de a est négative Good bye !
2. Structure if-else
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;
}Saisir une valeur : 5 La valeur de a est positive ou nulle Good bye !
Saisir une valeur : -3 La valeur de a est négative Good bye !
3. Structure if-else if-else
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;
}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;
}Saisir une note (0-20) : 15 Mention : Bien
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.
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;
}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 !
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
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");/* 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 ? :
? : est une forme compacte de if-else utilisable directement dans une expression. Il évalue une condition et retourne l'une de deux valeurs.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;
}max (if-else) = 10 max (ternaire) = 10 a est pair
if-else pour la lisibilité. Ne jamais imbriquer plusieurs ternaires — le code devient illisible.Récapitulatif
| Structure | Comportement | Cas d'usage | Piège courant |
|---|---|---|---|
if | Exécute si vrai, ignore si faux | Vérification ponctuelle | Oublier les accolades |
if-else | Un seul des deux blocs exécuté | Choix binaire | Dangling else sans accolades |
if-else if-else | Première condition vraie exécutée | Choix multiple exclusif | Ordre des conditions (plus restrictif d'abord) |
if imbriqué | Conditions hiérarchiques | Décisions dépendantes | Association else / if ambiguë |
? : | Expression conditionnelle compacte | Initialisation, argument | Imbrication illisible |
Discussion (0)
Soyez le premier à laisser un commentaire !
Laisser un commentaire
Votre commentaire sera visible après modération.