Professional Documents
Culture Documents
- Le Langage C Professeur :
Dr BIDANI Mustafa
Sommaire
Histoire du langage C
1.
Introduction au langage
2.
3.
Les variables
4.
Oprateurs et expressions
5.
6.
Sommaire
1.
2.
3.
Les Fonctions
4.
Les pointeurs
5.
Les fichiers
6.
Histoire du C
Origines
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.
- Une 1re dfinition du langage est apparue en 1978 avec louvrage de
Ritchie et Kernighan The C programming language.
- Son succs international a contribu sa normalisation:
1- ANSI (American National Standard Institute
2- ISO (International Standadization Organisation
3- CEN (Comit Europen de Normalisation) en 1993
1. Introduction au langage C
- Le langage C est un langage de bas niveaux, dans le sens o il permet la
manipulation de donnes que manipulent les ordinateurs (Bit, octet, adresse)
Langages volus (Pascal, Fortran, ADA)
- Il est suffisamment gnral pour permettre de dvelopper des application de
type scientifique ou de gestion base sur laccs aux bases de donnes (Word
et Excel sont crits partir de C ou C++)
- Il est un des 1ers langages offrant des possibilits de programmation modulaire:
Un programme peut tre constitu de plusieurs module (module = fichier .c)
1. Introduction au langage C
- Un langage de programmation a pour finalit de communiquer avec la machine. Le
langage maternel de la machine n'utilise que deux symboles (0 et 1): c'est le langage
machine.
Exemple: le nombre 5 est reconnu par une machine par la succession des symboles 101
(c'est la reprsentation du nombre en base 2).
De mme, les oprations qu'une machine est capable d'excuter sont codes par des
nombres, c'est--dire une succession de 0 et 1. Par exemple, l'instruction Machine
00011010 0001 0010 demande la machine d'effectuer l'opration 1+2.
Ce langage est le seul qui soit compris par l'ordinateur, Est-il alors le seul moyen pour
communiquer avec celui-ci???
Rponse : Non, utilisation du langage assembleur :
add $1 $2
Il fut suivi par des langages plus sophistiqus et de plus en plus proche du
langage
humain
1. Introduction au langage C
-
La
La
La
La
La
programmation
programmation
programmation
programmation
programmation
Compilateur
1. Introduction au langage C
Quest ce quun programme C?
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
Excutable
2. lments de base
2.1 les fichiers include
Exemple:
# include <stdio.h>
main()
{
printf(Bonjour!);
}
La directive #include inclu le fichier stdio.h au programme avant la compilation (pour
pouvoir utiliser la fonction prdfinie printf.
On parle alors de prproceseur
2. lments de base
2.2 les Commentaires
Exemple:
printf
2. lments de base
2.3 Prsentation de quelques instructions du langage C
2. lments de base
2.3 Prsentation de quelques instructions du langage C
Exemple 2 :
2. lments de base
2.4 Les identificateurs
Les identificateurs servent dsigner les diffrents objets manipuls par le
programme:Variables, fonctions,
- Commence ncessairement par une lettre
- une lettre majuscule est tenue pour diffrente de la lettre minuscule
correspondante;
- Au plus 31 caractre
- Le caractre _ (appel blanc soulign ) est considr comme une lettre ; il peut
donc figurer n'importe quelle place dans un identificateur: _Total2, Prix_unit
2. lments de base
2.5 Les Types dans C
Les types de base du langage C se rpartissent en 3 grande catgories en fonction
de la nature des informations quils permettent de reprsenter:
Ils peuvent tre signs ou non signs : signed ou unsigned (unsigned int x;)
2. lments de base
a. Les Types Entiers
int (entier sur 32 bits : - 2 147 483 648 2 147 483 647)
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
reprsenter que des nombres positifs:
Exemple:
unsigned short x;
2. lments de base
b. Les Types Flottants
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
3500 2.43
-0.38
-.38
4.
.27
2. lments de base
c. Le Type Char
En C, un caractre est un entier sign cod sur 1 octet
Notation des constantes caractres :
Important:
a , $ ..
a a
2. lments de base
NOTATION
RESULTAT
\a
\b
\f
\n
\r
\t
\v
\\
\'
\ ''
\?
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 :
auto
break
case
char
const
continue
default
do
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
signed
sizeof
static
struct
switch
typedef
union
unsigned
void
volatile
while
3. Les Variables
3.1 Declaration
Char
Auto
Register
Const
Static
volatile
extern
Unsigned
Short
Signed
Int
long
Float
Double
Long double
Exemple:
int x, y=0, z;
extern float a,b;
static unsigned short n=1000;
identificateur
= expression
3. Les Variables
3.2 Les variables statiques locale
Le qualificatif static, plac devant la dclaration d'une variable locale, produit une variable
qui est:
-Pour sa visibilit , locale
-Pour sa dure de vie, statique (Permanente)
Elle n'est accessible que depuis l'intrieur du bloc ou elle est dclare, mais elle est cre
au dbut du programme et elle existe aussi longtemps que dure l'excution de celui-ci.
Exemple :
void bizarre(void)
{ static int cpt = 1000;
printf("%d ", cpt);
cpt++; }
4. Oprateurs et Expressions
C dispose d'un important ventail d'oprateurs originaux d'affectation et
d'incrmentation.
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
4. Oprateurs et Expressions
Conversions implicites :
On peut crire des expressions mixtes dans lesquelles interviennent des oprandes
de types diffrents:
Int n,p; float x;
n*x + p
( float*float) + int
float
Mme mcanisme :
float
int
float float
4. Oprateurs et Expressions
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
* float) + int
float * float + int
float
+ float float
4. Oprateurs et Expressions
4.2 Oprateurs Relationnels
Comme tout langage, C permet de "comparer" des expressions l'aide
d'oprateurs classiques de comparaison.
exemple :
2*a > b +5
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:
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
2-les expressions compares pourront tre de type quelconque et seront soumises au
rgles de conversion prsentes prcdemment.
Liste des oprateurs:
==
mme priorit
!=
(a < b) == (c < d)
Remarque: les oprateurs relationnels sont moins prioritaires que les oprateurs
arithmtiques
)
4. Oprateurs et Expressions
4.3 Oprateurs Logiques
Ces oprateurs acceptent n'importe quel oprande numrique, y compris les types
flottants, avec les rgles de conversion implicite dj rencontres. condition de
considrer que:
0 correspond faux,
toute valeur non nulle correspond vrai
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)
Remarque2: loprateur | | est moins prioritaire que &&. Tous deux sont de priorit
infrieure aux oprateurs arithmtique et relationnels
a<b && c<d
quivaut
4. Oprateurs et Expressions
4.4 Oprateur daffectation ordinaire
4. Oprateurs et Expressions
4.5 Oprateurs dincrmentation et de dcrmentation ( ++
-- )
n = i++ - 5
4. Oprateurs et Expressions
4.5 Oprateurs dincrmentation et de dcrmentation ( ++
-- )
Priorit:
3 * i++ * j-- + k++
quivaut
3 * (i++) * (j--)
+ (k++)
a=a*b a*=b
i=i-k i-=k
a=a/b a/=b
4. Oprateurs et Expressions
4.7 Loprateur de CAST :
Exemple:
n=10, p=3;
(double) (n/p)
(double) n/p
syntaxe :
z = (x=y) ? a : b ;
a>b ? i++ : i-- ;
4. Oprateurs et Expressions
EXERCICES
5. Les Entes-Sorties
Conversationnelles
Quelles sont les critures autoriss pour des nombres fournis en donnes?
Que se passe-t-il lorsque lutilisateur ne les respecte pas?
c : char: caractre affich ''en clair" (convient aussi short ou int compte tenu des
conversions systmatiques)
u : unsigned int (convient aussi unsigned char ou unsigned short, compte tenu
des conversions systmatiques)
ld : long
lu : unsigned long
f : double ou float crit en notation "dcimale" avec six chiffres aprs le point
Exemples:
printf("%3d" , n );
n = 20
^20
n=3
^^3
n = 2358
2358
n = -5200
-5200
Exemples:
printf("%f" , x );
x = 1.2345
x = 12.3456789
1.234500
12.345678
printf("%10f" , x );
x = 1.2345
x = 1.2345E5
^^1.234500
123450.000000
printf("%e" , x );
x = 1.2345
x = 123.45
1.234500e+000
1.234500e+002
Exemples:
printf("%10.3f" , x );
x = 1.2345
^^^^^1.235
x = 1.2345E3
^^1234.500
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 );
2 )
c : char
d : int
u : unsigned int
hd : short int
hu : unsigned short
ld : long
lu : unsigned long
n = 12
p=25
^12^^25^^@
n = 12
p=25
123@
@
^25
n = 123 p=25
12^a@
n = 12
Le traitement dun code de format sinterrompe soit la rencontre dun sparateur, soit
lorsque le nombre de caractre indiqu a t atteint !!
Exemples : (n et p sont de type int, @ dsigne une fin de ligne)
scanf("%3d%3d" , &n, &p );
12^25@
n = 12
p=25
^^^^^12345@
n = 123
p=45
n = 12
p=25
12@
25@
Un espace entre deux codes de format demande scanf de faire avancer le pointeur au
prochain caractre diffrent dun sparateur !!
Exemples : (n et p sont de type int, c char, @ dsigne une fin de ligne)
scanf("%d %c" , &n, &c );
12^a@
n = 12
c=a
n = 12
c=a
12^^^@
a@
n = 12
p = 25
c=b
compte = 3
12b@
n = 12
b@
p inchang
n indfini
c inchang
p inchang
compte = 1
c inchang
compte = 0
Un arrt prmatur de scanf a lieu dans le cas o scanf nest pas en mesur de fabriquer
une valeur adquate !!
excution