UNIVERSITE ABDELMALEK ESSAADI
Faculté des Sciences et Techniques d'Al Hoceima
Année académique 2023-24 / 2°année LMD MIP / Module : Structure de données
Langage C
Les structures
Comprendre les structures
• Un tableau est une variable qui permet a
votre programme de stoker plusieurs
valeurs de même type.
• Une structure permet de regrouper
plusieurs variables de type différents
Exemple
• Struct etudiant
{ char nom[50];
int CNE;
float note;
char adresse [200];
};
Syntaxe
Struct NomStructure
{ type 1 NomVariable1;
type 2 NomVariable2;
.
.
type n NomVariable n;
};
Voir une structure comme un modèle pour
les déclaration de variables
• La déclaration d’une structure permet de
regrouper plusieurs types de variable
• D’autre part la définition d’une structure ne
crée aucune variable en réalité .
• La définition d’une structure spécifie un
modèle que vos programmes pourront
utiliser pour déclarer des variables
• La définition d’une structure ne prend
aucune place en mémoire
Déclaration d’une variable structure
• Il y a deux manières de déclarer des
variables d’un type donné de structure.
• On suppose que votre programme déclare une
structure du type Employe comme ceci
Struct Employe
{
char nom[64];
float salaire;
int age;
};
Méthode 1
Vos programmes peuvent déclarer des variables
de type Employe comme ceci
• Struct Employe administrateur;
• Struct Employe nouvel_employe , ancien_employe;
Méthode 2
• Le C permet aussi de déclarer des variables d’un
type de structure à la suite de définition de la
structure,
Struct Employe
{
char nom[64];
float salaire;
int age;
} Employe administrateur, nouvel_employe , ancien_employe ;
Comprendre les membres d’une
structure
• Chaque élément de l’information de la structure
est un membre
• Exemple
Struct forme
{
int type;
int couleur;
float angle;
} triangle;
Dans le cas de la structure forme, il y a 3 membres
• Pour accéder à un membre particulier,
vous utiliserez l’opérateur C point(.)
• Exemple
Employe.age=21;
Employe.salaire=500.45;
Passer une structure à une fonction
• Comme pour toutes les variables, le C
vous permet de passer des variables
structures à une fonction
Exemple
#include <stdio.h>
Struct forme
{
int type;
int couleur;
float angle;
};
void montre_structure(struct forme forme)
{
printf(" forme.type %d ",forme.type);
printf(" forme.couleur %d ",forme.couleur);
printf(" forme.angle %f ",forme.angle);
}
main()
{
struct forme cercle ;
cercle.type =0;
cercle.angle=5.4;
cercle.couleur=1;
montre_structure(cercle);
}
Modifier une structure depuis une fonction
• Exemple précédente montre que vous
pouvez passer une structures à une
fonction.
• Pour modifier les membres d’une
structures depuis une fonction, vous devez
passer la structure par adresse .
Exemple
#include <stdio.h>
Struct notes_etudiant
{
int CNE
float note_cc1
float note_cc2;
};
Void change_note(struct note_etudiant *note)
{
(*note).note_cc1=12;
(*note).note_cc2=15;
}
Main()
{
Struct notes_etudiant.ali;
Change_note(&ali);
Printf(" la note cc1 de ali est %f “, ali.note_cc1);
Printf(" la note cc2 de ali est %f “, ali.note_cc2);
}
#include <stdio.h>
Struct notes_etudiant
{
int CNE
float note_cc1
float note_cc2;
};
Void change_note(struct note_etudiant
*note)
{
note->note_cc1=12;
Note->note_cc2=15;
}
Main()
{
Struct notes_etudiant.ali;
Change_note(&ali);
Printf(" la note cc1 de ali est %f “,
ali.note_cc1);
Printf(" la note cc2 de ali est %f “,
ali.note_cc2);
}
Initialiser une structure
• Le programme suivant déclare et initialise
une structure
#include<stdio.h>
Void main(Void)
{Structe cordonnee
{ float; X
int y ;
int z;
} point_M ={2.5, 10, 145};
print(“ point_M.X %f“, point_M.X)
print(“ point_M.Y %d“, point_M.Y)
print(“ point_M.Z %d“, point_M.Z)
}
Utiliser une structure imbriquée
Struct Employe
{
char nom[60]
int age;
Struct date
{ int jour;
int mois;
int annee;
}date_embauche;
int qualification;
float salaire;
}nouvel_employe;
Accéder à un membre d’une
structure imbriquée
Exemple précédent
nouvel_emplye.date_embouche.annee=2007
Structures contenant des tableaux
Exemple
Main()
{ struct date
{ char nom_du_mois[64];
int mois;
int jours;
Int annee;
}date_actuel ={“ mars “, 7, 4 , 2008};
Int I;
For(i=0; date_courante.nom_du_mois[i];i++)
Putchar(date_courante.nom_du_mois[i]);
}
Créer un tableau de structures
Exemple
Struct etudiant
{ char nom[60];
int CNE
float note1;
float note 2;
} mipc2_2[40];
Exemple d’utilisation de l’exemple
précédant
• On utilise la boucle for pour afficher le nom
de le CNE de chaque etudiant;
For( i=0, i<=40;i++)
Printf("etudiant %s CNE %d\n,etudiant[i].nom,etudiant[i].CNE")
Exercice
Soit le modèle de structure suivant
Struct s_point
{
char c;
int x, y;
};
écrire une fonction qui reçoit en argument une structure de type s_point et
qui en affiche le contenu sous la forme : point B de coordonnées 10 12
1. En transmettant en argument la valeur de la structure concernée
2. En transmettant en argument l’adresse de la structure concernée
3. écrire une fonction qui mis à ziro les différents champs d’une structure
du type s_point qui lui est transmise en argument
4. écrire une fonction qui reçoit en argument l adresse d’une structure du
type s_point et qui renvoie en résultat une structure de même type
correspondant à point de même nom et de coordonnées opposées.
5. Dans les quatre cas , on écrira un petit programme d’essai de la
fonction ainsi réalisée
solution
#include <stdio.h>
Struct s_point
{ char c;
Int x, y;
}
Void affiche1(struct s_point p)
{ printf("point %c de coordonnées %d %d\n“,p.c,p.x,p.y);
}
Void affiche2(struct s_point *p)
{ printf("point %c de coordonnées %d %d\n“,p->c,p->x,p->y);
}
Main()
{ struct s_point s;
s.c=‘A’;
s.x=10;
s.y=12
Affiche1(s)
Affiche2(&s)
}
solution
#include <stdio.h>
Struct s_point
{ char c;
Int x, y;
}
Void res(struct s_point *p)
{ p->c=0;
P->x=0;
P->y=0;
}
Struct s_point opose(struct s_point *p)
{ struct s_point ns;
ns.c=p->c;
Ns.x=-p->x;
Ns.y=-p->y
Return res;
}
Main()
{
struct s_point s,n;
s.c=‘A’;
s.x=10;
s.y=12
res(s)
n=opose(&s)