Académique Documents
Professionnel Documents
Culture Documents
Les Structures
PROGRAMMATION Pr. Hasna ABIOUI
EN LANGAGE C E-mail: h.abioui@uiz.ac.ma
Année Universitaire 2020/2021
STRUCTURES / POINTEURS
1 2
3 4
1
01/02/2021
§ Les structures perme8ent de construire des types complexes à par:r des types de § Les variables d'une structure sont groupées sous un seul nom
base ou d’autres types complexes § Les structures permettent d'organiser les données compliquées
§ Une structure est cons:tuée de plusieurs éléments de même type ou non § Les variables liées sont groupés en une seule entité au lieu des entités séparées
5 6
Exemple 1 : Exemple 2 :
Un étudiant peut être décrit par : • Un point est une paire de deux coordonnées x et y
§ Nom
• Un rectangle est une paire de deux points
§ Prénom
§ Date de naissance • Etc.
§ Code Apogée
§ Tuteur
§ ….
7 8
2
01/02/2021
• Avant l’u:lisa:on d’une structure, on doit tout d’abord la définir struct nom_structure {
type1 champ1;
• Pour définir une structure, le programmeur doit préciser: type2 champ2;
type3 champ3;
§ Le nom du nouveau type ...
§ La composi:on du type };
§ c'est à dire le nom et la nature des données qu'il con:ent
• Ce8e structure définit le type struct nom_structure composé des variables champ1,
champ2, champ3, ...
9 10
• On appelle les données membres d’une structure des champs • Un point d'un plan 2-D est caractérisé par ses coordonnées x et y
• Les types des champs doivent être donnés dans la définition de la structure • Supposant que les coordonnées sont des entiers, la structure décrivant un
• Les champs peuvent être de n’importe quel autre type ou même une autre point est déclarée en C par:
struct point {
structure
int x;
• La structure ainsi définie peut alors être utilisée pour définir une variable dont int y;
le type est cette structure
};
• Le mot-clé struct introduit la déclaration de la structure, qui est une liste
de déclarations placées entre { et }
11 12
3
01/02/2021
• Le mot-clé struct peut être suivi d'un nom qu'on souhaite a8ribuer à la
structure. Dans ce cas, point struct complex { struct date {
• Ce nom sera u:lisé par la suite pour se référer à la structure (déclara:on des int real; int jour;
int imaginary; int mois;
variables de ce type)
struct point { int annee;
• La déclara:on d'une structure définit un nouveau type };
int x; };
• struct point cons:tue le nouveau type
int y;
};
13 14
DÉCLARATION DES VARIABLES D’UNE STRUCTURE DÉCLARATION DES VARIABLES D’UNE STRUCTURE
PROGRAMMATION C PROGRAMMATION C
• Définition de la structure struct point (le nouveau type) : • Différentes façons de déclarer les variables d’une structure
15 16
4
01/02/2021
DÉCLARATION DES VARIABLES D’UNE STRUCTURE DÉCLARATION DES VARIABLES D’UNE STRUCTURE
PROGRAMMATION C PROGRAMMATION C
• Différentes façons de déclarer les variables d’une structure • Différentes façons de déclarer les variables d’une structure
• Le nom du nouveau type non spécifié
struct point { struct {
int x; int x; • Chaque fois qu'on souhaite déclarer une nouvelle
int y; int y;
} p1, p2, p3 ; } q1, q2 ; variable on a besoin de réécrire le code de la
17 18
int main() {
main() {
struct { struct point p;
int x; struct point q, r;
int y;
} q3, q4, q5 ;
struct point tab [100];
printf("%d %d\n", q1.x, q1.y); return 0;
printf("%d %d\n", q4.x, q4.y); }
}
19 20
5
01/02/2021
21 22
printf("a = (%d ,%d)\n", a.x, a.y); printf("a = (%d ,%d)\n", a.x, a.y);
printf("b = (%d ,%d)\n", b.x, b.y); printf("b = (%d ,%d)\n", b.x, b.y);
printf("c = (%d ,%d)\n", c.x, c.y); printf("c = (%d ,%d)\n", c.x, c.y);
printf("d = (%d ,%d)\n", d.x, d.y); printf("d = (%d ,%d)\n", d.x, d.y);
return 0; return 0;
} }
23 24
6
01/02/2021
• Calcul de la distance du point A de l'origine (0,0) : • Un rectangle peut être représenté par deux points (coins opposés
diagonalement)
float dist; struct rectangle {
dist = (float) sqrt((float)A.x*A.x +(float)A.y*A.y);
struct point p1;
struct point p2;
};
• La structure rectangle con:ent deux structures de type point
25 26
27 28
7
01/02/2021
29 30
31 32
8
01/02/2021
33 34
• Par exemple la déclara:on: typedef int Length; fait que Length cons:tue un typedef struct point POINT;
synonyme de int • Ce qui fait que POINT constitue un synonyme de struct point
• Déclara:on des variables du nouveau type Length : • Exemple de déclarations :
Length Len, MaxLen; /* varables simples */ POINT p1, p2; /* déclaration de deux points */
35 36
9
01/02/2021
struct point { • Défini:on de la structure struct point typedef struct point { • Une seule instruction pour définir la structure
int x; int x;
int y; • typedef fait appel à struct point pour int y; struct point et le nouveau type point
}; } point ;
créer le nouveau type point • Définition de la structure struct point a
typedef struct point point;
• Pas d’ambiguïté: le nouveau type point peut l'intérieur de l'instruction typedef
main() {
main() { prendre le même nom que celui de la structure point p,q = {3,-6};
point p,q = {3,-6}; struct point point tab[10];
point tab[10]; }
}
37 38
39 40
10
01/02/2021
• Ils doivent être considérés comme des variables, il n’y a rien de sorcier derrière les
pointeurs
41 42
43 44
11
01/02/2021
45 46
47 48
12
01/02/2021
int i =20; int * pi ; int ** ppi ; • les notations ci-dessous sont équivalentes :
pi = &i; @p ppi
ppi = π • Var1=*p <--> Var1 = x
49 50
51 52
13
01/02/2021
53 54
§ Une fois définie, elle peut être u:lisée autant de fois que nécessaire à § type est le type de la valeur valeur renvoyée
par:r de n'importe quel autre point du programme
§ identificateur est le nom de la fonc:on
§ Découper un programme en sous-programmes
§ paramètres est la liste de paramètres
§ Alléger et organiser un programme
§ La valeur de la fonc:on à renvoyer est spécifiée en u:lisant le mot clé return,
§ Remplacer et rassembler une par:e qui se répète dans un programme dont la syntaxe est : return valeur;
55 56
14
01/02/2021
§ Les procédures sont réalisées en définissant une fonction qui ne retourne pas § void nom_fonction( ): La fonc:on ne prend aucun paramètre et ne
de valeur; Pour cela, on utilise le type de retour void retourne pas de valeur
§ Il n’est pas nécessaire de mettre une instruction return en fin de procédure § int nom_fonction(void) : La fonc:on ne prend aucun paramètre et
§ Cela est cependant faisable, il suffit de ne pas donner de valeur dans retourne une valeur en:ère à l'aide de l'instruc:on return
l’instruction return § void nom_fonction(void) : La fonc:on ne prend aucun paramètre et ne
void identificateur(paramètres)
void identificateur(paramètres) retourne pas de valeur
{
{
/* Instructions */
/* Instructions */
return;
}
}
57 58
§ int somme(int a, int b): La fonc:on prend deux paramètres et int somme(int i, int j)
void bonjour()
retourne une valeur en:ère à l'aide de l'instruc:on return { {
printf("Bonjour"); return i+j;
§ float calcul(float r) : La fonc:on prend un paramètre et retourne } }
59 60
15
01/02/2021
A+en-on § L’appel d’une fonc:on ou d’une procédure se fait en donnant son nom, puis les
Une fonc-on ne doit jamais être définie à l’intérieure de la fonc-on valeurs de ses paramètres entre parenthèses
principale main
§ S’il n’y a pas de paramètres, il faut quand même me8re les parenthèses, sinon la
fonc:on n’est pas appelée
61 62
§ Toute fonc:on ne peut appeler que des fonc:ons déclarées avant elle ou elle-
même A+en-on
... fct1 (..) {
Exemple : ...
§
} La fonc-on main ne peut pas s'appeler elle-même et ne peut pas
§ Dans l’ordre de défini:on à coté : ... fct2 (...) {
}
... être appelée ailleurs, c’est la fonc-on principale par défaut !!
§ La fonc:on main peut appeler fct1,fct2,fct3
... fct3 (..) {
§ La fonc:on fct3 peut appeler fct1,fct2,fct3 ...
}
§ La fonc:on fct2 peut appeler fct1, fct2 int main (...) {
...
§ La fonc:on fc1 ne peut appeler que fct1 return 0;
}
63 64
16
01/02/2021
Void main () {
§ Comme ce8e fonc:on n’est pas définie au moment de l’appel, elle doit être
float r, surface; déclarée
printf (" Rayon = ? ");
scanf ("%f", & r); § Quand la fonc:on est définie dans un autre fichier. Il est donc aussi nécessaire
surface = calcul ( r); // Appel de la fonction calcul
printf (" Surface = %f\n", surface ); de la déclarer dans le fichier ou on souhaite l’appeler
}
65 66
§ Le rôle des déclara:ons est donc de signaler l’existence des fonc:ons type identificateur(paramètres);
au compilateur afin de pouvoir les u:liser, tout en reportant leurs § où type est le type de la valeur renvoyée par la fonc:on,
défini:ons plus loin ou dans un autre fichier
§ identificateur est son nom
§ Cela permet de vérifier que les paramètres fournis à une fonc:on § paramètres la liste des types des paramètres que la fonc:on admet,
correspondent bien à ce qu’elle a8end, et que la valeur de retour est
§ Remarque : les deux écritures sont correctes :
correctement u:lisée après l’appel
int fonct_1(int); int fonct_1(int a);
67 68
17
01/02/2021
69 70
/* définition de la fonction Minimum */ et de même signature mais dans deux fichiers différents), soit parce que la
int Minimum(int i, int j)
{
fonc:on est uniquement d’intérêt local
return i<j ? i : j; }
}
71 72
18
01/02/2021
73 74
Fin
Cours – Programma4on C
75
19