structuresx

33
CPGE- T ANGER ( 201 1/2012) www.moncpge.c.la ZBAKH Abdel Ali Année Universitaire : 2011-2012 Professeur :

Upload: ayman-aniked

Post on 06-Apr-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Structuresx

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 :

Page 2: Structuresx

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

Page 3: Structuresx

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

Page 4: Structuresx

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;

:

};

Page 5: Structuresx

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;

};

Page 6: Structuresx

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;

};

Page 7: Structuresx

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;

};

Page 8: Structuresx

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

Page 9: Structuresx

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;

Page 10: Structuresx

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;

}

Page 11: Structuresx

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;

Page 12: Structuresx

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;

}

Page 13: Structuresx

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.

Page 14: Structuresx

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 = …;

Page 15: Structuresx

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";

}

Page 16: Structuresx

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);}

Page 17: Structuresx

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

Page 18: Structuresx

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};

}

Page 19: Structuresx

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);

}}

Page 20: Structuresx

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

Page 21: Structuresx

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

Page 22: Structuresx

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

Page 23: Structuresx

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

Page 24: Structuresx

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;

}

Page 25: Structuresx

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 ;;

Page 26: Structuresx

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; */ ; */ 

Page 27: Structuresx

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);

}

Page 28: Structuresx

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

Page 29: Structuresx

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

Page 30: Structuresx

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);

Page 31: Structuresx

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

Page 32: Structuresx

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

Page 33: Structuresx

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