Vous êtes sur la page 1sur 42

Programmation

Structurée

Pr Bekkari 1
Cycle préparatoire de l’ENSA de Marrakech
Année universitaire 2023 - 2024 21/09/2023
Présentation
• Prérequis
• Des connaissances de base en algorithmique et en
programmation.

• Objectifs
• Ecrire des programmes dans un langage de programmation
procédurale « langage C »
• Consolider les connaissances en algorithmique.
• Développer la capacité de résoudre des problèmes
informatiques.
• Maitriser les techniques de la programmation structurée.
2

21/09/2023
Informations pratiques
• Evaluation:
• 2 contrôles (70% de la note final)
+ 30 % autres et appréciations TD et devoirs

• Références
• Programmation en C Anne CANTEAUT INRIA
• Le programmeur: Le Langage C , Peter Aitken et Bradley L.
Jones , édition Pearson Education France

21/09/2023
Plan du semestre
I. Introduction au langage C
II. Opérateurs et expressions
III. Les structures de contrôles
IV. Les types composés
V. Les fonctions
VI. Les pointeurs
VII. L’allocation dynamique de la mémoire.
VIII. Gestion des fichiers

21/09/2023
Chapitre I:
Introduction au
langage C
Pr Bekkari 5
Cycle préparatoire de l’ENSA de Marrakech
Année universitaire 2023 - 2024 21/09/2023
Contenu du chapitre

1. Introduction générale
2. Structure générale d’un programme
3. Composants élémentaires du langage C
4. Fonctions d’entrées/sorties
5. Les directives du préprocesseur

21/09/2023
Langage de programmation
• Deux types de langages de programmation:
• Procéduraux (C, Cobol, Pascal, Fortran, …)
• Orientés « objet » (C++, Java,…)
• Langage de programmation:
• Outil / moyen permettant d’ordonner des suites consécutives
d’instructions à la machine dans un but précis
• Chaque instruction correspond à une action du processeur
- casser les œufs,
Liste
Exemple: Mon but: - les battre avec le sucre,
d’instructions
faire un gâteau - ajouter la farine,
- …
• Le langage de programmation capture le besoin humain dans
une syntaxe précise avant d’être traduit en langage machine 7

21/09/2023
Langage machine
• est un langage binaire = langage à 2 états: 0 ou 1
• L’information est exprimée en suite de bit (binary digit)
• Un bit est une unité de stockage de l’information dans la mémoire
• 1 bit = 2 valeurs possibles: 0 ou 1
• 2 bits = 4 possibilités de valeurs: 00
01 000 100
10 001 101
11 010 110
• 3 bits = 8 possibilités de valeurs différentes : 011 111
• 1 octet = 8 bits = 28 possibilités →256 valeurs différentes
• Ces valeurs permettent de coder tous les caractères numériques (1,
2, 3…), alphanumériques (a, b, C,…), les symboles (?, &, …), les
opérations logiques et arithmétiques (=, + , - , /,…), etc.
• Le code ASCII (American Standard Code for Information Interchange)
permet l’encodage de tous les caractères avec cette norme →
permet le stockage de caractères sur 8 bits 8

21/09/2023
Langage machine
• Exemple:
Caractère Représentation en bit Équivalent en Code ASCII
A 01000001 65
a 01100001 97
1 00110001 49

• Le code ASCII permet le stockage de 256 caractères possibles:


• De 0 à 31: caractères de contrôle (retour à ligne, tabulation, shift,
cancel, escape, …)
• De 48 à 57 : les chiffres (de 1 à 9)
• De 65 à 90 : les majuscules (A, B, C, …)
• De 97 à 122: les minuscules (a, b, c, …)
• Pour plus d’information: http://www.tableascii.com/ 9

21/09/2023
De l’assembleur vers les langages
évolués
• Le langage machine est complexe → l’humain ne peut pas
coder avec le langage binaire
• Apparition de l’assembleur: langage comprenant des
instructions élémentaires (mots clés) qui correspondent à
certains processus du langage machine
• Exemples d’instructions
• LOAD A Les instructions sont
ensuite traduite en
• ADD A, 2 langage machine
• L’assembleur est plus compréhensible par l’être humain mais
assez limité: n’est pas portable (dépend du type de la
machine), trop simple (n’est pas adapté aux applications
complexes)
10
D’où l’apparition des langages structurés et évolués (C,
Fortran, Cobol, Pascal, Basic, …)
21/09/2023
Historique du langage C
• Le langage C a été conçu en 1972 par Dennis Ritchie et Brian
Kernighan de « Bell laboratories » pour le développement d’un
système d’exploitation Unix
• En 1978, Kernighan et Ritchie publie une définition classique et
standard du C dans un livre intitulé « The C programming
language » (version également appelée K&R 78)
• Le langage C devint de plus en plus populaire, des développeurs et
fournisseurs mirent sur le marché des compilateurs comportant des
extensions particulières (non conforme à K&R)
• En 1983, l’ANSI (American National Standards Institute) décida de
normaliser le langage C. Le résultat en fut la norme ANSI C achevée
en 1989.
• Cette norme fut adoptée telle quelle en 1990 par l’ISO (International
Standards Organization) en tant que standard ISO. 11

