0% ont trouvé ce document utile (0 vote)
71 vues26 pages

Structures Et Chaines

Le document présente les structures et tableaux de structures en langage C, en expliquant leur définition, déclaration, initialisation et utilisation. Il aborde également les tableaux de structures, les chaînes de caractères et les tableaux de chaînes de caractères, avec des exemples de syntaxe et d'application. Enfin, il propose une application pratique pour gérer des livres dans une bibliothèque.

Transféré par

omaromarstm0805
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
71 vues26 pages

Structures Et Chaines

Le document présente les structures et tableaux de structures en langage C, en expliquant leur définition, déclaration, initialisation et utilisation. Il aborde également les tableaux de structures, les chaînes de caractères et les tableaux de chaînes de caractères, avec des exemples de syntaxe et d'application. Enfin, il propose une application pratique pour gérer des livres dans une bibliothèque.

Transféré par

omaromarstm0805
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Université de Carthage DÉPARTEMENT INFORMATIQUE

Faculté des Sciences de Bizerte

Les structures & Tableaux de


structures

Niveau: SEIOT1-GLSI1
2024/2025

Attia Abir
Les Structures

2
Définition

Le tableau permet de désigner sous un seul nom un ensemble de


valeurs de même type, repérées par des indices.

TabAge 22 21 22 19

TabMoyenne 12.25 18.50 16.75 15.25

Un enregistrement, appelé structure en langage C, est une variable


complexe qui permet de désigner sous un seul nom un ensemble de
valeurs pouvant être de type différent.

Etudiant Nour 22 12.25

3
Déclaration d’une Structure (1/2)
Syntaxe
Noms
struct <Nom_Structure> { différents
<type_champ1> <Nom_Champ1>;
<type_champ2> <Nom_Champ2>;
<type_champ3> <Nom_Champ3>;
...
Tous les types
};

Exemple

struct etudiant
{
char nom[30];
int age;
float moyenneScolaire;
};
4
Déclaration d’une Structure (2/2)

Remarques :
Deux champs d’une même structure ne peuvent pas avoir
le même nom.
• Les données peuvent être de n'importe quel type hormis le type de
la structure dans laquelle elles se trouvent.
• La déclaration d'une structure ne fait que donner l'allure de la
structure, donc elle n’entraine pas la réservation d'espace mémoire
pour une variable structurée (variable de type structure).
• Il faut donc définir une (ou plusieurs) variable(s) structurée(s)
après avoir déclaré la structure.
5
Déclaration d’une Variable (1/3)

• Une variable structurée doit être définie comme suit :


struct <Nom_Structure> <Var_Structure>;

Exemple: Exemple:

struct etudiant { struct etudiant {


char nom[30]; char nom[30];
int age; int age;
float moyenneScolaire; float moyenneScolaire;
}; } E1, E2;

struct etudiant E1, E2;

6
Déclaration d’une Variable :
Utilisation de typedef (2/3)
Syntaxe
typedef struct <Nom_Structure> <nom_Definition>;

Exemple:
struct etudiant {
char Nom[30]; typedef struct etudiant Etudiant;
int Age;
float MoyenneScolaire;
};

Déclaration
<Nom_Définition> <Var_Structure>;
Etudiant E1;
7
Déclaration d’une Variable : Utilisation de
typedef (3/3)
Syntaxe
typedef struct {
<type_champ1> <Nom_Champ1>;
<type_champ2> <Nom_Champ2>;
<type_champ3> <Nom_Champ3>;
...
} <Nom_Structure> ;

Exemple Déclaration
typedef struct {
char Nom[30]; <Nom_Structure> <Var_Structure>;
int Age; Etudiant E1;
float MoyenneScolaire;
}Etudiant;

8
Initialisation d’une Structure

Initialiser une structure en indiquant entre accolades {} la liste


des valeurs séparées par des virgules.

Exemple:

struct etudiant {
char nom[30];
int age;
float moyenneScolaire;
};

struct etudiant E1={" test ",21,12};

9
Utilisation d’une structure (1/2)

Accès aux champs:

Pour accéder aux champs d'une structure on utilise l'opérateur de


champ (un simple point) placé entre le nom de la variable structurée
et le nom du champ.

Syntaxe:
<Var_Structure>.<Nom_Champ> ;

Pour affecter des valeurs à la variable E1, on pourra écrire:

E1.age= 22; // affectation d’un champ

printf ("donner la moyenne \n ") ;

scanf ("%f", &E1.Moyenne) ; //stockage dans un champ


10
Utilisation d’une structure (2/2)

Soit E1 et E2 deux variables de type Etudiant:

Il existe deux types d’affectation:

❑ Soit d’une façon individuelle (champs par champs), sur


chacun de leurs champs:

E1. niveau = E2.niveau;


E1.moyenne = E2.moyenne;

❑ Soit d’une manière globale sur toute la structure.

E1 = E2;

11
Structures contenant des tableaux
Une structure peut contenir des champs de type chaîne de caractères
ou bien de type tableau.

Exemple:
struct Etudiant
{
char nom [30];
char prenom [30];
float notes [4];
};
struct Etudiant E1,E2;

Notation:

E1.nom[0] : désigne le premier caractère du champ nom de l’étudiant E1


E2.notes[3] : désigne la quatrième note du tableau notes de l’étudiant E2
12
Structures imbriquées
Une structure imbriquée est une structure qui contient aussi un ou
plusieurs champ(s) de type structure. Cette dernière doit être
différente de la première.
Exemple:

