Documente Academic
Documente Profesional
Documente Cultură
Catherine Jazzar
2016-2017
LE LANGAGE C
N en 1972 dans les laboratoires Bell AT&T
Auteurs : Brian KERNIGHAN et Dennis RITCHIE
Langage de programmation
2
CARACTERISTIQUES
Structur
Modulaire: peut tre dcoup en modules qui peuvent tre
compils sparment
Universel: n'est pas orient vers un domaine d'application
particulier
Typ: tout objet C doit tre dclar avant dtre utilis
Portable: sur n'importe quel systme en possession d'un
compilateur C
...
3
Premier Programme
/* exemple de programme C : En C le programme principal
- calcul somme des nb entiers de 1 20 et affichage de la s'appelle toujours main
valeur
- idem de 1 10 */ dclarations de variables de
#include <stdio.h> type entier (cases mmoire
main () pouvant contenir un entier)
{
int somme; int i;
somme = 0; instruction d'affectation de
for (i = 1; i <= 20; i++) valeur la variable somme
{
somme = somme + i; instructions excutes
} en squence
printf ("%d\n", somme);
somme = 0;
for (i = 1; i <= 10; i++) affiche l'cran la valeur de
{ l'entier contenu dans somme
somme = somme + i;
} l'instruction entre accolades
printf ("%d\n", somme); est excute pour les valeurs
} de i allant de 1 10 4
COMPILATION / EXECUTION
Compilation du programme prog.c
Excution du programme
5
ELEMENTS DE BASE
Structures de donnes
Notion de type : entiers, rels, caractres, ...
Notion de variables
Instructions
Affectation de variable
Instructions Conditionnelles : if et switch
Boucles: while , do ... while, et for
6
DONNEES
Les informations traites par un programme
Ces informations sont contenues dans :
des variables
des constantes
Variables :
doivent tre dclares
leur contenu peut tre lu et/ou modifi pendant lexcution du
programme
Constantes:
doivent aussi tre dclares
initialises par une valeur
leur contenu ne peut tre modifi
elles peuvent tre lues 7
NOTION DE VARIABLE
Association dun identificateur des cases
mmoires qui doivent tre dclares avant
utilisation
Toute dclaration contient :
un identificateur : nom qui servira dsigner la
case mmoire
un type : ensemble des informations possibles
que pourra contenir la variable
8
DECLARATION DE
VARIABLE
Syntaxe:
<type> <variable>;
Exemple:
char rep;
int compteur;
float longueur, largeur;
int i=0, j=0;
9
INTERET DES VARIABLES
main()
{ int x;
allocation en mmoire
effectue par le compilateur
x = 3;
3
}
machine
Intrt :
le programmeur na pas se soucier de lallocation
prcise des cases mmoires (repres par des adresses)
lemploi didentificateurs significatifs amliore la
lisibilit du programme
10
CONSTANTES (1)
Syntaxe:
#define <nom constante> <texte de remplacement>
float f = PI;
char tab[MAX];
12
NOTION DE TYPE
dfinit :
un ensemble de valeurs
un ensemble doprations applicable ces valeurs
dtermine :
la taille de la mmoire qui sera alloue aux variables de ce type
le codage des valeurs
13
TYPES DE C
void scalaires fonctions union composites
discrets rels(flottants)
entiers numrs
caractres
14
LES ENTIERS
Les entiers sont rangs dans des cases mmoire
de taille fixe : 8, 16, 32, 64 bits,
Exemple:
231+ 231= 0 si les entiers non signs sont reprsents
sur 32 bits
15
TYPES ENTIERS
Entiers: reprsentent les nombres entiers
positfs/ngatifs
Type Description Min Max Nbr Octets
short entier court -32768 32767 2
unsigned short entier court non sign 0 65535 2
int entier -2147483648 2147483647 4
unsigned int entier non sign 0 4294967295 4
long int entier long -2147483648 2147483647 4
unsigned long entier long non sign 0 4294967295 4
+ - * / %
/ division entire: 6 / 9 vaut 0
% modulo (reste de la division entire) 6 % 9 vaut 6
Oprateurs relationnels:
- 0xF = - 15 = - 017
8 - 0 = 8 pourquoi?
20
CARACTERE
Reprsente un caractre parmi lensemble des caractres du
jeu de caractres de la machine (gnralement les codes
ASCII)
Type Description Min Max Nbr Octets
char caractre -128 127 1
unsigned char caractre non sign 0 255 1
char rep;
rep = a ; rep = rep + 3; rep vaut d
Oprateurs arithmtiques: + * - / %
Oprateurs relationnels: > >= < <= == !=
21
TYPES REELS
Rel: reprsente les nombres en virgule flottante
Type Description Min Max Nb Octets
Exemple:
24
if (x >= 0) teste si x est positif
EXPRESSIONS BOOLEENNES
Le type boolen nexiste pas en C
Convention utilise:
la valeur boolenne dune expression est
fausse si elle est gale zro
vraie si elle diffrente de zro
Exemples :
0 est une expression toujours fausse
16 est une expression toujours vraie
x == 16 vraie si x est gal 16
fausse sinon 25
OPERATEURS BOOLEENS
oprateur opration
&& ET Logique
|| OU Logique
! NEGATION
Exemples
1 && 2 !3 0 || ! (2 > 0)
vraie fausse fausse
26
AUTRES OPERATEURS
Oprateurs dauto-incrmentation (++, - -), arithmtiques tendus
28
LES INSTRUCTIONS DE
CONTROLE
if
while
do ... while
for
switch
29
if
Syntaxe Description
La valeur de <expression> est value
if ( <expression> ) et si elle est non nulle, <instruction1>
<instruction 1> est excute sinon cest <instruction2>
qui est excute (si elle existe)
[else
Remarque: <instruction> dsigne :
<instruction 2>] une instruction unique:
x = 5;
Exemple ou
un bloc dinstructions:
if (a > b) {
max = a; tmp=x;
else x=y;
y=tmp;
max = b; } 30
while
Syntaxe:
while (<expression>)
<instructions>
Description:
Exemple: Tant que <expression> fournit une
I = 0; valeur non nulle, <instructions>
while (I < 10) est excut
printf("%d\n", I++);
Remarque:
<expression> est value avant
chaque excution de <instructions>
31
do ...while
Syntaxe: Description:
do <instruction> est excut tant que
<instruction> <expression> fournit une valeur
while(<expression>) non nulle
Exemple: Remarque:
I = 0; <instruction> est excut
do au moins une fois
printf("%d\n", I++);
while (I<10);
32
for
Syntaxe:
for (<expression1>;<expression2>;<expression3>)
<instruction>
Description:
1- expression1 est value
2- <instruction> est excute tant que
<expression2> retourne une valeur
non nulle Exemple:
3- <expression3> est value aprs for (i=0; i<10; i++)
lexcution de <instruction> printf("%d", i);
33
for / while
La boucle for est quivalente la structure while
<expression1>;
for (<expression1>; while (<expression2>)
<expression2>; {
<expression3>) <instruction>
<instruction> <expression3>;
}
Remarques:
1- en gnral <expression1> sert initialiser, et <expression3> sert
incrmenter
2- toutes les expressions sont facultatives
3- Si <expression2> nexiste pas, elle sera suppose vraie
34
switch
SYNTAXE Description
switch (<expression>) 1- lvaluation de <expression> doit
retourne une valeur de type int.
{ 2- si la valeur de <expression> vaut
case e1: <instruction1> e1 ou e2... ... ... ou eN alors
break; l instruction correspondante
case e2: <instruction2> sera excute
break; sinon instruction_default sera
excute
... ... ... ... ... ...
case eN: <instructionN> Remarques
break; 1- <expression> doit rendre une
default: valeur de type int
2- e1, e2, eN doivent tre de type
<instruction_default>
int ou char
} 3- break permet de sortir du switch
35
switch (exemple)
switch (car)
{
case A:
case E:
case I:
case O: Remarque:
case U: voyelle++; si car est une voyelle et
break; break est absent,
case : espace++; alors espace sera incrment
break;
default : consonne++;
}
36
break (2) et continue
Quelle que soit la boucle,
on peut toujours for() ou while() ou
l'abandonner par break do
la recommencer par continue (en
abandonnant la fin de la boucle {
en cours)
if () continue;
if () break;
} 37
E/S de base : printf ET scanf
int i; Pas de \n
float r; ici
printf("saisir un entier et un rel: ");
scanf("%d%f ", &i, &r);
39
adresse de i adresse de r
LES FORMATS dE/S
LA SORTIE AVEC FORMAT: printf
%d : largument est un entier et laffichage se fera en
dcimal
%c : largument est un caractre
%s : largument est une chane de caractres
%f : largument est un float
la dclaration de la fonction
la dfinition de la fonction
lappel de la fonction
42
DECLARATION DUNE
FONCTION
La dclaration d'une fonction se fait par un
prototype qui indique :
le nom de la fonction
le type de chaque paramtre
le type du rsultat retourn
Intrt :
un prototype indique comment appeler une fonction
plac avant le point dappel, il permet au compilateur de
vrifier la cohrence de lappel
43
PROTOTYPE
SYNTAXE:
type identificateur (parametres_formels);
Exemple:
float puissance(int, int);
ou encore
float puissance(int p, int n);
44
DEFINITION DUNE
FONCTION
SYNTAXE: type identificateur (parametres_formels)
{
dclarations
instructions
}
type: type de la valeur retourne par la fonction (int par
dfaut); le type void prcise que la fonction ne retourne pas
de valeur
identificateur: nom de la fonction
parametres_formels: (donnes) liste des paramtres formels;
leur dure de vie est gale la dure dexcution de la
fonction
45
EXEMPLE
type de la valeur nom de la fonction liste des paramtres
retourne formels
EXEMPLE:
return puiss;
48
INSTRUCTION RETURN
(suite)
Une fonction peut ne pas retourner de valeur
-> type de retour : void
EXEMPLE:
void affiche_float (float x)
{
printf ("%f \n", x);
return; facultatif
}
49
LES PARAMETRES
int main(void)
{
float puiss;
appel de la fonction puissance avec deux
puiss = puissance(2, 5); paramtres effectifs : 2 et 5
printf("%f\n", puiss);
return 0;
}
NOTION D'ADRESSE
POINTEURS
POINTEURS ET FONCTIONS
Passages de paramtres
Exemples
52
NOTION D'ADRESSE
DEFINITION:
L'adresse d'une variable est une valeur qui
indique sa localisation en mmoire
int i=123;
adresses
i vaut 123
1004 123
&i vaut 1004
1008
1012
1016
54
POINTEURS
Dfinition
Un pointeur est une variable destine contenir
une adresse (celle d'une autre variable)
Terminologie
Si p est un pointeur (variable pointeur), alors la
deuxime variable est dite pointe par p
55
POINTEUR/VARIABLE
POINTEE
La mise en uvre d'un pointeur se droule
en trois tapes (obligatoirement):
56
DECLARATION DUN
POINTEUR
Syntaxe:
<type_variable_pointe> *<pointeur>;
Exemples:
int *pi;
char *pc;
float *pf;
........ 57
DECLARATION DUN
POINTEUR
Valeur initiale indtermine
adresses
#include<stdio.h>
1004 ? p
int main(void)
{ 1008
int *p; 1012
int i=23; 1016 23 i
.......
return 0;
} 58
AFFECTATION DUN
POINTEUR
adresses
#include<stdio.h>
int main(void)
{
1004 1016 p
int *p;
int i=23; 1008
p=&i; 1012
....... 1016 23 i *p
return 0;
}
59
UTILISATION DE LA
VARIABLE POINTEE
Elle se fait l'aide de l'oprateur * (lecture, modification)
#include<stdio.h>
int main(void)
{
int *p; /* dclaration */
int i=23, j;
p=&i; /* initialisation */
*p = 24; /* modification <=> i = 24 */
j = *p + 2; /* j prend la valeur 26 */
..........
60
return 0;
EXEMPLES D'UTILISATION
EXEMPLE 1
#include<stdio.h>
int main(void)
{ 1004 1016 p
int *p; 1008
int i=23; 1012
p=&i; 1016 149 i *p
1020
*p=149;
1024
...........
1028
return 0;
} 61
EXEMPLE 2
#include<stdio.h> adresses
int main(void)
{ 1004 1016 p
int *p, *q; 1008 1028 q
int i=23; 1012
int j=28;
p=&i; 1016 149 i *p
*p=149; 1020
q=&j;
1024
..........
1028 28 j *q
return 0;
}
62
EXEMPLE 3
adresses
#include<stdio.h>
int main(void)
{ 1004 1028 p
int *p, *q; 1008 1028 q
int i=23, j=28;
1012
p=&i;
*p=149; 1016 149 i
q=&j; 1020
p=q;
1024
return 0;
} 1028 28 j *q *p
63
EXEMPLE 4
#include<stdio.h>
adresses
int main(void)
{
1004 1016 p
int *p;
int *q; 1008 1028 q
int i=23; 1012
j=67;
p=&i; 1016 67 i *p
q=&j; 1020
*p=*q;
............ 1024
return 0; 1028 67 j *q
}
64
EXEMPLE 5
adresses
#include<stdio.h>
int main(void) 1016
1004 p
{ int *p, *q;
1008 ? q
int i=23;
p=&i; 1012
*p=149; 1016 149 i *p
*q=28; /* !!!!!!!! */
1020
/* ERREUR : pas d'initialisation
de la variable pointeur*/ 1024
............ 1028
}
65
POINTEURS ET PASSAGE DE
PARAMETRES
Problme
Ecrire une fonction qui permette d changer
les valeurs de deux variables entires.
66
PROGRAMME
FAUX_ECHANGE.C
#include <stdio.h> void echange(int x, int y);
void echange(int,int); {
int main(void) int tmp;
{ tmp = x;
int a=5, b=9; x = y;
echange(a,b); y = tmp;
printf("a=%d b=%d\n, a, b); }
return 0;
} Ce programme affiche:
a=5 b=9 et non a=9 b=5
67
Passage de paramtre par valeur
a 14982 5 a
14982 5
b 14986 9 b
14986 9 14990
14990
14994 14994
14998 14998
La fonction 15002
15002 manipule x et y
5 x 15006 9 x
15006
15010 9 y 15010 5 y
15014 15014
15018 5 tmp 15018 5 tmp
15022 15022
69
PROGRAMME
VRAI_ECHANGE.C
#include <stdio.h> void echange(int *px, int* py)
{
void echange(int*,int*); int tmp;
tmp = *px;
*px = *py;
int main(void) *py = tmp;
{ }
int a=5, b=9;
echange(&a,&b); Ce programme affiche:
printf("a = %d b = % d\n, a, b);
a=9 b=5
return 0;
}
70
PASSAGE DE PARAMETRE PAR ADRESSE
14982 a a
5 14982 9
14986 Aprs 14986
9 b excution 5 b
14990 14990
14994 14994
14998 14998
15002 15002
15006 14982 px 15006 14982 px
15012 14986 py 15012 14986 py
15016 15016
15020 5 tmp 15020 5 tmp
15024 15024
EEPS/03/FOU/00157Y Ind.A