Aller au contenu

🔄 B2.2 - Structures de contrôle en C

📋 Objectifs du cours

À la fin de ce cours, vous serez capable de : - ✅ Utiliser les structures conditionnelles (if, else, switch) - ✅ Maîtriser les différents types de boucles (for, while, foreach) - ✅ Contrôler l'exécution avec break et continue - ✅ Imbriquer les structures de contrôle - ✅ Optimiser vos algorithmes


🤔 Structures conditionnelles

🔀
Qu'est-ce qu'une condition ?
Les structures conditionnelles permettent d'exécuter différents blocs de code selon qu'une condition est vraie ou fausse. Elles sont essentielles pour créer des programmes qui s'adaptent aux situations.

🎯 La structure if

// Structure if simple
int age = 20;

if (age >= 18)
{
    Console.WriteLine("Vous êtes majeur !");
}

// if avec else
if (age >= 18)
{
    Console.WriteLine("Vous êtes majeur !");
}
else
{
    Console.WriteLine("Vous êtes mineur !");
}

🔗 La structure if-else if

int note = 85;

if (note >= 90)
{
    Console.WriteLine("Excellent ! Note A");
}
else if (note >= 80)
{
    Console.WriteLine("Très bien ! Note B");
}
else if (note >= 70)
{
    Console.WriteLine("Bien ! Note C");
}
else if (note >= 60)
{
    Console.WriteLine("Passable ! Note D");
}
else
{
    Console.WriteLine("Échec ! Note F");
}

🎛️ La structure switch

// Switch classique
int jour = 3;

switch (jour)
{
    case 1:
        Console.WriteLine("Lundi");
        break;
    case 2:
        Console.WriteLine("Mardi");
        break;
    case 3:
        Console.WriteLine("Mercredi");
        break;
    case 4:
        Console.WriteLine("Jeudi");
        break;
    case 5:
        Console.WriteLine("Vendredi");
        break;
    case 6:
    case 7:
        Console.WriteLine("Week-end !");
        break;
    default:
        Console.WriteLine("Jour invalide");
        break;
}
💡 Astuce C# 8.0+ : Vous pouvez utiliser la nouvelle syntaxe switch expression pour un code plus concis !
// Switch expression (C# 8.0+)
string nomJour = jour switch
{
    1 => "Lundi",
    2 => "Mardi",
    3 => "Mercredi",
    4 => "Jeudi",
    5 => "Vendredi",
    6 or 7 => "Week-end",
    _ => "Jour invalide"
};

Console.WriteLine(nomJour);

❓ Opérateur ternaire

// Syntaxe : condition ? valeurSiVrai : valeurSiFaux
int age = 20;
string statut = age >= 18 ? "Majeur" : "Mineur";

// Équivalent à :
string statut2;
if (age >= 18)
    statut2 = "Majeur";
else
    statut2 = "Mineur";

// Utilisation dans l'affichage
Console.WriteLine($"Vous êtes {(age >= 18 ? "majeur" : "mineur")}");

🔄 Les boucles

🔁
Pourquoi utiliser des boucles ?
Les boucles permettent de répéter un bloc de code plusieurs fois sans avoir à l'écrire plusieurs fois. Elles sont essentielles pour traiter des collections de données ou répéter des actions.

🔢 La boucle for

// Syntaxe : for (initialisation; condition; incrémentation)
for (int i = 0; i < 5; i++)
{
    Console.WriteLine($"Itération {i}");
}

// Affichage des nombres pairs de 0 à 20
for (int i = 0; i <= 20; i += 2)
{
    Console.WriteLine(i);
}

// Boucle décroissante
for (int i = 10; i >= 0; i--)
{
    Console.WriteLine($"Compte à rebours : {i}");
}

⏳ La boucle while

// Boucle while - condition testée avant l'exécution
int compteur = 0;
while (compteur < 5)
{
    Console.WriteLine($"Compteur : {compteur}");
    compteur++;
}

// Exemple pratique : saisie utilisateur
string reponse;
do
{
    Console.Write("Voulez-vous continuer ? (oui/non) : ");
    reponse = Console.ReadLine().ToLower();
} while (reponse != "oui" && reponse != "non");

🔄 La boucle do-while

// Boucle do-while - condition testée après l'exécution
int nombre;
do
{
    Console.Write("Entrez un nombre entre 1 et 10 : ");
    string input = Console.ReadLine();
    int.TryParse(input, out nombre);

    if (nombre < 1 || nombre > 10)
    {
        Console.WriteLine("Nombre invalide !");
    }
} while (nombre < 1 || nombre > 10);

Console.WriteLine($"Merci ! Vous avez saisi : {nombre}");

📋 La boucle foreach

// Parcours d'un tableau
int[] nombres = { 1, 2, 3, 4, 5 };

foreach (int nombre in nombres)
{
    Console.WriteLine($"Nombre : {nombre}");
}

// Parcours d'une chaîne de caractères
string mot = "Bonjour";
foreach (char lettre in mot)
{
    Console.WriteLine($"Lettre : {lettre}");
}

🎮 Contrôle d'exécution

🛑 L'instruction break

// Break dans une boucle for
for (int i = 0; i < 10; i++)
{
    if (i == 5)
    {
        Console.WriteLine("Arrêt à 5 !");
        break; // Sort de la boucle
    }
    Console.WriteLine(i);
}

