Vous êtes sur la page 1sur 8

Cours Algorithme et Programmation en langage C ISSAM  

Chapitre I : Notions de base de la programmation en langage c

I. Historique des langages de programmation


1. Historique

Avant les années 1950, on programmait directement les ordinateurs en langage machine. Un
langage machine est une suite d’instructions codées sur des mots de 32 bits pour le MIPS
(million d’instructions par seconde mais ici il s’agit d’un microprocesseur). La
programmation n’étant pas évidente en langage machine, on a essayé d’améliorer le travail du
programmeur.

En premier lieu on a donné des informations symboliques appelées mnémoniques aux


instructions machines. Ce qui a donné naissance au langage assembleur. Ce langage
assembleur contient des instructions faisant intervenir les registres de l'unité centrale de
l'ordinateur ainsi que les données.

Ensuite on a introduit des étiquettes dans le langage d'assemblage dans le but de faciliter les
branchements conditionnels (boucles, sauts), cela a donné des instructions de la forme
BRANCH. Enfin on a exprimé directement des emplacements mémoires en leur donnant un
nom symbolique à la place de l’adresse en hexadécimal.

L’étape suivante a consisté à s’affranchir complètement de la machine en élaborant ce que


l’on appelle des langages de haut niveau à partir de 1950. Ces langages ont introduit un
certain nombre de constructions qui n’existent pas dans le langage machine (expressions
arithmétiques, les notions de variable, de procédure, de fonction et des structures de données).
Dès 1970 sont apparue des langages à objets qui ont introduit à leur tour des notions de :
Classes, objets, méthodes, variables d’instances, l’héritage et le polymorphisme.

Or ces langages de haut niveau et à objets ne sont pas compris par l’ordinateur. Il a fallu donc
construire des programmes qui traduisent des énoncés exprimés dans ces langages utilisés par
les programmeurs en instructions pour la machine cible. De tels programmes s’appellent des
compilateurs ou des interpréteurs.

o L’interpréteur traduit les programmes instruction par instruction dans le cadre d’une
interaction continue avec l’utilisateur. Ainsi, le programme est traduit à chaque exécution.

Proposé par M. DIFFOUO TAZO Evariste Page 26


Cours Algorithme et Programmation en langage C ISSAM  

o Le compilateur traduit les programmes dans leur ensemble : tout le programme doit
être fourni en bloc au compilateur pour la traduction. Il est traduit une seule fois dans
l’optique de produire un exécutable.
2. Programmation en langage c
Le principe de résolution d’un problème informatique est appelé algorithme. Cet algorithme
exprime la structure logique d’un programme informatique et de ce fait est indépendant du
langage de programmation utilisé. Par contre, la traduction de l’algorithme dans un langage
particulier dépend du langage choisi et sa mise en œuvre dépend également de la plateforme
d’exécution.
Un programme n’est rien d’autre qu’une suite d’instructions, encodées en respectant de
manière très stricte un ensemble de conventions fixées à l’avance par un langage
informatique.
Le langage C a été conçu pour l'écriture de systèmes d’exploitation, en particulier le système
Unix. Ce langage a subi au cours de son histoire deux grandes étapes de définition. Il a été
défini une première fois par deux chercheurs des Laboratoires Bell, Brian Kernighan et
Dennie Ritchie, qui l’on publié en 1978 dans un ouvrage intitulé « The C Programming
Language ».

Suite à l'extraordinaire succès d’Unix au milieu des années 1980, le langage C structuré et très
proche du langage machine était devenu très populaire. De nombreux compilateurs sont
apparu mais présentant des incompatibilités. Face à ce désordre des fournisseurs de
compilateurs il devint nécessaire de mettre de l'ordre et donc de normaliser le langage. Pour
accomplir cette tâche, l’organisme de normalisation américain, ANSI (American National
Standards Institute) avait publié en 1988 le manuel de référence du langage C.

En 1990, l’organisme de normalisation international, l'ISO (International Standards


Organization), adopta tel quel le standard ANSI en tant que standard ISO. Cette seconde
version du langage C avait eu pour nom : Norme ISO C.

II. Les avantages du C et les grandes étapes de la création d'un programme C


1. Les avantages du langage C

Le langage C est un langage aux caractéristiques suivantes :

o Il est portable. C’est-à-dire qu’il s’exécute sur toutes les plates-formes ;


o Il est indépendant de la machine ;

