Vous êtes sur la page 1sur 33

CPGE-TANGER ( 2011/2012)

www.moncpge.c.la

Professeur : ZBAKH Abdel Ali

Anne Universitaire : 2011-2012

Types composs :

En plus des types de base (entier, rels, caractres, etc) il est possible dans la plupart des langages de programmation de dfinir ses propres types. Il sagit en fait de rassembler une ou plusieurs variables, qui peuvent tre de types diffrents, et de les regrouper sous un seul nom afin de les manipuler plus facilement. Structure

CPGE Tanger

Les structures : Dfinition Une structure est une variable qui regroupe une ou plusieurs variables, non ncessairement de mme type (contrairement aux tableaux), appeles champs.
Exemple: char nom[20]; char prenom[20]; int age;

Personne

champs

CPGE Tanger

Cration dun type structure : Linstruction struct permet de crer des structures
Syntaxe: struct nom_structure type var1; type var2; : };

CPGE Tanger

Cration dun type structure:

Exemple 1:

struct personne { char nom[20]; char prenom[20]; int age; };

CPGE Tanger

Cration dun type structure:

Exemple 2:

struct complexe { double reelle; double imaginaire; };

CPGE Tanger

Cration dun type structure:

Exemple 3:

struct point { int x; int y; int z; };

CPGE Tanger

Cration des variables de type "structure": On peut maintenant dclarer des variables de type structure.
Syntaxe: struct nomDeLaStructure nomDeLaVariable;

Cette cration entrane la rservation dune zone mmoire suffisante pour stocker tous les champs de la structure

N.B: La taille rserve en mmoire est la somme des tailles des champs

CPGE Tanger

Cration des variables de type "structure":

Exemple :
struct personne { struct personne char nom[20]; char prenom[20]; int age; }; main() { struct personne p1,p2; } } p1,p2; { char nom[20]; char prenom[20]; int age;

CPGE Tanger

Utilisation de typedef : Le mot-cl typedef permet d'associer un nom un type donn.


Exemple :

typedef int entier; main() { entier a,b; }

CPGE Tanger

10

Utilisation de typedef avec une structure :

Syntaxe: typedef struct nom_structure { Type var1; Type var2; : } Nouveau_nom;

CPGE Tanger

11

Utilisation de typedef avec une structure :


Exemple :

struct personne { char nom[20]; char prenom[20]; int age; };


main() { struct personne p1,p2; }

typedef struct personne { char nom[20]; char prenom[20]; int age; } Personne;

typedef struct { char nom[20]; char prenom[20]; int age; } Personne;


main()

main() { Personne p1,p2; }

{ Personne p1,p2; }

CPGE Tanger

12

UTILISATION D'UNE STRUCTURE :

En C, il est possible d'utiliser une structure de deux manires : en travaillant individuellement sur chacun de ses champs, en travaillant de manire "globale" sur l'ensemble de la structure.

CPGE Tanger

13

Accs au champs dune structure


Utilisation des champs d'une structure [ Accs au champs ]

On accde aux diffrents membres dune structure grce loprateur membre de structure, not .
Syntaxe: nomDeLaVariable.nomDuChamp1 = ;

CPGE Tanger

14

Accs au champs dune structure


Exemple 1:
struct personne { char nom[20]; char prenom[20]; int age; }; main() { struct personne p1,p2; p1.age=20; p1.prenom="samir"; p2.age=18; p2.prenom="rachid"; }

CPGE Tanger

15

Accs au champs dune structure


Exemple 2:
#include <stdio.h> #include <math.h> struct complexe { double reelle; double imaginaire; }; 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); }

CPGE Tanger

16

UTILISATION D'UNE STRUCTURE :


Utilisation globale d'une structure :

Il est possible d'affecter une structure le contenu d'une structure dfinie partir du mme modle. Par exemple, si les structures p1et p2 ont t dclares suivant le modle personne dfini prcdemment, nous pourrons crire :
p1=p2;
Une telle affectation globale remplace p1.nom= p2.nom; p1.prenom= p2.prenom; p1.age=p2.age;

CPGE Tanger

17

UTILISATION D'UNE STRUCTURE :


Initialisations des tructures :

Comme les tableaux, Il est possible d'initialiser explicitement les structures avec des expressions constantes :
struct personne { char nom[20]; char prenom[20]; int age; }; main() { struct personne p1={"Mrabit", "Hicham", 30}; }

CPGE Tanger

18

Les structures et les tableaux :


Une structure peut contenir des tableaux. Un tableau peut contenir des structures.
struct personne

Exemple :

{ char nom[20]; char prenom[20]; int age; }; 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); }}

CPGE Tanger

19

Exercices :
Exercice 1 :

Ecrire un programme qui : a) lit au clavier des informations dans un tableau de structures du type point dfini comme suit : struct point { int num ; float x ; float y ; } Le nombre d'lments du tableau sera fix par une instruction #define. b) affiche l'cran l'ensemble des informations prcdentes.

CPGE Tanger

20

Exercices :
Exercice 2 :

Raliser la mme chose que dans l'exercice prcdent, mais en prvoyant, cette fois, une fonction pour la lecture des informations et une fonction pour l'affichage.

