SlideShare une entreprise Scribd logo
Langage C
Partie 2
Année universitaire
2014/2015
Université Hassan II Casablanca
Ecole normale supérieure (ENS)
Master Mathématiques, Cryptologie et Sécurité Informatique (MMCSI)
Mohamed Lahby
mlahby@gmail.com
Langage C (Partie 2)
Types complexes
structures, unions et
énumérations
Langage C (Partie 2)
Plan du cours
1.Structures
2.Unions
3.Enumérations
Structures
Une structure est un nouveau type de données constitué par un ensemble de
variables (champs) qui peuvent être hétérogènes et de types différents
La différence avec le type tableau est que les champs d’un tableau sont tous
homogènes et du même type
Les structures permettent de représenter des objets réels caractérisées par
plusieurs informations, par exemple :
Une personne caractérisée par son nom (chaîne), son âge (entier), sa taille (réel), ...
Une voiture caractérisée par sa marque (chaîne), sa couleur (chaîne), son année
modèle(entier), ...
4/17
Définition d'un modèle de structure
La définition d'un modèle de structure s'effectue en précisant le nom de la
structure, ainsi que le nom et le type de ses champs :
Syntaxe en C : struct nom_structure
{
type 1 nom_champ1;
type 2 nom_champ2;
...
type N nom_champN;
};
Exemple : struct Personne
{ char Nom[20];
int Age;
float taille;
};
Rq: Le nom d’une structure n’est pas un nom de variable, c’est le nom du
type ou modèle de la structure
5/17
Déclaration d’une variable structure
La définition d'un modèle de structure ne réserve pas d’espace mémoire
La réservation se fait quand on définit des variables correspondant à ce
modèle de structure. Ceci peut se faire soit
Après la déclaration de la structure, par exemple :
struct Personne p1, p2, tab[10];
//p1 et p2 deux variables de type structure Personne
// tab est une variable de type tableau de 10 éléments (de type Personne)
 ou au moment de la déclaration de la structure
struct Personne
{ char Nom[20];
int Age;
float taille;
} p1, p2, tab[10];
6/17
Initialisation d’une structure
Lors de la déclaration d’une variable structure, on peut initialiser ses champs
avec une notation semblable à celle utilisée pour les tableaux en indiquant la
liste des valeurs respectives entre accolades.
 Exemple :
struct date
{ unsigned short jour;
char mois[10];
unsigned short annee;
};
struct date d1= {15,"Novembre", 2013};
7/17
Utilisation des champs d’une structure
L'accès à un champ d’une variable structure se fait par le nom de la variable
suivi d’un point et du nom du champ:
nom_variable.nom_champ
Exemples:

p1.age = 15; : affecte la valeur 15 au champ age de la structure p1.

printf ("%f", p1.taille) : affiche, suivant le code format %d, la valeur du champ taille de
la structure p1.

