Vous êtes sur la page 1sur 9

Cours langage C

Chapitre 1 : les caractéristiques du langage C


I. Bref historique du langage C :
Le langage C a été créé par Dennis Ritchie aux "Bell Telephone Laboratories" en 1972. Il a
été conçu dans un but bien précis : développer le système d’exploitation UNIX, déjà utilisé sur
de nombreux ordinateurs. Dès l’origine, il devait donc permettre aux programmeurs de
travailler de manière productive et efficace.
En raison de sa puissance et de sa souplesse, l’utilisation du C s’est rapidement répandue
au-delà des laboratoires Bell. Les programmeurs ont commencé à l’utiliser pour écrire toutes
sortes de programmes. Rapidement, des organisations diverses ont utilisé leurs propres
versions du langage C, et de subtiles différences d’implémentation sont devenues un véritable
casse-tête pour les programmeurs. En réponse à ce problème, l’American National Standards
Institute (ANSI) a formé un comité en 1983 pour établir une définition standard du C, qui est
devenu le C standard ANSI. À quelques exceptions près, les compilateurs C d’aujourd’hui
adhèrent à ce standard.
Le nom du langage C vient de son prédécesseur qui était appelé B. Le langage B a été
développé par Ken Thompson qui travaillait aussi aux laboratoires Bell.

II. Pourquoi utiliser le langage C ?


Il existe de nombreux langages de programmation de haut niveau comme le C, le Pascal,
ou le Basic. Ils sont tous excellents et conviennent pour la plupart des tâches de programmation.
Toutefois, les professionnels placent le langage C en tête de liste pour plusieurs raisons :
- Il est souple et puissant. Ce que vous pourrez accomplir avec ce langage n’est limité
que par votre imagination. Vous n’aurez aucune contrainte. Le langage C est utilisé
pour des projets aussi variés que des systèmes d’exploitation, des traitements de textes,
des graphiques, des tableurs ou même des compilateurs pour d’autres langages.
- Avec la norme ANSI, le C est devenu un langage portable. Cela signifie qu’un
programme C écrit pour un type d’ordinateur (un PC IBM, par exemple) peut être
compilé pour tourner sur un autre système (comme un DEC VAX) avec très peu ou
aucune modification.
- Le langage C est modulaire. Son code peut (et devrait) être écrit sous forme de sous
programmes appelés fonctions. Ces fonctions peuvent être réutilisées pour d’autres
applications ou programmes. Si vous passez des informations à ces fonctions, vous
obtenez du code réutilisable.
- C++ était initialement une version améliorée du C, à savoir un C disposant de fonctions
supplémentaires pour la programmation orientée objet. Le C++ est aujourd’hui un
langage à part entière. Si vous êtes amenés à étudier ce langage, ce que vous aurez
appris du C vous aidera grandement.
- Un autre langage, également basé sur C, a été l’objet d’une attention toute particulière.
Il s’agit de Java. Si vous décidez de vous orienter vers la programmation Java, vous
découvrirez rapidement qu’il existe de nombreuses similitudes entre ces deux langages.

REALISE PAR : BASSEM BOUGHZALA (ISET RADES) 1/9


Cours langage C

III. Introduction :
Un programme en langage C est composé d'une ou de plusieurs fonctions dont une et seulement
une porte le nom main. Celle-ci fera appelle aux autres fonctions. La structure de la fonction
main est la suivante :
main( )
{
Partie déclarative ;
Partie des instructions ;
}

Avant la fonction main on doit écrire les directives de compilation on peut aussi déclarer des
variables des constantes et des fonctions

IV. Les directives de compilation :


