Vous êtes sur la page 1sur 15

Chapitre 1 Présentation et éléments de base du langage C

CHAPITRE 1 : PRESENTATION ET ELEMENTS DE BASE DU


LANGAGE C

I. GENERALITES
I.1. Historique
Le langage C est développé en 1970 par Dennie Ritchie aux Laboratoires Bell d'AT&T. Le succès
des années qui suivaient et le développement de compilateurs C ont rendu nécessaire la définition
d'un standard actualisé et plus précis. En 1983, American National Standards Institute (ANSI)
chargeait une commission de mettre au point une définition explicite et indépendante de la machine
pour le langage C. La seconde édition du livre 'The C Programming Language', parue en 1988,
respecte tout à fait le standard ANSI-C et elle est devenue par la suite, la bible des programmeurs en
C.
I.2. Les étapes de programmation
Un programme est un algorithme traduit en un langage compréhensible par la machine, tels que le
langage C, le Pascal, etc.
Tout programme C a l’extension « .c », « .cc » ou bien « .cpp ». Pour pouvoir exécuter un
programme, il faut qu’il soit sans erreurs. Pour cela, il faut passer par une opération de compilation et
de correction (voir Figure 1).

Ecriture de l’algorithme

Ecriture du programme

Enregistrement File > Save

Compilation Build > Compile …


Correction

Oui Erreur Non

Exécution Build > Execute

Non Ok
Ok
Validation

Figure 1 : Etapes de programmation

1
Chapitre 1 Présentation et éléments de base du langage C

I.3. Structure de base d’un programme C


[Inclusion de bibliothèques]
[Définition des constantes]
[Définition des types personnalisés]
[Définition des variables externes et/ou globales]
[void] main ( )
{
[Déclaration des variables locales]
Suite d’instructions
}
avec :
 L’inclusion de bibliothèques permet d’inclure des fichiers définissant des
fonctions standards.
Syntaxe : #include<nom_fichier.h>
Exemples : #include<stdio.h>
#include<math.h>
 Une constante est un espace mémoire dont le contenu est inchangeable.
 La définition des types personnalisés permet de construire de nouveaux types
non définis par le langage.
 Une variable est un espace mémoire dont le contenu est changeable. On peut
distinguer les variables globales, les variables externes et les variables locales.
Définir une variable revient à préciser son nom et son type.
 Chaque instruction se termine par un point virgule.
Exemple

En langage algorithmique En langage C


ALGORITHME Bonjour #include <stdio.h>
DEBUT void main( )
écrire (" Bonjour les amis ") {
FIN printf ("Bonjour les amis") ;
}

2
Chapitre 1 Présentation et éléments de base du langage C

II. TYPES SIMPLES, OPÉRATEURS ET EXPRESSIONS


Les variables et les constantes sont les données principales qui peuvent être
manipulées par un programme. Les déclarations introduisent les variables qui seront
utilisées, fixent leur type et parfois aussi leur valeur de départ. Les opérateurs
contrôlent les actions que subissent les valeurs des données. Pour produire de
nouvelles valeurs, les variables et les constantes peuvent être combinées à l'aide des
opérateurs dans des expressions. Les types de données sont classés en deux catégories :
 Les types simples : entier, réel, caractère et logique.
 Les types composés : tableau, structure et pointeur.
Le présent chapitre s’interesse aux types simples. Pour les types composés, ils seront
étudiés ultérieurement.

II.1. Les Types simples


1)- Type caractère
char (caractère) : Une variable du type char peut contenir tous les caractères
alphabétiques majuscules et minuscules ainsi que les caractéres spéciaux ( ? , [ , :,…).
2)- Type logique
bool (boolean) : Une variable du type bool peut avoir l’une des deux valeurs true ou
false.
3)- Type entier
Définition Description
short entier court
int entier standard
long entier long

 int (entier standard) : Sur chaque machine, le type int est le type de base pour les
calculs avec les entiers.
 short (entier court) : Le type short est codé sur 2 octets.
 long (entier long) : Le type long est codé sur 4 octets. Comme une variable int
occupe 4 octets, le type long devient seulement nécessaire, si on veut utiliser le même

3
Chapitre 1 Présentation et éléments de base du langage C

programme sur d'autres machines, sur lesquelles le type standard des entiers est 2
octets.
4)- Type réel
En C, nous avons le choix entre deux types de définitions : float ou double. Le tableau
ci-dessous présente les caractéristiques de chacun d’eux :

Définition Précision
float simple
double double

II.2. Syntaxes de définition de constantes et de déclaration de variables