Proposé par M. DIFFOUO TAZO Evariste Page 27


Cours Algorithme et Programmation en langage C ISSAM  

o Il est polyvalent. C’est-à-dire qu’il permet le développement des systèmes


d’exploitation, des programmes scientifiques, des programmes de gestion… ;
o Il est structuré et évolué : il permet le développement d’opérations de bas niveau
comme le langage Assembleur ;
o Il est compact, rapide et extensible ;
o C’est le père syntaxique du C++, du Java et du PHP.
NB : Dès que l’on utilise des bibliothèques externes, la portabilité des programmes en C
devient difficile.

2. Les grandes étapes de la création d'un programme C

La manière de développer et d'utiliser un programme en langage C dépend naturellement de


l’environnement de programmation dans lequel vous travaillez. Généralement, les grandes
étapes de la création d'un programme sont: édition du programme, la compilation et édition de
liens.

i. L'édition du programme
L'édition du programme consiste à créer, à partir d'un clavier et dans un éditeur de texte
quelconque le texte d'un programme: on parle alors de "programme source". En général, ce
texte sera conservé dans un fichier que l'on nommera avec l’extension ‘’.c’’.

ii. La compilation
Elle consiste à traduire le programme source (le contenu d'un fichier source) en langage
machine, en faisant appel à un programme nommé compilateur. Les compilateurs C font subir
deux transformations aux programmes :

 un préprocesseur qui réalise des transformations d'ordre purement textuel, pour


rendre des services du type inclusion de source, compilation conditionnelle, et
traitement de macros ;
 le compilateur proprement dit qui prend le texte généré par le préprocesseur et le
traduit en instructions machine. La compilation crée automatiquement d’autres fichiers
ayant le même nom que le fichier source mais qui diffèrent avec l’extension.
iii. L'édition de liens

Le module objet créé par le compilateur n'est pas directement exécutable. Il lui manque, au
moins, les différents modules objet correspondant aux fonctions prédéfinies (on dit aussi

Proposé par M. DIFFOUO TAZO Evariste Page 28


Cours Algorithme et Programmation en langage C ISSAM  

"fonctions standard") utilisées par votre programme (comme printf, scanf, sqrt). C'est
effectivement le rôle de l'éditeur de liens que d'aller rechercher dans la "bibliothèque
standard" les modules objet nécessaires. Le résultat de l'édition de liens est ce que l'on nomme
un "programme exécutable", c'est-à-dire un ensemble autonome d'instructions en langage
machine. Si ce programme exécutable est rangé dans un fichier, il pourra ultérieurement être
exécuté sans qu'il soit nécessaire de faire appel à un quelconque composant de
l'environnement de programmation en C.

III. Les unités lexicales et la structure générale d’un programme en C

1. Les unités lexicales


Le langage C n'impose pas un jeu de caractères particulier. Par contre tout le langage (mots-
clés, opérateurs, etc.) est défini en utilisant les caractères ascii. Même les identificateurs
doivent être écrits avec l'alphabet anglais. Par contre, le jeu de caractères utilisé pour les
constantes, les caractères, les chaines de caractères et les commentaires est dépendant de
l'implémentation.
Le langage C comprend 6 types d'unités lexicales : les mots-clés, les identificateurs,
les constantes, les chaînes, les opérateurs et les signes de ponctuation.

2. La structure générale d’un programme C


