Atelier de Programmation C II
Cours 3:
Les structures
1
2024 / 2025
Semestre II
Réalisé par: Dhouha Maatar
Nadia Ben Said
2
PLAN
 Définition
 Déclaration d'une structure
 Définition d’une variable de type structure
 Utilisation
 Structure imbriquée
 Structure comportant des tableaux
 Tableau de structure
 Application
3
Définition
Les enregistrements en algorithmique sont appelés structures avec le
langage C.
Contrairement aux tableaux qui sont des structures de données dont tous les
éléments sont de même type, les structures sont des structures de données
dont les éléments peuvent être de type différents.
Les éléments qui composent une structure sont appelés champs.
Exemple:
ETUDIANT (Structure)
CIN (entier)
Nom (chaine)
Prénom (chaine) Champs
Age (entier)
Moyenne (réel)
4
Déclaration d'une structure
Lors de la déclaration de la structure, on indique les champs de la structure,
c'est-à-dire le type et le nom des variables qui la composent.
Syntaxe:
struct <Nom_Structure> {
<type_champ1> <Nom_Champ1>;
<type_champ2> <Nom_Champ2>;
<type_champ3> <Nom_Champ3>;
...
} ;
Remarque: La dernière accolade doit être suivie d'un point-virgule
• Le nom des champs répond aux critères des noms de variable
• Deux champs ne peuvent avoir le même nom
• Les données peuvent être de n'importe quel type
5
Définition d’une variable de type structure
Alternative-1:
struct {
int CIN;
char Nom[30];
char Prenom[30];
int Age;
float Moyenne;
} e1; // e1 variable de type structure
struct {
int CIN;
char Nom[30];
char Prenom[30];
int Age;
float Moyenne;
} e2; // e2 variable de type structure
6
Alternative-2:
struct Etudiant {
int CIN;
char Nom[30];
char Prenom[30];
int Age;
float Moyenne;
};
// Déclaration des variables e1 et e2 de type struct Etudiant
struct Etudiant e1, e2;
Définition d’une variable de type structure
7
Alternative-3:
typedef struct {
int CIN;
char Nom[30];
char Prenom[30];
int Age;
float Moyenne;
} Etudiant;
// Déclaration des variables e1 et e2 de type Etudiant
Etudiant e1, e2;
Définition d’une variable de type structure
8
Utilisation
– Soit la définition du type Etudiant:
typedef struct {
int CIN;
char Nom[30];
char Prenom[30];
int Age;
float Moyenne;
} Etudiant;
// Déclaration des variables e1 et e2 de type Etudiant
Etudiant e1, e2;
– L’accès aux champs de la structure Etudiant est défini comme suit:
<nom_variable_structure>.<nom_champ>
Exemple:
e1.CIN
9
Utilisation
Affectation d’une valeur à un champ d’une variable structure
Exemple
e1.CIN = 1234;
strcpy(e1.Nom , "Sassi");
strcpy(e1.Prenom, "Omar");
e1.Age = 19;
e1.Moyenne = 14.25;
OU
Etudiant e1 = {1234,"Sassi ","Omar ", 19, 14.25 };
Affectation globale d’une variable structure
Exemple: e2 reçoit les mêmes valeurs pour tous les champs que celles de e1:
e2 = e1;
10
Remarque: On ne peut pas comparer deux variables de type structure en
utilisant les operateurs de comparaisons == et !=
=>Effectuer la comparaison champ par champ.
Exemple: if (strcmp(e1.Nom, e2.Nom)==0)
return 1; // e1 et e2 ont le même nom.
Affectation individuelle d’une variable structure
Exemple:
e2 reçoit les mêmes valeurs pour tous les champs que celles de e1, en faisant
une affectation champ par champ:
e2.CIN = e1.CIN;
strcpy(e2.Nom, e1.Nom);
strcpy(e2.Prenom, e1.Prenom);
e2.Age = e1.Age;
e2.Moyenne = e1.Moyenne;
Utilisation
11
Utilisation
Lecture d’une variable structure
Exemple
printf("Saisir CIN:" );
scanf("%d", &e1.CIN);
printf("Saisir Nom: ");
scanf("%s", e1.Nom);
……
Écriture d’une variable structure
Exemple
printf("CIN Etudiant: %d", e1.CIN );
printf("Nom Etudiant: %s", e1.Nom );
.…
Passage par adresse d’une variable structure
Exemple: l’entête d’ une fonction (sans retour) SaisirEtudiant() qui permet de
saisir un étudiant:
void SaisirEtudiant(Etudiant * e)
12
Structure imbriquée
Une structure peut avoir un champ qui est de type structure.
Dans ce cas, on parle de structures imbriquées.
La structure imbriquée doit être différente de la première.
Exemple:
ETUDIANT
CIN (entier)
Nom (chaine)
Prénom (chaine)
Date_Naissance (Date)
Moyenne (réel)
Définition des Structures Etudiant et Date
- Jour
- Mois
- Année
typedef struct {
int jour;
int mois;
int annee
} Date;
typedef struct {
int CIN;
char Nom[30];
char Prenom[30];
Date Date_Naissance;
float Moyenne;
} Etudiant;
13
Structure imbriquée
L’affectation directe aux champs se fait comme suit par exemple:
Soit Etudiant e;
e.Date_Naissance.jour = 7;
e.Date_Naissance.mois =2;
e.Date_Naissance.année = 2002;
La saisie des champs est comme suit:
scanf ("%d %d %d", &e.Date_Naissance.jour, &e.Date_Naissance.mois,
&e.Date_Naissance.annee);
14
Structure Comportant des Tableaux
Exemple:
ETUDIANT
CIN (entier)
Nom (chaine)
Prénom (chaine)
Date_Naissance (Date)
Notes (Tableau) // Tableau contenant les 5 Notes obtenues par l’étudiant
Moyenne (réel)
Nouvelle définition de la structure Etudiant:
Exemples d’utilisation:
Etudiant e;
e.Notes[2] = 13.6;
printf ("%f", e.Notes[i]);
typedef struct {
int jour;
int mois;
int annee;
} Date;
typedef struct {
int CIN;
char Nom[30];
char Prenom[30];
Date Date_Naissance;
float Notes[5];
float Moyenne;
} Etudiant;
15
Tableau de Structure
Etant donné qu'une structure est composée d'éléments de taille fixes, il est possible de
créer un tableau ne contenant que des éléments du type d'une structure donnée.
Il suffit de créer un tableau dont le type est celui de la structure et de le repérer par un
nom de variable.
Exemple: On veut définir un nouveau type qui permet de représenter les étudiants d’une
classe, qui comporte un maximum de 50 étudiants:
# define MAX 50
typedef struct {
int jour;
int mois;
int annee;
} Date;
typedef struct {
int CIN;
char Nom[30];
char Prenom[30];
Date Date_Naissance;
float Notes[5];
float Moyenne;
} Etudiant;
typedef Etudiant Classe[MAX];
Classe C;
16
Application 1
Créer une structure point contenant les informations suivantes :
 num de type entier
 x de type réel
 y de type réel
