Académique Documents
Professionnel Documents
Culture Documents
PROGRAMMATION
EN C
Objectifs du cours
EHTP / Filière GI
Malika ADDOU
2010 -2011 1 2
M. ADDOU
PROGRAMMATION EN C PROGRAMMATION EN C
Maîtriser un langage de programmation Module Élément de module Quota Horaire
structuré
Programmation en Langage C 52
Acquérir les bonnes pratiques de la Techniques de Programmation
Projet C 12
programmation structurée et les grands
principes de la programmation impérative
Note Module = 75% * Programmation + 25% * Projet
Se familiariser avec le langage C
Se familiariser avec un environnement de
développement intégré C/C++ Programmation = 30% * Contrôle + 40% * Examen + 30% TP
Être capable de s’adapter à un langage de
programmation impératif autre que C.
3 4
M. ADDOU M. ADDOU
1
PROGRAMMATION EN C PROGRAMMATION EN C
Plan
INTRODUCTION À LA PROGRAMMATION
PRÉSENTATION DU LANGAGE C
CONCEPTS DE BASE
OPERATEURS ET EXPRESSIONS
INTRODUCTION À LA PROGRAMMATION
STRUCTURES DE CONTROLE
VARIABLES STRUCTURÉES
CHAÎNES DE CARACTÈRES
PRÉPROCESSEUR
NOTION DE SOUS-PROGRAMME
STRUCTURES DE DONNÉES
5 6
M. ADDOU TRAITEMENT DES FICHIERS M. ADDOU
2
INTRODUCTION À LA PROGRAMMATION INTRODUCTION À LA PROGRAMMATION
Exemples de logiciels : Organisation des logiciels sur ordinateur :
- Systèmes d’exploitation : Unix, Linux, Windows XP, Vista, Compilateurs
((de Pascal,, C/C++,, Java,, …))
…
- Compilateurs : Pascal, C, C++, Java, …
Système d’exploitation
- Progiciels : Traitement de texte Ex. Word
Tableur Ex. Excel
Interpréteur de
Présentation assistée Ex. PowerPoint macro instruction
Dessin assisté Ex. Autocad
Multimédia Ex.
Ex Photoshop Machine
Navigateur Web Ex. Explorer
- Applications spécifiques:
Logiciel de gestion de la relation client
Logiciel de comptabilité Interpréteurs (de commandes du système
Logiciel de gestion des stocks 9 d’exploitation, Java Virtual Machine, …) 10
M. ADDOU
… M. ADDOU
3
INTRODUCTION À LA PROGRAMMATION INTRODUCTION À LA PROGRAMMATION
Exemples d’IDE : 4) Langages de programmation
• Borland C++ (C/C++, …) - langage « haut niveau » (ou évolué) proche de la langue naturelle,
programmation facile, lisible, modulaire, portable (Ex. C/C++, Java,
• Netbeans (C/C++, Java SE, Java EE, Java ME, Pascal, …)
JavaScript, PHP, UML, XML, AJAX, …)
Rq. C et C++ peuvent se comporter aussi comme des langages « bas
13 niveau » pour interagir directement avec la partie hardware 14
M. ADDOU
• … M. ADDOU
4
INTRODUCTION À LA PROGRAMMATION INTRODUCTION À LA PROGRAMMATION
5) Implémentation d’un programme
Portabilité d’un langage Vs généralité :
Compilation
C il ti : le
l programme ((code
d source)) é
écrit
it en
• Langage portable : possibilité d’utiliser un même
langage de haut niveau est traduit en code
programme sur des plateformes différentes Unix/Linux,
compréhensible par la machine (langage machine) avant
Windows, …
l'exécution
(standardisation)
(trad ction lente,
(traduction lente exécution
e éc tion rapide)
• Langage général : possibilité d’utiliser un même Ex. de langages compilés :
programme pour une large gamme d'applications Pascal, C/C++, Fortran, Java, …
17 18
M. ADDOU M. ADDOU
5
INTRODUCTION À LA PROGRAMMATION INTRODUCTION À LA PROGRAMMATION
Interprétation
Implémentation hybride : le programme est traduit dans
Programme
P
un langage intermédiaire (bytecode) facilement
Données
source
interprétable
Interpréteur
(Machine Virtuelle) (Compromis entre le compilé et l’interprété, plus rapide
Analyse qu’une simple interprétation)
Résultats
21 22
M. ADDOU M. ADDOU
Programme
P B t C d
ByteCode Données
source
Compilateur Interpréteur
(Machine Virtuelle)
PRÉSENTATION DU LANGAGE C
Analyse Analyse
Traduction Interprétation
Résultats
23 24
M. ADDOU
M. ADDOU
6
PRÉSENTATION DU LANGAGE C PRÉSENTATION DU LANGAGE C
7
PRÉSENTATION DU LANGAGE C PRÉSENTATION DU LANGAGE C
8
PRÉSENTATION DU LANGAGE C PRÉSENTATION DU LANGAGE C
Choix de la platforme et de la version C
5) Exemple de programme C
Choisir la plateforme Unix/Linux ou Windows Recherche du minimum et du maximum de deux nombres réels en utilisant
deux fonctions Min et Max. [#include <Fichiers ou bibliothèques externes>]
[#define <Constantes ou macros fonctions>]
float xx, y;
float Min(float a, float b), Max(float a, float b);
Dans nos TPs, nous utiliserons un IDE (Environnement printf (" Donner x et y : \n" ) ;
de Développent Intégré : compilateur + éditeur intégré) scanf (" %f %f " , &x , &y) ;
/*** Affichage des résultats: 6 caractères maximum, 2 chiffres après la virgule ***/
sous Windows comme Visual C++ (propriétaire) ou printf (" Minimum de x et y : %6.2 f \n " , Min (x,y)) ;
CodeBlocks (gratuit) 33 printf (" Maximum de x et y : %6.2 f \n " , Max (x,y)) ; 34
M. ADDOU M. ADDOU }
float
oat Max
a ((float
oat a, float
oat b) ; [#define <Constantes ou macros fonctions>]
[[const <Définition de constantes externes> ;]
[typedef <Définition de types de données externes> ;]
Editeur de texte
Ré lt t
Résultats
{ [<Définition de variables externes> ;]
[<Prototypes de fonctions externes> ;]
[<Définition de fonctions> ;] Code source
if (a>b) return a ; int main ( )
{
[<Définition de variables> ;]
Code objet
/********************* Fonction Min **********************/
Editeur de liens
float Min (float a, float b) ; Données
{ Fonctions externes
Code exécutable
if (a<b) return a ;
else return b ; Chargeur
}
35 Code en mémoire 36
M. ADDOU M. ADDOU
9
PRÉSENTATION DU LANGAGE C PRÉSENTATION DU LANGAGE C
6) Implémentation d’un programme C 6) Implémentation d’un programme C
Editeur de texte Editeur de texte
Ré lt t
Résultats Ré lt t
Résultats
Erreurs de référence
Erreurs de syntaxe Code source à une fonction Code source
chargeur chargeur
Compilateur Compilateur
Machine Machine
Code objet Code objet
Exécution
10
PROGRAMMATION EN C CONCEPTS DE BASE
1) Notion d ’environnement (Déclarations)
Environnement : ensemble d ’objets nécessaires
à la résolution d ’un problème
(déclaration des objets)
Ex. modèle Surface-Disque
Paramètres : R, S
CONCEPTS DE BASE Relation : S = πR2
Environnement : R , S
En conclusion :
Pour programmer un problème sur ordinateur:
Il faut commencer par définir son environnement
41
(déclarer ses objets) 42
M. ADDOU
M. ADDOU
43 44
M. ADDOU M. ADDOU
11
CONCEPTS DE BASE CONCEPTS DE BASE
Ex. - Constante ⇒ 2 ou 3 éléments
Rayon R ⇒ nom =R * nom (optionnel)
type = réel (float) * Type
* Valeur
valeur = r (à préciser)
Rq. Ex.
3.14 ⇒ nom = PI
- Le nom et le type sont fixes
fixes.
type = réel (float)
- La valeur est variable. valeur = 3.14
- Le nom est sensible à la casse :
différence entre minuscules et majuscules Rq.
M. ADDOU
(R ≠ r, S ≠ s). 45 Le nom, le type et la valeur sont fixes. 46
M. ADDOU
12
CONCEPTS DE BASE CONCEPTS DE BASE
15) Déclaration des Constantes
Deux cas : Rq.
déclarer la constante dans la section « const » valeur d’une constante entière notée en octal
la définir par la directive #define qui permet de remplacer ⇒ faire précéder ses chiffres octaux du chiffre 0 (Ex. 013)
constamment un symbole par la chaîne de caractères qui
valeur d’une constante entière notée en hexadécimal
définit sa valeur
⇒ faire précéder ses chiffres hexadécimaux du chiffre 0
(utiliser « #define » aussi pour remplacer un appel de et de la lettre x ou X (Ex. 0x1FF3)
fonction ou de procédure)
forcer le compilateur à générer la valeur d’une
d une constante
Algorithmique C entière sur une double longueur
<Nom-constante> = <valeur> const <Type-données> <Nom-constante> = <valeur> ;
⇒ la faire suivre de la lettre l ou L
#define <Nom-constante> <valeur> (Ex. 55L, 012L, 0xBF8L)
49 50
M. ADDOU M. ADDOU
13
CONCEPTS DE BASE CONCEPTS DE BASE
2) Les types d’objets simples Ex.
21) Type Entier Algorithmique C
C Valeur sur des mots 16 bits n : octet unsigned char n ;
char -128 … 127
x, y, z : entiers int x,y,z ;
unsigned char 0 … 255
14
CONCEPTS DE BASE CONCEPTS DE BASE
23) Type Caractère Ex.
Algorithmique C
Caractère char L code
Le d ASCII de
d ‘A’ estt 97
Posons :
Ex.
#include <stdio.h>
Algorithmique C int main ()
c : Caractère char c ; { char c =’A’ ;
c ← ’b’ c = ’b’ ;
c=c+1
c c+1 ;
Rq. printf(‘’%c \n’’, c) ; /* Le résultat est ‘B’ */
Le type « char » représente en même temps le caractère printf(‘’%d \n’’, c) ; /* Le résultat est le code ASCII 98*/
et son code.
return 0;
57 58
M. ADDOU M. ADDOU
}
15
CONCEPTS DE BASE CONCEPTS DE BASE
3) Les instructions de base
Ex.
31)) Affectation
Algorithmique C
Algorithme C
<Variable> ← <Expression> <variable> = <expression> ;
Type typedef
Jour=(Lundi, Mardi, …, Dimanche) enum jour {Lundi, Mardi,…, Dimanche } ; Ex.
… …
j : jour jour j ; Algorithmique C
i←i+1 i=i+1;
61 62
M. ADDOU M. ADDOU
16
CONCEPTS DE BASE CONCEPTS DE BASE
- L’adresse de la variable à lire est notée par le caractère « & » suivi
du nom de cette variable
33)) Ecriture
- Des séparateurs peuvent être utilisés comme l’espace et la virgule
Algorithmique C
Ex. Écrire printf (< spécification-format>, <expression1>,
(<Expression1>[:<format>], <expression2>, ...) ;
Soient x et y deux réels. <Expression2>[:<format>], ou
...) putchar(<VariableCaractère>);
Algorithmique C ou
puts(<Variable
p ( Chaîne>)) ;
Lire (x, y) scanf (‘‘%f %f’’, &x , &y);
scanf (‘‘%f, %f’’, &x , &y);
65 66
M. ADDOU M. ADDOU
17
CONCEPTS DE BASE CONCEPTS DE BASE
Rq. Ex.
- Des séparateurs peuvent être utilisés
- Si l’on
l on place l’un
l un des séparateurs suivants entre deux valeurs Soient x et y deux réels.
consécutives, on a :
Algorithmique C
Séparateur signification Écrire (‘La somme de’, printf (‘‘La somme de %6.2f et %6.2f
<espace> Caractère « espace » entre les deux valeurs consécutives. X :6:2, ‘et’, y :6:2, est : %8.2f \n ’’, x, y, x+y) ;
\t Caractère « tabulation ». ‘ est :’, x + y :8:2)
18
CONCEPTS DE BASE CONCEPTS DE BASE
/* Division Euclidienne */
Ex2. #include <stdio.h>
Connaissant le dividende X et le diviseur Y, int main ()
écrire un programme C qui permet de calculer le quotient Q { int x,y,q,r;
et le reste de la division Euclidienne de X par Y printf (‘‘donner x :’’) ;
scanf (‘‘%d’’, &x);
printf (‘‘donner y :’’) ;
Solution : scanf (‘‘%d’’, &y);
q= x / y;
données : X , Y (int).
r= x % y;
Résultats : Q , R (int) printf (‘‘le quotient est : %d \n’’, q) ;
printf (‘‘le reste est : %d \n’’, r) ;
return 0;
73 74
M. ADDOU M. ADDOU }
Exercices
75 76
M. ADDOU
M. ADDOU
19
OPERATEURS ET EXPRESSIONS OPERATEURS ET EXPRESSIONS
Ex.
1) Opérateurs Algorithmique C
11) Opérateurs
O é t arithmétiques
ith éti x ← <reste de : 9 div 4> x=9%4; /* x= 1 */
Algorithmique C
12) Opérateurs booléens
+ +
Algorithmique C
- - et &&
* * ou ||
non !
/ /
xou non défini
div (division entière) / (si les 2 opérandes sont des entiers)
Ex.
Reste : Opérateur non défini % (reste de division entière)
Algorithmique C
77 Si (x = v[i]) ou (i=n) … If (x == v[i] || i==n) … 78
M. ADDOU M. ADDOU
Algorithmique C
x ← <Décalage de 2 à gauche de 7 bits> x = 2 << 7; /* x=256 */
79 80
M. ADDOU M. ADDOU
20
OPERATEURS ET EXPRESSIONS OPERATEURS ET EXPRESSIONS
15) Opérateurs spécifiques Ex.
(151) L
L’opérateur
opérateur conditionnel « ? » a = (i<n) ? 0 : 1 ;
Une condition peut être traitée dans une affectation
comme suit : Ú
Si i<n Alors a ← 0
<variable> = <condition> ? <expression1> : <expression2> ; Sinon a ← 1
FinSi
21
OPERATEURS ET EXPRESSIONS OPERATEURS ET EXPRESSIONS
Tableau descriptif des opérateurs d’affectations élargies :
Une expression intervient dans des instructions : Une expression possède une valeur et un type
- d’affectation Les variables dans une expression peuvent être :
-dd’affichage
affichage - simples (entiers,
(entiers réels,
réels caractères,
caractères pointeurs)
-… - structurées (tableaux, structures, unions)
87 88
M. ADDOU M. ADDOU
22
PROGRAMMATION EN C STRUCTURES DE CONTROLE
1) Schémas conditionnels
11) Schéma
S hé Si
Algorithmique C
Si <Condition> If ( <condition> )
STRUCTURES DE CONTROLE alors <action1> <action1> ;
[sinon <action2>] [else <action2> ;]
FinSi
89 90
M. ADDOU
M. ADDOU
23
STRUCTURES DE CONTROLE STRUCTURES DE CONTROLE
/* Recherche du maximum */
Ex2.
#include <stdio.h>
Ranger le maximum de trois nombres X, Y, Z
void main ()
dans une variable Max. {
float X, Y, Z, Max;
printf (‘‘Données :’’);
Solution scanf (‘‘%f %f %f’’,&X,&Y,&Z);
Max = X;
Données : X, Y, Z (float) if (Y > Max) Max = Y;
Résultat : Max (float) if (Z > Max) Max = Z;
printf (‘‘Max = %f \n’’, Max);
93
} 94
M. ADDOU M. ADDOU
95 96
M. ADDOU M. ADDOU
24
STRUCTURES DE CONTROLE STRUCTURES DE CONTROLE
/* Nombre de jours par mois */
#include <stdio.h>
Ex2. void main ()
{
Ecrire pour une année donnée et un mois donné int Annee, Mois, Nbjours;
printf (‘‘Année : \n’’);
le nombre de jours de ce mois. scanf (‘‘%d’’,&Annee);
printf (‘‘Mois : \n’’);
scanf (‘‘%d’’,&Mois);
switch (Mois) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12 : Nbjours=31;
break;
case 4: case 6: case 9: case 11 : Nbjours = 30;
Solution break;
case 2 : if (Annee % 400 == 0 || (Annee % 4 == 0 && Annee % 100 != 0))
Données : année, mois (int) Nbjours = 29;
else Nbjours = 28;
Résultat : Nbjours (int) }
/* ou Nbjours = (Annee % 400 == 0 || (Annee % 4 == 0 && Annee % 100 != 0)) ? 29 : 28; */
M. ADDOU
transformant les majuscules en minuscules. 99 M. ADDOU
100
25
STRUCTURES DE CONTROLE STRUCTURES DE CONTROLE
Ex. 22) Schéma Tant que (Boucle while)
Algorithmique C Algorithmique C
Rq.
<Action> peut être une action simple ou composée
(et dans ce dernier cas, elle sera limitée par :
« { » et « } »)
101 102
M. ADDOU M. ADDOU
26
STRUCTURES DE CONTROLE STRUCTURES DE CONTROLE
Rq.
Ex.
<Action> peut être une action simple ou composée
La
L conditionditi d’
d’arrêt
êt peutt êt
être une expression
i llogique
i
Ecrire la somme des n premiers nombres impairs
quelconque
l’expression d’initialisation peut être quelconque Solution
les expressions du « for » peuvent être absentes
Ex. for ( ; i<=10 ; ) Données : n (int)
n
- L’initialisation de i peut se faire juste avant « for » et Résultat : S=∑ (2*i – 1)
i=1
ll’incrémentation
incrémentation à l’intérieur
l intérieur de la boucle
- Si la condition est absente, elle est considérée comme
vraie
on peut grouper plusieurs actions dans les expressions Rq.
du « for »
105
Nb d’itérations connu : n fois ⇒ Boucle for 106
M. ADDOU
Ex. for (i=0, j= 1 ; i<=10 ; i++, j++) M. ADDOU
107 108
M. ADDOU M. ADDOU
27
STRUCTURES DE CONTROLE STRUCTURES DE CONTROLE
Devoir libre Exercices
PROGRAMMATION EN C TP
1) Environnement de développement
Code-Blocks : IDE (Integrated Development Environment)
libre et open source
(compilateur installé avec Code-Blocks : GNU GCC Compiler.)
TP
111 112
M. ADDOU
M. ADDOU
28
TP TP
2) Différentes phases de vie d’un programme 3) Espace de travail
- édition du code source (File/New) - fenêtre “espace
espace de travail”
travail ou workspace
- compilation du programme (Build/Compile) (différents constituants du programme : fichiers,
avec l’édition des liens fonctions, classes, …)
- débogage (Build/Start) - fenêtre “édition de programmes sources”
- eexécution
écu o (Build/Run)
( u d/ u ) ((affichage
c ge du contenu
co e u des programmes
p og es sources)
sou ces)
- fenêtre “sortie” ou output
(messages de compilation, d’édition de liens, ...)
113 114
M. ADDOU M. ADDOU
TP TP
4) Notion d’application console
programme ss’exécutant
exécutant sur une fenêtre Windows comme ss’il
il
s’agit d’une fenêtre DOS.
5) Notion de projet
C’est un fichier.cbp pour Code-Blocks Project
( t
(contenant
t les
l infos
i f utiles
til pour créer
é un programme exécutable
é t bl :
noms de fichiers sources, en-têtes, modules objets)
116
M. ADDOU 115 M. ADDOU
29
TP TP
7) TP1 7) TP2
Génération de nombres aléatoires
On veut chercher le PGCD de deux nombres entiers x et y donnés
Initialisation
en utilisant la méthode de recherche d’Euclide qui consiste à faire
des divisions successives des dénominateurs par les restes - inclusion de la bibliothèque stdlib.h
jusqu’à obtenir un reste nul. - utilisation de rand() comme générateur de nombres aléatoires.
Écrire un programme qui permet de chercher et d’afficher le Écrire un programme C qui fournit :
PGCD de x et y.
(1) un nombre entier tiré au hasard entre 0 et 32767 : constante
RAND_MAX (Faire 10 tirages).
119 120
M. ADDOU
M. ADDOU
30
VARIABLES STRUCTURÉES VARIABLES STRUCTURÉES
2) Notion de vecteur Ex2.
Tableau à 1 dimension
Algorithmique C
Algorithmique C
Constante : Nmax = 10 #define Nmax 10
Constante: Nmax = <valeur> #define Nmax <valeur>
ou ou
const int Nmax = <valeur>; const int Nmax = 10;
Table:vecteur de Nmax <Type-données> <Type-données> Table [Nmax];
T : vecteur de Nmax réels float T[Nmax] ; /*premier indice : 0 */
(indice : 0 … Nmax-1)
(indice : 0 … Nmax-1)
ou /* en cas d’initialisation */
Ex1. float T[Nmax]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10} ;
X : Vecteur de 10 réels (indice : 0 … 9) ou /* en cas de qq initialisations */
float T[Nmax]={1, , , ,0, , , 0, ,1} ;
X est déclaré par :
float X[10]; /* premier indice : 0 */ 121 122
M. ADDOU /* dernier indice : 9 */ M. ADDOU
31
VARIABLES STRUCTURÉES VARIABLES STRUCTURÉES
3) Notion de matrice Ex2.
Tableau à plusieurs dimensions
Algorithmique C
Algorithmique C
Constante : Nmax = 10 #define Nmax 10
Constante : Nmax = <valeur> #define Nmax <valeur>
ou ou
const int Nmax = <valeur>; const int Nmax = 10;
Table : matrice de Nmax *Nmax <Type- <Type-données> Table [Nmax] [Nmax];
données> M : matrice de Nmax * float M[Nmax][Nmax]; /*premiers indices : 0, 0*/
(indice:0 … Nmax-1,0 … Nmax-1) Nmax réels
ou /* en cas d’initialisation */
(indices : 0 … Nmax-1,
Nmax 1
Ex1. 0 … Nmax-1) float M[Nmax][Nmax]={{1,2,3,4,5,6,7,8,9,10},
{1,2,1,4,1,6,1,8,1,10},
M : Matrice de 10*20 réels (indice : 0 … 9, 0 … 19) …};
32
VARIABLES STRUCTURÉES VARIABLES STRUCTURÉES
129 130
M. ADDOU M. ADDOU
A
Autres noms : Variable
i bl composée
é , Structure
S Algorithmique C
Type typedef struct
• Enregistrement : Ensemble d’infos <Nom de type> = Enregistrement
<Nom de champ1> :<Type de
{
<Type de données> <Nom de
données> champ1> ;
de types différents <Nom de champ2> :<Type de <Type de données> <Nom de
données> champ2> ;
131 132
M. ADDOU M. ADDOU
33
VARIABLES STRUCTURÉES VARIABLES STRUCTURÉES
ou
Algorithmique C
struct <Nom de type>
Ex1.
{ Un abonné au téléphone :
<Type de données> <Nom de
champ1> ;
- code (entier)
<Type de données> <Nom de - nom (20c)
champ2> ;
… - prénom (20c)
} ; - adresse (40c)
- téléphone (9c)
133 134
M. ADDOU M. ADDOU
Résultat : z (complexe)
135 136
M. ADDOU M. ADDOU
34
VARIABLES STRUCTURÉES VARIABLES STRUCTURÉES
/* Somme Complexe */
#include <stdio.h> Exercices
typedef struct {
float Re
Re, Im;
} complexe;
void main() 1) Etant donnés 2 points A et B, calculer le milieu de
{ [A, B] sachant qu’un point est décrit par : un nom
complexe z1, z2, z;
puts (‘‘Partie réelle et partie imaginaire de z1 :’’); (1c) et deux cordonnées x et y (réelles ).
scanf (‘‘%f %f’’, &z1.Re, &z1.Im);
puts (‘‘Partie réelle et partie imaginaire de z2 :’’);
scanf ((‘‘%f %f’’,, &z2.Re,, &z2.Im); );
z.Re = z1.Re + z2. Re;
2) Les n élèves d’une
d une classe sont définis dans un vecteur
z.Im = z1.Im + z2.Im; par un nom (20c), un prénom (20c), une note (réel).
printf (‘‘z = ’’);
if (z.Im == 0.) printf(‘‘%5.2f’’, z.Re); - Donner la moyenne de la classe
else { if (z.Re != 0.) printf (‘‘%5.2f’’, z.Re); - Classer les élèves dans l’ordre décroissant de leur
printf (‘‘%+5.2f i \n’’, z.Im);
} 137 note. 138
M. ADDOU } M. ADDOU
139 140
M. ADDOU M. ADDOU
35
VARIABLES STRUCTURÉES VARIABLES STRUCTURÉES
Ex. représentation d’un nombre réel (float)
Rq.
Rq
Signe (0/1) Exposant sur 8 bits Mantisse NORMALISEE sur 23 bits • Un champ peut ne pas avoir de nom. Sa longueur
indique alors le nombre de bits que l'on veut ignorer.
typedef struct • Une longueur égale à 0 permet de forcer l'alignement
{unsigned int signe : 1;
unsigned int exposant : 8; sur le début du mot mémoire suivant.
unsigned int mantisse : 23;
} reel;
141 142
M. ADDOU M. ADDOU
143 144
M. ADDOU M. ADDOU
36
VARIABLES STRUCTURÉES VARIABLES STRUCTURÉES
(3) Type union
ou
L’union en C, permet d’interpréter l’espace mémoire d’une
variable de plusieurs façons différentes (économie d’espace
d espace
union <Nom de type>
mémoire) :
{
réserver un seul espace pour toutes les interprétations <Type de données> <Nom de champ1> ;
au lieu de <Type de données>: <Nom de champ2> ;
un espace pour chacune des interprétations …
Le type « union » est défini par : } ;
t
typedef
d f union
i
{
<Type de données> <Nom de champ1> ;
<Type de données> <Nom de champ2> ;
…
145 146
M. ADDOU
} <Nom de type> ; M. ADDOU
37