21/09/2023
Caractéristiques du langage C
• Structuré, déclaratif et récursif
• Universel: n’est pas orienté vers un domaine d’application
particulier (à l’instar du Cobol qui est orienté applications
commerciales)
• Portable: un programme C peut être exécuté à partir de la
même source sur d’autres systèmes d’exploitation possédant
un compilateur C
• Proche du langage machine: offre des opérateurs de
manipulation de la mémoire, allocation d’adresses, etc.
→ efficience et rapidité
• Modulaire: un programme C peut être découpé en modules
qu’on peut utiliser séparément
• Extensible: en plus de sa bibliothèque standard, d’autres
bibliothèques de fonctions diverses existent 12

21/09/2023
Etapes de programmation en C
1) Compréhension du problème = Quel est mon objectif
2) Décomposition du problème en sous problèmes puis en
étapes de solutions
3) Ecriture de l’algorithme:

science qui permet de passer d’un problème à sa résolution

• Problème complexe : décomposition en sous problèmes /


sous objectifs
• Exemple: développer une application de gestion de données

Ajout de Mise à jour Suppression


données
• Problème simple : décrire les différentes étapes de la solution 13

21/09/2023
Etapes de programmation en C
• Exemple : Calculer la somme de 2 chiffres
Liste d’instructions:
Algorithme en langage naturel Algorithme en langage C
- Afficher à l’écran « entrer #include<stdio.h>
chiffre 1 » int main () {
- Lire la valeur de chiffre 1 int a, b, somme;
- Afficher à l’écran « entrer printf(″entrer la valeur de a ″);
chiffre 2 » scanf(″%d″, &a);
- Lire la valeur de chiffre 2 printf(″entrer la valeur de b″);
- Somme = chiffre 1 + chiffre 2 scanf(″%d″, &b);
- Afficher Somme somme = a + b;
printf(″La somme est: %d″, somme);
}
14
Il faut respecter la syntaxe du langage de programmation utilisé

21/09/2023
Choix de l’éditeur
• Les éditeurs de programme / environnements de
développement aident à écrire des programmes
informatiques
• Fonctionnalités: mise en évidence de la syntaxe (mots clés,
mots réservés), détection d’erreurs, auto-complétion,
indentation, compilation et exécution, etc.
• Exemples d’éditeurs / d’environnements de développement:
• ConTEXT : supporte plusieurs langages de programmation mais
permet uniquement l’écriture de programme
• Notepad++ : éditeur pour l’écriture de programme uniquement
• Dev-C++ : environnement de développement pour le C et C++
• Code::Blocks : environnement de développement C/C++
15

21/09/2023
La compilation
• Un programme C est décrit par un fichier texte appelé fichier
source. Ce fichier n’est pas exécutable par le processeur →il
faut le traduire en langage machine
C’est le rôle du compilateur
Compilation = traduction du fichier source en langage machine
• La compilation se déroule en 3 grandes phases successives:
Fichier source Fichier source bis Fichier objet Programme exécutable

Traduction
Programme C
Traitement En code
Préprocesseur assembleur Edition de liens
(suite
Remplacement de Conversion du
d’instruction du
caractères, inclusion fichier objet en
microprocesseur)
d’autres fichiers un fichier 16
puis en fichier
sources, etc. exécutable
binaire

