Débogage : Apprendre à utiliser les outils de débogage (gdb) pour identifier et corriger les erreurs dans les programmes en C.
Chaîne de compilation : Comprendre le processus complet de compilation en C avec gcc, y compris les étapes de prétraitement, compilation, assemblage et édition des liens.
Manipulation de chaînes de caractères : Maîtriser les techniques de manipulation de chaînes de caractères en C, incluant les opérations de recherche, découpage, et concaténation.
Gestion des données et recherche de phrases : Utiliser les structures en C pour gérer des informations (comme les données d’étudiant.e.s) et implémenter des techniques pour rechercher des phrases spécifiques dans des fichiers.
Cet exercice présente une brève introduction à gdb et explique comment déboguer votre programme C à l’aide de gdb.
Le code suivant (erreurs.c) présente une erreur majeure : il tente d’accéder à des indices de tableau supérieurs à la taille maximale du tableau (100).
#include <stdio.h>
int main() {
int tableau[100];
for (int compteur = 0; compteur < sizeof(tableau); compteur++) { //Erreur
tableau[compteur] = tableau[compteur] * 2;
}
return 0;
}
$ gcc erreurs.c
./a.out
*** stack smashing detected ***: terminated
Le programme se plante comme prévu.
$ gcc -ggdb3 erreurs.c -o erreurs
$ gdb erreurs
Vous verrez l’invite (gdb).
(gdb) r
Le programme s’arrête en cas d’erreur. Pour voir la pile d’appels :
(gdb) bt
(gdb) break erreurs.c:10
(gdb) r
(gdb) p tableau
(gdb) p tableau[0]@5
(gdb) n
(gdb) continue
(gdb) quit
#include et les macros..o.#include <math.h>
#include <stdio.h>
float calculer_aire(float rayon) {
return M_PI * rayon * rayon;
}
int main() {
float rayon = 5.0;
float aire = calculer_aire(rayon);
printf("L'aire du cercle de rayon %.2f est %.2f\n", rayon, aire);
return 0;
}
# Préprocesseur
gcc -E aire.c -o aire.i
# Compilation
gcc -O2 -S aire.i -o aire.s
# Assemblage
gcc -c aire.s -o aire.o
# Edition de liens
gcc aire.o -lm -o aire
# Exécution
./aire
sphere.h : définitionssurface.c : fonctions surfacevolume.c : fonctions volumemain.c : programme principal# Préprocesseur
gcc -E main.c -o main.i
gcc -E volume.c -o volume.i
gcc -E surface.c -o surface.i
# Compilation avec optimisation
gcc -O3 -c main.i -o main.o
gcc -O3 -c volume.i -o volume.o
gcc -O3 -c surface.i -o surface.o
# Edition de liens
gcc main.o volume.o surface.o -lm -o sphere
# Exécution
./sphere
Objectifs :
Instructions :
Écrire un programme chaine.c qui demande à l’utilisateur deux chaînes et applique les trois opérations. Les résultats doivent être affichés.
Objectif : Écrire un programme bd_école.c pour gérer les données de 5 étudiant.e.s.
struct pour l’étudiant (nom, prénom, adresse, notes).strcpy).Objectif : Écrire un programme phrases.c pour rechercher une phrase dans un fichier.
fopen, fgets, fclose).Objectif : Écrire un programme couleurs.c qui stocke 100 couleurs (R, G, B, A) et affiche les couleurs distinctes avec leur nombre d’occurrences.
Couleur.Rechercher une phrase dans un tableau de phrases
Écrivez un programme en C nommé chercher.c* qui contient un tableau de 10 phrases (tableau de tableaux de caractères) et qui recherche si une phrase donnée est présente dans le tableau. L’objectif est de réaliser cette recherche sans utiliser les fonctions de bibliothèques standards ou externes.
Exemple: Supposons que le tableau contienne les phrases suivantes :
"Bonjour, comment ça va ?"
"Le temps est magnifique aujourd'hui."
"C'est une belle journée."
"La programmation en C est amusante."
"Les tableaux en C sont puissants."
"Les pointeurs en C peuvent être déroutants."
"Il fait beau dehors."
"La recherche dans un tableau est intéressante."
"Les structures de données sont importantes."
"Programmer en C, c'est génial."
Si on recherche la phrase “La programmation en C est amusante.”, le programme doit afficher Phrase trouvée. Si on recherche Je préfère le Python., le programme doit afficher hrase non trouvée.
Objectif : Créer un rapport (programmation_C.md) qui synthétise :
gcc.programmation_C.md, CONTRIBUTORS.md, README.mdaire.c, bd_école.c, chaine.c, chercher.c, couleurs.c, erreurs.c, main.c, phrases.c, sizeof_types.c, sphere.h, surface.c, volume.cInstructions générales :
README.md..zip.