De manière générale, un programme C consiste en la construction de blocs individuels
appelés fonctions qui peuvent s’invoquer l’un l’autre. Chaque fonction réalisant une tâche
précise.
Pour pouvoir s’exécuter, un programme C doit contenir une fonction spéciale appelée
main (int main() ou int main(int argc, char *argv[])) qui sera le point d’entrée de
l’exécution (c’est à dire la première fonction invoquée au démarrage de l’exécution). Il existe
aussi dans un programme C, des lignes spéciales que l'on ne voit qu'en haut des fichiers
source. Ces lignes sont facilement reconnaissables car elles commencent par un dièse(#). Ces
lignes spéciales, sont appelées directives de préprocesseur. Ce sont des lignes qui seront lues
par un programme appelé préprocesseur, un programme qui se lance au début de la
compilation.

La structure générale d’un programme en C est la suivante :

Proposé par M. DIFFOUO TAZO Evariste Page 29


Cours Algorithme et Programmation en langage C ISSAM  

Un programme C peut comporter également la déclaration de variables qui correspondent à


des emplacements en mémoire.
Exemple : Ecrire un algorithme qui va lire deux nombre entiers, calcule leur somme et leur
produit.
#include <stdio.h>
int main()
{ int a,b,s,p;
printf("Donnez vos deux nombres\n") ;
scanf("%d %d", &a, &b);
s=a+b; p=a*b;
printf("la somme des deux nombres est : %d\n",s);
printf("le produit des deux nombres est : %d",p);
return 0;
}
IV. Présentation des directives du préprocesseur et de quelques
bibliothèques standards
1. Des directives du préprocesseur
Nous avons vu précédemment que la première phase de la compilation d’un code source en
langage C est Le traitement par le préprocesseur. Le préprocesseur est donc un programme
exécuté lors de la première phase de la compilation. Il effectue des modifications textuelles
sur le fichier source à partir de directives. Les différentes directives au préprocesseur,
introduites par le caractère #, ont pour but :
– l’incorporation de fichiers source (#include),
– la définition de constantes symboliques et de macros (#define),
– la compilation conditionnelle (#if, #ifdef,...).
i. La directive #include
Elle permet d’incorporer dans le fichier source le texte figurant dans un autre fichier. Ce
dernier peut être un fichier en-tête de la librairie standard (stdio.h, math.h,...) ou n’importe
quel autre fichier.

Proposé par M. DIFFOUO TAZO Evariste Page 30


Cours Algorithme et Programmation en langage C ISSAM  

La directive #include possède deux syntaxes voisines : La prémiere : #include <nom-


de-fichier> recherche le fichier mentionné dans un ou plusieurs répertoires systèmes
définis par l’implémentation (typiquement /usr/include/). La seconde #include "nom-de-
fichier" recherche le fichier dans le répertoire courant (celui où se trouve le fichier source).
La première syntaxe est généralement utilisée pour les fichiers en-tête de la librairie standard,
tandis que la seconde est plutôt destinée aux fichiers crées par l’utilisateur.
ii. La directive #define
La directive #define permet de définir des constantes symboliques (on parle aussi de macros
sans paramètres) ou des macros avec paramètre. Lorsque le préprocesseur lit une ligne du type
: #define NOM valeur ; il remplace dans toute la suite du code source toute nouvelle
occurrence de NOM par valeur. Il n’y a aucune contrainte quand à ce qui peut se trouver dans
valeur.
Exemple :
#define NB_LIGNES 24
#define NB_COLONNES 80
#define TAILLE_MATRICE NB_LIGNES * NB_COLONNES
iii. La compilation conditionnelle

La compilation conditionnelle a pour but d’incorporer ou d’exclure des parties du code source
dans le texte qui sera généré par le préprocesseur, le choix étant basé sur un test exécuté à la
compilation. Elle permet d’adapter le programme au matériel ou à l’environnement sur lequel
il s’exécute, ou d’introduire dans le programme des instructions de débuggage.

Les directives de compilation conditionnelle se répartissent en deux catégories, suivant


le type de la condition invoquée qui est testée : la valeur d’une expression et l’existence ou
l’inexistence de symboles

2. Présentation de quelques bibliothèques standards

Ci-dessous, une liste non exhaustive des fonctions de la bibliothèque standard (Les fichiers d’en -
tête de la librairie ANSI), accompagnées de leurs prototypes.

i. Les fonctions mathématiques de <math.h>

Pour utiliser les fonctions de cette librairie, il faut inclure la


librairie par la directive #include <math.h>. Le résultat et les paramètres de toutes ces
fonctions sont de type double. Nous avons ici :

Proposé par M. DIFFOUO TAZO Evariste Page 31


Cours Algorithme et Programmation en langage C ISSAM  

- Les fonctions trigonométriques et hyperboliques

- Les Fonctions exponentielles et logarithmiques

- Les Fonctions diverses

ii. Entrées-sorties <stdio.h>


- Entrées et sorties formatées

- Manipulation de fichiers

- Impression et lecture de caractères

Proposé par M. DIFFOUO TAZO Evariste Page 32


Cours Algorithme et Programmation en langage C ISSAM  

iii. Utilitaires divers <stdlib.h>


 Allocation dynamique

 Conversion de chaînes de caractères en nombres

 Arithmétique sur les entiers

 Communication avec l’environnement

Proposé par M. DIFFOUO TAZO Evariste Page 33

Vous aimerez peut-être aussi