21/09/2023
De la compilation à l’exécution
• Extension des fichiers utilisés et générés:
.c (fichier source) .i (fichier prétraité par le préprocesseur)
.s (fichier assembleur) .o (fichier objet)
.a (fichier objet correspondant aux librairies précompilées)
Par défaut le fichier de sortie (produit) s’appelle: a.out
• Le compilateur du langage C est : GCC (du projet GNU) créé à
la base pour le système Linux, mais il existe des versions
spécifiques du compilateur GCC conçues pour Windows (à
utiliser avec un IDE tel que CodeBlocks ou DevC++)
Remarques:
• Ne pas utiliser d’espace, de symboles ou de caractères spécifiques
dans le nom des fichiers
• À chaque modification du fichier source, il faut recompiler à 17
nouveau
21/09/2023
Structure générale d’un programme
• Un programme en langage C est généralement composé de:
a) Les directives du
préprocesseur (#include, #include<stdio.h>
#define, …)
b) Les créations de types (struct, int main() {
int a, b, somme;
union, enum, typedef)
printf(″entrez la valeur de a ″);
c) Les déclarations de variables scanf(″%d″, &a);
externes (ou globales) et de printf(″entrez la valeur de b″);
fonctions scanf(″%d″, &b);
d) Fonction main() somme = a + b;
printf(″La somme est: %d″, somme);
1) Déclaration de variables
internes
return 0;
2) Instructions } 18

21/09/2023
Structure générale d’un programme
• Les entêtes de fichiers sont obligatoires quand on fait des
appels de fonctions de la bibliothèque standard (librairie)
• Exemple: stdio.h est un fichier entête de la bibliothèque standard
(contient les fonctions de lecture et d’écriture)
• L’appel du fichier se fait avec la directive #include<stdio.h>
• La fonction main() : fonction principale d’un programme C
doit se trouver obligatoirement
dans le fichier source
int main(){
La fonction main() retourne la
… valeur 0: indique que le programme
return 0; s’est terminé avec succès
}
• Chaque instruction simple se termine par un point-virgule ; 19

21/09/2023
Composants élémentaires
• Variables et identificateurs
• Les mots clés
• Les types fondamentaux
• Les constantes
• Les commentaires

20

21/09/2023
Variables et identificateurs
• Les variables servent à stocker les données utilisées pendant
l’exécution du programme (stockage temporaire)
• Exemples: a, b, x, y, i, j, var12
• Une variable doit toujours être déclarée avant d’être utilisée
Elle est déclarée avec un type et un identificateur:
[type] [identificateur]
• Un identificateur est un nom donné à une variable ou à une
entité du programme (fonction, type prédéfini, constante)
• Il est constitué de: lettres sans accent (alphabet anglais) en
majuscule ou en minuscule, chiffres, et du caractère _

21

21/09/2023
Variables et identificateurs
• Remarque: éviter de commencer le nom de la variable par _ pour
éviter toute confusion avec les identificateurs qui se trouvent dans la
bibliothèque standard
• Règles à respecter pour les identificateurs:
• Ne pas utiliser d’espaces
• Ne pas utiliser de tirés (-), de symboles (&, @, $, « » …)
• Ne pas utiliser d’opérateurs arithmétiques et logiques (+, -, *, =…)
• Ne pas utiliser de . (réservés aux extensions de fichiers)
• Ne pas commencer le nom d’une variable par un chiffre
• Ne pas utiliser de mots clés réservés au langage
Exemples corrects Exemples incorrects
nomvar, nom_var, NOM_VAR nom var, nom-var, nom.var
22
var1 1var, var$

21/09/2023
Mots clés réservés
• Le langage C compte environ 32 mots clés réservés aux:
• instructions de contrôles (break, case, while, if, …)
• spécifications de types (int, float, short, …)
• qualifications de types (const, volatile, …)
• spécifications de stockage (register, typedef, static, …)
• …

23

21/09/2023
Les types fondamentaux
• C est un langage typé: toute variable, constante ou fonction
est d’un type précis
• Le type d’une variable définit l’ensemble des valeurs qu’elle
peut prendre et le nombre d’octets à lui réserver en mémoire
• La mémoire est composée d’une suite continue d’octets et
chaque octet a une adresse qui est un entier
• Quand une variable est déclarée, une adresse lui est attribuée
dans la mémoire. L’adresse correspond à une zone mémoire
dont la longueur est fixée par le type
RAM
Variable
v1 … 3810 4710 …

Adresse 3400 3400 … 4718 …


3404 … … … … 24

21/09/2023
Les types fondamentaux
• Il existe deux catégories de types de base en langage C:

Les entiers Les flottants

int float
char double
short long double
long

• Chaque catégorie contient des dérivés


25

21/09/2023
Les types entiers
• int: entier standard. Il peut être de type short ou long:
Type Taille Valeurs représentées
short int 2 octets - 32 768 à 32 767
long int 4 octets - 2 147 483 648 à 2 147 483 647
unsigned short 2 octets 0 à 65 535
unsigned long 4 octets 0 à 4 294967 296

• char: type caractère. Ce type est un dérivé de l’entier car un


