C pour Débutants en Informatique
C pour Débutants en Informatique
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 [Link] 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’’, &[Link], &[Link]);
puts (‘‘Partie réelle et partie imaginaire de z2 :’’);
scanf ((‘‘%f %f’’,, &[Link],, &[Link]); );
[Link] = [Link] + z2. Re;
2) Les n élèves d’une
d une classe sont définis dans un vecteur
[Link] = [Link] + [Link]; par un nom (20c), un prénom (20c), une note (réel).
printf (‘‘z = ’’);
if ([Link] == 0.) printf(‘‘%5.2f’’, [Link]); - Donner la moyenne de la classe
else { if ([Link] != 0.) printf (‘‘%5.2f’’, [Link]); - Classer les élèves dans l’ordre décroissant de leur
printf (‘‘%+5.2f i \n’’, [Link]);
} 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
PROGRAMMATION EN C CHAÎNES DE CARACTÈRES
Déclaration
Algorithmique C
chaîne char * <Nom d’un pointeur sur chaînes>
Al
Algorithmique
ith i C
Ch1 : chaîne char * ch1 ;
Ch2 : chaîne (20) char ch2[20] ;
149 150
M. ADDOU
M. ADDOU
Rq.
On peut copier dans une variable chaîne, une autre variable chaîne
151
ou une constante chaîne en utilisant la fonction « strcpy ».
M. ADDOU M. ADDOU Ex. strcpy (ch, ‘’bonjour’’) ; /** pour initialiser ch à ‘’bonjour’’ **/ 152
38
VARIABLES STRUCTURÉES PROGRAMMATION EN C
Exercices
1) Écrire un programme qui lit un verbe
régulier en "er" au clavier et qui en affiche
la conjugaison au présent de l'indicatif de
ce verbe. Contrôlez s'il s'agit bien d'un
verbe en "er" avant de conjuguer.
TP
Utiliser les fonctions ggets,, pputs,, strcat et strlen.
2) On se donne une chaîne de caractères qui
représente un nombre en chiffres romains
et on demande de la convertir au nombre
décimal correspondant. 154
M. ADDOU
M. ADDOU
153
TP PROGRAMMATION EN C
TP3
(à rendre au plus tard le jeudi 02/12/10)
Reprendre l’exercice de conjugaison.
Écrire un programme qui lit un verbe quelconque du
premier groupe au clavier et qui en affiche la conjugaison NOTION DE SOUS-PROGRAMME
au présent de l'indicatif de ce verbe. Contrôlez s'il s'agit
bien d'un
d un verbe en "er"
er avant de conjuguer.
conjuguer
Utiliser les fonctions gets, puts, strcat et strlen.
155 156
M. ADDOU
M. ADDOU
39
NOTION DE SOUS-PROGRAMME NOTION DE SOUS-PROGRAMME
1) Définition
Rq.
q.
C’ t une partie
C’est ti de
d programme quii : (1) Bien distinguer entre :
• possède un nom - définition du s/programme
- appel du s/programme
• peut être appelée (par ce nom) pour exécuter
une tâche bien déterminée (2) Bien distinguer entre :
- paramètres formels du s/programme
Deux cas : - paramètres effectifs (réels) du s/programme
- procédure
157 158
M. ADDOU
- fonction M. ADDOU
40
NOTION DE SOUS-PROGRAMME NOTION DE SOUS-PROGRAMME
Ex. Rq.
La procédure sera appelée par son nom de la même façon dans les
Algorithmique C trois écritures avec des p
paramètres effectifs.
Type vect=vecteur de 20 réels <Nom procédure> (<paramètre 1> [, ...])
(indice : 1 ...20)
Procédure Insertion (x : réel ; void insertion (float x, float v[ ], int n) <Nom procédure> (<paramètre 1> [, ...]);
variable v :vect ; variable n : {
entier) int i ; Ex.
variable i : entier i = n-1 ;
début : i ←n while ( i>=1 && x <v[i] ) On pose : T = {0, 1, 2, 3, 4, 5}
tant qque ((i>=1)) et ((x<v(i))
( )) { xo = 2.5
v(i+1) ← v(i) v[i+1] = v [i] ; no = 6
i← i –1 i = i – 1;
fin tant que } n0 doit être déclaré comme variable globale (n0 sera modifié)
v(i+1) ← x v[i+1] = x ;
n←n+1 n=n+1; Algorithmique C
fin } Insertion (xo , T , no) insertion (xo , T , no) ;
161 162
M. ADDOU M. ADDOU
163
Ex. Définition : int f (flaot x, float *y) {… y=…; …} 164
M. ADDOU M. ADDOU Appel : z=f(x0,&y0);
41
NOTION DE SOUS-PROGRAMME NOTION DE SOUS-PROGRAMME
Ex.
Rq. Algorithmique C
⇒ quatre manières différentes pour allouer de l’espace à une {static int n ; // n: compteur (nombre d’appels de la fonction f)
variable
i bl (l
(lors d
de sa dé
déclaration)
l ti ) : n++;
...
• la variable appartient à la classe automatique
}
- variable locale à un bloc ou à une fonction
Rq.
- variable temporaire
- emplacement mémoire alloué à chaque entrée dans le - variables initialisées par défaut à zéro
bloc/fonction - emplacement mémoire alloué au moment de l’édition des liens
- emplacement mémoire libéré à chaque sortie • la variable appartient à la classe externe
• la
l variable
i bl appartient
ti t à lla classe
l statique
t ti ⇒ variable globale définie dans un fichier source
⇒ variable permanente définie durant toute l’exécution du (Sa définition reste limitée à ce fichier).
programme source : Si un autre fichier source, compilé à part, utilise cette variable,
- variable globale il déclare cette variable précédée du mot-clé « extern »
- variable locale à un bloc ou à une fonction déclarée à l’aide - aucune réservation mémoire n’est effectuée
du mot-clé « static » (valeur connue uniquement dans le - juste préciser que la variable globale est définie ailleurs en
167
M. ADDOU
bloc/fonction où la variable est définie) M. ADDOU précisant son type 168
42
NOTION DE SOUS-PROGRAMME NOTION DE SOUS-PROGRAMME
Ex.
float y=5;
…
Exercice
f1 ()
{extern float y ; // ici y=5 Écrire un programme C qui :
…
- définit une fonction réelle f(x) donnée
}
• la variable appartient à la classe registre - calcule l’intégrale de f(x) sur un intervalle donné.
- variable très utilisée appartenant à la classe automatique
p
- variable temporaire
- sert à accélérer l’exécution du programme
- variable déclarée à l’aide du mot-clé « register »
⇒ Le compilateur placera cette variable dans un registre et non
en mémoire
Ex.
169 170
M. ADDOU register int n ; M. ADDOU
PROGRAMMATION EN C TP
TP4
Écrire un programme C qui permet de gérer une bibliothèque de livres
sous forme d’un vecteur de livres, à travers le menu suivant :
Bibliothèque
1 – Ajout
2 – Modification
3 –Suppression
TP 4 – Recherche
5 –Tri
6 – Edition
7 – Fin
Choix :
Chaque livre est décrit par un numéro de livre, un titre , un ou deux mots
clés, un auteur, un nom d’éditeur, une date d’édition, un numéro ISBN.
171 La recherche peut se faire par numéro de livre, par mots clés, par auteur
M. ADDOU
M. ADDOU ou par éditeur .
43
PROGRAMMATION EN C STRUCTURES DE DONNÉES DYNAMIQUES
1) Les allocations mémoires
Comment allouer de l’espace mémoire à une variable ?
• Variable statique : espace alloué à la variable pendant sa
déclaration au début du programme et libéré à la fin du
programme,
STRUCTURES DE DONNÉES DYNAMIQUES • Variable automatique : espace alloué à la variable pendant sa
déclaration au début d’une unité de programme (Ex. une
fonction) et libéré à la fin de cette unité de programme,
• Variable dynamique : espace alloué à la variable et/ou libéré
pendant l’exécution du programme.
Les variables dynamiques sont gérées par des outils spéciaux :
173 174
M. ADDOU M. ADDOU les pointeurs.
44
STRUCTURES DE DONNÉES DYNAMIQUES STRUCTURES DE DONNÉES DYNAMIQUES
45
STRUCTURES DE DONNÉES DYNAMIQUES STRUCTURES DE DONNÉES DYNAMIQUES
46
STRUCTURES DE DONNÉES DYNAMIQUES STRUCTURES DE DONNÉES DYNAMIQUES
/** Esquisse du programme « Intégrale d’une fonction » **/
(e) Pointeurs et fonctions /** f est un pointeur contenant l’adresse d’une fonction à 1 argument **/
/** g=(*f) sera l’adresse de la valeur d’une fonction à 1 argument **/
nom de
d la
l ffonction
ti = adresse
d d
de la
l ffonction
ti en mémoire.
é i /** g(x)=(*f)(x) est une fonction à 1 argument **/
float integrale (float (*f)(float x), float A, float B, int N)
Ce nom est considéré comme un pointeur sur cette {
…
fonction. }
/** Fonction Principale **/
main()
{ float aa, b;
int n;
float f1(float x), f2(float x) ; /* prototypes */
...
result1 = integrale (f1, a, b, n);
result2 = integrale (f2, a, b, n);
185 ... 186
M. ADDOU M. ADDOU
}
47
STRUCTURES DE DONNÉES DYNAMIQUES STRUCTURES DE DONNÉES DYNAMIQUES
Ex.
Rq. Type pointeur
typedef objet *lien; /*définition du type pointeur
Pointeur sur un objet*/
bj t*/
Variable de type pointeur lien p1; /*définition d’un pointeur
objet *p2; sur un objet*/
- Le type pointeur est un type simple
Rq.
(Mais ce n’est pas un type prédéfini) • L’astérisque indique que :
- Une variable de type
yp ppointeur ((ou un p
pointeur)) est une - « lien » est un type pointeur
- « p2 » est une variable de type pointeur
adresse ou une référence à un élément en mémoire • p1 occupe une seule case mémoire
(idem pour p2)
• Une variable de type « objet » peut être associée à p1,
elle sera notée : *p1
189 190
M. ADDOU M. ADDOU (idem pour p2, elle sera notée : *p2)
48
STRUCTURES DE DONNÉES DYNAMIQUES STRUCTURES DE DONNÉES DYNAMIQUES
… y
x=UnCarre; /* création de x (UnCarre déjà défini) */
y=UnCercle ; /* création de y (UnCercle déjà défini) */
Soient : et /* duplication de y */
x y 193
194
M. ADDOU M. ADDOU
49
STRUCTURES DE DONNÉES DYNAMIQUES STRUCTURES DE DONNÉES DYNAMIQUES
Ex1.
Algorithmique C
char *p1;
p ; /* pp1 : destiné à référencer une chaine de caractères*/
Variable
V i bl
p:↑<type de données> <type de données> *p ; p1= (char*) malloc(10); /* création de p1 */
p1="bonjour"; /* initialisation de la chaine */
P ← nil (*initialisation*) p = NULL ; /*initialisation */ puts(p1);
(* p ne pointe rien *) /* p ne pointe rien */
Ex2.
Allouer (p) p=[(<type-pointeur> *)]malloc
((<taille en octets>)) ; int i,
i *p2;
p2; //* p2 : référence à un entier *//
p=[(<type-pointeur> *)]calloc p2=(int*) calloc(4, 2); /* création de p2 */
(<nb-vars>,<taille par var>); for (i=1;i<=4;i++,p2++)
/* pour variable dont la taille est variable Ex. { *p2=i*i; /* affectation de valeur à l’entier référencé par p2 */
tableau */
printf("p2 pointe sur %d \n",*p2);
197 }
M. ADDOU M. ADDOU 198
50
STRUCTURES DE DONNÉES DYNAMIQUES STRUCTURES DE DONNÉES DYNAMIQUES
201 202
M. ADDOU M. ADDOU
(c) Listes particulières Ex. Insertion de E1, puis E2, puis E3 dans une pile.
- La pile
• Technique de gestion : LIFO (Last In First Out) Sommet E3 E2 E1
⇒ Traitement au sommet de la pile
• Caractéristique : Sommet de la pile (1 pointeur) - La file
• Technique
T h i de
d gestion
ti : FIFO (First
(Fi t In
I First
Fi t Out)
O t)
⇒ Insertion à la fin et suppression
au début de la file
• Caractéristiques : Début de la file (1 pointeur)
203 Fin de la file (1 pointeur) 204
M. ADDOU M. ADDOU
51
STRUCTURES DE DONNÉES DYNAMIQUES STRUCTURES DE DONNÉES DYNAMIQUES
205 206
M. ADDOU M. ADDOU
52