0% ont trouvé ce document utile (0 vote)
131 vues5 pages

TP9 Solution

Transféré par

aminelegendarie
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
131 vues5 pages

TP9 Solution

Transféré par

aminelegendarie
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Module :

Semestre 1
Programmation en
Année : 2024/2025
langage C

TD/TP Nº8 : Les pointeurs

Les objectifs : Manipuler les pointeurs en langage C.

Exercice 1 :
Écrire une fonction swap qui a comme paramètres deux pointeurs vers des entiers et qui
échange le contenu des deux entiers pointés. Tester cette fonction en écrivant un programme
qui échange le contenu de deux entiers a et b en appelant cette fonction.

#include <stdio.h>

int swap(int *pa, int *pb)


{
int tmp;
tmp = *pa;
*pa = *pb;
*pb = tmp;
return 0;
}

int main()
{
int a, b;
printf("Saisissez un entier : ");
scanf("%d", &a);
printf("Saisissez un autre entier : ");
scanf("%d", &b);
printf("Vous avez saisi : %d %d\n", a, b);
swap(&a, &b);
printf("Après swap : %d %d\n", a, b);
return 0;
}

Exercice 2 :
Écrire une fonction qui a comme paramètres un tableau d'entiers de taille quelconque, la taille
du tableau, et 2 pointeurs vers des entiers min et max. La fonction doit renvoyer dans les entiers
pointés par min et max respectivement les plus petits et les plus grands entiers du tableau.

#include <stdio.h>

int minmax(int *p, int n, int *pmin, int *pmax)


{
int *i;
*pmin = *p;
*pmax = *p;

for (i = p; i < p + n; i++)


{

[Link] 1
if (*i < *pmin) *pmin = *i;
if (*i > *pmax) *pmax = *i;
}
return 0;
}

int main()
{
int tn[] = { 12, 23, 36, 5, 46, 9, 25 };
int min, max, r;

r = minmax(tn, sizeof(tn) / sizeof(int), &min, &max);


printf("Min, Max : %d %d\n", min, max);
return 0;
}

Exercice 3 :
Écrire une fonction qui a en paramètre une chaîne de caractères et qui renvoie par un return le
nombre d'occurrences de la lettre 'A'. Cette fonction devra parcourir la chaîne en utilisant un
pointeur. Tester cette fonction.

#include <stdio.h>

int countA(const char *p)


{
int count = 0;
while (*p != '\0' && *p != '\n') // Ajout de *p != '\n' pour ignorer
le saut de ligne
{
if (*p == 'A') count++;
p++;
}
return count;
}

int main()
{
char str[100];
printf("Saisissez une chaîne de caractères : ");
fgets(str, sizeof(str), stdin);

int result = countA(str);


printf("La chaîne comporte %d occurrences de la lettre 'A'.\n",
result);

return 0;
}

Exercice 4 :

Écrire un programme en langage C qui permet de gérer les informations des étudiants d'une
institution universitaire. Le programme doit être structuré en trois parties :

Partie 1 : Déclaration et utilisation des structures

1. Déclarer une structure DateNaisRepere qui contient les champs suivants :

[Link] 2
o jour : un entier représentant le jour de naissance.
o mois : un entier représentant le mois de naissance.
o annee : un entier représentant l'année de naissance.
2. Déclarer une structure EtudiantRepere qui contient les champs suivants :
o nom : un tableau de 50 caractères pour le nom de l'étudiant.
o age : un entier représentant l'âge de l'étudiant.
o note : un entier représentant la note de l'étudiant.
o dateNaissance : un champ de type DateNaisRepere représentant la date de
naissance de l'étudiant.
3. Écrire une fonction lireEtudiant qui lit les informations d'un étudiant à partir de
l'entrée standard.
4. Écrire une fonction afficherEtudiant qui affiche les informations d'un étudiant.

Partie 2 : Utilisation des tableaux

1. Écrire une fonction lireTableauEtudiants qui lit les informations d'un tableau
d'étudiants de taille spécifiée (exemple tableau de 2 étudiants).
2. Écrire une fonction afficherTableauEtudiants qui affiche les informations d'un
tableau d'étudiants.

Partie 3 : Calcul de la somme des notes avec une fonction récursive