scanf ("%d", &p2.age) ; : lit, suivant le code format %d, une valeur qui sera affectée au
champ age de la structure p2. Notez bien la présence de l’opérateur &
8/17
Utilisation globale d’une structure
Il est possible d’affecter à une structure le contenu d’une structure
définie à partir du même modèle.
Exemple : soit la structure article définie par :
struct article
{ int numero; //un numéro qui identifie l’article numero;
int qte; // quantité disponible en stock
float prix;
} art1, art2;
Nous pourrons écrire : art1=art2
Une telle affectation globale remplace avantageusement
art1.numero = art2.numero ;
art1.qte = art2.qte ;
art1.prix = art2.prix ;
9/17
Saisie et d’affichage d’une structure
/* Saisie des champs de la structure art */
printf ("Entrez respectivement les champs de l’article n ");
scanf("scanf(" %d %s %d %f" , &art.numero, art.nom, &art.qte_stock, &art.prix);
/* Saisie des champs de la structure art */
printf (" Cet article a pour : n ");
printf (" t numéro : %d n ", art.numero);
printf (" t nom : %s n ", art.nom);
printf (" t quantité en stock : %d n ", art.qte_stock);
printf (" t prix : %f n ", art.prix);
10/17
Imbrication de structures
Les structures peuvent être composées de champs de n’importe quel type
connu: types de base, pointeur, tableau ou structure.
Exemple:
struct Etudiant
{ int code;
char Nom[20];
struct date date_naissance;
float notes[8]; //notes de l'étudiant dans 8 modules
} E1,E2;
On peut écrire E1.date_naissance.annee pour accéder au champ annee de
E1.date_naissance qui est de type date
E2.notes[3] représente la note du module 4 de l’étudiant E
11/17
Tableaux de structures
Voyez ces déclarations :
struct point { char nom ;
int x ;
int y ;
} ;
struct point courbe [50] ;
La structure point pourrait, par exemple, servir à représenter un point d’un
plan, point qui serait défini par son nom (caractère) et ses deux coordonnées.
point est un nom de modèle de structure, tandis que courbe représente
effectivement un tableau de 50 éléments du type point.
courbe[i].nom: représente le nom du point de rang i du tableau courbe. Il s’agit donc
d’une valeur de type char
 courbe.nom[i] :n’aurait pas de sens!!!!.
12/17
Définition de types synonymes: typedef
En C, on peut définir des types nouveaux synonymes de types existants
(simples, pointeur, tableau, structure,...) en utilisant le mot clé typedef. Ces
nouveaux types peuvent être utilisées ensuite comme les types prédéfinis
Exemple :
La déclaration :
typedef int entier ;
signifie que entier est synonyme de int, de sorte que les déclarations suivantes sont
équivalentes :
int n, p ; <--------> entier n, p ;
De même
typedef int * ptr ;
signifie que ptr est synonyme de int *. Les déclarations suivantes sont équivalentes :
int * p1, * p2 ; ptr p1, p2 ;
13/17
Application typedef aux structures
En faisant usage de typedef, les déclarations des structures art1 et art2 peuvent
être réalisées comme suit :
struct enreg
{ int numero ;
int qte ;
float prix ;
} ;
typedef struct enreg s_enreg ;
s_enreg art1, art2 ;
ou encore, plus simplement :
typedef struct
{ int numero ;
int qte ;
float prix ;
} s_enreg ;
s_enreg art1, art2 ;
14/17


Exercice 1 : Modélisation des nombres complexes
Un nombre complexe z est entièrement défini par ses parties réelle a imaginaire b: z=a+ib
1)Définir la structure qui permet de représenter correctement un nombre complexe.
2)Réaliser les fonctions donnant les attributs d'un nombre complexe (partie réelle, partie
imaginaire, module, argument)
3)Réaliser les fonctions nécessaires à l'arithmétique sur les complexes (addition,
soustraction, multiplication,division, conjugué, multiplication par un réel)
4)Écrire une fonction d'entête: int IdentiqueComplexe(... , ...) qui teste l'égalité de deux
nombres complexes.
5)Ecrire une fonction d'entête void SaisieComplexe1(....); qui permet la saisie au clavier
d’un nombre complexe.
6)Ecrire une fonction d'entête void SaisieComplexe2(...) qui fait le même travail en
passage par adresse.
7)Ecrire une fonction d'entête complexe InitialiserComplexe1() qui permet d'initialiser
un nombre complexe
8)Ecrire une fonction d'entête complexe InitialiserComplexe(float R , float I) qui permet
d'initialiser un nombre complexe
9)Ecrire une fonction d'entête void AfficheComplexe qui permet d’afficher un nombre
complexe a l’écran. Vous passerez le nombre complexe à afficher par adresse.
10) Écrire le programme principale main() qui appel les fonctions précédentes
15/17
Exercice 2 : Gestion des notes d'une classe
On souhaite créer un programme en langage C permettant la gestion des notes pour une
classe. Pour cette raison on utilise les deux types de données (structures) définis ci-dessous
pour représenter un Etudiant et une Classe:
typedef struct ETD
{ char nom[30];
char prenom[30];
int age;
float note;
} Etudiant;
La structure Classe qui va représenter la classe des étudiants. adresses. Cette structure
Classe contiendra un tableau de 30 étudiants et un compteur (un entier nommé n) indiquant
le nombre des étudiants dans le tableau E.
typedef struct CLS
{ Etudiant E[30];
int n;
} Classe;
16/17
Exercice 2 : Gestion des notes d'une classe
1)Ecrire une fonction d'entête Etudiant saisir1_etudiant(void) saisissant au clavier les données
constituant un objet de type Etudiant.
2)Ecrire une fonction d'entête void saisir2_etudiant(Etudiant *I) saisissant au clavier les
données constituant un objet de type Etudiant.
3)Ecrire une fonction d'entête int identiques(Etudiant m1,Etudiant m2) retournant 1 si les
champs nom (considéré comme une chaîne de caractères) et age de m1 et m2 ont les mêmes
valeurs, et 0 sinon.
4)Ecrire une fonction d'entête void ajouter_etudiant(Etudiant I, Classe C) qui ajoute l'étudiant
I dans la classe C (on insère l'élément à la fin du tableau).
5)Ecrire une fonction d'entête float moy_classe(Classe C)qui permet de retourner la moyenne
de tous les étudiants de la classe C.
6)Ecrire une fonction d'entête void afficher_etudiant(Etudiant I) qui affiche les informations
contenues dans l’objet I passée en argument.
7)Ecrire une fonction d'entête void afficher_liste(Classe C) affichant à l'écran une représentation
lisible de tous les étudiants de classe C.
8)Ecrire une fonction d'entête int position(Etudiant m , Classe C) retournant l'indice où l'on
trouve m dans A (-1 si m n'est pas dans l'annuaire).
9)Ecrire une fonction d'entête float Chercher_Note_Max(Classe C) retournant le nom de
l'étudiant ayant la note la plus élevée dans la classe C.
10)Ecrire une fonction int Nbr_Etd_moy(Classe C) retournant le nombre des étudiants ayant
obtenu une notre supérieure ou égale à la moyenne de la classe. 17/17