Développer la fonction ?saisir_point() qui permet de saisir et de retourner toutes les
informations relatives à un point.
Développer, en utilisant la fonction précédente, la fonction ?saisir_Tab_point(?) qui permet
de saisir les données de 4 points dans un tableau,
Développer la fonction ?Affiche_Tab_point(?) qui permet d’afficher le contenu du tableau.
17
Correction:
18
19
Application 2
Dans ce problème on se propose de programmer quelques traitements qui se font dans une
banque. Ces traitements concernent les clients de la banque et leurs soldes.
On supposera que les informations utiles d’un client sont les suivantes :
 RIB : numéro de compte du client composé de 20 chiffres. (chaîne de caractères de taille 20)
 nom : nom du client. (chaîne de caractères de taille 30)
CIN : carte d’identité du client. (chaîne de caractères de taille 8)
 Solde : Solde du client. (du type réel)
1.Définir le type client.
2.Ecrire la fonction client saisie_client() permettant de saisir et de retourner toutes les
informations relatives à un client.
3.Développer , en utilisant la fonction précédente, la fonction void saisie_clients(client *C,int n)
permettant de Saisir les informations de n clients dans le tableau C.
4.Ecrire la fonction int client_au_rouge(client C[], int n) qui permet de chercher et retourner le
nombre de clients ayant des soldes négatives.
5.Définir le main qui permet de:
• Saisir le nombre total n des clients de la banque,
• Définir un tableau qui regroupe les informations des n clients,
• Saisir les données de tous les clients de la banque,
• Afficher le nombre de clients ayant des soldes négatives.
20
Solution :
21
22
FIN