Avant la fonction principale main, on peut écrire des directives de compilation qui permettent
de demander au compilateur du langage C d'effectuer certaines opérations avant l'élaboration
de l'exécutable du programme. Les directives les plus importantes sont :
a. #include<nom_fichier.h> :
Cette directive nous permet d'utiliser les fonctions prédéfinies qui se trouvent dans le
fichier précisé après le mot "include". En effet, le compilateur C fournit une
bibliothèque composée de plusieurs fichiers contenant chacun des fonctions
prédéfinies. Le nom et la signature (le « prototype » en C) de chaque fonction sont
décrits dans des en-têtes qui sont inclus dans le code source, tandis que le code objet
des fonctions est séparée dans une bibliothèque logicielle. Comme exemple on peut
citer :
<stdio.h> , <conio.h> , <string.h> , <math.h> , etc.

b. # define symbole1 symbole2 :


Cette directive nous permet de remplacer dans le programme toute occurrence de
symbole1 par symbole2. Elle est généralement utilisée pour définir des constantes.
Exemples :
#define DIM 100
#define MAX 1000

V. Les Variables :
Les variables contiennent les valeurs qui sont utilisées pendant l'exécution du programme.
Les noms des variables sont des identificateurs quelconques.

Les noms des fonctions et des variables en C sont composés d'une suite de lettres et de chiffres.
Le premier caractère doit être une lettre. Le symbole '_' est aussi considéré comme une lettre.

* L'ensemble des symboles utilisables sont donc :

REALISE PAR : BASSEM BOUGHZALA (ISET RADES) 2/9


Cours langage C

{0,1,2,...,9,A,B,...,Z,_,a,b,...,z}
* Le premier caractère doit être une lettre (ou le symbole '_').
* C distingue les majuscules et les minuscules, ainsi :
'Nom_de_variable' est différent de 'nom_de_variable'
* La longueur des identificateurs n'est pas limitée, mais C distingue 'seulement' les 31 premiers
caractères

Une variable en C se déclare de la manière suivante :


Type nom_variable ;

a. Les types des variables :


Une variable doit être déclarée avant d'être utilisée. Lorsqu'on déclare une variable (c’est-à-
dire lui attribuée un type) on précise deux choses :
- L'intervalle des valeurs possibles qui peuvent être assignées à la variable en question.
- L'ensemble des opérateurs applicables à cette variable.
Le tableau ci-dessous résume les types en C :

Type Taille Domaine


short int ou short (entier court) 2 octets -32 768 .. 32 767
unsigned int ou unsigned short int 2 octets 0 .. 65 535
long int ou long (entier long) 4 octets -2 147 483 648 .. 2 147 483 647
unsigned long int ou unsigned long 4 octets 0 .. 4 294 967 295
int 2 ou 4 -32 768 .. 32 767
octets -2 147 483 648 .. 2 147 483 647
Float 4 octets 3.4E-38 jusqu'à 3.4E+38
-3.4E38 jusqu'à -3.4E-38
Double 8 octets 1.7E-308 jusqu'à 1.7E+308
-1.7E308 jusqu'à -1.7E-308
Char 1 octet Les lettres : 'A' ..'Z' ou 'a' .. 'z'
Les Chiffres : '0' .. '9'
Les symboles : '.', '(', '#', …
Exemples :
main( )
{
int a, b; float c; char d;
}

REALISE PAR : BASSEM BOUGHZALA (ISET RADES) 3/9


Cours langage C

Initialisation :

En C, il est possible d'initialiser les variables lors de leur déclaration :

int MAX = 1023;


char TAB = '\t';
float X = 1.05e-4;

const :

En utilisant l'attribut const, nous pouvons indiquer que la valeur d'une variable ne change pas
au cours d'un programme :

const int MAX = 767;


const double e = 2.71828182845905;
const char NEWLINE = '\n';

VI. Les opérateurs :

1. L'opérateur d'affectation :

Le symbole de l'affectation en C est le signe "=". nom_variable = expression;

Exemple :
int a;
char c;
a = 10;
c = 'k';
En pratique, nous retrouvons souvent des affectations comme : i = i + 2
En C, nous utiliserons plutôt la formulation plus compacte : i += 2
L'opérateur += est un opérateur d'affectation. Pour la plupart des expressions de la
forme: expr1 = (expr1) op (expr2)
il existe une formulation équivalente qui utilise un opérateur d'affectation:
expr1 op= expr2

