structuresx
TRANSCRIPT
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 1/33
CPGE-TANGER ( 2011/2012)
www.moncpge.c.la
ZBAKH Abdel Ali
Année Universitaire : 2011-2012
Professeur :
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 2/33
Types composés :
En plus des types de base ( entier, réels, caractères,
etc) il est possible dans la plupart des langages deprogrammation de définir ses propres types. Il s’agit
en fait de rassembler une ou plusieurs variables, qui
CPGE –Tanger
peuvent être de types différents, et de les regroupersous un seul nom afin de les manipuler plus
facilement.
2
Structure
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 3/33
Les structures : Définition
Une structure est une variable qui regroupe une ou
plusieurs variables, non nécessairement de même type
(contrairement aux tableaux), appelées champs.
Exemple:
CPGE –Tanger 3
char nom[20];
char prenom[20];
int age;Personne
champs
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 4/33
Création d’un type structure :
L’instruction struct permet de créer des structures
Syntaxe:
struct nom_structure
t e var1
CPGE –Tanger 4
type var2;
:
};
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 5/33
Création d’un type structure:
Exemple 1:
struct personne
{
CPGE –Tanger 5
char nom[20];char prenom[20];int age;
};
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 6/33
Création d’un type structure:
Exemple 2:
struct complexe{
CPGE –Tanger 6
double imaginaire;
};
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 7/33
Création d’un type structure:
Exemple 3:
struct point
{
int x;
CPGE –Tanger 7
int y;int z;
};
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 8/33
Création des variables de type "structure":
On peut maintenant déclarer des variables de type
structure.
Syntaxe:
CPGE –Tanger 8
;
Cette création entraîne la réservation d’une zone mémoire suffisantepour stocker tous les champs de la structure
N.B: La taille réservée en mémoire est la somme des tailles des champs
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 9/33
Création des variables de type "structure":
struct personne
{
char nom 20 ;
Exemple :
struct personne
{
CPGE –Tanger 9
char prenom[20];int age;
};
main()
{struct personne p1,p2;
}
char nom[20];char prenom[20];int age;
} p1,p2;
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 10/33
Utilisation de typedef :
Le mot-clé typedef permet d'associer un nom à un
type donné.
typedef int entier;
Exemple :
CPGE –Tanger 10
main(){
entier a,b;
}
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 11/33
Utilisation de typedef avec une structure :
Syntaxe:
typedef struct nom_structure
CPGE –Tanger 11
Type var1;
Type var2;
:
} Nouveau_nom;
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 12/33
Utilisation de typedef avec une structure :
Exemple :
struct personne
{
char nom[20];
typedef struct personne
{char nom[20];char prenom[20];
typedef struct
{ char nom[20];char prenom[20];int age;
CPGE –Tanger 12
int age;
};main()
{struct personne p1,p2;
}
nt age;
} Personne;
main()
{
Personne p1,p2;
}
} Personne;
main()
{
Personne p1,p2;
}
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 13/33
UTILISATION D'UNE STRUCTURE :
En C, il est possible d'utiliser une structure de deux
manières :
en travaillant individuellement sur chacun de ses
CPGE –Tanger 13
,
en travaillant de manière "globale" sur l'ensemble
de la structure.
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 14/33
Accès au champs d’une structure
On accède aux différents membres d’une structure
grâce à l’opérateur membre de structure, noté “.”
Utilisation des champs d'une structure [ Accès au champs ]
CPGE –Tanger 14
Syntaxe:
nomDeLaVariable.nomDuChamp1 = …;
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 15/33
Accès au champs d’une structure
struct personne
{char nom[20];
char prenom[20];int age;
};
main()
Exemple 1:
CPGE –Tanger 15
{struct personne p1,p2;
p1.age=20;
p1.prenom="samir";
p2.age=18;
p2.prenom="rachid";
}
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 16/33
Accès au champs d’une structure
#include <stdio.h>#include <math.h>
struct complexe{double reelle;double imaginaire;
Exemple 2:
CPGE –Tanger 16
main(){struct complexe z;double norme;z.reelle=5,
z.imaginaire=3,norme = sqrt(z.reelle * z.reelle + z.imaginaire * z.imaginaire);printf("norme de (%f + i %f) = %f \n",z.reelle,z.imaginaire,norme);}
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 17/33
UTILISATION D'UNE STRUCTURE :
Il est possible d'affecter à une structure le contenu
d'une structure définie à partir du même modèle. Par exemple, si les structures p1et p2 ont été
déclarées suivant le modèle personne défini
Utilisation globale d'une structure :
CPGE –Tanger 17
précédemment, nous pourrons écrire :p1=p2;
p1.nom= p2.nom;p1.prenom= p2.prenom;p1.age=p2.age;
Une telle affectation globale remplace
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 18/33
UTILISATION D'UNE STRUCTURE :
Comme les tableaux, Il est possible d'initialiser
explicitement les structures avec des expressionsconstantes :
Initialisations des tructures :
struct personne
CPGE –Tanger 18
{ char nom[20];char prenom[20];int age;
};
main(){
struct personne p1={"Mrabit", "Hicham", 30};
}
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 19/33
Les structures et les tableaux :
Une structure peut contenir des tableaux.
Un tableau peut contenir des structures.
Exemple :
struct personne
{ char nom[20];char prenom[20];int age;
CPGE –Tanger 19
main(){int i;
struct personne p[5];
for(i=0;i,<5;i++)
{ printf("structure N %d ",i);scanf("%s",p[i].nom);
scanf("%s",p[i].prenom);
scanf("%d",&p[i].age);
}}
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 20/33
Exercices :
Ecrire un programme qui :
a) lit au clavier des informations dans un tableau de structures du typepoint défini comme suit :
struct oint
Exercice 1 :
CPGE –Tanger
int num ;float x ;float y ;
}
Le nombre d'éléments du tableau sera fixé par une instruction #define.b) affiche à l'écran l'ensemble des informations précédentes.
20
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 21/33
Exercices :
Réaliser la même chose que dans l'exercice précédent, mais en
Exercice 2 :
CPGE –Tanger
prévoyant, cette fois, une fonction pour la lecture des informations et
une fonction pour l'affichage.
21
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 22/33
Exercices :
Ecrire un programme de saisie de données pour un répertoire (nom,
Exercice 3 :
CPGE –Tanger
pr nom, p one . es onn es o ven re p ac es ans un
tableau de structures, chacune d’elles contenant un enregistrement.
Le programme devra contenir une fonction d’affichage de toutes les
données.
22
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 23/33
Exercices :
Définir la structure permettant de représenter un nombre complexe.
Définir les fonctions complexes suivantes (passages par valeur) :
– double imag(Complex z),
Exercice 4 :
CPGE –Tanger
– double real(Complex z),
– Complex mul(Complex z1, Complex z2),
– double abs(Complex z),
Réécrire ces fonctions en utilisant le passage par adresses.
23
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 24/33
Les structures imbriquées
Struct date{int jour;int mois;
int annee;};
Struct personnechar nom 10 ;
CPGE –Tanger 24
char prenom[10];Struct date date_embauche;Struct date date_poste;};
main()
{struct personne p1;p1.date_embauche.annee= 1985;p1.date_poste.annee= p1.date_embauche.annee;
}
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 25/33
Structures et Pointeurs
Comme pour les types de base, on peut utiliser des« pointeurs sur une structure » :
Pointeur sur une structure :
structstruct ersonne ** 11
CPGE –Tanger 25
⇒ pp contiendra l’adresse du premier champ de la structure p1
p= &pp= &p11 ;;
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 26/33
Structures et Pointeurs
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
Utilisation des champs d'une structure [ Le cas des pointeurs ]
CPGE –Tanger 26
, -
p->membre
structstruct personne *p,p*p,p11;;
p= &pp= &p11 ;;pp-->>ageage== 2222; /*; /* Ou (*p).(*p).ageage== 2222; */ ; */
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 27/33
Structures et Pointeurs : Exemple
struct personne{char nom[10];char prenom[10];int age;};
int main(){struct personne *pf ;struct personne a;f = &a
CPGE –Tanger 27
pf->age = 15 ;a.age = pf->age + 2 ;
strcpy( pf->nom, “Bennani" ) ;printf(" Donnez votre prenom : " ) ;scanf("%s", pf->prenom ) ;
printf(" l\’age est %d\n", a.age);printf(" votre prenom est %s\n", a. prenom );printf(" votre nom est %s\n", a.nom);
}
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 28/33
Structures et Fonctions
On peut transmettre une
structure par valeur(contrairement au
tableau) et on travaille
Les structures en arguments (Passage par valeur) :
struct personne
{char nom[20];char prenom[20];int age;
};
void Afficher_personne( struct personne p)
CPGE –Tanger 28
dans l appel e sur unecopie: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);
}
struct personne
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 29/33
Structures et Fonctions
Pour changer les
valeurs de la structure
Les structures en arguments(Passage par adresse) :
struct personne
{ char nom[20];char prenom[20];int age;
};void changer_personne( struct personne *p)
{
(*p).nom="Alaoui"; /* ou p->nom="Alaoui"; */
(*p).prenom="Hassan"; /* ou p->prenom="Hassan"; */ (*p).age=20; /* ou p->age=20; */
}void Afficher_personne( struct personne p)
CPGE –Tanger 29
on envoie un pointeur :{
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);
changer_personne(&p1);
Afficher_personne(p1);}
struct personne
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 30/33
Structures et Fonctions
Le langage C
autorise à réaliser
Structure en valeur de retour:
{ char nom[20];char prenom[20];int age;
};struct personne changer_personne( struct personne p)
{ p.nom="Alaoui";
p.prenom="Hassan";
p.age=20;return p;
}void Afficher_personne( struct personne p)
CPGE –Tanger 30
des fonctions quifournissent en
retour la valeur
d'une structure. :
{
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 p2,p1={"Mrabit", "Hicham", 30};
Afficher_personne(p1);
p2=changer_personne(p1);
Afficher_personne(p1);Afficher_personne(p2);
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 31/33
Exercice 1 :
Soit le modèle (type) de structure suivant :typedef struct point
{
char c ; // lettre attribuée au pointint x; // ses coordonnées
int y; // ses coordonnées
CPGE –Tanger
Écrire une fonction qui reçoit en argument une structure de type pointet qui en affiche le contenu sous la forme :
point B de coordonnées 10 12 En transmettant en argument la valeur de la structure concernée, En transmettant en argument l’adresse de la structure concernée,
Dans les deux cas, on écrira un petit programme d’essai de lafonction ainsi réalisée.
31
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 32/33
Exercice 2 :
Soit le type structure suivant, représentant un point d’un plan :typedef struct point
{
char c ; // lettre attribuée au point
int x; // ses coordonnées
int y; // ses coordonnées
CPGE –Tanger
} Point ;
1. Écrire une fonction qui reçoit en argument l’adresse d’une structure dutype point et qui renvoie en résultat une structure de même typecorrespondant à un point de même nom et de coordonnées opposées.
1. Écrire un petit programme d’essai.
32
8/3/2019 Structuresx
http://slidepdf.com/reader/full/structuresx 33/33
Exercice 3 :
Soit le type structure enreg défini ainsi :
const int NMOIS = 12 ; // ou define NMOIS 12typedef struct enreg
{ int stock ;float prix ;
int ventes[NMOIS];
} Enreg;
CPGE –Tanger
1. Écrire une fonction nommée RAZ qui « met à zéro » les champs stock etventes de la structure Enreg, transmise en argument. La fonction necomportera pas de valeur de retour.
2. Écrire un petit programme d’essai qui affecte tout d’abord des valeurs auxdifférents champs d’une telle structure, avant de leur appliquer la fonction
RAZ . On affichera les valeurs de la structure, avant et après appel (onpourra s’aider d’une fonction d’affichage).
33