caractère en C est identifié par son code ASCII qui est un
nombre entier (exemple: code ASCII de A: 65)
Type Taille Valeurs représentées
char 1 octet (8 bits) - 128 à 127
unsigned char 1 octet 0 à 255 26

21/09/2023
Les types flottants
• Ils représentent les nombres en virgules. Chaque dérivé
correspond à une précision possible

Type Description Taille


float Simple précision 4 octets
double Double précision 8 octets
long double Quadruple précision 10 octets

• Un nombre flottant peut représenter :


• Un nombre entier décimal: exemple: 142
• Un nombre comportant un point décimal: exemple: 12.34
• Un nombre exponentiel (éventuellement à virgule): exemple: 4.3-2,
56.8210
27

21/09/2023
Déclaration de variables
• Syntaxe de la déclaration d’une variable:
[type] [nomVariable]; Exemple: int a;
• Il est possible de déclarer et initialiser la variable en même temps:
• int somme = 0;
• double r = 3.54;
• Il est possible de déclarer plusieurs variables dans la même ligne
(séparées par des virgules)
• float f1, f2, f3;
• int x, y = 2;
• Le type char : char c1;
char c2 = ‘D’;
• Chaîne de caractères: voir chapitre IV
28

21/09/2023
Les constantes
• Une constante est une valeur / donnée utilisée dans le
programme
• Elle peut être utilisée pour initialiser une variable ou pour lui
affecter une valeur
• 3 types de constantes:
• Les constantes entières
• Les constantes réelles
• Les constantes caractères

29

21/09/2023
Les constantes entières
• Elles peuvent être représentées de 3 manières différentes:
Forme Description Exemple
décimale forme usuelle d’un entier 0, 35, 274
forme d’un entier en base 8: chiffre 0 → 00
octale
commence par 0 chiffre 27 → 033
forme d’un entier en base 16:
chiffre 27 → 0x1B
hexadécimale commence par 0x ou 0X suivi de
chiffre 255 → 0xff
chiffre hexadécimaux (0-9 et a-f)
• Par défaut, le type d'une constante entière est le plus petit type
dans lequel sa valeur peut être représentée
• Pour la forme décimale: int, sinon long, sinon unsigned long
• Certains suffixes forcent l’utilisation d’unsigned et de long
• L ou l : pour le type long (ex: 123456789L)
• UL ou ul: pour le type unsigned long (ex: 035ul)
30

21/09/2023
Les constantes réelles
• Peuvent avoir deux notations:
• Notation usuelle de nombres réels: 14.56 , 3.4567
• Notation exponentielle: utilisation de e ou E pour l’exposant:
• Exemple: 12.3e-4 , 13.5E+2
• Les constantes réelles sont par défaut de type double
• On peut forcer l’utilisation du float et du long double avec les
suffixes suivants:
• F ou f pour le type float (ex: 2.26f)
• L ou l pour le type long double (ex: 12.35L)

31

21/09/2023
Les constantes caractères
• Un caractère imprimable est désigné par 2 apostrophes:
exemple: ‘a’ , ‘R’
• Une chaîne de caractère est désignée par des guillemets:
exemple: ″ceci est une chaine de caractère ″
• L’apostrophe, les guillemets et le back slash sont désignés par
un autre back slash : \’ \″ \\
• Cas particuliers: les caractères non imprimables
\n nouvelle ligne Exemple:
″Plan du cours \n Introduction \n
\t tabulation horizontale
Chapitre 1 \n Chapitre 2″
\v tabulation verticale
\b retour arrière
\r retour chariot Plan du cours
\f saut de page Introduction
Chapitre 1 32
\a signal sonore
Chapitre 2

21/09/2023
Les commentaires
• Les commentaires sont pratiques pour expliquer le code de
votre programme ou pour ignorer une partie du code sans le
supprimer
• Pour insérer une ligne de commentaire:
//voici mon commentaire
• Pour insérer une ou plusieurs lignes de commentaires:
/* ce texte est un commentaire et sera donc ignoré par le
compilateur */
• Attention: Les commentaires ne s’imbriquent pas:
/* ma chaine /*ma chaine*/ chaine*/ → écriture erronée

33

21/09/2023
Les fonctions d’entrées/sorties
• Les fonctions d’entrées/sorties permettent à la machine de
communiquer avec l’utilisateur
• Fonction d’entrée = lecture de données par le programme: lit
les valeurs entrées par l’utilisateur grâce au clavier
• Fonction de sortie = écriture de données par le programme:
affiche des données et valeurs à l’écran
• Les fonctions de lecture et d’écriture sont définies dans le
fichier <stdio.h> de la bibliothèque standard:

