Exercices corrigés : Structures et Listes Chaînées en C

Ces exercices couvre des concepts de base tels que les structures, les pointeurs, les tableaux et les fonctions. En plus, la création, l’insertion, la suppression et l’affichage de listes chaînées en langage C.

Partie 1: Déclarations de Structures (20 points)

Question 1 (5 points):

Déclarez une structure nommée Personne qui a les champs suivants :

  • Nom (chaîne de caractères)
  • Âge (entier)
  • Taille (float)

Question 2 (5 points):

Déclarez une structure nommée Point représentant un point dans un espace en deux dimensions avec les champs x et y de type entier.

Question 3 (5 points):

Déclarez une structure nommée Rectangle qui a deux champs de type Point représentant les coins supérieur gauche et inférieur droit du rectangle.

Question 4 (5 points):

Déclarez une structure nommée Etudiant qui hérite de la structure Personne et ajoute un champ moyenne de type float.

Partie 2: Utilisation des Structures (30 points)

Question 5 (10 points):

Écrivez un programme en C qui utilise la structure Personne pour créer deux instances de personnes, les initialise avec des valeurs et les affiche.

Question 6 (10 points):

Écrivez une fonction en C qui prend une structure Rectangle en tant que paramètre et calcule la superficie du rectangle. Utilisez cette fonction dans un programme pour calculer la superficie d’un rectangle donné.

Question 7 (10 points):

Écrivez un programme en C qui utilise la structure Etudiant pour créer une liste d’étudiants, initialisez-les avec des valeurs et affichez la moyenne de chaque étudiant.

Partie 3: Pointeurs et Structures (20 points)

Question 8 (10 points):

Écrivez une fonction en C qui prend en entrée un pointeur vers une structure Personne et modifie l’âge de cette personne. Utilisez cette fonction pour mettre à jour l’âge d’une personne donnée dans un programme.

Question 9 (10 points):

Écrivez un programme en C qui utilise la structure Rectangle et des pointeurs pour créer dynamiquement un rectangle, l’initialise avec des valeurs et affiche sa superficie.

Partie 4: Tableaux de Structures (20 points)

Question 10 (10 points):

Déclarez un tableau de structures Point pour représenter les coordonnées de 5 points dans un espace en deux dimensions. Initialisez les points avec des valeurs et affichez-les.

Question 11 (10 points):

Écrivez une fonction en C qui prend un tableau de structures Personne et détermine l’âge moyen des personnes dans le tableau.

Partie 5: Listes Chaînées (30 points)

Question 12 (10 points):

Déclarez une structure Element qui contient un entier (valeur) et un pointeur vers la structure Element suivante. Cette structure représentera un élément d’une liste chaînée.

Question 13 (10 points):

Écrivez une fonction en C qui prend une valeur en entrée et crée un nouvel élément de liste chaînée avec cette valeur. La fonction doit retourner un pointeur vers le nouvel élément.

Question 14 (10 points):

Écrivez une fonction en C qui prend un pointeur vers le début d’une liste chaînée et une valeur, et insère un nouvel élément avec cette valeur au début de la liste.

Question 15 (10 points):

Écrivez une fonction en C qui prend un pointeur vers le début d’une liste chaînée et affiche toutes les valeurs dans la liste.

Question 16 (10 points):

Écrivez une fonction en C qui prend un pointeur vers le début d’une liste chaînée et supprime le premier élément de la liste.

Question 17 (10 points):

Écrivez un programme en C qui utilise toutes les fonctions précédentes pour créer, manipuler et afficher une liste chaînée d’entiers.

Solution

Exercice 1:

Question 1:

// Déclaration de la structure Personne
struct Personne {
    char nom[50];
    int age;
    float taille;
};

Exercice 2:

Question 2:

// Déclaration de la structure Point
struct Point {
    int x;
    int y;
};

Exercice 3:

Question 3:

// Déclaration de la structure Rectangle avec deux points représentant les coins supérieur gauche et inférieur droit
struct Rectangle {
    struct Point coinSuperieurGauche;
    struct Point coinInferieurDroit;
};

Exercice 4:

Question 4:

// Déclaration de la structure Etudiant héritant de Personne
struct Etudiant {
    struct Personne personne;
    float moyenne;
};

Exercice 5:

Question 5:

#include <stdio.h>

