Vous êtes sur la page 1sur 39

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Les structures en C
Pr. Mohamed EL ANSARI
Dpartement dInformatique e Facult des Sciences, Universit Ibn Zohr e e Agadir melansari@gmail.com

Fili`re: SMI4 e Module: Algorithmes & Structures de donnes e

c Printemps 2011
Pr. Mohamed EL ANSARI Les structures en C

Introduction
Une structure est une collection dune ou plusiseurs variables, gnralement, ayant des types dirents. e e e Les variables dune structure sont groupes sous un seul nom. e Les structures permettent dorganiser les donnes e compliques. Les variables lies sont groups en seule entit e e e e au lieu des entits spares. e e e Exemple-1, un employ peut tre dcrit par: e e e
Nom, Prnom. e SOM. Salaire. Adresse. ....

Le nom peut tre aussi dcrit par une structure. e e Exemple-2, un point est une paire de coordonnes, un e rectangle est une paire de points, ...etc.

Dnition dune structure e


Le langage C permet au programmeur de construire ses propres types de donnes agrges. e e e Pour cela, le programmeur doit prciser: e
le nom donn au type; e la composition du type, cest ` dire le nom et la nature des a donnes quil contient. e

La syntaxe de dnition dun type nom nom structure est: e e struct nom structure { type1 var1; type2 var2; type3 var3; ... }; Cette structure dnit le type struct nom structure e compos des variables var1, var2, var3, ... e

Dnition dune structure e


Attention: le mot-cl struct fait partie intgrante du nom du e e type. Le mot-cl struct introduit la dclaration de la structure, qui e e est une liste de dclarations places entre { et }. e e Le mot-cl struct peut tre suivi dune nom quon souhaite e e attribuer ` la structure. Dans ce cas, nom structure. Ce a nom sera utilis par suite se rfrer ` la structure (dclaration e ee a e des variables de ce type). Exemle, un point dun plan 2-D est caractris par ses e e coordonnes x et y. Supposant que les coordonnes sont des e e entiers, la strucure dcrivant un point est dclare en C par: e e e struct point { int x; int y; };

Dnitions e
Les variables nommes dans la structure sont appeles les e e membres ou champs de la structure. La dclaration dune structure dnit un nouveau type. e e Dclaration des variables (instances) du type structure: e
struct { int x; int y; } pt1; Dans ce cas nous navons pas utilis un nom pour identier la e structure. ou bien en utilisant un nom identiant la structure: struct point { int x; int y; }; struct point pt;

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Initialisation, acc`s aux membres e


Les membres peuvent tre initialises au moment de la e e dclaration de la variable de type structure. e struct point pt1 = {20,30}; struct point pt2={2,3}, pt3={-7,50}; Acc`s aux champs seectue comme suit: e NomDeStructure.membre . permet de connecter le nom de la strcture et le nom de la variable membre. Modier les valeurs des champs des structures: pt1.x = -2; pt1.y = 0; pt2.x = pt1.y; pt2.y = 2*pt1.x;
Pr. Mohamed EL ANSARI Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Oprations sur les champs e

Acher les coordonnes du point pt1 : e printf("%d,%d",pt1.x, pt1.y); Calcul de la distance du point pt1 de lorigine (0,0): float dist; dist = (float) sqrt((float)pt1.x*pt1.x + (float)pt1.y*pt1.y);

Pr. Mohamed EL ANSARI

Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Structures imbriques e
Une structure peut comporter pami ses champs dautres structures. Exemple, un rectangle peut tre reprsent par e e e deux points (coins opposs diagonalement). e struct rect{ struct point pt1; struct point pt2; }; La structure rect contient deux structures de type point. Dclaration dune variable screen de type rect: e struct rect screen; /* sans initialisation*/ struct rect screen = {{1,2},{3,4}}; /* avec initialisation*/ screen.pt1.x se rf`re ` la variable x membre du point pt1. ee a
Pr. Mohamed EL ANSARI Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Structures imbriques e
Modication des donnes membres de la variable screen: e screen.pt1.x = -2; screen.pt1.y = 3; /* point pt1 */ screen.pt2.x = -21; screen.pt2.y = 13; /* point pt2 */ Autre exemple dimbriquation: une donne membre tant un e e tableau ` une dimension. a #define NMAX 30 struct vecteur{ int n; int mat[NMAX]; };
Pr. Mohamed EL ANSARI Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Structures et fonctions

Une structure peut tre utilise comme argument ou rsultat e e e dune fonction. Trois possibilits pour le passage des structures aux functions: e
Passer les champs (membres) sparement; e Passer la structure enti`re; e Passer un pointeur sur la structure.

