C_facile : Introduction au langage C
Cours

Structure et tableau dans une structure

Exemple

Considérons les déclarations :

#define MAX 20

typedef struct date {int jour, mois, annee;} T_date;

typedef struct etudiant {

      char nom[MAX], prenom[MAX];

      float moyenne;

      T_date date_naissance;   

                //date_naissance est un champ qui est une variable structurée

} T_etu;

Nous avons ajouté des définitions de type ainsi qu'un champ de type "T_date" dans le constructeur de structure "etudiant" auquel nous avons donné comme nom de type "T_etu".

Si l'on déclare :

T_etu vous;

La variable "vous" contiendra les champs "nom", "prenom", "moyenne" et "date_naissance". Ce dernier étant un champ qui est une variable structurée.

La fonction de saisie deviendra alors :

void saisie_etudiant( T_etudiant * un_pt_sur_etu)

{

      printf("\n nom : ");

      scanf("%s", un_pt_sur_etu->nom);

      printf("\n prenom : ");

      scanf("%s",un_pt_sur_etu->prenom);

      printf("\n moyenne : ");

      scanf("%f",&(un_pt_sur_etu->moyenne));

      printf("\n jour de naissance : ");       scanf("%d",&(un_pt_sur_etu->date_naissance.jour));

      printf("\n mois de naissance : ");       scanf("%d",&(un_pt_sur_etu->date_naissance.mois));

      printf("\n annee de naissance : ");       scanf("%d",&(un_pt_sur_etu->date_naissance.annee));

}

En effet, « un_pt_sur_etu -> date_naissance.jour» correspond à la variable « jour » qui est un champ, le « & » devant permet d'avoir son adresse, ce qui est nécessaire à la fonction « scanf ».

void affiche_etudiant( T_etudiant un_etu)

{

       printf("\n nom : %s ", un_etu.nom);

       printf("\n prenom : %s ",un_etu.prenom);

       printf("\n moyenne : %f ",un_etu.moyenne);

       printf("\n jour de naissance : %d ",un_etu.date_naissance.jour);

       printf("\n mois de naissance : %d ",un_etu.date_naissance.mois);

       printf("\n annee de naissance : %d ",un_etu.date_naissance.annee);

}

En effet, le champ "date_naissance" est vu comme une variable structurée. Nous pouvons donc utiliser comme nature de champ une autre structure.

Nous allons maintenant déclarer une structure comprenant un tableau de flottants :

#define MAX 500

typedef struct tableau_en_partie_rempli

{

       int nombre_cases_utilisees; float t[MAX];

} T_tableau_en_partie_rempli;

Et la déclaration de variable :

T_tableau_en_partie_rempli notes, *pt_sur_paquet_note;

Nous pouvons décider de remplir des notes, avec les instructions :

notes.t[0] = 15.7;

scanf'("%f",&(notes.t[1]));

notes.t[2] = (notes.t[0] + notes.t[1])/2;

notes.nombre_cases_utilisees = 3;

pt_sur_paquet_note = &notes;

pt_sur_paquet_note -> t[3] = 10.2;

scanf'("%f",&(pt_sur_paquet_note->t[4]));

pt_sur_paquet_note->t[5] = (pt_sur_paquet_note->t[3] + pt_sur_paquet_note->t[4])/2;

pt_sur_paquet_note->nombre_cases_utilisees = 6;

ainsi nous aurons 6 notes dans le tableau qui correspond au champ 't' de la variable 'notes', et le champ 'nombre_cases_utilisees' vaut 6.

Un champ qui est un tableau s'utilise comme un tableau, il suffit de faire attention à la façon dont on accède à ce champ (par un identificateur de variable structurée ou par un identificateur de pointeur vers variable structurée).

Tableaux de structures (page suivante)Déclaration de type (page Précédente)
AccueilImprimer creativecommons : by-nc-ndRéalisé avec SCENARI