Exemple :
x *= 4; cette instruction est équivalente à : x = x *4;
y -= 5; cette instruction est équivalente à : y = y – 5;

REALISE PAR : BASSEM BOUGHZALA (ISET RADES) 4/9


Cours langage C

2. Les opérateurs arithmétiques :

+ Addition
- Soustraction
* Multiplication
/ Division (entière et rationnelle)
% Modulo (reste de la division entière)
++ Incrémentation (opérateur unaire)
-- Décrémentation (opérateur unaire)

Pour les opérateurs d'incrémentation et de décrémentation. Les affectations les plus fréquentes
sont du type : I = I + 1 et I = I - 1
En C, nous disposons de deux opérateurs inhabituels pour ces affectations :
I++ ou ++I pour l'incrémentation (augmentation d'une unité)
I-- ou --I pour la décrémentation (diminution d'une unité)
Les opérateurs ++ et -- sont employés dans les cas suivants :
- incrémenter/décrémenter une variable (p.ex: dans une boucle). Dans ce cas il n'y a pas
de différence entre la notation préfixe (++I --I) et la notation postfixe (I++ I--).
- incrémenter/décrémenter une variable et en même temps affecter sa valeur à une autre
variable. Dans ce cas, nous devons choisir entre la notation préfixe et postfixe :

X = I++ passe d'abord la valeur de I à X et incrémente après


X = I-- passe d'abord la valeur de I à X et décrémente après
X = ++I incrémente d'abord et passe la valeur incrémentée à X
X = --I décrémente d'abord et passe la valeur décrémentée à X
Exemple :
Supposons que la valeur de N est égal à 5:
Incrém. postfixe: X = N++; Résultat: N=6 et X=5
Incrém. préfixe: X = ++N; Résultat: N=6 et X=6

3. Les opérateurs logiques :

4. Les opérateurs de comparaison :

REALISE PAR : BASSEM BOUGHZALA (ISET RADES) 5/9


Cours langage C

Les résultats des opérations de comparaison et des opérateurs logiques sont du type int:
- la valeur 1 correspond à la valeur booléenne vrai
- la valeur 0 correspond à la valeur booléenne faux
Les opérateurs logiques considèrent toute valeur différente de zéro comme vrai et zéro comme faux :
32 && 2.3 1
!65.34 0
0||!(32 > 12) 0

5. Les commentaires :
Les commentaires sont des lignes explicatives qui peuvent être ajoutés dans le code source
pour le rendre plus lisible en lecture. Un commentaire commence toujours par les deux
symboles '/*' et se termine par les symboles '*/'.
/* Ceci est un commentaire correct */

6. Les priorités des opérateurs :

Dans chaque classe de priorité, les opérateurs ont la même priorité. Si nous avons une
suite d'opérateurs binaires de la même classe, l'évaluation se fait en passant de la gauche vers
la droite dans l'expression.

Pour les opérateurs unaires (! , ++, --) et pour les opérateurs d'affectation (=,+=,-=, *=, /=, %=),
l'évaluation se fait de droite à gauche dans l'expression.

Exemples :

1. L'expression 10+20+30-40+50-60 sera évaluée comme suit :

10+20 ==> 30
30+30 ==> 60
60-
==> 20
40
20+50 ==> 70
70-
==> 10
60

REALISE PAR : BASSEM BOUGHZALA (ISET RADES) 6/9


Cours langage C

2. Pour A=3 et B=4, l'expression A *= B += 5 sera évaluée comme suit:

3. Pour A=1 et B=4, l'expression !--A==++!B sera évaluée comme suit:

Remarque :
Les parenthèses sont seulement nécessaires si nous devons forcer la priorité, mais elles
sont aussi permises si elles ne changent rien à la priorité. En cas de parenthèses imbriquées,
l'évaluation se fait de l'intérieur vers l'extérieur.

Exercice :
Evaluer les expressions suivantes en supposant

A=20 B=5 C= -10 D=2 X=12 Y=15

Notez chaque fois la valeur rendue comme résultat de l'expression et les valeurs des variables
dont le contenu a changé.

(1) (5*X)+2*((3*B)+4)
(2) (5*(X+2)*3)*(B+4)
(3) A == (B=5)
(4) A += (X+5)
(5) A != (C *= (-D))
(6) A *= C+(X-D)
(7) A %= D++
(8) A %= ++D
(9) (X++)*(A+C)
(10) A = X*(B<C)+Y*!(B<C)
(11) !(X-D+C)||D
(12) A&&B||!0&&C&&!D
(13) ((A&&B)||(!0&&C))&&!D
(14) ((A&&B)||!0)&&(C&&(!D))

REALISE PAR : BASSEM BOUGHZALA (ISET RADES) 7/9


Cours langage C

VII. Les entrées / sorties :


a. Les sorties :
La fonction printf est utilisée pour transférer du texte, des valeurs de variables ou des résultats
d'expressions vers le fichier de sortie standard stdout (par défaut l'écran).