Pr. Mohamed EL ANSARI

Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Structures et fonctions

Une structure peut tre utilise comme argument ou rsultat e e e dune fonction. Trois possibilits pour le passage des structures aux functions: e
Passer les champs (membres) sparement; e Passer la structure enti`re; e Passer un pointeur sur la structure.

Pr. Mohamed EL ANSARI

Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Structures et fonctions

Une structure peut tre utilise comme argument ou rsultat e e e dune fonction. Trois possibilits pour le passage des structures aux functions: e
Passer les champs (membres) sparement; e Passer la structure enti`re; e Passer un pointeur sur la structure.

Pr. Mohamed EL ANSARI

Les structures en C

une fonction qui prend deux entiers et retourne une structure point
struct point { struct temp.x temp.y return } makepoint(int x, int y) point temp; =x; = y; temp;

Attention: il ne faut pas confondre la variable x fournie en argument avec celle qui est membre de la structure temp (de mme pour la variable y). e La fonction makepoint peut tre utilise pour initialiser une structure ou e e fournir les arguments ` une fonction: a struct rect screen; struct point middle; screen.pt1 = makepoint(0,0); screen.pt2 = makepoint(XMAX,YMAX); middle = makepoint((screen.pt1.x+screen.pt2.x)/2, (screen.pt1.y+screen.pt2.y)/2);

une fonction qui prend deux entiers et retourne une structure point
struct point { struct temp.x temp.y return } makepoint(int x, int y) point temp; =x; = y; temp;

Attention: il ne faut pas confondre la variable x fournie en argument avec celle qui est membre de la structure temp (de mme pour la variable y). e La fonction makepoint peut tre utilise pour initialiser une structure ou e e fournir les arguments ` une fonction: a struct rect screen; struct point middle; screen.pt1 = makepoint(0,0); screen.pt2 = makepoint(XMAX,YMAX); middle = makepoint((screen.pt1.x+screen.pt2.x)/2, (screen.pt1.y+screen.pt2.y)/2);

une fonction qui prend deux entiers et retourne une structure point
struct point { struct temp.x temp.y return } makepoint(int x, int y) point temp; =x; = y; temp;

Attention: il ne faut pas confondre la variable x fournie en argument avec celle qui est membre de la structure temp (de mme pour la variable y). e La fonction makepoint peut tre utilise pour initialiser une structure ou e e fournir les arguments ` une fonction: a struct rect screen; struct point middle; screen.pt1 = makepoint(0,0); screen.pt2 = makepoint(XMAX,YMAX); middle = makepoint((screen.pt1.x+screen.pt2.x)/2, (screen.pt1.y+screen.pt2.y)/2);

une fonction qui prend deux entiers et retourne une structure point
struct point { struct temp.x temp.y return } makepoint(int x, int y) point temp; =x; = y; temp;

Attention: il ne faut pas confondre la variable x fournie en argument avec celle qui est membre de la structure temp (de mme pour la variable y). e La fonction makepoint peut tre utilise pour initialiser une structure ou e e fournir les arguments ` une fonction: a struct rect screen; struct point middle; screen.pt1 = makepoint(0,0); screen.pt2 = makepoint(XMAX,YMAX); middle = makepoint((screen.pt1.x+screen.pt2.x)/2, (screen.pt1.y+screen.pt2.y)/2);

une fonction qui prend deux entiers et retourne une structure point
struct point { struct temp.x temp.y return } makepoint(int x, int y) point temp; =x; = y; temp;

Attention: il ne faut pas confondre la variable x fournie en argument avec celle qui est membre de la structure temp (de mme pour la variable y). e La fonction makepoint peut tre utilise pour initialiser une structure ou e e fournir les arguments ` une fonction: a struct rect screen; struct point middle; screen.pt1 = makepoint(0,0); screen.pt2 = makepoint(XMAX,YMAX); middle = makepoint((screen.pt1.x+screen.pt2.x)/2, (screen.pt1.y+screen.pt2.y)/2);

une fonction qui prend deux entiers et retourne une structure point
struct point { struct temp.x temp.y return } makepoint(int x, int y) point temp; =x; = y; temp;

Attention: il ne faut pas confondre la variable x fournie en argument avec celle qui est membre de la structure temp (de mme pour la variable y). e La fonction makepoint peut tre utilise pour initialiser une structure ou e e fournir les arguments ` une fonction: a struct rect screen; struct point middle; screen.pt1 = makepoint(0,0); screen.pt2 = makepoint(XMAX,YMAX); middle = makepoint((screen.pt1.x+screen.pt2.x)/2, (screen.pt1.y+screen.pt2.y)/2);

