Université Saad Dahlab – Blida 1
Faculté des Sciences
Département d’Informatique
Ingénieur en Informatique
Semestre 1 (1ère année)
Algorithmique et Structure de Données 1
ANNEXE: ELÉMENTS DE BASE DE
LANGAGE C
Mme AROUSSI (s_aroussi@[Link])
2024-2025
Disponible sur [Link]
structure-de-donn%C3%A9es
CONTENU
Présentation
Programmation C
Formalisme du Langage C
2
PRÉSENTATION
Parmi tous les langages de programmation existant, le langage C est certainement
le plus célèbre. Il a souvent, par le passé, été qualifié de langage universel dans le
sens où quasiment n'importe quel système informatique peut être développé à
partir de ce langage. A titre d'exemple, la plupart des systèmes d'exploitation
actuels sont programmés en C (du moins leur noyau).
C’est un langage de bas niveau (proche de la machine) dans le sens où il permet
l’accès aux données (bits, octets, adresses) que manipulent les machines et qui ne
sont pas souvent disponibles à partir de langages de haut niveau tels que Java, C#,
Python, …
Comparé à d'autres langages (notamment Java), le langage C permet de
développer des applications plus compacte et bien plus rapides, mais en beaucoup
plus de temps.
Il est très important de bien maîtriser le langage C afin de mieux appréhender les3
langages de plus haut niveau.
POURQUOI L’APPRENDRE?
Sa popularité : Il possède une communauté très importante et de
nombreux tutoriels et documentations. De plus, il existe beaucoup de
programmes et de bibliothèques développés en C.
Sa rapidité : ce qui en fait un langage de choix pour tout programme où le
temps de réponse (exécution) est crucial.
Sa légèreté : ce qui le rend utile pour les programmes embarqués où la
mémoire disponible est faible.
Sa portabilité : un programme développé en C marche théoriquement sur
n’importe quelle plateforme (Windows, Linus, Unix, Mac, …) 4
OUTILS NÉCESSAIRES
Les programmeurs ont besoin de deux outils pour programmer en C:
un éditeur de texte et un compilateur du langage C.
En premier temps (TP1 et TP2), nous allons utiliser ces outils séparément
afin de comprendre le processus de compilation et d’exécution via l’invite du
commande.
Mais par la suite (TP3 et TP4), nous allons utiliser un environnement de
développement (IDE, Integrated development environment) qui intègre ces
deux outils et autres (déboggeur, …) comme Code : :Blocks, Visual C++, ….
5
PROGRAMMATION
Algorithme Editeur du Compilation
prog.c
texte (gcc –c)
Code source
prog.o Fichier objet
Bibliothèques
Édition de liens
(gcc –o)
Exécution 6
Résultats (.\prog) [Link]
Fichier exécutable
NORMES
En 1973, le langage C est officiellement annoncé par Dennis M. Ritchie en se
basant sur les langages BCPL et B.
En 1989, le comité ANSI (American National Standards Institute) normalise le
langage en créant la norme C-ANSI (aussi communément appelé C89).
En 1990, le langage C est normalisé par ISO (International Standardization
Organization), on parle alors de C90.
En 1999, le comité ISO publie une seconde version de son standard : on parle
alors de C99 qui intègre beaucoup de points (type booléen, commentaire sur une
seule ligne, plus d'obligation de déclarer les variables en tête de bloc, ….). Dans ce cours,
nous allons utiliser cette norme.
7
Autres nouvelles versions du standard ont été proposées par ISO: C11 en 2011
et C18 en 2018 qui ajoutent quelques nouveautés (threads, bug fix, …).
FORMALISME DU LANGAGE C
Identificateurs du langage C
Ils permettent de donner un nom à une entité du programme (variable,
fonction, ou type)
Un identificateur commence par une lettre alphabétique, suivi ou pas par des
lettres alphabétiques, des chiffres, ou "_".
Quelques règles pour le choix des identificateurs :
Ils ne doivent pas être choisi parmi les mots clés : char, double, float, int,
long, short, signed, unsigned, enum, const, break, case, default, for,
while, do, if, else, switch, return, …
Ils doivent respecter la casse (Majuscule ou minuscule).
Il se peut que le compilateur tronque les identificateurs au de là d’une
8
certaine longueur (supérieure en général à 31 caractères).
FORMALISME DU LANGAGE C
#include <bibliothèque>
Structure d’un programme
int main ()
ALGORITHM <identificateur> {
<déclarations> <déclarations>;
BEGIN <Corps: instructions>;
<Corps: intructions> return 0;
END }
La partie déclaration peut être dans la fonction main, comme elle peut être avant la
fonction main.
La fonction main est le point d’entrée du programme : la première qui sera exécutée.
Chaque BEGIN correspond à une accolade ouvrante {
Chaque END correspond à une accolade fermante }
Chaque déclaration se termine par point virgule ; 9
Chaque action primitive (affectation, lecture et écriture) se termine par ;
FORMALISME DU LANGAGE C
Déclaration des variables
VAR <identificateur> : TYPE TYPE <identificateur> ;
Déclaration des constantes
CONST <Identificateur> = valeur CONST TYPE <identificateur> = valeur;
Exemple:
CONST PI = 3.14
CONST float PI = 3.14
VAR
int X;
X: INTEGER
float Y;
Y: REAL 10
bool B;
B: BOOLEAN
char C;
C: CARACTER
FORMALISME DU LANGAGE C
Type standard: entier
Type de données Algorithmique Signification N Plage de valeurs acceptées
Oct
short [int] integer Entier court 2 -32 768 à 32 767
unsigned short [int] Entier court non signé 2 0 à 65 535
int Entier 2 -32 768 à 32 767
4 -2 147 483 648 à 2 147 483
647
unsigned [int] [int] facultatif Entier non signé 2 0 à 65 535
4 0 à 4 294 967 295
long [int] Entier long 4 -2 147 483 648 à 2 147 483
647
unsigned long [int] Entier long non signé 4 0 à 4 294 967 295
long long [int] Entier double long 8 -9 223 372 036 854 775 807
à 9 223 372 036 854 775
807 11
unsigned long long [int] Entier double long 8 0 à 18 446 744 073 709 551
signé 615
FORMALISME DU LANGAGE C
Types standards: réel et caractère
Type de données Algorithmique Signification N Plage de valeurs acceptées
Oct
float real Flottant ou réel 4 3,4 x 10−38 à 3,4 x 1038 env.
double Flottant double 8 1,7 x10 −308 à 1,7 x10 308
env.
long double Flottant double long 10 3, 4 x10−4932 à 3, 4 x104932
env.
char char Caractère 1 - 128 à 127
unsigned char Caractère non signé 1 0 à 255
12
FORMALISME DU LANGAGE C
Type standard: booléen
Il existe deux façons pour déclarer une variable « b » du type booléen dans la
norme C99:
Déclarer cette variable comme un entier (….. int) ensuite la tester pour
savoir sa valeur logique: toute valeur entière différente de 0 sera considérée
comme vraie et que la valeur 0 sera considérée comme fausse.
Utiliser l'entête <stdbool.h> qui définit trois macro, bool, true et false afin
d'améliorer la lisibilité des programmes.
Déclaration : bool b;
Test logique : (b == true) ou bien (b == false)
13
FORMALISME DU LANGAGE C
Types non standards
Type Langage algorithmique Langage C
énuméré TYPE <Id> = ( a1, a2, …, an) enum <Id>{a1, a2, …, an};
Intervalle TYPE <Id> = C1 .. Cn Il n’existe pas, il suffit d’utiliser
un entier (int) et une condition qui
vérifie qu’on est bien dans
l’intervalle
14
FORMALISME DU LANGAGE C
Affectation
<Id> <valeur> ou <Id> <identificateur> ou <Id> <expression>
<Id> = <valeur> ou <Id> = <identificateur> ou <Id> = <expression>
Opérateurs
Langage/Opérateurs Algorithmique Langage C Remarques
Arithmétiques +, -, *, /, mod, div +, -, *, /, % div ≡ entier /entier
Logiques NOT, AND, OR, !, &&, ||,
Relationnels <, <=, >, >=, =, ≠, ==, !=, <, <=, >, >= Égalité ≡ double =15
FORMALISME DU LANGAGE C
Opérateurs d’affectation
A noter que dans le langage C, l'affectation est un opérateur (non une
instruction) évalué de la droite vers la gauche. De plus, il existe un ensemble
d'autres opérateurs qui sont des combinaisons entre un opérateur
arithmétique, et l'opérateur d'affectation.
Opérateur Exemple Equivalent à
+= a += 10 a = a + 10
-= a -= 10; a = a - 10;
*= a *= 2; a = a * 2;
/= a /= 2; a = a / 2;
16
%= a %= 2; a = a % 2;
FORMALISME DU LANGAGE C
L’opérateur d’incrémentation (++) et l’opérateur de décrémentation (-
-) sont des opérateurs unaires qui peuvent agir sur une variable entière (y
compris caractère) ou réel. La variable est en effet augmentée de 1
(incrémentation) ou diminuée (décrémentation) de 1, tandis que la valeur
renvoyée est soit l’ancienne valeur de la variable (post-incrémentation ou post-
décrémentation), soit la nouvelle (pré-incrémentation et pré-décrémentation).
Exemple: Donner résultat des variables à chaque instruction
Résultats
int i = 4; i = 4;
int u = i++; u = 4; i = 5;
int v = i--; v = 5; i = 4;
int w = --u; u = 3; w = 3; 17
int t = ++v; v = 6; t = 6;
FORMALISME DU LANGAGE C
Priorité des opérateurs: Ce tableau montre la table de précédence des
opérateurs : il s'agit d'un classement des opérateurs du langage C des plus
prioritaires (en haut du tableaux) aux moins prioritaires (en bas).
Commentaire Opérateurs Sens d'évaluation
Parenthèses (), ++, - - (suffixe) G -> D
Opérateurs unaires -, !, ++, - - (préfixe) D -> G
Opérateur arithmétiques */% G -> D
Opérateur arithmétiques +- G -> D
Opérateurs de comparaison < <= >= > G -> D
Opérateurs de comparaison == != G -> D
« et » logique && G -> D
« ou » logique || G -> D 18
Opérateur conditionnel ?: D -> G
Opérateurs d'affectation = += -= *= /= %= D -> G
FORMALISME DU LANGAGE C
Actions Alternatives
Langage algorithmique Langage C
if (condition) then if (condition)
BEGIN {
blocif blocif;
ENDif }
if (condition) then if (condition)
BEGIN {
blocif blocif;
ENDif }
else else
BEGIN {
19
blocelse blocelse;
ENDelse }
FORMALISME DU LANGAGE C
L’opérateur conditionnel permet d'évaluer une valeur en fonction d'une
condition.
condition ? ifTrueExpression : ifFalseExpression ;
C'est le seul opérateur du langage C qui travaille sur trois opérandes : la
condition, la valeur à calculer si la condition est vraie et la valeur à calculer
si la condition est fausse.
En conséquence cet opérateur se décompose en deux parties : le caractère
« ? » permet de séparer la condition de l'expression à évaluer si la condition
est vraie et le caractère « : » pour séparer l'expression associée à la
condition vraie et celle associée à la condition fausse.
20
FORMALISME DU LANGAGE C
Actions Alternatives: A la première constante dont la valeur est égale à celle
de expression, la (ou les) instruction(s) correspondante(s) (d’un ou plusieurs blocs) sont
exécutées jusqu'à la rencontre de la première instruction break; En effet, la rencontre d'une
instruction break termine l'exécution de l'instruction switch.
Langage algorithmique Langage C
switch (expression) switch (expression)
BEGIN {
case c1 : begin bloc1 end case c1 : bloc1 ; [break;]
case c2 : begin bloc2 end case c2 : bloc2 ; [break;]
. .
. .
case cn: begin blocn end case cn: blocn ; [break;]
[default: begin blocdefault end] [default: blocdefault ;] 21
ENDswitch }
FORMALISME DU LANGAGE C
Actions itératives
Langage algorithmique Langage C
for cpt vi to vf [step pas] do for(cpt=vi ;cpt<=vf ;cpt=cpt+pas)
begin {
bloc bloc;
endfor
}
while (condition) do while (condition)
begin {
bloc bloc;
endwhile }
do do
begin {
bloc bloc; 22
end }
while (condition) while (condition)
FORMALISME DU LANGAGE C
Actions itératives: FOR
La boucle for se décompose en trois parties (ou trois clauses) séparément optionnelles.
Initialisation permet de définir des conditions de début de boucle,
Condition est une expression booléenne qui doit être vraie pour la poursuite de la boucle,
c'est-à-dire une nouvelle exécution de <bloc d’instructions>,
Itération réalise un changement d'état de la ou des variables utilisées dans le contrôle de
l'itération de boucle.
Les clauses Initialisation et Itération peuvent être composées de plusieurs instructions
séparées par une virgule.
for (<Initialisation>; <Condition>; <Itération>)
{
<bloc d’instructions>; for (int j=0, int i = j+5 ; (j<10)||(i<100); j++, i* = 2) 23
}
printf("j = %d , i = %d ", j, i) ;
FORMALISME DU LANGAGE C
Fonctions du Lecture - Ecriture
L’entête <stdio.h> (abréviation de standard in-out) fournit trois flux de
données que l’on peut utiliser directement :
stdin, l’entrée standard qui envoie au programme les données issues du clavier.
stdout, la sortie standard qui envoie les données que le programme génère à l’écran.
stderr, la sortie standard des erreurs qui seront affichées sur l’écran.
Cette bibliothèque doit être inclue dans le programme C (avant la fonction
main) afin d’utiliser les fonctions de lecture (scanf) et d’écriture (printf).
24
FORMALISME DU LANGAGE C
Lecture
La fonction « scanf » permet de lire des valeurs sur l’unité d’entrée standard
(stdin), selon un format spécifié en argument et les inscrire dans des cases
mémoires dont les adresses sont fournies en arguments.
scanf (format, arg1,arg2,...,argn);
Souvent, les arguments argi présentent des adresses mémoires où sont
stockées des variables et sont donc de la forme &vari où vari est
l’identificateur d’une variable et & est l’opérateur d’adressage:
scan ([f],var1 , var2 , … , varn ) scanf (format, & var1, & var2,..., & var25n )
FORMALISME DU LANGAGE C
Lecture scanf (format, & var1, & var2,..., & varn )
La chaine « format » contient les spécifications de format des variables (var1,
var2,..., varn) à récupérer à partir du flux d’entrée.
Introduites par le signe %, ces spécifications sont:
code Type de la variable/expression à lire/écrire
% lit un % (on utilisera %%)
d ou o ou x entier signé exprimé en base octale, décimale, ou hexadécimal
h, l entier court (short) ou long signé exprimé en base décimale
u entier non signé
nombre avec partie décimale en notation point décimal, en notation
e ou f ou g
exponentiel ou la plus courte (écriture)
c caractère
Si la valeur d’une variable n’est pas du type indiqué par le format, celle-ci sera
26
convertie.
FORMALISME DU LANGAGE C
Déclaration lecture écriture format externe
int i; scanf("%d",&i); printf("%d",i); décimal Les entiers peuvent être
int i; scanf("%o",&i); printf("%o",i); octal
exprimés dans trois bases
int i; scanf("%x",&i); printf("%x",i); hexadécimal
numériques différentes, en:
unsigned int i; scanf("%u",&i); printf("%u",i); décimal
décimal (l'utilisation la
short j; scanf("%hd",&j); printf("%d",j); décimal
plus classique)
short j; scanf("%ho",&j); printf("%o",j); octal
octal (le nombre est
short j; scanf("%hx",&j); printf("%x",j); hexadécimal
simplement préfixé d'un
unsigned short j; scanf("%hu",&j); printf("%u",j); décimal
long k; scanf("%ld",&k); printf("%d",k); décimal caractère 0)
long k; scanf("%lo",&k); printf("%o",k); octal hexadécimal (préfixé
27
long k; scanf("%lx",&k); printf("%x",k); hexadécimal des deux caractères 0x).
unsigned long k; scanf("%lu",&k); printf("%u",k); décimal
FORMALISME DU LANGAGE C
Exemple Les réels sont représentés
Déclaration lecture écriture format externe
en virgule flottante qui
float l; scanf("%f",&l); printf("%f",l); point décimal peuvent être exprimés en
float l; scanf("%e",&l); printf("%e",l); exponentielle notation:
float l; printf("%g",l); la plus courte des deux décimale (l'utilisation la
double m; scanf("%lf",&m); printf("%f",m); point décimal plus classique), e,g :
double m; scanf("%le"&m); printf("%e",m); exponentielle double nd = 3.14159254;
double m; printf("%g",m); la plus courte Exponentielle
long double n; scanf("%lf"&n); printf("%Lf",n); point décimal (signe 0,mantisse Bexpos
long double n; scanf("%le"&n); printf("%Le",n); exponentielle ant''.), e.g double ne =
long double n; printf("%Lg",n); la plus courte
3.2e-10; 28
char o; scanf("%c",&o); printf("%c",o); caractère
FORMALISME DU LANGAGE C
Ecriture
La fonction « fprintf » permet d’écrire des valeurs sur l’unité de sortie standard
(stdout ou écran), selon le « format » spécifié en argument.
print ([f],exp1 , exp2 , … , expn ) printf (format, exp1 , exp2 , … , expn )
De même que la lecture, Le paramètre « format » contient les caractères à afficher et
les spécifications de format d’écriture correspondants aux paramètres exp1, exp2 , ...,
expn .
Les chaines du type %zz seront remplacées à l’impression par les valeurs des
expressions exp1, exp2, ... expn.
29
Si la valeur d’une expression n’est pas du type indiqué par le format, celle-ci sera
convertie.
FORMALISME DU LANGAGE C
Fonctions mathématiques standards
Les bibliothèques <stdlib.h> et <math.h> fournit les principales les fonctions
mathématiques usuels : Bibliothèque Fonction Description
<stdlib.h> abs valeur absolue des entiers (int)
labs Valeur absolue des entiers long (long)
div Obtention de quotient et reste
<math.h> fabs Valeur abolue des réels (float)
pow Puissance
sqrt Racine carrée
exp Exponentielle
log Logarithme
cos, acos cosinus, arc cosinus 30
sin, asin sinus, arc sinus
tan, atan tangente, arc tangente
FORMALISME DU LANGAGE C
Commentaires:
Pour commenter un code écrit en programme C, on peut utiliser:
Les symboles /* et */ encadrant le commentaire. Ce dernier peut s'étendre
sur plusieurs lignes, e.g /* Ceci est un commentaire sur plusieurs lignes possibles*/
Le symbole // (deux barres obliques) précédant le commentaire, limité au
reste de la ligne, e,g : // Ceci est un commentaire une ligne
Les commentaires peuvent être placés n'importe où dans le programme sans
toutefois couper un mot du programme en deux.
Ils sont ignorés lors de l'exécution du programme.
Leur utilisation, bien optionnel, est fondamental. En effet, ils permettent une
31
compréhension plus facile d’un code laissé de coté pendant des semaines et
sont utiles lors de la maintenance des programmes
FORMALISME DU LANGAGE C
Exemple: traduire l’algorithme suivant en programme C
ALGORITHM absolu_parite
VAR x : INTEGER
BEGIN
PRINT ("donner un entier x = ")
SCAN (X)
IF (x >= 0) THEN PRINT ("La valeur absolue de x est : ", x )
ELSE PRINT (" La valeur absolue de x est : ", (-1) * x)
IF (x MOD 2 = 0) THEN PRINT ("x est pair ")
ELSE PRINT ("x est impair ")
END
32
FORMALISME DU LANGAGE C
Exemple: traduire l’algorithme suivant en programme C
33
FORMALISME DU LANGAGE C
Exemple: traduire l’algorithme suivant en programme C
34
SOURCES DE CE COURS
S. AROUSSI (2017), Cours Algorithmique & Structures de Données (ASD), 2ème année
Licence, Département Informatique, Université Saad Dahlab, Blida.
Ressources Pédagogiques des programmeurs, Disponible sur [Link]
Consulté Octobre 2023.
35