AP2_cours3(La structure).programmation.ppt

  • 1.
    Atelier de ProgrammationC II Cours 3: Les structures 1 2024 / 2025 Semestre II Réalisé par: Dhouha Maatar Nadia Ben Said
  • 2.
    2 PLAN  Définition  Déclarationd'une structure  Définition d’une variable de type structure  Utilisation  Structure imbriquée  Structure comportant des tableaux  Tableau de structure  Application
  • 3.
    3 Définition Les enregistrements enalgorithmique sont appelés structures avec le langage C. Contrairement aux tableaux qui sont des structures de données dont tous les éléments sont de même type, les structures sont des structures de données dont les éléments peuvent être de type différents. Les éléments qui composent une structure sont appelés champs. Exemple: ETUDIANT (Structure) CIN (entier) Nom (chaine) Prénom (chaine) Champs Age (entier) Moyenne (réel)
  • 4.
    4 Déclaration d'une structure Lorsde la déclaration de la structure, on indique les champs de la structure, c'est-à-dire le type et le nom des variables qui la composent. Syntaxe: struct <Nom_Structure> { <type_champ1> <Nom_Champ1>; <type_champ2> <Nom_Champ2>; <type_champ3> <Nom_Champ3>; ... } ; Remarque: La dernière accolade doit être suivie d'un point-virgule • Le nom des champs répond aux critères des noms de variable • Deux champs ne peuvent avoir le même nom • Les données peuvent être de n'importe quel type
  • 5.
    5 Définition d’une variablede type structure Alternative-1: struct { int CIN; char Nom[30]; char Prenom[30]; int Age; float Moyenne; } e1; // e1 variable de type structure struct { int CIN; char Nom[30]; char Prenom[30]; int Age; float Moyenne; } e2; // e2 variable de type structure
  • 6.
    6 Alternative-2: struct Etudiant { intCIN; char Nom[30]; char Prenom[30]; int Age; float Moyenne; }; // Déclaration des variables e1 et e2 de type struct Etudiant struct Etudiant e1, e2; Définition d’une variable de type structure
  • 7.
    7 Alternative-3: typedef struct { intCIN; char Nom[30]; char Prenom[30]; int Age; float Moyenne; } Etudiant; // Déclaration des variables e1 et e2 de type Etudiant Etudiant e1, e2; Définition d’une variable de type structure
  • 8.
    8 Utilisation – Soit ladéfinition du type Etudiant: typedef struct { int CIN; char Nom[30]; char Prenom[30]; int Age; float Moyenne; } Etudiant; // Déclaration des variables e1 et e2 de type Etudiant Etudiant e1, e2; – L’accès aux champs de la structure Etudiant est défini comme suit: <nom_variable_structure>.<nom_champ> Exemple: e1.CIN
  • 9.
    9 Utilisation Affectation d’une valeurà un champ d’une variable structure Exemple e1.CIN = 1234; strcpy(e1.Nom , "Sassi"); strcpy(e1.Prenom, "Omar"); e1.Age = 19; e1.Moyenne = 14.25; OU Etudiant e1 = {1234,"Sassi ","Omar ", 19, 14.25 }; Affectation globale d’une variable structure Exemple: e2 reçoit les mêmes valeurs pour tous les champs que celles de e1: e2 = e1;
  • 10.
    10 Remarque: On nepeut pas comparer deux variables de type structure en utilisant les operateurs de comparaisons == et != =>Effectuer la comparaison champ par champ. Exemple: if (strcmp(e1.Nom, e2.Nom)==0) return 1; // e1 et e2 ont le même nom. Affectation individuelle d’une variable structure Exemple: e2 reçoit les mêmes valeurs pour tous les champs que celles de e1, en faisant une affectation champ par champ: e2.CIN = e1.CIN; strcpy(e2.Nom, e1.Nom); strcpy(e2.Prenom, e1.Prenom); e2.Age = e1.Age; e2.Moyenne = e1.Moyenne; Utilisation
  • 11.
    11 Utilisation Lecture d’une variablestructure Exemple printf("Saisir CIN:" ); scanf("%d", &e1.CIN); printf("Saisir Nom: "); scanf("%s", e1.Nom); …… Écriture d’une variable structure Exemple printf("CIN Etudiant: %d", e1.CIN ); printf("Nom Etudiant: %s", e1.Nom ); .… Passage par adresse d’une variable structure Exemple: l’entête d’ une fonction (sans retour) SaisirEtudiant() qui permet de saisir un étudiant: void SaisirEtudiant(Etudiant * e)
  • 12.
    12 Structure imbriquée Une structurepeut avoir un champ qui est de type structure. Dans ce cas, on parle de structures imbriquées. La structure imbriquée doit être différente de la première. Exemple: ETUDIANT CIN (entier) Nom (chaine) Prénom (chaine) Date_Naissance (Date) Moyenne (réel) Définition des Structures Etudiant et Date - Jour - Mois - Année typedef struct { int jour; int mois; int annee } Date; typedef struct { int CIN; char Nom[30]; char Prenom[30]; Date Date_Naissance; float Moyenne; } Etudiant;
  • 13.
    13 Structure imbriquée L’affectation directeaux champs se fait comme suit par exemple: Soit Etudiant e; e.Date_Naissance.jour = 7; e.Date_Naissance.mois =2; e.Date_Naissance.année = 2002; La saisie des champs est comme suit: scanf ("%d %d %d", &e.Date_Naissance.jour, &e.Date_Naissance.mois, &e.Date_Naissance.annee);
  • 14.
    14 Structure Comportant desTableaux Exemple: ETUDIANT CIN (entier) Nom (chaine) Prénom (chaine) Date_Naissance (Date) Notes (Tableau) // Tableau contenant les 5 Notes obtenues par l’étudiant Moyenne (réel) Nouvelle définition de la structure Etudiant: Exemples d’utilisation: Etudiant e; e.Notes[2] = 13.6; printf ("%f", e.Notes[i]); typedef struct { int jour; int mois; int annee; } Date; typedef struct { int CIN; char Nom[30]; char Prenom[30]; Date Date_Naissance; float Notes[5]; float Moyenne; } Etudiant;
  • 15.
    15 Tableau de Structure Etantdonné qu'une structure est composée d'éléments de taille fixes, il est possible de créer un tableau ne contenant que des éléments du type d'une structure donnée. Il suffit de créer un tableau dont le type est celui de la structure et de le repérer par un nom de variable. Exemple: On veut définir un nouveau type qui permet de représenter les étudiants d’une classe, qui comporte un maximum de 50 étudiants: # define MAX 50 typedef struct { int jour; int mois; int annee; } Date; typedef struct { int CIN; char Nom[30]; char Prenom[30]; Date Date_Naissance; float Notes[5]; float Moyenne; } Etudiant; typedef Etudiant Classe[MAX]; Classe C;
  • 16.
    16 Application 1 Créer unestructure point contenant les informations suivantes :  num de type entier  x de type réel  y de type réel Développer la fonction ?saisir_point() qui permet de saisir et de retourner toutes les informations relatives à un point. Développer, en utilisant la fonction précédente, la fonction ?saisir_Tab_point(?) qui permet de saisir les données de 4 points dans un tableau, Développer la fonction ?Affiche_Tab_point(?) qui permet d’afficher le contenu du tableau.
  • 17.
  • 18.
  • 19.
    19 Application 2 Dans ceproblème on se propose de programmer quelques traitements qui se font dans une banque. Ces traitements concernent les clients de la banque et leurs soldes. On supposera que les informations utiles d’un client sont les suivantes :  RIB : numéro de compte du client composé de 20 chiffres. (chaîne de caractères de taille 20)  nom : nom du client. (chaîne de caractères de taille 30) CIN : carte d’identité du client. (chaîne de caractères de taille 8)  Solde : Solde du client. (du type réel) 1.Définir le type client. 2.Ecrire la fonction client saisie_client() permettant de saisir et de retourner toutes les informations relatives à un client. 3.Développer , en utilisant la fonction précédente, la fonction void saisie_clients(client *C,int n) permettant de Saisir les informations de n clients dans le tableau C. 4.Ecrire la fonction int client_au_rouge(client C[], int n) qui permet de chercher et retourner le nombre de clients ayant des soldes négatives. 5.Définir le main qui permet de: • Saisir le nombre total n des clients de la banque, • Définir un tableau qui regroupe les informations des n clients, • Saisir les données de tous les clients de la banque, • Afficher le nombre de clients ayant des soldes négatives.
  • 20.
  • 21.
  • 22.

Notes de l'éditeur

  • #3 Une structure permet de regrouper plusieurs types de données sous un même nom.Cela permet de créer des types personnalisés adaptés aux besoins du programme. La structure regroupe des éléments de types différents.
  • #4 Notez bien qu’il s’agit de déclarations et non de définitions, l’utilisation d’initialisations est donc exclue. Une structure ne peut pas comporter plus de cent vingt-sept membres. On a la possibilité de déclararer plusiers champs qui ont le meme type
  • #11 Ecrire SaisirEtudiant de deux façons différentes Etudiant SaisirEtudiant() void SaisirEtudiant(Etudiant *e)
  • #15 Comment accéder à chaque champs: Comment accéder au nom de l etudiant 1 Comment accéder à la note de l etudiant 2 Comment accéder au jour de naissance de l etudiant 3 Comment accéder à la 3 ème note du 3 ème étudiant