Définition de constantes
En algorithmique En langage C
CONST nom_const1 = valeur1 #define nom_const1 valeur1
nom_const2 = valeur2 #define nom_const2 valeur2
Déclaration de variables
En algorithmique En langage C
nomvar1, nomvar2, ... : Type_de _base Type_de_base nomvar1, nomvar2, ...;

Remarque :
Un nom de variable est une suite de lettres et de chiffres. Le premier caractère doit être
une lettre. Le caractère de soulignement ( _ ) est aussi considéré comme une lettre. Le
langage C fait une nette distinction entre les lettres majuscules et les lettres
minuscules.
Exemple :
#include < stdio.h>
#define PI 3.14159
/* calcul de la surface d'un cercle */
void main( )
{
float r, s;
r=5;
4
Chapitre 1 Présentation et éléments de base du langage C

s = PI * r * r;
printf ("La surface = %10.3f\n", s);
}

II.3. Opérations d’entrée /sortie


La bibliothèque standard <stdio> contient un ensemble de fonctions qui assurent la
communication de la machine avec le monde extérieur.
Écriture formatée des données
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).
Syntaxe

printf ("Message", [Expr1, Expr2, ...] ) ;

Avec :

 "Message" est une chaîne de caractères qui peut contenir :


 du texte,
 des séquences d'échappement (\n,\t,\a,\b),
 et/ou des spécificateurs de format.
Les spécificateurs de format sont :

SYMBOLE TYPE IMPRESSION COMME

%d int entier relatif


%u int entier naturel (unsigned)
%o int entier exprimé en octal
%x int entier exprimé en hexadécimal
%c char caractère
%f double rationnel en notation décimale
%e double rationnel en notation scientifique
%s char* chaîne de caractères

5
Chapitre 1 Présentation et éléments de base du langage C

Les séquences d’échapement sont :

CODE EFFET

\n Fin de ligne
\t tabulation
\b retour arrière
\r retour chariot
\f saut de page
\a signal sonore
\\ barre oblique inverse
\? point d'interrogation
\' apostrophe
\" guillemet
\0 NUL
\v tabulateur vertical
 Expr1, Expr2, ... : variables et expressions dont les valeurs sont à représenter.

Exemples

Instruction Affichage à l’écran

printf("Bonjour les amis"); Bonjour les amisPress any key to


continue

printf("Bonjour les amis\n"); Bonjour les amis


Press any key to continue

printf("Bonjour \tles amis"); Bonjour les amisPress any key to


continue

printf("%d fois %d est %d\n", A, B, A*B); Si A et B contiennent respectivement


12 et 5, l’instruction précédente
permet d’afficher sur l'écran : 12 fois
5 est 60

Écriture non formatée des données


Instruction Signification

putchar l'affichage d'un seul caractère sur l'écran


de l'ordinateur.

Exemples : putchar(C) ; afficher le contenu de lobjet C (de type


char).
putchar('x') ;
affiche la lettre x.
6
Chapitre 1 Présentation et éléments de base du langage C

putchar(65) ; affiche le caractère de code Ascii 65.


putchar('\n') ; retour à la ligne

Puts l'affichage d'une chaîne de caractères.


Exemples : puts(ch) ; affiche le contenu de la chaîne ch.
puts(" message") ; affiche le mot « message » intégralement.

Lecture formatée de données


La fonction scanf est la fonction symétrique à printf ; elle nous offre pratiquement les
mêmes conversions que printf, mais en sens inverse.
scanf("format1format2…", &var1, &var2, ...);

 Il ne doit exister aucun séparateur entre les formats.


 Le symbole & indique l’adresse de la variable qui lui est associée.
 La fonction scanf reçoit ses données à partir du fichier d'entrée standard stdin
(par défaut le clavier).
Exemple 1
La suite d'instructions :

int JOUR, MOIS, ANNEE;


