Professional Documents
Culture Documents
- Le Langage C Partie I
E SAAD
Histoire du C
Origines
C a trois anctres : les langages CPL, BCPL et B.
BCPL : (pour Basic CPL) Cambridge en 1966 par Martin Richards. Version
siplifie Ecriture dun 1er Compilateur et de divers systmes
dexploitations
B : Ken Thompson vers 1970 dans les laboratoires Bell Version simplifie
du BCPL
Histoire du C
C: dvelopp par un collgue de Ken Thompson, Dennis Ritchie qui ajouta les
tableaux, les pointeurs, les nombres virgule flottante, les structures...
1972 fut l'anne de dveloppement la plus productive et sans doute l'anne
de baptme de C. En 1973, C fut suffisamment au point pour que 90% de
UNIX puisse tre rcrit avec.
Cest un texte crit avec un diteur de texte, respectant une certaine syntaxe et
stock sous forme d'un ou plusieurs fichiers (gnralement avec l'extension .c). A
l'oppos du langage assembleur, les instructions du langage C sont obligatoirement
encapsules dans des fonctions et il existe une fonction privilgie appele main qui
est le point de dpart de tout programme.
Exemple: main()
{
printf(Bonjour!);
}
Source.c
Compilation Objet.o Edition des liens Excutable
2. lments de base
2.1 les fichiers include
Exemple:
# include <stdio.h>
main()
{
printf(Bonjour!);
}
Exemple:
# include <stdio.h> //pour pouvoir utiliser la fonction printf
main()
{
printf(Bonjour!);
}
/*Ce programme imprime la chaine de
caractre Bonjour! lcran*/
2. lments de base
2.4 Les identificateurs
Ils peuvent tre signs ou non signs : signed ou unsigned (unsigned int x;)
2. lments de base
a. Les Types Entiers
long int ou long (entier sur 32 bits ou 64 bits, selon les machines)
Chacun des 3 peut tre nuanc par lutilisation du qualificatif unsigned pour ne
Float : cod sur 4 octets avec 1 bit de signe, 23 bits de mantisse et 8 bits
d'exposant
Double : cod sur 8 octets avec 1 bit de signe, 52 bits de mantisse et 11
bits d'exposant
Long : cod sur 10 octets avec 1 bit de signe, 64 bits de mantisse et 15 bits
d'exposant
Important: a a
NOTATION RESULTAT
\a cloche ou bip (alert ou audible bell)
\b Retour arrire (Backspace)
\f Saut de page (Form Feed)
\n Saut de Ligne (Line Feed)
\r Retour chariot (Carriage Return)
\t Tabulation horizontaLe (HorizontaL Tab)
\v Tabutation verticale (VerticaL Tab)
\\ \
\'
\ ''
\? ?
2. lments de base
A propos du type boolen :
Pas de type boolen en C. Le type boolen est reprsent par un entier. Il se comporte
comme la valeur boolenne vraie si cette valeur entire est non nulle.
Dans un contexte qui exige une valeur boolenne (comme les tests, par exemple), un
entier non nul quivaut vrai et la valeur zero quivaut faux
2. lments de base
2.6 Les Mots rservs
Les mots suivants sont rservs. Leur fonction est prvue par la syntaxe de C et ils ne
peuvent pas tre utiliss dans un autre but :
Les oprateurs binaires ne sont priori dfinis que pour deux oprandes ayant
le mme type parmi: int, long int, float, double, long double et ils fournissent
un rsultat de mme type que leurs oprandes.
4. Oprateurs et Expressions
4.1 Oprateurs arithmtiques en C
De plus, il existe un oprateur de "modulo" not % qui ne peut porter que sur
des entiers et qui fournit le reste de la division de son premier oprande par son
second. Par exemple, 11%4 vaut 3, 23%6 vaut 5
Conversions implicites :
On peut crire des expressions mixtes dans lesquelles interviennent des oprandes
de types diffrents:
Int n,p; float x; n*x + p
(int * float) + int
Conversion implicite: int float ( float*float) + int
float + int
Mme mcanisme : float + float float
Promotions numriques :
On a vu que les oprateurs numriques ne sont pas dfinis pour le types char et
short :
C prvoit que toute valeur char ou short soit dabord convertie en int.
short n,p; float x; n*x + p
(short * float) + short
Conversion systmatique: ( int * float) + int
Conversion implicite : float * float + int
float + float float
4. Oprateurs et Expressions
4.2 Oprateurs Relationnels
Par contre, C se distingue de la plupart des autres langages sur deux points:
1-le rsultat de la comparaison est, non pas une valeur "boolenne" (on dit aussi
"logique") prenant l'une des deux valeurs vrai ou faux, mais un entier valant:
0 si le rsultat de la comparaison est faux,
1 si le rsultat de la comparaison est vrai.
Ainsi, la comparaison ci-dessus devient en fait une expression de type entier. Cela
signifie qu'elle pourra ventuellement intervenir dans des calculs arithmtiques;
4. Oprateurs et Expressions
4.2 Oprateurs Relationnels
Remarque: les oprateurs relationnels sont moins prioritaires que les oprateurs
arithmtiques ( x+y < a+2 (x+y) < (a+2) )
4. Oprateurs et Expressions
4.3 Oprateurs Logiques
Exemples:
n et p sont des entiers, le compilateur accepte des expression telles que:
n && p n||p if ( !n ) if (n == 0)
Priorit:
EXERCICES
5. Les Entes-Sorties Conversationnelles
Quelles sont les critures autoriss pour des nombres fournis en donnes? Que se
Comment organiser les donnes lorsque lon mlange les types numriques et les
types caractres?
dinformations?
La fonction printf a comme 1er argument une chane de caractres qui spcifie:
c : char: caractre affich ''en clair" (convient aussi short ou int compte tenu
u : unsigned int (convient aussi unsigned char ou unsigned short, compte tenu
ld : long
lu : unsigned long
5.1 Les possibilits de la fonction printf
f : double ou float crit en notation "dcimale" avec six chiffres aprs le point
Les entiers sont affichs par dfaut sans espaces avant ou aprs. Les flottants avec six
chiffres aprs le point.
Pour agir sur laffichage un nombre est plac aprs % et prcise le nombre de
caractre minimum utiliser.
Exemples: printf("%3d" , n );
n = 20 ^20
n=3 ^^3
n = 2358 2358
n = -5200 -5200
5.1 Les possibilits de la fonction printf
Exemples: printf("%f" , x );
x = 1.2345 1.234500
x = 12.3456789 12.345678
printf("%10f" , x );
x = 1.2345 ^^1.234500
x = 1.2345E5 123450.000000
printf("%e" , x );
x = 1.2345 1.234500e+000
x = 123.45 1.234500e+002
5.1 Les possibilits de la fonction printf
c. Actions sur la prcision :
pour les flottants, on peut prciser un nombre de chiffres aprs le point dcimal
Exemples: printf("%10.3f" , x );
x = 1.2345 ^^^^^1.235
x = 1.2345E3 ^^1234.500
x = 1.2345E7 12345000.000
Remarques:
Cadrage de laffichage gauche printf("%-10.3f" , x ); x = 1.2345 1.235^^^^^
- Le caractre * figurants la place dun gabarit ou une prcision signifie que la valeur
effective est fournie dans la liste des arguments de printf:
printf("%8.*f" , n, x ); n=1; x=1.2345 ^^^^^1.2
- La fonction printf fournit une valeur de retour (nombre de caractre affichs)
5.1 Les possibilits de la fonction printf
d. Les erreurs de programmation :
c : char
d : int
u : unsigned int
hd : short int
hu : unsigned short
ld : long
lu : unsigned long
5.1 Les possibilits de la fonction scanf
Lorsque scanf attend des donnes, linformation frappe au clavier est range
explor caractre par caractre au fur et mesure des besoins. Certains caractres
123@
@
^25 n = 12 p=25
scanf("%d%c" , &n, &c );
12^a@ n = 12 c=
5.1 Les possibilits de la fonction scanf
Le traitement dun code de format sinterrompe soit la rencontre dun sparateur, soit
lorsque le nombre de caractre indiqu a t atteint !!
12@
25@ n = 12 p=25
5.1 Les possibilits de la fonction scanf
Un espace entre deux codes de format demande scanf de faire avancer le pointeur au
prochain caractre diffrent dun sparateur !!
Un arrt prmatur de scanf a lieu dans le cas o scanf nest pas en mesur de fabriquer
une valeur adquate !!
5.1 Les possibilits de la fonction scanf
if (condition ralis
r alise
alis e )
{ liste d'instructions }
else
{ autre srie
s rie d'instructions }
Remarques :
la condition doit tre entre des parenthses
il est possible de dfinir plusieurs conditions remplir avec les
oprateurs ET et OU (&& et ||)
Par exemple l'instruction suivante teste si les deux conditions sont
vraies : if ((condition1)&&(condition2))L'instruction suivante excutera
les instructions si l'une ou l'autre des deux conditions est vraie : if
((condition1)||(condition2))
Les boucles
Par exemple :