Contenu connexe

Tendances

Chapitre05 : Les tableaux
Chapitre05 : Les tableauxChapitre05 : Les tableaux
Chapitre05 : Les tableaux
L’Université Hassan 1er Settat
 
Travaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de DonnéesTravaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de Données
Anass41
 
resume algo 2023.pdf
resume algo 2023.pdfresume algo 2023.pdf
resume algo 2023.pdf
salah fenni
 
Cours : les listes chainées Prof. KHALIFA MANSOURI
Cours : les listes chainées  Prof. KHALIFA MANSOURI Cours : les listes chainées  Prof. KHALIFA MANSOURI
Cours : les listes chainées Prof. KHALIFA MANSOURI
Mansouri Khalifa
 
Algorithmes d'approximation
Algorithmes d'approximationAlgorithmes d'approximation
Algorithmes d'approximationmohamed_SAYARI
 
éNoncés+corrections bac2009
éNoncés+corrections bac2009éNoncés+corrections bac2009
éNoncés+corrections bac2009Morom Bil Morom
 
Exercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdfExercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdf
salah fenni
 
Les algorithmes recurrents
Les algorithmes recurrentsLes algorithmes recurrents
Les algorithmes recurrentsmohamed_SAYARI
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en python
Mariem ZAOUALI
 
Algorithme & structures de données Chap I
Algorithme & structures de données Chap IAlgorithme & structures de données Chap I
Algorithme & structures de données Chap I
Ines Ouaz
 
Les algorithmes d’approximation
Les algorithmes d’approximationLes algorithmes d’approximation
Les algorithmes d’approximationWael Ismail
 
Python avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementiellePython avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementielle
ECAM Brussels Engineering School
 
Série sous programmes (bac scientifique)
Série sous programmes (bac scientifique)Série sous programmes (bac scientifique)
Série sous programmes (bac scientifique)
Hichem Kemali
 
réseaux de neurones artificiels
réseaux de neurones artificiels réseaux de neurones artificiels
réseaux de neurones artificiels
Oussama Werfelli
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
ECAM Brussels Engineering School
 
Formation python
Formation pythonFormation python
Formation python
j_lipaz
 
Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)
salah fenni
 
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de trirécursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
Yassine Anddam
 
Chapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerChapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerSana Aroussi
 

Tendances (20)

Chapitre05 : Les tableaux
Chapitre05 : Les tableauxChapitre05 : Les tableaux
Chapitre05 : Les tableaux
 
Travaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de DonnéesTravaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de Données
 
resume algo 2023.pdf
resume algo 2023.pdfresume algo 2023.pdf
resume algo 2023.pdf
 
Cours : les listes chainées Prof. KHALIFA MANSOURI
Cours : les listes chainées  Prof. KHALIFA MANSOURI Cours : les listes chainées  Prof. KHALIFA MANSOURI
Cours : les listes chainées Prof. KHALIFA MANSOURI
 
Algorithmes d'approximation
Algorithmes d'approximationAlgorithmes d'approximation
Algorithmes d'approximation
 
éNoncés+corrections bac2009
éNoncés+corrections bac2009éNoncés+corrections bac2009
éNoncés+corrections bac2009
 
Exercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdfExercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdf
 
Les algorithmes recurrents
Les algorithmes recurrentsLes algorithmes recurrents
Les algorithmes recurrents
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en python
 
Algorithme & structures de données Chap I
Algorithme & structures de données Chap IAlgorithme & structures de données Chap I
Algorithme & structures de données Chap I
 
Les algorithmes d’approximation
Les algorithmes d’approximationLes algorithmes d’approximation
Les algorithmes d’approximation
 
Python avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementiellePython avancé : Interface graphique et programmation évènementielle
Python avancé : Interface graphique et programmation évènementielle
 
Série sous programmes (bac scientifique)
Série sous programmes (bac scientifique)Série sous programmes (bac scientifique)
Série sous programmes (bac scientifique)
 
réseaux de neurones artificiels
réseaux de neurones artificiels réseaux de neurones artificiels
réseaux de neurones artificiels
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
 
Algorithmes de tri
Algorithmes de triAlgorithmes de tri
Algorithmes de tri
 
