Cours 12.1. Introduction aux structures en C

Les tableaux permettent de regrouper un ensemble de variables, mais uniquement de même type. De façon similaire, une structure permet de définir un assemblage de variable, mais de types différents.

Syntaxe

Supposons que l'on souhaite mémoriser pour un étudiant

On va alors créer la structure suivante :

struct etudiant
{
  char prenom[50];
  char nom[50];
  float moyenne;
};

prenom, nom et moyenne sont appelés les champs de la structure etudiant.

La structure etudiant est en réalité un nouveau type que l'on va pouvoir utiliser au même titre que char, int, double ... Il serait plus cohérent d'utiliser la syntaxe alternative suivante :

typedef struct
{
  char prenom[50];
  char nom[50];
  float moyenne;
} etudiant;

Avec cette syntaxe, et notamment l'utilisation du mot-clé typedef, on comprend mieux que l'on crée un nouveau type et non une nouvelle variable. Dans la suite de ce cours, nous privilégierons la première syntaxe qui est majoritairement utilisée.

Déclaration des structures

Lorsque l'on a créé une nouvelle structure, il est possible de déclarer des variables qui seront du type de la structure (ici etudiant) :

struct etudiant eleve;

eleve sera une variable du type de la structure etudiant, qui possèdera 3 champs : prenom, nom et moyenne.

Accès aux champs

L'accès aux champs d'une structure se fait, en lecture et en écriture, en ajoutant le nom du champ séparé d'un point :

// Affecte 12.5 au champ moyenne
eleve.moyenne = 12.5;

// Affiche le nom de famille de l'étudiant
printf ("Nom de famille : %s", eleve.nom);

Exemple

L'exemple suivant crée une nouvelle structure et demande à l'utilisateur de saisir quelques champs avant de les afficher :

#include <stdio.h>

// Création de la structure étudiant
struct etudiant {
  char prenom[50];
  char nom[50];
  float moyenne;
};

int main(void) {
  // Déclare une variable eleve de type etudiant
  struct etudiant eleve;

  // Saisie le nom et le prénom
  printf("Nom de famille : ");
  scanf ("%s", eleve.nom);
  printf("Prénom : ");
  scanf ("%s", eleve.prenom);

  // Affiche les champs saisis
  printf ("Bonjour %s %s.\n", eleve.prenom, eleve.nom);

  return 0;
}
Nom de famille : Versaire
Prénom : Annie
Bonjour Annie Versaire.

Exercices

Exercice 1

Créer une structure date qui contiendra les champs suivants :

Déclarer une structure de type date et affecter à chacun des champs la date de naissance de Linus Torvalds (fondateur du noyau Linux) avant de l'afficher :

Linus T. est né le 28/12/1969.

Exercice 2

Créez une structure point qui comporte deux champs :

Créez un tableau de points qui contient les coordonnées des points d'un cercle unitaire avec un pas de 20 degrés. On rappelle que les coordonnées du cercle unitaire peuvent être calculées par les formules suivantes :

$$ \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} cos(\alpha) \\ sin(\alpha) \end{bmatrix} $$

Afficher les points conformément à cet exemple :

P(0)    = (  1.00 ;  0.00 )
P(1)    = (  0.94 ;  0.34 )
P(2)    = (  0.77 ;  0.64 )
P(3)    = (  0.50 ;  0.87 )
P(4)    = (  0.17 ;  0.98 )
P(5)    = ( -0.17 ;  0.98 )
P(6)    = ( -0.50 ;  0.87 )
P(7)    = ( -0.77 ;  0.64 )
P(8)    = ( -0.94 ;  0.34 )
P(9)    = ( -1.00 ;  0.00 )
P(10)   = ( -0.94 ; -0.34 )
P(11)   = ( -0.77 ; -0.64 )
P(12)   = ( -0.50 ; -0.87 )
P(13)   = ( -0.17 ; -0.98 )
P(14)   = (  0.17 ; -0.98 )
P(15)   = (  0.50 ; -0.87 )
P(16)   = (  0.77 ; -0.64 )
P(17)   = (  0.94 ; -0.34 )
P(18)   = (  1.00 ; -0.00 )

Quiz

En C, à quoi sert une structure ?

Vérifier Bravo ! Une structure regroupe des variables qui peuvent être de types différents. Essaie encore ...

En C, comment appelle-t-on les éléments qui composent une structure ?

Vérifier Bravo ! Les éléments d'une structure s'appellent les champs. Essaie encore ...

Comment accède-t-on aux champs d'une structure ?

Vérifier Bravo ! La dernière réponse est la syntaxe pour un pointeur de structure que nous verrons plus tard. Essaie encore ...

Quelles syntaxes permettent de déclarer une variable de type article ?

struct article {
  char designation[50];
  float prix[50];
  int quantité;
};
Vérifier Bravo ! Il faut préciser le mot-clé struct suivi du nom de la structure. Essaie encore ...

Qu'affiche le code suivant ?

struct point {
  double x; double y;
};
int main(void) {
  struct point P = {12.3, 24.5};
  printf ("%.2lf %.2lf", P.y, P.x);
}
Vérifier Bravo ! Il est possible d'initialiser une structure à la déclaration dans l'ordre des champs. Essaie encore ...

Voir aussi


Dernière mise à jour : 30/11/2022