Académique Documents
Professionnel Documents
Culture Documents
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
Non Ok
Ok
Validation
1
Chapitre 1 Présentation et éléments de base du langage C
2
Chapitre 1 Présentation et éléments de base du langage C
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
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);
}
Avec :
5
Chapitre 1 Présentation et éléments de base du langage C
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
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
Instruction Description
getchar La saisie d'un seul caractère, puis
confirmation par 'Enter'.
Exemples
char C;
C = getchar( );
Nom_variable = Expression;
a. L'affectation avec des valeurs constantes
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;
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
opérateur description
+= ajouter à
-= diminuer de
*= multiplier par
/= diviser par
%= modulo
10
Chapitre 1 Présentation et éléments de base du langage C
Exemple
Supposons que la valeur de N est égale à 10 :
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 :
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 :
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
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.
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
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.
15