Académique Documents
Professionnel Documents
Culture Documents
Les structures en C
Pr. Mohamed EL ANSARI
Dpartement dInformatique e Facult des Sciences, Universit Ibn Zohr e e Agadir melansari@gmail.com
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.
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
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
Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef
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);
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.
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.
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.
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);
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);
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);
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
Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef
Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef
Introduction Dnition dune structure e Initialisation, acc`s aux membres e Structures imbriques e Structures et fonctions Structures et tableaux typedef
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[];
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);
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);
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);
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);
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);
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 */
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).
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.
Les structures en C