une fonction qui prend deux entiers et retourne une structure point
struct point { struct temp.x temp.y return } makepoint(int x, int y) point temp; =x; = y; temp;

Attention: il ne faut pas confondre la variable x fournie en argument avec celle qui est membre de la structure temp (de mme pour la variable y). e La fonction makepoint peut tre utilise pour initialiser une structure ou e e fournir les arguments ` une fonction: a struct rect screen; struct point middle; screen.pt1 = makepoint(0,0); screen.pt2 = makepoint(XMAX,YMAX); middle = makepoint((screen.pt1.x+screen.pt2.x)/2, (screen.pt1.y+screen.pt2.y)/2);

Les arguments et la valeur de retour sont des structures

Somme de deux points /* ajouter deux points */ struct point addpoint(struct point p1, struct point p2) { p1.x += p2.x; p1.y += p2.y; return p1; } ... struct point a,b,c; a = makepoint(2,3); b = makepoint(0,-1); c = addpoint(a,b);

Les arguments et la valeur de retour sont des structures

Somme de deux points /* ajouter deux points */ struct point addpoint(struct point p1, struct point p2) { p1.x += p2.x; p1.y += p2.y; return p1; } ... struct point a,b,c; a = makepoint(2,3); b = makepoint(0,-1); c = addpoint(a,b);

Les arguments et la valeur de retour sont des structures

Somme de deux points /* ajouter deux points */ struct point addpoint(struct point p1, struct point p2) { p1.x += p2.x; p1.y += p2.y; return p1; } ... struct point a,b,c; a = makepoint(2,3); b = makepoint(0,-1); c = addpoint(a,b);

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Les arguments sont des pointeurs sur des structures


Dclaration dun pointeur sur une structure: e struct point *pp; pp pointe sur la structure point, (*pp).x et (*pp).y sont les membres. Utilisation du pointeur pp: struct point origin, *pp; pp = &origin; printf("origin is (%d,%d)\n",(*pp).x,(*pp).y); Si p est un pointeur sur une structure, lacc`s aux membre e seectue par : p->membre printf(origin est (%d,%d)\n,ppx,ppy);
Pr. Mohamed EL ANSARI Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Les arguments sont des pointeurs sur des structures


Somme de deux points /* ajouter deux points */ struct point addpoint(struct point *p1, struct point *p2) { p1x += p2x; p1y += p2y; return *p1; } ... struct point a,b,c; a = makepoint(2,3); b = makepoint(0,-1); c = addpoint(&a,&b);
Pr. Mohamed EL ANSARI Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Les arguments sont des pointeurs sur des structures


Somme de deux points /* ajouter deux points */ struct point addpoint(struct point *p1, struct point *p2) { p1x += p2x; p1y += p2y; return *p1; } ... struct point a,b,c; a = makepoint(2,3); b = makepoint(0,-1); c = addpoint(&a,&b);
Pr. Mohamed EL ANSARI Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Les arguments sont des pointeurs sur des structures