Formation python
Formation pythonFormation python
Formation python
 
Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)Algorithmique et programmation en Pascal (résumé)
Algorithmique et programmation en Pascal (résumé)
 
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de trirécursivité algorithmique et complexité algorithmique et Les algorithmes de tri
récursivité algorithmique et complexité algorithmique et Les algorithmes de tri
 
Chapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régnerChapitre iii récursivité et paradigme diviser pour régner
Chapitre iii récursivité et paradigme diviser pour régner
 

En vedette

La programmation systéme en langage C sous UNIX
La programmation systéme en langage C sous UNIXLa programmation systéme en langage C sous UNIX
La programmation systéme en langage C sous UNIX
Ben Hassen Hamdi
 
Programmation Java
Programmation JavaProgrammation Java
Programmation Java
Mohamed Lahby
 
Chapitre 3 Les algorithmes de recherche et de tris
Chapitre 3 Les algorithmes de recherche et de trisChapitre 3 Les algorithmes de recherche et de tris
Chapitre 3 Les algorithmes de recherche et de tris
Mohamed Lahby
 
Chapitre 4: Architecture simplifiée d’un ordinateur
Chapitre 4: Architecture simplifiée d’un ordinateur Chapitre 4: Architecture simplifiée d’un ordinateur
Chapitre 4: Architecture simplifiée d’un ordinateur
Mohamed Lahby
 
Chapitre 8: Les arbres
Chapitre 8: Les  arbresChapitre 8: Les  arbres
Chapitre 8: Les arbres
Mohamed Lahby
 
Chap1 introduction à l'algoritmique
Chap1 introduction à l'algoritmiqueChap1 introduction à l'algoritmique
Chap1 introduction à l'algoritmique
Mohamed Lahby
 
Chapitre 2: Modèle de référence OSI
Chapitre 2: Modèle de référence OSIChapitre 2: Modèle de référence OSI
Chapitre 2: Modèle de référence OSI
Mohamed Lahby
 

En vedette (7)

La programmation systéme en langage C sous UNIX
La programmation systéme en langage C sous UNIXLa programmation systéme en langage C sous UNIX
La programmation systéme en langage C sous UNIX
 
Programmation Java
Programmation JavaProgrammation Java
Programmation Java
 
Chapitre 3 Les algorithmes de recherche et de tris
Chapitre 3 Les algorithmes de recherche et de trisChapitre 3 Les algorithmes de recherche et de tris
Chapitre 3 Les algorithmes de recherche et de tris
 
Chapitre 4: Architecture simplifiée d’un ordinateur
Chapitre 4: Architecture simplifiée d’un ordinateur Chapitre 4: Architecture simplifiée d’un ordinateur
Chapitre 4: Architecture simplifiée d’un ordinateur
 
Chapitre 8: Les arbres
Chapitre 8: Les  arbresChapitre 8: Les  arbres
Chapitre 8: Les arbres
 
Chap1 introduction à l'algoritmique
Chap1 introduction à l'algoritmiqueChap1 introduction à l'algoritmique
Chap1 introduction à l'algoritmique
 
Chapitre 2: Modèle de référence OSI
Chapitre 2: Modèle de référence OSIChapitre 2: Modèle de référence OSI
Chapitre 2: Modèle de référence OSI
 

Similaire à Langage c partie_2

Rappel_Structure programmatio. 2 smi.ppté
Rappel_Structure programmatio.  2 smi.pptéRappel_Structure programmatio.  2 smi.ppté
Rappel_Structure programmatio. 2 smi.ppté
JihadKhalili
 
Ch5-les tableaux et les pointeurs.pdf
Ch5-les tableaux et les pointeurs.pdfCh5-les tableaux et les pointeurs.pdf
Ch5-les tableaux et les pointeurs.pdf
FadouaBouafifSamoud
 
Les structures en c++
Les structures en c++Les structures en c++
Les structures en c++Wael Ismail
 
Les structures en c++ (1)
Les structures en c++ (1)Les structures en c++ (1)
Les structures en c++ (1)Wael Ismail
 
Chapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en CChapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en C
Abdelouahed Abdou
 
TP_STRUCT.DONN_LES STRUCTURES.docx
TP_STRUCT.DONN_LES STRUCTURES.docxTP_STRUCT.DONN_LES STRUCTURES.docx
TP_STRUCT.DONN_LES STRUCTURES.docx
SouadZid
 
Ch1 _ les enregistrements.pdf
Ch1 _ les enregistrements.pdfCh1 _ les enregistrements.pdf
Ch1 _ les enregistrements.pdf
FadouaBouafifSamoud
 
Memo java
Memo javaMemo java
Memo java
Ghazouani Mahdi
 
cours lanagage c avec des exemples d'application
cours lanagage c avec des exemples d'applicationcours lanagage c avec des exemples d'application
cours lanagage c avec des exemples d'application
kamalomari2
 
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
SiratiSoufiane
 
