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

Include

Le document présente un programme en C pour gérer une liste d'étudiants avec des opérations telles que l'ajout trié d'étudiants, l'affichage, la suppression d'étudiants avec des notes inférieures à 10, le calcul de la moyenne des notes, l'inversion de la liste et la fusion de deux listes triées. Il utilise une structure de données liée pour stocker les informations des étudiants. Le programme inclut des fonctions pour chaque opération et un exemple d'utilisation dans la fonction principale.

Transféré par

amani yazidi
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)
0 vues5 pages

Include

Le document présente un programme en C pour gérer une liste d'étudiants avec des opérations telles que l'ajout trié d'étudiants, l'affichage, la suppression d'étudiants avec des notes inférieures à 10, le calcul de la moyenne des notes, l'inversion de la liste et la fusion de deux listes triées. Il utilise une structure de données liée pour stocker les informations des étudiants. Le programme inclut des fonctions pour chaque opération et un exemple d'utilisation dans la fonction principale.

Transféré par

amani yazidi
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

#include <stdio.

h>
#include <stdlib.h>

//Définition de la structure etud contenan t3 champs

typedef struct etud


{
int id;
float note;
struct etud *next;
} etud;

//Réinitialiser les valeurs de la liste

etud* initList()
{
return NULL;
}

//Ajout d'un nouvel étudiant. l'insertion se fait dans le bon


emplacement: insertion + tri

etud* addEtudTri(etud *list, int id, float note)


{
etud *newEtud = (etud*)malloc(sizeof(etud));
newEtud->id = id;
newEtud->note = note;
if (list == NULL || note < list->note)
{
newEtud->next = list;
list = newEtud;
}
else
{
etud *current = list;
while (current->next != NULL && current->next->note < note)
{
current = current->next;
}
newEtud->next = current->next;
current->next = newEtud;
}
return list;
}

// Parcours de la liste + Affichage de ses éléments

void afficheEtud(etud *list)


{
etud *current = list;
while (current != NULL)
{
printf("\nID de l'etudiant: %d, Note = : %.2f \n", current->id,
current->note);
current = current->next;
}
}
// Suppression des notes <10

void suppEtudInf10(etud **list)


{
while (*list != NULL && (*list)->note < 10)
{
etud *temp = *list;
*list = (*list)->next;
free(temp);
}
if (*list == NULL)
{
return;
}
etud *current = *list;
while (current->next != NULL)
{
if (current->next->note < 10)
{
etud *temp = current->next;
current->next = temp->next;
free(temp);
}
else
{current = current->next;
}
}
}

// calcul de la moyenne: parcours de la liste, calcul de la somme des


notes et du nombre des étudiants

float calcMoyenne(etud *list)


{
float somme = 0;
int nbr = 0;
etud *current = list;
while (current != NULL)
{
somme += current->note;
nbr++;
current = current->next;
}
return somme / nbr;
}

//Ajout d'un nouvel étudiant. l'insertion se fait dans le bon


emplacement: insertion + tri
//le tri se fait au sens inverse pour obtenir une liste inverse

etud* addEtudTriinverse(etud *list, int id, float note)


{
etud *newEtud = (etud*)malloc(sizeof(etud));
newEtud->id = id;
newEtud->note = note;
if (list == NULL || note > list->note)
{
newEtud->next = list;
list = newEtud;
}
else
{
etud *current = list;
while (current->next != NULL && current->next->note < note)
{
current = current->next;
}
newEtud->next = current->next;
current->next = newEtud;
}
return list;
}

//Création de la liste inverse qui appelle la fonction précédente

etud* inverserListe(etud* list) {


etud* inverse = NULL;
while (list != NULL) {
inverse = addEtudTriinverse(inverse, list->id, list->note);
list = list->next;
}
return inverse;
}

// Fonction de fusion de deux listes

void fusionListes(etud *list1, etud *list2)


{
etud *result = NULL;
while (list1 != NULL && list2 != NULL)
{
if (list1->note < list2->note)
{
result = addEtudTri(result, list1->id, list1->note);
list1 = list1->next;
}
else
{
result = addEtudTri(result, list2->id, list2->note);list2 =
list2->next;
}
}
while (list1 != NULL)
{
result = addEtudTri(result, list1->id, list1->note);
list1 = list1->next;
}
while (list2 != NULL)
{
result = addEtudTri(result, list2->id, list2->note);
list2 = list2->next;
}
afficheEtud(result);
}
int main()
{
int nb;

printf("Donner le nombre des etudiants\n");


scanf("%d", &nb);

//initialisation
etud *list = initList();

int id;
float note;

for (int i=0; i<nb; i++)


{
printf("\nDonner l' identifiant et la note de l'etudiant: \n");
scanf("%d %f", &id, &note);
list = addEtudTri(list, id, note);
}

printf("\nLe nombre des etudiants est: %d\n", nb);


printf("\nLa liste des etudiants:\n");

afficheEtud(list);

printf("\nAjout d'un nouvel etudiant:\n");


printf("\nDonner l'identifant: \n");
scanf("%d", &id);
printf("\nDonner la note: \n");
scanf("%f", &note);

list = addEtudTri(list, id, note);

printf("\nNouvelle liste des etudiants:\n");


afficheEtud(list);

printf("\nNombre d'etudnats: %d\n", nb+1);

printf("\nSuppression des etudiants ayant une note < 10:\n");


suppEtudInf10(&list);
afficheEtud(list);

printf("\nLa moyenne des notes de la classe: %.2f\n",


calcMoyenne(list));

printf("\nListe des etudiants inversee:\n");

etud* listeInverse = inverserListe(list);


printf("\nListe inversée :\n");
afficheEtud(listeInverse);

printf("\nFusion de deux listes triees:\n");


etud *list2 = initList();
//création d'une 2e liste
list2 = addEtudTri (list2, 50, 5.0);
list2 = addEtudTri (list2, 51, 7.75);
list2 = addEtudTri (list2, 52, 12.25);
list2 = addEtudTri (list2, 53, 14.0);

printf("\nListe 1:\n");
afficheEtud(list);
printf("\nListe 2:\n");
afficheEtud(list2);
printf("\nListes fusionnees:\n");
fusionListes(list, list2);
return 0;
}

Vous aimerez peut-être aussi