il suffit de les appeler par leur nom dans le code de votre


programme et de respecter leur syntaxe

34

21/09/2023
La fonction de sortie: printf
• Sa syntaxe peut contenir : du texte (caractère ou chaîne de
caractères), des variables (ou expressions de variables) et des
séquences d’échappement (\n, \t, …)
• Syntaxe de printf ():
printf(″texte spécificateurs de format″, expressions);
• Le spécificateur de format permet de préciser le format de
données à afficher. Sa syntaxe: % suivi d’un caractère
prédéfini pour le format souhaité
• Par exemple: %d désigne le type entier
• Dans printf() il est possible de combiner plusieurs textes (s’il y
en a) avec plusieurs spécificateurs de format:
printf(″texte spécificateur de format1 texte spécificateur de format2″, 35
exp1, exp2);

21/09/2023
La fonction de sortie: printf

, float
, float
, float

36

21/09/2023
La fonction de sortie: printf
• Exemples:
Code Résultat à l’écran
printf(″voici un exemple″); voici un exemple
int x = 5;
La valeur de x est 5
printf(″La valeur de x est %d″, x);
int a = 12, b = 3;
printf(″La somme de %d et %d est: %d″, La somme de 12 et 3 est: 15
a, b, a+b);
float prix= 32.5;
Le prix de cet article est 32.5
printf(″Le prix de cet article est %f \n Il
Il s’agit du prix HT
s’agit du prix HT″, prix);
double prix = 27.16;
2.716000e+001
printf(″%e″, prix);
char c1 = ‘A’, c2= ‘B’; 37
AB
printf(″%c %c″, c1, c2);
21/09/2023
La fonction de sortie: printf
• Pour les types flottants, il est possible de préciser la largeur
minimale de la valeur à afficher et le nombre de chiffres après
le point décimal
• La précision par défaut des types flottants est fixée à 6
décimales
• Exemples:
• printf("%f", 100.123); → 100.123000
• printf("%.2f", 100.123); → 100.12

38

21/09/2023
La fonction d’entrée: scanf
• Permet de lire les données saisies au clavier par l’utilisateur
• Syntaxe: scanf(″spécificateurs de format″, &variable);
• Les spécificateurs de format sont les mêmes utilisés dans printf():
%d, %f, %c, …
ex: scanf(″%f″, &a); &a fait référence à l’adresse de la variable a
• Exception: pour utiliser le type double: %lf ou %le
• Exemple: #include<stdio.h>
int main () {
int a, b;
printf(″entrez la valeur de a :″);
scanf(″%d″, &a);
printf(″entrez la valeur de b :″);
scanf(″%d″, &b);
printf(″La somme de %d et %d est: %d″, a, b, a+b); 39
}

21/09/2023
Les directives au préprocesseur
• Le préprocesseur est un programme exécuté lors de la
première phase de compilation
• Il effectue des modifications textuelles sur le fichier source à
partir de directives
• Les directives commencent par le caractère # . Elle peuvent
servir à:
• l’inclusion d’autres fichiers sources (#include)
• la définition de constantes et de macros (#define)
• la compilation conditionnelle (#if, #ifdef ,…)
• Remarque: pas de ; à la fin de la directive car il ne s’agit pas
d’une instruction
40

21/09/2023
Les directives au préprocesseur
• La directive #include: permet d’inclure les fichiers « entête »
de la bibliothèque standard (contiennent des fonctions
prédéfinies pour le langage C)
Exemples de fichiers: stdio.h, math.h, string.h (l’extension .h fait
référence à header)
• La directive #include est toujours introduite en début du
programme
• Syntaxe:
#include <nom-de-fichier> pour les fichiers de la bibliothèque
#include ″nom-de-fichier″ pour les fichiers créés par l’utilisateur
• Exemples: #include<stdio.h>
#include ″users/projet/etudiant/monfichier.h″
41
#include ″users/projet/etudiant/monfichier.c″

21/09/2023
Les directives au préprocesseur
• La directive #define: l’objectif est de donner un nom parlant à
une constante qui ne changera pas pendant l’exécution du
programme
• Syntaxe: #define nomconstante contenu
• Le contenu peut être une valeur, un caractère, un symbole ou
une expression
• Exemples:
• #define PI 3.14
• #define NB_COLONNES 10
• #define NB_LIGNES (2 * NB_COLONNES)
• #define DEBUT {
• #define FIN }
42

21/09/2023

Vous aimerez peut-être aussi