// Break dans un switch
int choix = 2;
switch (choix)
{
    case 1:
        Console.WriteLine("Option 1");
        break;
    case 2:
        Console.WriteLine("Option 2");
        break; // Obligatoire en C#
    default:
        Console.WriteLine("Option par défaut");
        break;
}

⏭️ L'instruction continue

// Continue dans une boucle for
for (int i = 0; i < 10; i++)
{
    if (i % 2 == 0) // Si le nombre est pair
    {
        continue; // Passe à l'itération suivante
    }
    Console.WriteLine($"Nombre impair : {i}");
}

// Affiche seulement : 1, 3, 5, 7, 9
⚠️ Attention :
  • break sort complètement de la boucle
  • continue passe à l'itération suivante
  • Dans les boucles imbriquées, ils n'affectent que la boucle la plus proche

🏗️ Structures imbriquées

🔄 Boucles imbriquées

// Table de multiplication
for (int i = 1; i <= 5; i++)
{
    Console.WriteLine($"Table de {i} :");
    for (int j = 1; j <= 10; j++)
    {
        Console.WriteLine($"{i} x {j} = {i * j}");
    }
    Console.WriteLine(); // Ligne vide
}

// Matrice 3x3
for (int ligne = 0; ligne < 3; ligne++)
{
    for (int colonne = 0; colonne < 3; colonne++)
    {
        Console.Write($"[{ligne},{colonne}] ");
    }
    Console.WriteLine(); // Nouvelle ligne
}

🤔 Conditions imbriquées

int age = 25;
bool aPermis = true;
bool aVoiture = false;

if (age >= 18)
{
    Console.WriteLine("Vous êtes majeur.");

    if (aPermis)
    {
        Console.WriteLine("Vous avez le permis.");

        if (aVoiture)
        {
            Console.WriteLine("Vous pouvez conduire votre voiture !");
        }
        else
        {
            Console.WriteLine("Il vous faut une voiture.");
        }
    }
    else
    {
        Console.WriteLine("Il vous faut passer le permis.");
    }
}
else
{
    Console.WriteLine("Vous êtes mineur, pas de conduite !");
}

🎯 Exercices pratiques

🏋️ Exercice 1 : Calculateur de notes

Créez un programme qui : 1. Demande le nombre d'étudiants 2. Pour chaque étudiant, demande sa note 3. Calcule et affiche la moyenne 4. Indique combien d'étudiants ont eu plus de 10/20
// Votre code ici

🏋️ Exercice 2 : Jeu de devinette

Créez un jeu où : 1. L'ordinateur choisit un nombre aléatoire entre 1 et 100 2. L'utilisateur doit deviner le nombre 3. Le programme indique si le nombre est trop grand ou trop petit 4. Le jeu continue jusqu'à ce que l'utilisateur trouve
// Indice : utilisez Random random = new Random();
// int nombreSecret = random.Next(1, 101);

🏋️ Exercice 3 : Menu interactif

Créez un menu qui propose : 1. Calculer l'aire d'un rectangle 2. Calculer l'aire d'un cercle 3. Convertir Celsius vers Fahrenheit 4. Quitter Le menu doit se répéter jusqu'à ce que l'utilisateur choisisse "Quitter".
// Votre code ici

🏋️ Exercice 4 : Pyramide d'étoiles

Créez un programme qui affiche une pyramide d'étoiles :
    *
   ***
  *****
 *******
*********
L'utilisateur doit pouvoir choisir la hauteur de la pyramide.
// Votre code ici

🚀 Optimisations et bonnes pratiques

Conseils d'optimisation
**1. Évitez les boucles infinies :**
// ❌ Mauvais
while (true)
{
    // Code sans condition de sortie
}

// ✅ Bon
bool continuer = true;
while (continuer)
{
    // Code avec condition de sortie
    if (conditionSortie)
        continuer = false;
}
**2. Utilisez foreach quand c'est possible :**
int[] tableau = {1, 2, 3, 4, 5};

// ❌ Moins lisible
for (int i = 0; i < tableau.Length; i++)
{
    Console.WriteLine(tableau[i]);
}

// ✅ Plus lisible
foreach (int element in tableau)
{
    Console.WriteLine(element);
}
**3. Évitez les conditions complexes :**
// ❌ Difficile à lire
if (age >= 18 && age <= 65 && salaire > 30000 && !estEtudiant)
{
    // Code
}

// ✅ Plus clair
bool estAdulteActif = age >= 18 && age <= 65;
bool aSalaireCorrect = salaire > 30000;
bool peutEmprunter = estAdulteActif && aSalaireCorrect && !estEtudiant;

if (peutEmprunter)
{
    // Code
}

📚 Points clés à retenir

🎯 Résumé du chapitre :
  • Conditions : if/else, switch, opérateur ternaire
  • Boucles : for (compteur), while (condition), foreach (collection)
  • Contrôle : break (sortir), continue (passer)
  • Imbrication : Possible mais attention à la lisibilité
  • Bonnes pratiques : Code lisible, éviter les boucles infinies

🔗 Liens utiles


Étape précédente : B2.1 - Les bases du C#
Prochaine étape : B2.3 - Listes et collections