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

Programmation C2 - Chapitre 3 - Les Structures

Le document présente un cours de programmation en C, axé sur les structures de données. Il explique comment déclarer, initialiser et accéder aux champs d'une structure, ainsi que l'utilisation de typedef et de pointeurs de structure. Des exemples pratiques et des exercices sont fournis pour illustrer les concepts abordés.

Transféré par

simoatir2
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)
62 vues37 pages

Programmation C2 - Chapitre 3 - Les Structures

Le document présente un cours de programmation en C, axé sur les structures de données. Il explique comment déclarer, initialiser et accéder aux champs d'une structure, ainsi que l'utilisation de typedef et de pointeurs de structure. Des exemples pratiques et des exercices sont fournis pour illustrer les concepts abordés.

Transféré par

simoatir2
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

UNIVERSITÉ CHOUAIB DOUKKALI

FACULTÉ DES SCIENCES


El Jadida

PROGRAMMATION C 2
Pr. I. EL GUABASSI
[email protected]

Tronc Commun National

Informatique Appliquée

FS - EL JADIDA 2023/2024
2 Plan

❑ Chapitre 1 : Rappels

❑ Chapitre 2 : Pointeurs et allocation dynamique de la mémoire

❑ Chapitre 3 : Les structures

❑ Chapitre 4 : Récursivité

❑ Chapitre 5 : Evaluation de la complexité de l’algorithme

❑ Chapitre 6 : Tri et recherche

❑ Chapitre 7 : Les fichiers


CHAPITRE 3

❑ Les structures
o Introduction
o Déclaration
o Initialisation
o Accès aux champs d’une structure
o Structure comportant des tableaux
o Structure comportant d’autres structures
o Tableaux de structures
o Utilisation de typedef
o Pointeurs de structure
o Structures et fonctions
4 Les structures
Introduction

Un tableau permet de regrouper sous un seul nom un


ensemble de valeurs de même type, repérées par des indices.
Cependant, comment puis-je désigner sous un seul nom un
ensemble de valeurs pouvant être de types différents?
Problème

En langage C, vous pouvez utiliser une structure. En fait, une


structure est un moyen de regrouper différentes variables
sous un même nom, chaque variable pouvant être de type
Solution différent
5 Les structures
Introduction

Chaque avion est caractérisé par

Un type
Un modèle
Un nombre de passagers
Etc.

Les mêmes caractéristiques pour chaque avion.


6 Les structures
Introduction
Un type
Un avion est caractérisé par Un modèle
Un nombre de passagers
Etc.

Un CNE
Un Nom
Un étudiant est caractérisé par Un Prénom
Etc.

Une matricule
Un modèle
Une voiture est caractérisée par Une marque
Etc.
7 Les structures
Introduction

char type[20] char CNE[20] char matricule[20]

char modele[20] char nom[20] char modele[20]

char prenom[20] char marque[20]


int nbrPassagers

Structure Avion Structure Etudiant Structure Voiture


8 Les structures
Introduction

• Une structure est un nouveau type de données constitué par un ensemble


de variables (champs) qui peuvent être hétérogènes et de types différents
• La différence avec le type tableau est que les champs d’un tableau sont
tous homogènes et du même type
• Les structures permettent de représenter des objets réels caractérisées par
plusieurs informations, par exemple :
o Une personne caractérisée par son nom (chaîne), son âge (entier), sa
taille (réel), etc.
o Une voiture caractérisée par sa marque (chaîne), sa couleur (chaîne),
son année modèle(entier), etc.
9 Les structures
Introduction

Définir une variable de type structure suppose avoir d'abord défini le modèle
de cette structure en décrivant l'ensemble des champs contenus et en lui
associant un nom. Un modèle de structure constitue en fait un nouveau type
de variable défini par l'utilisateur

Nom du champ

• Chaque élément de la structure est nommé champ


• L’accès à un champ se fait par son nom dans la structure
10 Les structures
Déclaration
La déclaration d'une structure s'effectue en précisant le nom de la structure,
ainsi que le nom et le type de ses champs

Syntaxe Exemple