Ecriture formatée en C

printf("<format>",<Expr1>,<Expr2>, ... )
"<format>" : format de représentation
<Expr1>,... : Variables et expressions dont les valeurs sont à représenter

La partie "<format>" est en fait une chaîne de caractères qui peut contenir :

* du texte
* des séquences d'échappement
* des spécificateurs de format
* Les spécificateurs de format indiquent la manière dont les valeurs des expressions
<Expr1..N> sont imprimées.
* La partie "<format>" contient exactement un spécificateur de format pour chaque expression
<Expr1..N>.
* Les spécificateurs de format commencent toujours par le symbole % et se terminent par un
ou deux caractères qui indiquent le format d'impression.
* Les spécificateurs de format impliquent une conversion d'un nombre en chaîne de caractères.
Ils sont encore appelés symboles de conversion.

Exemple 1 :

La suite d'instructions:

int A = 1234;
int B = 567;
printf("%d fois %d est %ld\n", A, B, (long)A*B);
va afficher sur l'écran:
1234 fois 567 est 699678

Exemple 2 :

La suite d'instructions :
char B = 'A';
printf("Le caractère %c a le code %d !\n", B, B);
va afficher sur l'écran :
Le caractère A a le code 65 !
La valeur de B est donc affichée sous deux formats différents :
%c comme caractère: A
%d comme entier relatif: 65

REALISE PAR : BASSEM BOUGHZALA (ISET RADES) 8/9


Cours langage C

Remarque :

Les spécificateurs %d, %i, %u, %o, %x peuvent seulement représenter des valeurs du
type int ou unsigned int. Une valeur trop grande pour être codée dans deux octets est coupée
sans avertissement si nous utilisons %d. Pour pouvoir traiter correctement les arguments du
type long, il faut utiliser les spécificateurs %ld, %li, %lu, %lo, %lx.

b. Les entrées :
La fonction scanf est la fonction symétrique à printf ; elle nous offre pratiquement les mêmes
conversions que printf, mais en sens inverse.

Lecture formatée en C

scanf("<format>",<AdrVar1>,<AdrVar2>, ...)
"<format>" : format de lecture des données
<AdrVar1>,... : adresses des variables auxquelles les données seront attribuées
* La fonction scanf reçoit ses données à partir du fichier d'entrée standard stdin (par défaut le
clavier).
* La chaîne de format détermine comment les données reçues doivent être interprétées.
* Les données reçues correctement sont mémorisées successivement aux adresses indiquées
par <AdrVar1>,... .
* L'adresse d'une variable est indiquée par le nom de la variable précédé du signe &.

Exemple :

La suite d'instructions :

int JOUR, MOIS, ANNEE;


scanf ("%i %i %i", &JOUR, &MOIS, &ANNEE);
lit trois entiers relatifs, séparés par des espaces, tabulations ou interlignes. Les valeurs sont
attribuées respectivement aux trois variables JOUR, MOIS et ANNEE.

REALISE PAR : BASSEM BOUGHZALA (ISET RADES) 9/9

Vous aimerez peut-être aussi