1. Écrire une fonction récursive sommeNotesRecursif pour calculer la somme des notes
des étudiants dans un tableau.
2. Écrire une fonction calculerMoyenne qui utilise la fonction précédente pour calculer
la moyenne des notes des étudiants.
3. Dans le programme principal (main), après avoir lu et affiché les informations des
étudiants, afficher la moyenne des notes.
4. Résultat attendu

Combien d'étudiants voulez-vous entrer ? 2

Lecture des informations pour l'étudiant 1 :


Entrez le nom de l'étudiant : Alami
Entrez l'âge de l'étudiant : 20
Entrez la note de l'étudiant : 12
Entrez la date de naissance (jour mois année) : 15 9 2002

Lecture des informations pour l'étudiant 2 :


Entrez le nom de l'étudiant : Hassan
Entrez l'âge de l'étudiant : 22
Entrez la note de l'étudiant : 16
Entrez la date de naissance (jour mois année) : 10 3 2001

Informations pour l'étudiant 1 :


Alami, 20 ans, 12/20, né le 15/09/2002

Informations pour l'étudiant 2 :


Hassan, 22 ans, 16/20, né le 10/03/2001

La moyenne des notes est : 14.00

[Link] 3
#include <stdio.h>

// Déclaration de la structure DateNaisRepere


typedef struct {
int jour;
int mois;
int annee;
} DateNaisRepere;

// Déclaration de la structure EtudiantRepere


typedef struct {
char nom[50];
int age;
int note;
DateNaisRepere dateNaissance;
} EtudiantRepere;

// Fonction pour lire les informations d'un étudiant


void lireEtudiant(EtudiantRepere *etudiant) {
printf("Entrez le nom de l'étudiant : ");
scanf("%s", etudiant->nom);

printf("Entrez l'âge de l'étudiant : ");


scanf("%d", &etudiant->age);

printf("Entrez la note de l'étudiant : ");


scanf("%d", &etudiant->note);

printf("Entrez la date de naissance (jour mois année) : ");


scanf("%d %d %d", &etudiant->[Link], &etudiant-
>[Link], &etudiant->[Link]);
}

// Fonction pour afficher les informations d'un étudiant


void afficherEtudiant(const EtudiantRepere *etudiant) {
printf("\nInformations de l'étudiant :\n");
printf("Nom : %s\n", etudiant->nom);
printf("Âge : %d\n", etudiant->age);
printf("Note : %d\n", etudiant->note);
printf("Date de naissance : %02d/%02d/%04d\n", etudiant-
>[Link], etudiant->[Link], etudiant-
>[Link]);
}
#define MAX_ETUDIANTS 100

// Fonction pour lire un tableau d'étudiants


void lireTableauEtudiants(EtudiantRepere etudiants[], int taille) {
for (int i = 0; i < taille; i++) {
printf("\nLecture des informations de l'étudiant %d :\n", i + 1);
lireEtudiant(&etudiants[i]);
}
}

// Fonction pour afficher un tableau d'étudiants


void afficherTableauEtudiants(const EtudiantRepere etudiants[], int
taille) {
for (int i = 0; i < taille; i++) {
printf("\nInformations de l'étudiant %d :\n", i + 1);
afficherEtudiant(&etudiants[i]);

[Link] 4
}
}
// Fonction récursive pour calculer la somme des notes des étudiants
int sommeNotesRecursif(const EtudiantRepere etudiants[], int taille) {
if (taille == 0) {
return 0;
}
return etudiants[taille - 1].note + sommeNotesRecursif(etudiants,
taille - 1);
}

// Fonction pour calculer la moyenne des notes


float calculerMoyenne(const EtudiantRepere etudiants[], int taille) {
if (taille == 0) {
return 0.0;
}
int somme = sommeNotesRecursif(etudiants, taille);
return (float)somme / taille;
}
int main() {
EtudiantRepere etudiants[MAX_ETUDIANTS];
int taille;

printf("Entrez le nombre d'étudiants (max %d) : ", MAX_ETUDIANTS);


scanf("%d", &taille);

if (taille > 0 && taille <= MAX_ETUDIANTS) {


lireTableauEtudiants(etudiants, taille);
afficherTableauEtudiants(etudiants, taille);

float moyenne = calculerMoyenne(etudiants, taille);


printf("\nMoyenne des notes des étudiants : %.2f\n", moyenne);
} else {
printf("Nombre d'étudiants invalide.\n");
}

return 0;
}

[Link] 5

Vous aimerez peut-être aussi