CPGE Tanger

21

Exercices :
Exercice 3 :

Ecrire un programme de saisie de donnes pour un rpertoire (nom, prnom, tlphone). Ces donnes doivent tre places dans un tableau de structures, chacune delles contenant un enregistrement. Le programme devra contenir une fonction daffichage de toutes les donnes.

CPGE Tanger

22

Exercices :
Exercice 4 :

Dfinir la structure permettant de reprsenter un nombre complexe. Dfinir les fonctions complexes suivantes (passages par valeur) : double imag(Complex z), double real(Complex z), Complex mul(Complex z1, Complex z2), double abs(Complex z), Rcrire ces fonctions en utilisant le passage par adresses.

CPGE Tanger

23

Les structures imbriques


Struct date {int jour; int mois; int annee; }; Struct personne {char nom[10]; 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; }
CPGE Tanger 24

Structures et Pointeurs
Pointeur sur une structure :

Comme pour les types de base, on peut utiliser des pointeurs sur une structure :

struct personne *p,p1; *p,p1 p= &p1 ; &p1

p contiendra ladresse du premier champ de la structure p1

CPGE Tanger

25

Structures et Pointeurs
Utilisation des champs d'une structure [ Le cas des pointeurs ]

Si p est un pointeur sur une structure, on peut accder un membre de la structure point par lexpression: (*p).membre Cette notation peut tre simplifie grce loprateur

pointeur de membre de structure, not -> p->membre


struct personne *p,p1; *p,p1 p= &p1 ; &p1 p->age= 22; age= 22;

/* Ou (*p).age= 22; */ (*p).age= 22;

CPGE Tanger

26

Structures et Pointeurs : Exemple


struct personne {char nom[10]; char prenom[10]; int age; }; int main() { struct personne *pf ; struct personne a; pf = &a ; 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); }
CPGE Tanger 27

Structures et Fonctions
Les structures en arguments (Passage par valeur) :
struct personne

On peut transmettre une structure par valeur (contrairement au tableau) et on travaille dans l'appele sur une copie:

{ char nom[20]; char prenom[20]; int age; }; void Afficher_personne( struct personne p) { printf(" le nom est : %s\n" ,p.nom); printf(" le prnom est : %s\n" ,p.prenom); printf(" \age est : %d\n" ,p.age); } main() { struct personne p1={"Mrabit", "Hicham", 30}; Afficher_personne(p1); }

CPGE Tanger

28

struct personne { char nom[20]; Structures et Fonctions prenom[20]; char int age;

Les structures en arguments }; (Passage par adresse) : void changer_personne( struct personne *p)
{ (*p).nom="Alaoui"; /* ou p->nom="Alaoui"; */ (*p).prenom="Hassan"; /* ou p->prenom="Hassan"; */

Pour changer les } void valeurs de la structure, Afficher_personne( struct personne p) { on envoie un pointeur : le nom est : %s\n" ,p.nom); printf("
printf(" le prnom est : %s\n" ,p.prenom); printf(" \age est : %d\n" ,p.age); }

(*p).age=20; /* ou p->age=20; */

main() {struct personne p1={"Mrabit", "Hicham", 30}; Afficher_personne(p1); changer_personne(&p1); Afficher_personne(p1);


CPGE Tanger

29

struct personne

Structures et Fonctions
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;

Le langage C autorise raliser des fonctions qui fournissent en retour la valeur d'une structure. :

}
void Afficher_personne( struct personne p) { printf(" le nom est : %s\n" ,p.nom); printf(" le prnom 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); }

CPGE Tanger

30

Exercice 1 :
Soit le modle (type) de structure suivant : typedef struct point { char c ; // lettre attribue au point int x; // ses coordonnes int y; // ses coordonnes } Point ; crire une fonction qui reoit en argument une structure de type point et qui en affiche le contenu sous la forme : point B de coordonnes 10 12 En transmettant en argument la valeur de la structure concerne, En transmettant en argument ladresse de la structure concerne, Dans les deux cas, on crira un petit programme dessai de la fonction ainsi ralise.
CPGE Tanger 31

Exercice 2 :
Soit le type structure suivant, reprsentant un point dun plan : typedef struct point { char c ; // lettre attribue au point int x; // ses coordonnes int y; // ses coordonnes } Point ; 1. crire une fonction qui reoit en argument ladresse dune structure du type point et qui renvoie en rsultat une structure de mme type correspondant un point de mme nom et de coordonnes opposes.
1.

crire un petit programme dessai.

CPGE Tanger

32

Exercice 3 :
Soit le type structure enreg dfini ainsi :
const int NMOIS = 12 ; // ou define NMOIS 12 typedef struct enreg { int stock ; float prix ; int ventes[NMOIS]; } Enreg;

crire une fonction nomme RAZ qui met zro les champs stock et ventes de la structure Enreg, transmise en argument. La fonction ne comportera pas de valeur de retour. 2. crire un petit programme dessai qui affecte tout dabord des valeurs aux diffrents champs dune telle structure, avant de leur appliquer la fonction RAZ . On affichera les valeurs de la structure, avant et aprs appel (on pourra saider dune fonction daffichage).
1.

CPGE Tanger

33