struct NomStructure {
struct Etudiant {
type champ1; char Nom[30];
int Age;
type champ2;
float MoyenneScolaire;
type champn; };
/* Cette structure contient 3
};
champs de différents types */
/* ne pas oublier le ; */
11 Les structures
Déclaration Remarques

✓ Le nom des champs répond aux critères des noms de variables

✓ Deux champs ne peuvent avoir le même nom

✓ Les données peuvent être de n'importe quel type hormis le type de

la structure dans laquelle elles se trouvent

✓ La déclaration d'une structure ne fait que donner le modèle ou la

forme de la structure, c'est-à-dire en quelque sorte une définition

d'un type de variable complexe.


12 Les structures
Définition d’une variable de type structure

La définition d'une variable structurée est une opération qui consiste à


créer une variable ayant comme type celui d'une structure que l’on a
précédemment déclaré, Ceci peut se faire soit :
Après la déclaration de la Au moment de la déclaration de la
structure structure
struct Etudiant { struct Etudiant {
char Nom[30]; char Nom[30];
int Age; int Age;
float MoyenneScolaire; float MoyenneScolaire;
}; } E1, E2;
struct Etudiant E1, E2; /*deux variables de type struct personne*/

Syntaxe struct <Nom_Structure> <Variable>;


13 Les structures
Définition d’une variable de type structure

En mémoire, en déclarant les variables E1, et E2, l’espace réservé aura


l'aspect suivant :

Nom Age MoyenneScolaire


E1

Nom Age MoyenneScolaire


E2
14 Les structures
Initialisation
Lors de la déclaration d’une variable structure, on peut initialiser ses
champs avec une notation semblable à celle utilisée pour les tableaux en
indiquant la liste des valeurs respectives entre accolades {}. Chaque
valeur étant une constante ayant le type du champ correspondant.
Exemples

struct Etudiant { struct date {


int niveau; unsigned short jour;
float moyenne; char mois[10];
}; unsigned short annee;
struct Etudiant E1 = {2, 10.9}; };
struct Etudiant E2 = {2, 12.5}; struct date d1= {15,"Novembre", 2013};
15 Les structures
Accès aux champs d’une structure

Chaque variable de type structure possède des champs repérés avec des

noms uniques. Toutefois le nom des champs ne suffit pas pour y accéder

étant donné qu'ils n'ont de contexte qu'au sein de la variable structurée.

Il est possible d'utiliser une structure de deux manières :

✓ en travaillant individuellement sur chacun de ses champs

✓ en travaillant de manière "globale" sur l'ensemble de la structure.


16 Les structures
Accès aux champs d’une structure Utilisation des champs d'une structure

Chaque champ d'une structure peut être manipulé comme n'importe quelle
variable du type correspondant. La désignation d'un champ se note en
faisant suivre le nom de la variable structure de l'opérateur "point" (.) suivi
du nom de champ tel qu'il a été défini dans le modèle.

Exemple
struct personne p1 ;
p1.age= 20 ;
printf ("%d", p1.age) ;
scanf ("%s",p1.nom) ;
puts(p1.nom) ;
17 Les structures
Accès aux champs d’une structure Utilisation globale d'une structure

Le langage C permet d'effectuer des affectations de structures, en utilisant


l'opérateur d'affectation =, comme pour n'importe quel autre type de données.
Notez que celui-ci affecte l'ensemble des champs de la structure ; si vous ne
souhaitez copier que quelques uns de ses champs, il vous faudra les copier un
par un. De plus, il n'est possible d'affecter que des structures de même type !

Exemple

strcpy(fils1.nom,fils2.nom);
fils1 = fils2 ; strcpy(fils1.prenom,fils2.prenom);
fils1.age= fils2.age;
18 Les structures
19 Les structures
Exercice

Ecrire un programme C qui définit une structure point qui contiendra


les deux coordonnées d’un point du plan. Puis lit deux points et affiche
la distance entre ces deux derniers.

AB=√(x2−x1)2 +(y2−y1)
2
20 Les structures
#include<stdio.h>
Solution
#include<math.h>
struct point{
float x;
float y;
};
int main() {
struct point A,B;
float dist;
printf("Entrez les coordonnees du point A:\n");
scanf("%f%f",&A.x,&A.y);
printf("Entrez les coordonnees du point B:\n");
scanf("%f%f",&B.x,&B.y);
dist = sqrt( (B.x-A.x)*(B.x-A.x) + (B.y-A.y)*(B.y-A.y) );
printf("La distance entre les points A et B est: %.2f\n",dist);
return 0;
}
21 Les structures
Structure comportant des tableaux

Une structure peut contenir des champs de type chaîne de caractères


ou bien de type tableau

Exemple

struct UnEtudiant {
char nom [30];
char prenom [30];
float notes [4];
int niveau;
float moyenne;
};
struct UnEtudiant Etudiant1, Etudiant2;
22 Les structures
Structure comportant des tableaux

Notation
Etudiant1.nom[0] /*le premier caractère du champ nom de l’étudiant Etudiant1*/
Etudiant2.notes[3] /*la quatrième note du tableau notes de l’étudiant Etudiant2*/
notes niveau
Initialisation nom prenom moyenne

struct UnEtudiant Etudiant1 = {"Ben Salem", "Ali",{10.0,12.5,13.6, 7.5},2,10.9};


struct UnEtudiant Etudiant2 = {"Selmi ", "Ahmed",{12.0,12.5,14.0, 11.5},2,12.5};

Utilisation
strcpy (Etudiant1.nom, "Ben Salem");
Etudiant1.notes[2] = 13.6;
printf ("%f", Etudiant2.notes[i]);
23 Les structures
Structure comportant d’autres structures
Une structure peut contenir aussi des champs de type structure. Cette
dernière doit être différente de la première.

struct Date {
int jour;
int mois;
int annee;
};
struct UnEtudiant {
char nom [30] ;
char prenom [30] ;
struct Date dateNais ;
};
24 Les structures
Structure comportant d’autres structures

Initialisation année
jour
struct UnEtudiant Etudiant1 = {"Ali", "Ben Salem", {1, 1, 2000}};

mois
Utilisation

Etudiant1.date.jour = 1;
scanf("%d %d %d",&Etudiant1.dateNais.jour, &Etudiant1.dateNais.mois,
&Etudiant1.dateNais.annee);
25 Les structures
Tableaux de structures

Étant 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:

Etudiant [4] :

Etudiant [0] Etudiant [1] Etudiant [2] Etudiant [3]

Assal Zidani ZAHNOUNE Tahiri


Sanae Oumaima Fadoua Yassine
18 20 22 18
26 Les structures
Tableaux de structures

Déclaration
struct <Nom_Structure> {
<type_champ1> <Nom_Champ1>; Accès

<type_champN> <Nom_ChampN>; A un élément du tableau :
};
<Tab_Struct>[i] (structure N° i)
struct <Nom_Structure> <Tab_Struct>[N];
A un élément d’une structure :
<TabStruct>[i].<NomChampj>

Exemple
27 Les structures
Tableaux de structures Exemple

Soit la déclaration suivante : On peut écrire les instructions suivantes :

struct Etudiant { for (i = 0; i < 50; i++) {


printf ("Entrez le nom de l ’étudiant n°%d ", i+1);
char nom [30] ; scanf ("%s", tab[i].nom);
char prenom [30] ; printf ("Entrez le prénom de l’étudiant n°%d ", i+1);
scanf ("%s", tab[i].prenom);
float notes [4] ; for (j =0; j < 4; j++) {
}; printf ("Entrez la note %d de l’étudiant %d ", j+1, i+1);
scanf ("%f", &tab[i].notes[j]);
struct Etudiant tab [50]; }
}
28 Les structures
Utilisation de typedef

Comment puis-je éviter d’utiliser le mot-clé struct à chaque


utilisation d'une variable de type Etudiant ?
struct Etudiant {
int niveau;
float moyenne;
Problème
};
struct Etudiant E1 = {2, 10.9};
struct Etudiant E2 = {2, 12.5};
struct Etudiant E2 = {2, 11.5};

Pour éviter d'utiliser le mot-clé struct à chaque utilisation


d'une variable de type Etudiant, vous pouvez utiliser la
Solution directive typedef.
29 Les structures
Utilisation de typedef

Le mot-clé typedef permet d'associer un nom à un type donné. La principale


utilité des typedef est de faciliter l'écriture des programmes. Lorsqu'on donne
un nom à un type structure par typedef, l'utilisation est beaucoup plus aisée.

Exemple
typedef struct {
char nom[32] ;
char prenom[32] ;
int age ;
} personne ;
personne p1 ;
p1.age= 20 ;
printf ("%d", p1.age) ;
scanf ("%s",p1.nom) ;
puts(p1.nom) ;
30 Les structures
Pointeurs de structure

Il est aussi possible d'accéder aux champs d'une structure en utilisant


un pointeur sur cette structure :
✓ Si p est un pointeur sur une structure, on peut accéder à un
membre de la structure pointé par l’expression: (*p).membre
✓ Cette notation peut être simplifiée grâce à l’opérateur pointeur de
membre de structure, noté -> (tiret et supérieur) : p->membre

Exemple
31 Les structures
Pointeurs de structure Exemple
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int day;
int month;
int year;
} Date;
int main() {
Date *Date_ptr=(Date*)malloc(sizeof(Date));
Date_ptr->month = 9;
Date_ptr->day = 25;
Date_ptr->year = 1983;
printf("Today is %d/%d/%d",Date_ptr->month,Date_ptr->day,Date_ptr->year % 100);
free(Date_ptr);
return 0; }
32 Les structures
Structures et Fonctions Transmission de la valeur d'une structure
struct personne {
Une structure peut être utilisée
char nom[20];
char prenom[20];
comme argument d’une fonction int age;
et transmise par valeur };
void Afficher_personne( struct personne p) {
printf(" le nom est : %s\n" ,p.nom);
printf(" le prénom est : %s\n" ,p.prenom);
printf(" \’age est : %d\n" ,p.age);
}
main() {
struct personne p1={"Mrabit", "Hicham", 30};
Afficher_personne(p1);
}
33 Les structures
Structures et Fonctions Transmission de l'adresse d'une structure
Pour changer les valeurs de la structure, on envoie un pointeur
struct personne {
char nom[20];
char prenom[20];
int age;
}; main() {
void changer_personne( struct personne *p) { struct personne p1={"Hatri","Ali",30};
strcpy((*p).nom,"Alaoui"); Afficher_personne(p1);
strcpy((*p).prenom,"Hassan"); changer_personne(&p1);
(*p).age=20; Afficher_personne(p1);
} }
void Afficher_personne( struct personne p) {
printf(" le nom est : %s\n" ,p.nom);
printf(" le prénom est : %s\n" ,p.prenom);
printf(" \’age est : %d\n" ,p.age); }
34 Les structures
Structures et Fonctions Structure en valeur de retour
Le langage C autorise à réaliser des fonctions qui fournissent en retour la valeur
d'une structure main() {
struct personne { struct personne p1={"Harti", "Ali", 30};
char nom[20]; Afficher_personne(p1);
char prenom[20]; p1=changer_personne(p1);
int age; }; Afficher_personne(p1); }
struct personne changer_personne( struct personne p) {
strcpy(p.nom,"Alaoui");
strcpy(p.prenom,"Hassan");
p.age=20;
return p; }
void Afficher_personne( struct personne p) {
printf(" le nom est : %s\n" ,p.nom);
printf(" le prénom est : %s\n" ,p.prenom);
printf(" \’age est : %d\n" ,p.age); }
35 Les structures
36 Les structures
Exercice

Ecrire un programme C qui définit une structure Etudiant où un


étudiant est représenté par son nom, son prénom et une note. Lit
ensuite une liste d’étudiants entrée par l’utilisateur et affiche les
noms de tous les étudiants ayant une note supérieure ou égale
à 10 sur 20.
37 Les structures
Solution int main() {
struct Etudiant t[100];
int n,i;
printf("Donner le nombre d'etudiants:\n");
scanf("%d",&n);
#include<stdio.h> for(i=0;i<n;i++) {
struct Etudiant{ printf("donnez le nom, prenom et la note de
char nom[20]; l'etudiant %d:\n",i+1);
char prenom[20]; scanf("%s%s%d",t[i].nom,t[i].prenom,&t[i].note);
int note; }
}; for(i=0;i<n;i++) {
if(t[i].note>=10)
printf("%s %s\n",t[i].nom,t[i].prenom);
}
return 0;
}

Vous aimerez peut-être aussi