scanf("%d%d%d", &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. Les
entrées suivantes sont correctes et équivalentes:
12 7 2006 ou 12 007 2006 ou 12 7 2006
Où la variable JOUR va contenir la valeur 12, la variable MOIS va contenir la valeur 7
et la variable ANNEE va contenir la valeur 2006.
Exemple 2
Soient les instructions suivantes :
int A, B;
scanf("%4d %2d", &A, &B);

7
Chapitre 1 Présentation et éléments de base du langage C

Si nous entrons le nombre 1234567, nous obtiendrons les affectations suivantes :


A=1234
B=56
Le chiffre 7 sera gardé pour la prochaine instruction de lecture.
Remarque : scanf n’accepte pas une chaîne vide et considère l’espace un caractère de validation de
la saisie.

Lecture non formatée des données

Instruction Description
getchar La saisie d'un seul caractère, puis
confirmation par 'Enter'.

getche (de la bibliothèque <conio.h>) La saisie d'un seul caractère sans


confirmation par 'Enter'.

gets La saisie d'une chaîne de caractères


pouvant contenir des espaces et acceptant
la chaîne vide.

Exemples
char C;
C = getchar( );

II.4. OPÉRATEURS STANDARDS


II.4.1 L’affectation

Nom_variable = Expression;
a. L'affectation avec des valeurs constantes

Langage algorithmique C Type de la constante


LONG  141 LONG = 141; Entier
PI  3.1415926 PI = 3.1415926; Réel
NATION  ‘L’ NATION = 'L'; caractère
b. L'affectation avec des valeurs de variables

Langage algorithmique C
VALEUR  X1A VALEUR = X1A;
LETTRE  COURRIER LETTRE = COURRIER;

8
Chapitre 1 Présentation et éléments de base du langage C

Avec X1A et COURRIER sont des variables déclarées et initialisées par des
valeurs.
c. L'affectation avec des valeurs d'expressions

Langage algorithmique C
AIRE  PI*R2 AIRE = PI*R*R;
MOYENNE  (A+B)/2 MOYENNE = (A+B)/2;

Remarques : il n'existe pas de fonction standard en C pour calculer le carré d'une


valeur; on peut se référer à la fonction plus générale pow(x,y) qui calcule xy et faire
inclure la bibliothèque « math.h » qui contient les fonctions mathématiques standarts.
II.4.2 opérateurs connus

Avant de nous lancer dans les spécialités du langage C, retrouvons d'abord les
opérateurs correspondant à ceux que nous connaissons déjà en langage algorithmique.
a. Opérateurs arithmétiques

opérateur description
+ addition
- soustraction
* multiplication
/ division (entière et rationnelle!)
% modulo (reste d'une div. entière)
b. Opérateurs de comparaison

opérateur description
== égal à
!= différent de
<, <=, >, >= plus petit que, ...
Exemple
printf(" %d %d %d %d %d \n" ,3<5,3<=1,7>=8,5= = 5,0 != 1);
va afficher 1 0 0 1 1

c. Opérateurs logiques

opérateur description
&& et logique (and)

9
Chapitre 1 Présentation et éléments de base du langage C

|| ou logique (or)
! négation logique (not)

Les résultats des opérations de comparaison et des opérateurs logiques sont du type int
:
- la valeur 1 correspond à la valeur logique vrai
- la valeur 0 correspond à la valeur logique 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
II.4.3 Opérateurs particuliers de C

a. opérateurs d'affectation

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;

opérateur description
+= ajouter à
-= diminuer de
*= multiplier par
/= diviser par
%= modulo

b. 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 :

10
Chapitre 1 Présentation et éléments de base du langage C

I++ ou ++I pour l'incrémentation (augmentation d'une unité)


I-- ou --I pour la décrémentation (diminution d'une unité)
d. Différence entre notation postfixé et préfixé

Les opérateurs ++ et -- sont employés dans les cas suivants :


 incrémenter/décrémenter une variable. 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 puis incrémente I.


X = I-- passe d'abord la valeur de I à X puis décrémente I.
X = ++I incrémente d'abord I puis passe la valeur incrémentée à X.
X = --I décrémente d'abord I puis passe la valeur décrémentée à X.

Exemple
Supposons que la valeur de N est égale à 10 :

X = N++; Résultat : N=11 et X=10


X = ++N; Résultat : N=11 et X=11

II.4.4 Priorités des opérateurs

L'ordre de l'évaluation des différentes parties d'une expression correspond en principe


à celle que nous connaissons des mathématiques.
Exemple : Si A=5, B=10, C=1
Supposons l'instruction suivante : X = 2*A+3*B+4*C;
L'ordinateur évalue d'abord les multiplications : 2*A ==> 10 , 3*B ==> 30 , 4*C ==>
4
Ensuite, il fait l'addition des trois résultats obtenus : 10+30+4 ==> 44
A la fin, il affecte le résultat général à la variable : X = 44
On dit alors que la multiplication a la priorité sur l'addition et que la multiplication et
l'addition ont la priorité sur l'affectation.

11
Chapitre 1 Présentation et éléments de base du langage C

Si nous voulons forcer l'ordinateur à commencer par un opérateur avec une priorité
plus faible, nous devons entourer le terme en question par des parenthèses.
Exemple
Dans l'instruction : X = 2*(A+3)*B+4*C;
l'ordinateur évalue d'abord l'expression entre parenthèses, ensuite les multiplications,
ensuite l'addition et enfin l'affectation. (En reprenant les valeurs de l'exemple ci-
dessus, le résultat sera 164).
Classes de priorités
Entre les opérateurs que nous connaissons jusqu'ici, nous pouvons distinguer les
classes de priorités suivantes :

Priorité 1 (la plus forte): ( )


Priorité 2: ! ++ -- (préfixée)
Priorité 3: */%
Priorité 4: +-
Priorité 5: < <= > >=
Priorité 6: == !=
Priorité 7: &&
Priorité 8: ||
Priorité 9: = += -= *= /= %=
Priorité 10 (la plus faible) : ++ -- (postfixée)
Evaluation d'opérateurs de la même classe
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
 L'expression 10+20+30-40+50-60 sera évaluée comme suit :

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

12
Chapitre 1 Présentation et éléments de base du langage C

20+50 ==> 70
70-60 ==> 10
 Pour A=3 et B=4, l'expression A *= B += 5 sera évaluée comme suit :

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

remarque : il faut faire bien attention lors de l’utilisation du postfixé et préfixé


avec l’ordre de priorité.
Les parenthèses
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.

Exemple
En supposant à nouveau que A=5, B=10, C=1 l'expression suivante s'évaluera à 134 :
X = ((2*A+3)*B+4)*C

Remarque :
X *= Y + 1 <=> X = X * (Y + 1)
X *= Y + 1 n'est pas équivalent à X = X * Y + 1

II.5. CONVERSIONS DE TYPES


La grande souplesse du langage C permet de mélanger des données de différents types
dans une expression. Avant de pouvoir calculer, les données doivent être converties
dans un même type. La plupart de ces conversions se passent automatiquement, sans
l'intervention du programmeur, qui doit quand même prévoir leur effet. Parfois il est

13
Chapitre 1 Présentation et éléments de base du langage C

nécessaire de convertir une donnée dans un type différent de celui que choisirait la
conversion automatique.

a. conversions de type automatiques

Si un opérateur a des opérandes de différents types, les valeurs des opérandes sont
converties automatiquement dans un type commun.
Ces manipulations implicites convertissent en général des types plus petits en des
types plus larges ; de cette façon on ne perd pas en précision.
Lors d'une affectation, la donnée à droite du signe d'égalité est convertie dans le type à
gauche du signe d'égalité. Dans ce cas, il peut y avoir perte de précision si le type de la
destination est plus faible que celui de la source.
Exemple
Considérons le calcul suivant :
int I = 8;
float X = 12.5;
float Y;
Y = I * X;
Pour pouvoir être multiplié avec X, la valeur de I est convertie en float (le type le plus
large des deux). Le résultat de la multiplication est du type float. Nous obtenons
comme résultat : Y = 100.000000
Règles de conversion automatique

Conversions automatiques lors d'une opération avec :


 deux entiers: D'abord, les types char et short sont convertis en int. Ensuite,
l'ordinateur choisit le plus large des deux types dans l'échelle suivante :
int, unsigned int, long, unsigned long
 un entier et un rationnel : Le type entier est converti dans le type du rationnel.

 deux rationnels : L'ordinateur choisit le plus large des deux types selon l'échelle
suivante:
float, double
 affectations et opérateurs d'affectation : Lors d'une affectation, le résultat est
toujours converti dans le type de la destination. Si ce type est plus faible, il peut y
avoir une perte de précision.

14
Chapitre 1 Présentation et éléments de base du langage C

Exemple
Observons les conversions nécessaires lors d'une simple division :
int X;
float A=12.48;
char B=4;
X=A/B;
B est converti en float. Le résultat de la division est du type float (valeur 3.12) et sera
converti en int avant d'être affecté à X, ce qui conduit au résultat X=3.

b. conversions de type forcées (casting)

Il est possible de convertir explicitement une valeur en un type quelconque en forçant


la transformation à l'aide de la syntaxe :
(Type) Expression ;
Exemple
Nous divisons deux variables du type entier. Pour avoir plus de précision, nous
voulons avoir un résultat de type rationnel. Pour ce faire, nous convertissons l'une des
deux opérandes en float. Automatiquement C convertira l'autre opérande en float et
effectuera une division rationnelle :
int A = 3;
int B = 4;
float C;
C = (float) A/B;
La valeur de A est explicitement convertie en float. La valeur de B est
automatiquement convertie en float. Le résultat de la division (type rationnel, valeur
0.75) est affecté à C.
Résultat: C = 0.75
Remarque : Les types de A et de B restent inchangés ; seulement les valeurs utilisées
dans les calculs sont converties.

15

Vous aimerez peut-être aussi