Somme de deux points /* ajouter deux points */ struct point addpoint(struct point *p1, struct point *p2) { p1x += p2x; p1y += p2y; return *p1; } ... struct point a,b,c; a = makepoint(2,3); b = makepoint(0,-1); c = addpoint(&a,&b);
Pr. Mohamed EL ANSARI Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Structures et tableaux
Tableau de structures struct key{ char *word; int count; } keytab[ ] = { "auto",2, "break",7, "case",3 }; Acc`s aux i eme membres de la structure: keytab[i].word et e keytab[i].count, linstruction printf(" keytab[1] = %s %d\n",keytab[1].word,keytab[1].count) ache keytab[1] = break 7
Pr. Mohamed EL ANSARI Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Structures et tableaux
Tableau de structures struct key{ char *word; int count; } keytab[ ] = { "auto",2, "break",7, "case",3 }; Acc`s aux i eme membres de la structure: keytab[i].word et e keytab[i].count, linstruction printf(" keytab[1] = %s %d\n",keytab[1].word,keytab[1].count) ache keytab[1] = break 7
Pr. Mohamed EL ANSARI Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Structures et tableaux
Tableau de structures struct key{ char *word; int count; } keytab[ ] = { "auto",2, "break",7, "case",3 }; Acc`s aux i eme membres de la structure: keytab[i].word et e keytab[i].count, linstruction printf(" keytab[1] = %s %d\n",keytab[1].word,keytab[1].count) ache keytab[1] = break 7
Pr. Mohamed EL ANSARI Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Structures et tableaux
Tableau de structures struct key{ char *word; int count; } keytab[ ] = { "auto",2, "break",7, "case",3 }; Acc`s aux i eme membres de la structure: keytab[i].word et e keytab[i].count, linstruction printf(" keytab[1] = %s %d\n",keytab[1].word,keytab[1].count) ache keytab[1] = break 7
Pr. Mohamed EL ANSARI Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Le langage C permet de crr des nouveaux types de donnes ee e par typedef. Par exemple la dclaration: e typedef int Length; fait que Length constitue un synonyme de int. Length len, maxlen; Length *lengths[];

Pr. Mohamed EL ANSARI

Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Le langage C permet de crr des nouveaux types de donnes ee e par typedef. Par exemple la dclaration: e typedef int Length; fait que Length constitue un synonyme de int. Length len, maxlen; Length *lengths[]; Pointeur sur un caract`re (cha de caract`res): e ne e typedef char *String; String p, lineptr[10]; p = malloc(100);

Pr. Mohamed EL ANSARI

Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Le langage C permet de crr des nouveaux types de donnes ee e par typedef. Par exemple la dclaration: e typedef int Length; fait que Length constitue un synonyme de int. Length len, maxlen; Length *lengths[]; Pointeur sur un caract`re (cha de caract`res): e ne e typedef char *String; String p, lineptr[10]; p = malloc(100);

Pr. Mohamed EL ANSARI

Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Le langage C permet de crr des nouveaux types de donnes ee e par typedef. Par exemple la dclaration: e typedef int Length; fait que Length constitue un synonyme de int. Length len, maxlen; Length *lengths[]; Pointeur sur un caract`re (cha de caract`res): e ne e typedef char *String; String p, lineptr[10]; p = malloc(100);

Pr. Mohamed EL ANSARI

Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Le langage C permet de crr des nouveaux types de donnes ee e par typedef. Par exemple la dclaration: e typedef int Length; fait que Length constitue un synonyme de int. Length len, maxlen; Length *lengths[]; Pointeur sur un caract`re (cha de caract`res): e ne e typedef char *String; String p, lineptr[10]; p = malloc(100);

Pr. Mohamed EL ANSARI

Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Le langage C permet de crr des nouveaux types de donnes ee e par typedef. Par exemple la dclaration: e typedef int Length; fait que Length constitue un synonyme de int. Length len, maxlen; Length *lengths[]; Pointeur sur un caract`re (cha de caract`res): e ne e typedef char *String; String p, lineptr[10]; p = malloc(100);

Pr. Mohamed EL ANSARI

Les structures en C

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

typedef

La structure point: typedef struct point POINT; ... POINT p1,p2; /* declaration de deux points */ POINT p3[10]; /* tableau de 10 points */ POINT *p4; /* pointeur sur un point */ p4 = malloc(10*sizeof(POINT)); /* allocation de lespace memoire pour 10 points */

Pr. Mohamed EL ANSARI

Les structures en C

Exercice applicatif
On souhaite raliser une liste des tudiants de la li`re SMI4. e e e Chaque tudiant est caractris par: e e e
Nom et prnom (deux cha e nes de caract`res). e Date de naissance qui est elle aussi une structure reprsente e e par 3 entiers (jour, mois, anne). e CNE (entier). Les modules auxquels ltudiant est inscrit (structure e comportant un tableau de cha nes de caract`res pour les e modules et un entier pour le nombre de modules).

Donner la structure Etudiant correspondante. Donner un programme en C permettant de :


1 2

lire le nombre NbreEtudiant dtudiants inscrits en SMI4. e saisir la liste des NbreEtudiant tudiants (la liste est copie e e dans un tableau ListeEtudiant). trier la liste par ordre alphabtique des noms. e

Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef

Bibliographie

Brian W. Kernighan and Dennis M. Ritchie, The C programming language, Prentice Hall Inc.

Pr. Mohamed EL ANSARI

Les structures en C

Vous aimerez peut-être aussi