Chapitre 8 - Les tableaux et les pointeurs.pdf
Chapitre 8 - Les tableaux et les pointeurs.pdfChapitre 8 - Les tableaux et les pointeurs.pdf
Chapitre 8 - Les tableaux et les pointeurs.pdf
ShiniGami0o0
 
POO-chapitre6.pptx
POO-chapitre6.pptxPOO-chapitre6.pptx
POO-chapitre6.pptx
ImaneLoukili7
 
eExercices corrigesdivers
eExercices corrigesdiverseExercices corrigesdivers
eExercices corrigesdivers
Hajar Yazine
 
Exercicescorrigesdivers
ExercicescorrigesdiversExercicescorrigesdivers
ExercicescorrigesdiversKarim Amane
 
Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02
Rahma Boufalgha
 
LES TABLEAUX: dans le langage c et l'algorithme
LES TABLEAUX: dans le langage c et l'algorithmeLES TABLEAUX: dans le langage c et l'algorithme
LES TABLEAUX: dans le langage c et l'algorithme
aymaneelfellah
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07
haythem_2015
 

Similaire à Langage c partie_2 (20)

Rappel_Structure programmatio. 2 smi.ppté
Rappel_Structure programmatio.  2 smi.pptéRappel_Structure programmatio.  2 smi.ppté
Rappel_Structure programmatio. 2 smi.ppté
 
Ch5-les tableaux et les pointeurs.pdf
Ch5-les tableaux et les pointeurs.pdfCh5-les tableaux et les pointeurs.pdf
Ch5-les tableaux et les pointeurs.pdf
 
Les structures en c++
Les structures en c++Les structures en c++
Les structures en c++
 
Les structures en c++ (1)
Les structures en c++ (1)Les structures en c++ (1)
Les structures en c++ (1)
 
Chapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en CChapitre 3 tableaux et pointeurs en C
Chapitre 3 tableaux et pointeurs en C
 
Chapitre 2
Chapitre 2Chapitre 2
Chapitre 2
 
TP_STRUCT.DONN_LES STRUCTURES.docx
TP_STRUCT.DONN_LES STRUCTURES.docxTP_STRUCT.DONN_LES STRUCTURES.docx
TP_STRUCT.DONN_LES STRUCTURES.docx
 
Ch1 _ les enregistrements.pdf
Ch1 _ les enregistrements.pdfCh1 _ les enregistrements.pdf
Ch1 _ les enregistrements.pdf
 
Memo java
Memo javaMemo java
Memo java
 
cours lanagage c avec des exemples d'application
cours lanagage c avec des exemples d'applicationcours lanagage c avec des exemples d'application
cours lanagage c avec des exemples d'application
 
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
CPP PTT DE CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
 
Chapitre 8 - Les tableaux et les pointeurs.pdf
Chapitre 8 - Les tableaux et les pointeurs.pdfChapitre 8 - Les tableaux et les pointeurs.pdf
Chapitre 8 - Les tableaux et les pointeurs.pdf
 
Pointeuren c
Pointeuren cPointeuren c
Pointeuren c
 
C5 types structures
C5 types structuresC5 types structures
C5 types structures
 
POO-chapitre6.pptx
POO-chapitre6.pptxPOO-chapitre6.pptx
POO-chapitre6.pptx
 
eExercices corrigesdivers
eExercices corrigesdiverseExercices corrigesdivers
eExercices corrigesdivers
 
Exercicescorrigesdivers
ExercicescorrigesdiversExercicescorrigesdivers
Exercicescorrigesdivers
 
Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02Memojava 100604104941-phpapp02
Memojava 100604104941-phpapp02
 
LES TABLEAUX: dans le langage c et l'algorithme
LES TABLEAUX: dans le langage c et l'algorithmeLES TABLEAUX: dans le langage c et l'algorithme
LES TABLEAUX: dans le langage c et l'algorithme
 
System c eniso_jan_fev_07
System c eniso_jan_fev_07System c eniso_jan_fev_07
System c eniso_jan_fev_07
 

Dernier

1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
schneiderbeatrice78
 
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
IES Turina/Rodrigo/Itaca/Palomeras
 
Méthodologie de recherche et de rédaction de mémoire.pptx
Méthodologie de recherche et de rédaction de mémoire.pptxMéthodologie de recherche et de rédaction de mémoire.pptx
Méthodologie de recherche et de rédaction de mémoire.pptx
LamoussaPaulOuattara1
 
Mémoire de licence en finance comptabilité et audit
Mémoire de licence en finance comptabilité et auditMémoire de licence en finance comptabilité et audit
Mémoire de licence en finance comptabilité et audit
MelDjobo
 
4 expositions à voir à Paris.pptx
4   expositions    à   voir   à Paris.pptx4   expositions    à   voir   à Paris.pptx
4 expositions à voir à Paris.pptx
Txaruka
 
