• Aucun résultat trouvé

les structures

N/A
N/A
Protected

Academic year: 2022

Partager "les structures"

Copied!
19
0
0

Texte intégral

(1)

1

les structures

En général, les types de base que propose le C ne suffisent pas pour stocker les données à utiliser dans un programme. le langage C permet de déclarer de nouveaux types.

Une structure rassemble des variables, qui peuvent être de types différents, sous un seul nom. ce qui permet de les

manipuler facilement. Elle permet de simplifier l‘écriture d'un programme en regroupant des données liées entre elles.

(2)

2

déclaration d'une structure

struct nomStructure { type1 champ1;

...

typeN champN;

} ;

Voici un exemple qui déclare une structure permettant de stocker un nombre complexe :

• struct complex {

float reel; /* partie reelle */

float imag; /* partie imaginaire */

};

(3)

3

déclaration d'une structure

• struct complex a;

ou

• struct complex { float reel;

• float imag;

}a,b;

(4)

4

accès aux champs

• L'opérateur . permet d'accéder à l'un des champs d'une structure.

• les lignes suivantes initialisent un complexe à la valeur (2 + 3i).

• struct complex a;

a.reel = 2;

a.imag = 3;

(5)

5

accès aux champs

• a.reel = 15 ;

• affecte la valeur 15 au champ reel de la structure a.

printf ("%f", a.reel) ;

• affiche la valeur du champ reel de la structure a.

scanf ("%f", &a.imag) ;

• Lit une valeur qui sera affectée au champ imag de la structure a.

a.imag++ incrémente de 1 la valeur du champ imag de la structure a.

(6)

6

Exemples d’utilisation de typedef

La déclaration :

typedef int entier ;

signifie que entier est synonyme de int, de sorte que les déclarations suivantes sont équivalentes : int n, p ; entier n, p ;

De même :

typedef int * ptr ;

signifie que ptr est synonyme de int *. Les déclarations suivantes sont équivalentes : int * p1, * p2 ; ptr p1, p2 ;

avec la déclaration :

typedef int vecteur [3] ;

les déclarations suivantes sont équivalentes :

int v[3], w[3] ; vecteur v, w ;

(7)

7

utilisation de typedef

Le mot-clé typedef permet d'associer un nom à un type donné. On l'utilise suivi de la déclaration d'un type puis du nom qui remplacera ce type. L'exemple

précédent peut donc se réécrire de la manière suivante :

typedef struct { float reel;

float imag;

} complexe;

complexe a;

a.reel = 2;

a.imag = 3;

(8)

8

initialisation et affectation

Il est possible d'affecter une variable de type structure dans une autre variable du même type. Le contenu de chacun des champs de la première variable sera alors recopié dans le champ correspondant de la seconde

variable. On peut initialiser une variable de type structure dès sa définition en lui affectant une liste de valeurs

séparées par des virgules et entourées par des accolades.

• complexe a = { 1, 0 }; /* le reel 1 */

complexe b;

b = a;

(9)

9

Structures comportant d’autres structures

• Supposons qu’on veut définir une structure employé comportant son nom, prénom et la date d’embauche.

• cette date est elle-même une structure comportant

• trois champs correspondants au jour, au mois et à l’année, nous pouvons alors procéder aux déclarations suivantes :

• Typedef struct { int jour ;

• int mois ;

• int annee ;} date;

(10)

10

Structures comportant d’autres structures

• struct personne

• { char nom[30] ;

• char prenom[20] ;

• date date_embauche ;

• } employe, courant;

• la seconde déclaration fait intervenir un modèle de structure (date) précédemment défini.

(11)

11

La notation :

employe.date_embauche représente la date

d’embauche correspondant à la structure employe. Il s’agit d’une structure de type date. Elle pourra

éventuellement faire l’objet d’affectation globale comme dans :

courant.date_embauche = employe.date_embauche ;

