Centre de BTS
1ère Année MCW
Les structures et Les
énumérations
Programmation en langage C
Lesstructures
• Une structure est une suite finie d’objets de types différents
• les différents éléments d’une structure n’occupent pas
nécessairement des zones contiguës en mémoire
• Chaque élément de la structure, appelé membre ou champ,
est désigné par un identificateur
• Dans les structures, il faut distinguer la déclaration d’un
modèle de structure de la déclaration de l’objet dumodèle
• Syntaxe de déclaration d’un modèle de structure:
struct modele {
type_1 nom_champ_1;
type_2 nom_champ_2;
...
type_n nom_champ_n;
23
};
Programmation en langage C
Lesstructures
• Syntaxe de déclaration d’un objet de ce modèle de structure:
struct modele objet; //objet est une variable du type modèle
• Il est possible de déclarer les deux en même temps:
struct modele {
type_1 nom_champ_1;
type_2 nom_champ_2;
...
type_n nom_champ_n;
} objet;
• Exemple1: Exemple 2:
struct coordonnees { struct ficheEtudiant{
int x; char nom[50];
int y; int age;
}; float notes[4];
struct coordonnees point; } f; 24
Programmation en langage C
Lesstructures
• Représentation des exemples:
4 16 durant 20 12 14.5 18 11
x y
nom age notes
point
f
• Initialisation de l’objet à la déclaration:
struct coordonnees point= {4, 16};
struct ficheEtudiant f = {″durant″, 20, {12,14.5,18,11}}
• Utilisation du modèle: objet.nom_champ
• Exemples: [Link]=″durant″; [Link] = 20; [Link][1]=14.5;
[Link][3]<15;
25
Programmation en langage C
Lesstructures
• Exemple :
• Soit la structure suivante:
#define N 4
struct ficheEtudiant{
char nom[50];
int age;
float notes[N];
};
• Saisir un étudiant puis calculer et afficher la moyenne de ses
notes
26
Programmation en langage C
Lesstructures
#include<stdio.h>
#define N 4
struct ficheEtudiant{
char nom[50]; int age; float notes[N];
};
int main(){
struct ficheEtudiant f;
int i; float som = 0, moy = 0;
printf(″saisissez le nom de l’etudiant: ″); scanf(″%s″, [Link]);
printf(″\nsaisissez l’age de l’etudiant: ″); scanf(″%d″, &[Link]);
printf(″\nsaisissez les notes de l’etudiant: ″);
for(i=0;i<N;i++) {
printf(″\nsaisissez note %d: ″, i+1);
scanf(″%f″, &[Link][i]);
som = som + [Link][i];
}
moy = som/N;
printf(″\nL’etudiant %s d’age %d a pour moyenne du semestre: %.2f″, [Link], [Link],moy); 27
}
Programmation en langage C
Définitiondetypesavectypedef
• typedef permet d’affecter un nouvel identificateur à un type
composé (permet d’alléger l’écriture de programmes
notamment dans le cas des tableaux)
• Syntaxe: typedef déclaration; //à mettre avant le main()
• Exemples:
• Avec une structure:
typedef struct ficheEtudiant{
char nom[50];
int age;
float notes[4]; //ici FICHE est un nouveau
} FICHE; type et non pas une variable
• Avec un tableau:
typedef FICHE TABF[50]; //définition d’un type TABFde typeFICHE
28
typedef int MATRICE[10][20]; //définition d’un type MATRICEde type int
Programmation en langage C
Définitiondetypesavectypedef
• Déclaration de variables : nouveau_type variable;
• Exemples: MATRICE m;
FICHE f;
TABF t; //équivalent à FICHE t[50];
• Représentation de la variable t du type TABF:
t
…
nom age notes nom age notes
0 1 2 …
Exemplesd’affectations:
t[0].age = 20; 29
t[0].notes[2] = 14.5;
Programmation en langage C
Exerciced’application
Soit la structure suivante: struct ficheEtudiant{
char nom[50];
int age;
float notes[4];
};
1) Créer un type ficheEtudiant puis un type tableau de ficheEtudiant
2) Remplir le tableau de ficheEtudiant
3) Afficher les informations sur l’étudiant x
30
Programmation en langage C
Solution
• Déclarations :
#include<stdio.h>
#include<string.h>
#define N 5
struct ficheEtudiant{
char nom[50];
int age;
float notes[4];
};
typedef struct ficheEtudiant FicheEtu;
typedef FicheEtu tabfe[N];
int main(){
int i,j;
tabfe t;
char nomx[20]; 31
Programmation en langage C
Solution
• Saisie de N étudiants:
for(i=0;i<N;i++){
printf("saississez le nom de l'etudiant %d:", i+1);
scanf("%s", t[i].nom);
printf("saississez l'age de l'etudiant %d: ", i+1);
scanf("%d", &t[i].age);
for(j=0;j<4;j++){
printf("saississez la note %d: ", j+1);
scanf("%f",&t[i].notes[j]);
}
}
32
Programmation en langage C
Solution
• Recherche de l’étudiant x:
printf("saisissez un etudiant: ");
scanf("%s", nomx);
for(i=0;i<N;i++){
if(strcmp(nomx,t[i].nom)==0){
printf("\ninformation sur l'etudiant %s: ", t[i].nom);
printf("\nage: %d",t[i].age);
for(j=0;j<4;j++){
printf("\nnote %d: %f", j+1, t[i].notes[j]);
}
printf("\n");
}
}
} 33
Programmation en langage C
Lesénumérations
• Les énumérations permettent de définir un type par une liste de
valeurs prédéfinies (constantes)
• Syntaxe de déclaration d’un modèle enum:
enum nom_modele {constante_1, constante_2,...,constante_n};
• Exemple:
enum jourSemaine {lundi, mardi, mercredi, jeudi, vendredi};
• Déclaration d’un objet :enum nom_modele variable;
Exemple: enum jourSemaine j;
• Les valeurs possibles de constante_1, constante_2,...,constante_n
sont codées par des entiers de 0 à n-1.
• Par défaut, la valeur de chacune des constantes est égale au rang de
celle-ci dans l’énumération (lundi vaut 0, mardi vaut 1, mercredi
vaut 2, etc.). 34
Programmation en langage C
Lesénumérations
• Il est possible de modifier le codage par défaut des valeurs de
la liste lors de la déclaration du type énuméré
• Exemple:
enum jourSemaine {lundi = 8, mardi = 9, mercredi, jeudi = 15,
vendredi};
→Dans l’exemple: mercredi vaudra 10 et vendredi vaudra 16
• Exemple d’utilisation des énumérations:
enum booleen {faux, vrai};
int main(){
int a=10, b=5;
enum booleen x;
if (a>=b) x = vrai;
else x = faux;
if(x==vrai) printf("a = %d\n",a); 35
}
Programmation en langage C
Exemple 1:
#include < stdio.h>
enum semaine {dimanche,lundi,mardi,mercredi,jeudi,vendredi,samedi};
int main(void){
enum semaine jour;
jour=mercredi;
printf("le jour est : %d \n", jour);
printf("le numéro du jour suivant est : %d \n", jour + 1);
return 0;
}
35
Programmation en langage C
Merci