SYLLABUS DU COURS MARKETING DTS 1-2.pdf
SYLLABUS DU COURS  MARKETING DTS 1-2.pdfSYLLABUS DU COURS  MARKETING DTS 1-2.pdf
SYLLABUS DU COURS MARKETING DTS 1-2.pdf
Moukagni Evrard
 
Contrôle fiscale en république de guinée
Contrôle fiscale en république de guinéeContrôle fiscale en république de guinée
Contrôle fiscale en république de guinée
bangalykaba146
 
Iris et les hommes.pptx
Iris      et         les      hommes.pptxIris      et         les      hommes.pptx
Iris et les hommes.pptx
Txaruka
 
Calendrier du 3 juin 2024 et compte rendu.pdf
Calendrier du 3 juin 2024 et compte rendu.pdfCalendrier du 3 juin 2024 et compte rendu.pdf
Calendrier du 3 juin 2024 et compte rendu.pdf
frizzole
 
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdf
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdfCours SE - Gestion de la mémoire- Cours IG IPSET.pdf
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdf
MedBechir
 
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
BenotGeorges3
 
Bilan schéma pour réun concertation SDLP V4.pptx
Bilan schéma pour réun concertation SDLP V4.pptxBilan schéma pour réun concertation SDLP V4.pptx
Bilan schéma pour réun concertation SDLP V4.pptx
bibliogard
 
Exame DELF - A2 Francês pout tout public
Exame DELF - A2  Francês pout tout publicExame DELF - A2  Francês pout tout public
Exame DELF - A2 Francês pout tout public
GiselaAlves15
 
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Formation
 
Festival de Cannes 2024.pptx
Festival      de      Cannes     2024.pptxFestival      de      Cannes     2024.pptx
Festival de Cannes 2024.pptx
Txaruka
 
Projet de fin d'étude licence en sciece.pptx
Projet de fin d'étude licence en sciece.pptxProjet de fin d'étude licence en sciece.pptx
Projet de fin d'étude licence en sciece.pptx
elfangourabdelouahab
 

Dernier (16)

1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
 
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
 
Méthodologie de recherche et de rédaction de mémoire.pptx
Méthodologie de recherche et de rédaction de mémoire.pptxMéthodologie de recherche et de rédaction de mémoire.pptx
Méthodologie de recherche et de rédaction de mémoire.pptx
 
Mémoire de licence en finance comptabilité et audit
Mémoire de licence en finance comptabilité et auditMémoire de licence en finance comptabilité et audit
Mémoire de licence en finance comptabilité et audit
 
4 expositions à voir à Paris.pptx
4   expositions    à   voir   à Paris.pptx4   expositions    à   voir   à Paris.pptx
4 expositions à voir à Paris.pptx
 
SYLLABUS DU COURS MARKETING DTS 1-2.pdf
SYLLABUS DU COURS  MARKETING DTS 1-2.pdfSYLLABUS DU COURS  MARKETING DTS 1-2.pdf
SYLLABUS DU COURS MARKETING DTS 1-2.pdf
 
Contrôle fiscale en république de guinée
Contrôle fiscale en république de guinéeContrôle fiscale en république de guinée
Contrôle fiscale en république de guinée
 
Iris et les hommes.pptx
Iris      et         les      hommes.pptxIris      et         les      hommes.pptx
Iris et les hommes.pptx
 
Calendrier du 3 juin 2024 et compte rendu.pdf
Calendrier du 3 juin 2024 et compte rendu.pdfCalendrier du 3 juin 2024 et compte rendu.pdf
Calendrier du 3 juin 2024 et compte rendu.pdf
 
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdf
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdfCours SE - Gestion de la mémoire- Cours IG IPSET.pdf
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdf
 
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
 
Bilan schéma pour réun concertation SDLP V4.pptx
Bilan schéma pour réun concertation SDLP V4.pptxBilan schéma pour réun concertation SDLP V4.pptx
Bilan schéma pour réun concertation SDLP V4.pptx
 
Exame DELF - A2 Francês pout tout public
Exame DELF - A2  Francês pout tout publicExame DELF - A2  Francês pout tout public
Exame DELF - A2 Francês pout tout public
 
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
 
Festival de Cannes 2024.pptx
Festival      de      Cannes     2024.pptxFestival      de      Cannes     2024.pptx
Festival de Cannes 2024.pptx
 
Projet de fin d'étude licence en sciece.pptx
Projet de fin d'étude licence en sciece.pptxProjet de fin d'étude licence en sciece.pptx
Projet de fin d'étude licence en sciece.pptx
 