employe.date_embauche.annee

• représente l’année d’embauche correspondant à la structure employe.

(12)

12

exemple de structures imbriquées

• On peut imbriquer plusieurs structures. Dans l'exemple suivant nous déclarons une structure pour stocker une commande d'un client contenant :

• la référence du produit commandé (refProd),

• une sous-structure (prix) stockant : – le prix unitaire hors taxe (HT), – le taux de TVA associé (TVA),

• le nombre d'unités commandées (q),

• la remise accordée en pourcentage (remise).

(13)

13

• Cette structure se déclare de la manière suivante :

• typedef struct {

int refProd; /* reference produit */

struct {

float HT; /* prix hors taxe */

floatTVA; /* taux de TVA en pourcentage */

} prix;

int q; /* quantite commandee */

float remise; /* remise en pourcentage */

} commande;

• commande com;

(14)

14

• Pour accéder aux champs de la sous-structure, il faut utiliser deux fois l'opérateur . d'accès aux

champs. En supposant que com contienne une telle commande, voici le calcul du prix total :

• float P_TTC, P_AvantRemise, P_Total;

P_TTC = com.prix.HT * (1 + com.prix.TVA / 100);

P_AvantRemise = P_TTC * com.q;

P_Total =

P_AvantRemise - P_AvantRemise * com.remise / 100;

(15)

15

les pointeurs sur structures

• L'utilisation de pointeurs sur structures est très courante en C. Voici un exemple

d'utilisation d'un pointeur sur un complexe :

• complexe a = { 3.5, -5.12 };

• complexe * p = &a;

(*p).reel = 1;  p->reel = 1;

(*p).imag = -1;  p->imag = -1;

(16)

16

Tableaux de structures

• Soient les déclarations :

• struct point { char nom ;

• int x ;

• int y ;

• } ;

• struct point courbe [50] ;

(17)

17

Tableaux de structures

Si i est un entier, la notation : courbe[i].nom

représente le nom du point de rang i du tableau courbe.

De même, la notation : courbe[i].x

désigne la valeur du champ x de l’élément de rang i du tableau courbe.

courbe[4] représente la structure de type point correspondant au cinquième élément du tableau courbe.

Enfin courbe est un identificateur de tableau (désigne l’adresse de début).

(18)

18

• un exemple d’initialisation (partielle) du tableau courbe, lors de sa déclaration :

• struct point courbe[50]= { {'A', 10, 25}, {'M',

12, 28}, {'P', 18,2} };

(19)

19

Fonctions et structures

• Retour d’une variable structure par une fonction

• Passage par valeur en argument d’une variable structure à une fonction

• Passage par adresse en argument d’une

variable structure à une fonction

Références

Documents relatifs

In view of section 3.1., the methods mentioned in section 1.4 which cluster variables around their first PC appear to be no other than the K-means method applied to the

Le quatrième chapitre est consacré à l’étude et la synthèse de la commande hybride par mode glissant flou pour résoudre le problème de la stabilité et la

Les listes sont un type de variable partiulier que peut manipuler MAPLE.. Ses éléments sont

On utilise beaucoup Geogebra pour l’étude de la statistique à deux variables, alors que cette application nous permet de le faire pour une variable.. Puisque l’on utilise la

On utilise beaucoup Geogebra pour l’étude de la statistique à deux variables, alors que cette application nous permet de le faire pour une variable.. Puisque l’on utilise la

On utilise beaucoup Geogebra pour l’étude de la statistique à deux variables, alors que cette application nous permet de le faire pour une variable.. Puisque l’on utilise la

tm_sec seconds after minute tm_min minutes after hour tm_hour hours since midnight tm_mday day of month tm_mon months since January tm_year years since 1900 tm_wday days since

Après avoir testé plusieurs textes avec cette fonction, il semble que ce soit le "e" qui soit la lettre la plus fréquente dans un texte en françaisc. 3