struct Date {
int jour;
int mois;
int annee;
};
Struct Etudiant {
char nom [30] ;
char prenom [30] ;
struct Date date_naissance ;
};
NB: La structure Date doit aussi être déclarée et définie avant la structure
Etudiant 13
Tableaux de structures

14
Définition et Déclaration
Un tableau de structures est un tableau dont les éléments sont de type structure.

Syntaxe

struct <Nom_Structure>
{
<type_champ1> <Nom_Champ1>;
<type_champ2> <Nom_Champ2>;
<type_champ3> <Nom_Champ3>;
};
struct <Nom_Structure> tab [taille]; // tab est le nom du tableau

Exemple
struct Etudiant
{
char nom [30];
char prenom [30];
float notes [4];
};
struct Etudiant Classe[10];
Accès à un champ

Notation

Classe[i].note[1]= 15: désigne l’affectation de la valeur


15 au champ note[1] de l’élément de rang i du tableau
Classe.

Remarque : Classe.note[i] => N’a pas de sens!


Exemple
/*remplissage des 5 éléments du tableau Classe */
#include<stdio.h> for(i = 0 ; i <5 ; i++)
{
typedef struct printf(" Nom:" );scanf("%s",Classe[i].nom);
{ printf(" Prenom:" );scanf("%s",Classe[i].prenom);
char nom [30]; for(j=0;j<4;j++)
{
char prenom [30]; printf(" Note %d:" ,j );scanf("%f",&Classe[i].notes[j]);
float notes [4]; }
} Etudiant; }
/*Affichage des éléments du tableau Classe*/
for(i = 0 ; i <5; i++)
void main() {
{ Moy=0;
for(j=0;j<4;j++)
Etudiant Classe[5]; Moy+=Classe[i].notes[j];
int i,j; printf(" %s %s a une moyenne de %f" , Classe[i].nom,
float Moy; Classe[i].prenom,Moy/4);
}
}
Application
Implémenter un programme permettant de gérer les livres
d’une bibliothèque. Les livres sont stockés dans un tableau
unidimensionnel. Un livre est caractérisé par: - Sa référence
(chaîne de caractères). - Son nom(chaîne de caractères). - Le
nom de l’auteur(chaîne de caractères). - Sa date d’édition (de
type date).
Une date est caractérisée par - jour - mois - année Le
programme doit assurer les fonctionnalités suivantes via un
menu: 1- Ajouter un livre. Le programme doit assurer
l’unicité des références. 2- Afficher le tableau des livres. 3-
Trier le tableau selon un ordre décroissant des références
18
Les chaines & Tableaux de
chaines
Les chaînes de caractères

• Une chaîne de caractères est traitée comme un tableau de caractères à une


dimension.
• Déclaration
char Nom_du_tableau[longueur] ;
• Mémorisation
Le nom de la chaîne est le représentant de l'adresse du premier caractère.

20
chaînes de caractères constantes

• Les chaînes de caractères sont indiquées entre guillemets.


• La chaîne de caractères vide est alors:" "
char ch[] = "un ""deux ""trois"; //Concaténation implicite
char ch[] = "un deux trois"; //Écriture directe
=>le résultat final est identique!

21
Initialisation de chaînes de caractères

• on initialise les tableaux en indiquant la liste de ses éléments entre


accolades: char txt[]= {'h','e','l','l','o','\0’};
Pour une chaîne de caractères, on peut utiliser: char txt[]= "hello";
• Remarque : Si on ne spécifie pas la longueur, le bon nombre d'octets est
réservé (y compris le'\0’).

22
Lecture et fonctions

Accès aux éléments d'une chaîne


• L'accès se fait de la même manière que pour un élément d'un tableau.
Char A[6]="hello"; Les fonctions de string.h
strlen(s) fournit la longueur de la chaîne sans
compter le '\0' final
strcpy(s, t) copie t vers s
strcat(s, t) ajoute t à la fin de s
Lecture strcmp(s, t) compare s et t lexicographiquement
scanf (avec le spécificateur %s) et fournit un résultat:
Scanf ("%s" , &txt); négatif: si s précède t
zéro: si s est égal à t
gets(ch) positif: si s suit t
Char txt[20]; strncpy(s, t, n) copie au plus n caractères de t
gets(txt); vers s
strncat(s, t, n) ajoute au plus n caractères de t à
la fin de s 23
Lecture et fonctions

• Les fonctions de stdlib


atoi(s) retourne la valeur numérique représentée par s comme int
atol(s) retourne la valeur numérique représentée par s comme long
atof(s) retourne la valeur numérique représentée par s comme double (!)
Règles générales pour la conversion:
- Les espaces au début d'une chaîne sont ignorés
- Il n'y a pas de contrôle du domaine de la cible
- La conversion s'arrête au premier caractère non-convertible
- Pour une chaîne non-convertible, les fonctions retournent zéro

24
Tableaux de chaînes de caractères

• Déclaration, mémorisation
type nom[L][C];

• Accès aux différentes composantes


Il est possible d'accéder aux différentes chaînes de caractères d'un
tableau en indiquant
la ligne correspondante.
25
Tableaux de chaînes de caractères

• Exemple :
Char jour[7][9]={"lundi","mardi","mercredi","jeudi","vendredi",
"samedi","dimanche"};
printf("Aujourd'hui, c'est %s!\n",jour[2]);
affichage: Aujourd'hui, c'est mercredi!
jour[j] représente l'adresse du premier élément d'une chaîne de caractère,.
on ne peut donc:
modifier une telle adresse par une affectation du type:
• jour[4]="friday"; faux!
On doit utiliser la fonction strcpy(jour[4],"friday")

26

Vous aimerez peut-être aussi