Langage c partie_2

  • 1. Langage C Partie 2 Année universitaire 2014/2015 Université Hassan II Casablanca Ecole normale supérieure (ENS) Master Mathématiques, Cryptologie et Sécurité Informatique (MMCSI) Mohamed Lahby mlahby@gmail.com
  • 2. Langage C (Partie 2) Types complexes structures, unions et énumérations
  • 3. Langage C (Partie 2) Plan du cours 1.Structures 2.Unions 3.Enumérations
  • 4. Structures Une structure est un nouveau type de données constitué par un ensemble de variables (champs) qui peuvent être hétérogènes et de types différents La différence avec le type tableau est que les champs d’un tableau sont tous homogènes et du même type Les structures permettent de représenter des objets réels caractérisées par plusieurs informations, par exemple : Une personne caractérisée par son nom (chaîne), son âge (entier), sa taille (réel), ... Une voiture caractérisée par sa marque (chaîne), sa couleur (chaîne), son année modèle(entier), ... 4/17
  • 5. Définition d'un modèle de structure La définition d'un modèle de structure s'effectue en précisant le nom de la structure, ainsi que le nom et le type de ses champs : Syntaxe en C : struct nom_structure { type 1 nom_champ1; type 2 nom_champ2; ... type N nom_champN; }; Exemple : struct Personne { char Nom[20]; int Age; float taille; }; Rq: Le nom d’une structure n’est pas un nom de variable, c’est le nom du type ou modèle de la structure 5/17
  • 6. Déclaration d’une variable structure La définition d'un modèle de structure ne réserve pas d’espace mémoire La réservation se fait quand on définit des variables correspondant à ce modèle de structure. Ceci peut se faire soit Après la déclaration de la structure, par exemple : struct Personne p1, p2, tab[10]; //p1 et p2 deux variables de type structure Personne // tab est une variable de type tableau de 10 éléments (de type Personne)  ou au moment de la déclaration de la structure struct Personne { char Nom[20]; int Age; float taille; } p1, p2, tab[10]; 6/17
  • 7. Initialisation d’une structure Lors de la déclaration d’une variable structure, on peut initialiser ses champs avec une notation semblable à celle utilisée pour les tableaux en indiquant la liste des valeurs respectives entre accolades.  Exemple : struct date { unsigned short jour; char mois[10]; unsigned short annee; }; struct date d1= {15,"Novembre", 2013}; 7/17
  • 8. Utilisation des champs d’une structure L'accès à un champ d’une variable structure se fait par le nom de la variable suivi d’un point et du nom du champ: nom_variable.nom_champ Exemples:  p1.age = 15; : affecte la valeur 15 au champ age de la structure p1.  printf ("%f", p1.taille) : affiche, suivant le code format %d, la valeur du champ taille de la structure p1.  scanf ("%d", &p2.age) ; : lit, suivant le code format %d, une valeur qui sera affectée au champ age de la structure p2. Notez bien la présence de l’opérateur & 8/17
  • 9. Utilisation globale d’une structure Il est possible d’affecter à une structure le contenu d’une structure définie à partir du même modèle. Exemple : soit la structure article définie par : struct article { int numero; //un numéro qui identifie l’article numero; int qte; // quantité disponible en stock float prix; } art1, art2; Nous pourrons écrire : art1=art2 Une telle affectation globale remplace avantageusement art1.numero = art2.numero ; art1.qte = art2.qte ; art1.prix = art2.prix ; 9/17
  • 10. Saisie et d’affichage d’une structure /* Saisie des champs de la structure art */ printf ("Entrez respectivement les champs de l’article n "); scanf("scanf(" %d %s %d %f" , &art.numero, art.nom, &art.qte_stock, &art.prix); /* Saisie des champs de la structure art */ printf (" Cet article a pour : n "); printf (" t numéro : %d n ", art.numero); printf (" t nom : %s n ", art.nom); printf (" t quantité en stock : %d n ", art.qte_stock); printf (" t prix : %f n ", art.prix); 10/17
  • 11. Imbrication de structures Les structures peuvent être composées de champs de n’importe quel type connu: types de base, pointeur, tableau ou structure. Exemple: struct Etudiant { int code; char Nom[20]; struct date date_naissance; float notes[8]; //notes de l'étudiant dans 8 modules } E1,E2; On peut écrire E1.date_naissance.annee pour accéder au champ annee de E1.date_naissance qui est de type date E2.notes[3] représente la note du module 4 de l’étudiant E 11/17
  • 12. Tableaux de structures Voyez ces déclarations : struct point { char nom ; int x ; int y ; } ; struct point courbe [50] ; La structure point pourrait, par exemple, servir à représenter un point d’un plan, point qui serait défini par son nom (caractère) et ses deux coordonnées. point est un nom de modèle de structure, tandis que courbe représente effectivement un tableau de 50 éléments du type point. courbe[i].nom: représente le nom du point de rang i du tableau courbe. Il s’agit donc d’une valeur de type char  courbe.nom[i] :n’aurait pas de sens!!!!. 12/17
  • 13. Définition de types synonymes: typedef En C, on peut définir des types nouveaux synonymes de types existants (simples, pointeur, tableau, structure,...) en utilisant le mot clé typedef. Ces nouveaux types peuvent être utilisées ensuite comme les types prédéfinis Exemple : La déclaration : typedef int entier ; signifie que entier est synonyme de int, de sorte que les déclarations suivantes sont équivalentes : int n, p ; <--------> entier n, p ; De même typedef int * ptr ; signifie que ptr est synonyme de int *. Les déclarations suivantes sont équivalentes : int * p1, * p2 ; ptr p1, p2 ; 13/17
  • 14. Application typedef aux structures En faisant usage de typedef, les déclarations des structures art1 et art2 peuvent être réalisées comme suit : struct enreg { int numero ; int qte ; float prix ; } ; typedef struct enreg s_enreg ; s_enreg art1, art2 ; ou encore, plus simplement : typedef struct { int numero ; int qte ; float prix ; } s_enreg ; s_enreg art1, art2 ; 14/17  
  • 15. Exercice 1 : Modélisation des nombres complexes Un nombre complexe z est entièrement défini par ses parties réelle a imaginaire b: z=a+ib 1)Définir la structure qui permet de représenter correctement un nombre complexe. 2)Réaliser les fonctions donnant les attributs d'un nombre complexe (partie réelle, partie imaginaire, module, argument) 3)Réaliser les fonctions nécessaires à l'arithmétique sur les complexes (addition, soustraction, multiplication,division, conjugué, multiplication par un réel) 4)Écrire une fonction d'entête: int IdentiqueComplexe(... , ...) qui teste l'égalité de deux nombres complexes. 5)Ecrire une fonction d'entête void SaisieComplexe1(....); qui permet la saisie au clavier d’un nombre complexe. 6)Ecrire une fonction d'entête void SaisieComplexe2(...) qui fait le même travail en passage par adresse. 7)Ecrire une fonction d'entête complexe InitialiserComplexe1() qui permet d'initialiser un nombre complexe 8)Ecrire une fonction d'entête complexe InitialiserComplexe(float R , float I) qui permet d'initialiser un nombre complexe 9)Ecrire une fonction d'entête void AfficheComplexe qui permet d’afficher un nombre complexe a l’écran. Vous passerez le nombre complexe à afficher par adresse. 10) Écrire le programme principale main() qui appel les fonctions précédentes 15/17
  • 16. Exercice 2 : Gestion des notes d'une classe On souhaite créer un programme en langage C permettant la gestion des notes pour une classe. Pour cette raison on utilise les deux types de données (structures) définis ci-dessous pour représenter un Etudiant et une Classe: typedef struct ETD { char nom[30]; char prenom[30]; int age; float note; } Etudiant; La structure Classe qui va représenter la classe des étudiants. adresses. Cette structure Classe contiendra un tableau de 30 étudiants et un compteur (un entier nommé n) indiquant le nombre des étudiants dans le tableau E. typedef struct CLS { Etudiant E[30]; int n; } Classe; 16/17
  • 17. Exercice 2 : Gestion des notes d'une classe 1)Ecrire une fonction d'entête Etudiant saisir1_etudiant(void) saisissant au clavier les données constituant un objet de type Etudiant. 2)Ecrire une fonction d'entête void saisir2_etudiant(Etudiant *I) saisissant au clavier les données constituant un objet de type Etudiant. 3)Ecrire une fonction d'entête int identiques(Etudiant m1,Etudiant m2) retournant 1 si les champs nom (considéré comme une chaîne de caractères) et age de m1 et m2 ont les mêmes valeurs, et 0 sinon. 4)Ecrire une fonction d'entête void ajouter_etudiant(Etudiant I, Classe C) qui ajoute l'étudiant I dans la classe C (on insère l'élément à la fin du tableau). 5)Ecrire une fonction d'entête float moy_classe(Classe C)qui permet de retourner la moyenne de tous les étudiants de la classe C. 6)Ecrire une fonction d'entête void afficher_etudiant(Etudiant I) qui affiche les informations contenues dans l’objet I passée en argument. 7)Ecrire une fonction d'entête void afficher_liste(Classe C) affichant à l'écran une représentation lisible de tous les étudiants de classe C. 8)Ecrire une fonction d'entête int position(Etudiant m , Classe C) retournant l'indice où l'on trouve m dans A (-1 si m n'est pas dans l'annuaire). 9)Ecrire une fonction d'entête float Chercher_Note_Max(Classe C) retournant le nom de l'étudiant ayant la note la plus élevée dans la classe C. 10)Ecrire une fonction int Nbr_Etd_moy(Classe C) retournant le nombre des étudiants ayant obtenu une notre supérieure ou égale à la moyenne de la classe. 17/17