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.
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.
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
.
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);
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.
Créer une structure date
qui contiendra les champs suivants :
day
, un entier entre 0 et 31 ;month
, un entier entre 0 et 12 ;year
, un entier entre 0 et 3000.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.
Créez une structure point qui comporte deux champs :
x
, l'ordonnée d'un pointy
, l'abscisse d'un pointCré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 )
En C, à quoi sert une structure ?
En C, comment appelle-t-on les éléments qui composent une structure ?
Comment accède-t-on aux champs d'une structure ?
Quelles syntaxes permettent de déclarer une variable de type article
?
struct article {
char designation[50];
float prix[50];
int quantité;
};
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);
}