int main() {
    // Utilisation de la structure Personne
    struct Personne personne1 = {"Alice", 25, 1.75};
    struct Personne personne2 = {"Bob", 30, 1.80};

    // Affichage des informations
    printf("Personne 1 - Nom: %s, Age: %d, Taille: %.2f\n", personne1.nom, personne1.age, personne1.taille);
    printf("Personne 2 - Nom: %s, Age: %d, Taille: %.2f\n", personne2.nom, personne2.age, personne2.taille);

    return 0;
}

Question 6 :

#include <stdio.h>

// Déclaration de la structure Rectangle
struct Rectangle {
    float longueur;
    float largeur;
};

// Fonction pour calculer la superficie d'un rectangle
float calculerSuperficie(struct Rectangle* rect) {
    return rect->longueur * rect->largeur;
}

int main() {
    // Utilisation de la structure Rectangle
    struct Rectangle monRectangle = {5.0, 3.0};

    // Calcul de la superficie
    float superficie = calculerSuperficie(&monRectangle);

    // Affichage du résultat
    printf("Superficie du rectangle : %.2f\n", superficie);

    return 0;
}

Question 7 :

#include <stdio.h>

// Déclaration de la structure Personne
struct Personne {
    char nom[50];
    int age;
    float taille;
};

// Déclaration de la structure Etudiant héritant de Personne
struct Etudiant {
    struct Personne personne;
    float moyenne;
};

int main() {
    // Création d'une liste d'étudiants
    struct Etudiant listeEtudiants[3];

    // Initialisation des étudiants avec des valeurs fictives
    listeEtudiants[0].personne.age = 20;
    listeEtudiants[0].moyenne = 15.5;

    listeEtudiants[1].personne.age = 22;
    listeEtudiants[1].moyenne = 18.0;

    listeEtudiants[2].personne.age = 21;
    listeEtudiants[2].moyenne = 14.0;

    // Affichage de la moyenne de chaque étudiant
    for (int i = 0; i < 3; i++) {
        printf("Étudiant %d - Âge: %d, Moyenne: %.2f\n", i + 1, listeEtudiants[i].personne.age, listeEtudiants[i].moyenne);
    }

    return 0;
}

Question 8 :

#include <stdio.h>

// Déclaration de la structure Personne
struct Personne {
    int age;
};

// Fonction pour modifier l'âge à l'aide d'un pointeur
void modifierAge(struct Personne* personne, int nouvelAge) {
    personne->age = nouvelAge;
}

int main() {
    // Utilisation de la structure Personne
    struct Personne personne1 = {25};

    // Appel de la fonction pour modifier l'âge
    modifierAge(&personne1, 30);

    // Affichage du nouvel âge
    printf("Nouvel âge : %d\n", personne1.age);

    return 0;
}

Question 9 (10 points):

#include <stdio.h>
#include <stdlib.h>

// Déclaration de la structure Rectangle
struct Rectangle {
    float longueur;
    float largeur;
};

// Fonction pour créer dynamiquement un rectangle
struct Rectangle* creerRectangle(float longueur, float largeur) {
    struct Rectangle* nouveauRectangle = (struct Rectangle*)malloc(sizeof(struct Rectangle));
    if (nouveauRectangle != NULL) {
        nouveauRectangle->longueur = longueur;
        nouveauRectangle->largeur = largeur;
    }
    return nouveauRectangle;
}

int main() {
    // Utilisation de la structure Rectangle avec des pointeurs
    struct Rectangle* monRectangle = creerRectangle(6.0, 4.0);

    // Vérification si la création a réussi
    if (monRectangle != NULL) {
        // Calcul de la superficie
        float superficie = monRectangle->longueur * monRectangle->largeur;

        // Affichage du résultat
        printf("Superficie du rectangle : %.2f\n", superficie);

        // Libération de la mémoire allouée dynamiquement
        free(monRectangle);
    } else {
        printf("Échec de création du rectangle.\n");
    }

    return 0;
}

Question 10 :

#include <stdio.h>

// Déclaration de la structure Point
struct Point {
    int x;
    int y;
};

int main() {
    // Déclaration et initialisation d'un tableau de structures Point
    struct Point tableauPoints[5] = {{1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10}};

    // Affichage des coordonnées des points
    for (int i = 0; i < 5; i++) {
        printf("Point %d - Coordonnées : (%d, %d)\n", i + 1, tableauPoints[i].x, tableauPoints[i].y);
    }

    return 0;
}
Posted in C