Vous êtes sur la page 1sur 43

la programmation en langage C

1
Classification

T o u s le s L a n g u a g e s
d e P r o g r a m m a tio n

Languages Languages
Im p e r a t if s D e c la r a tifs

P r o g r a m m a t io n P r o g r a m m a t io n P r o g r a m m a t io n P r o g r a m m a t io n P r o g r a m m a t io n
P r o c e d u r a le O r ie n t e e O b j e t s C o n c u rre n te F o n c t io n e lle L o g iq u e
A d a , P a s c a l, C C ++, Java Ada 95 L IS P , S C H E M E PR O LO G

Languages Imperatifs: Langages incluant des moyens pour le


programmeur d attribuer des valeurs a des locations en mmoire.
Languages Declaratifs: Langages pour lesquels le programmeur
rflchit en terme de valeurs des fonctions et de relations entre
entits diverses. Il n y a pas d attribution de valeurs aux variables.

2
Caractristique du C
Structur
Modulaire: peut tre dcoup en modules qui peuvent tre compils sparement
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
Un long fleuve tranquille

Compilateur C
C
fichier

Code
assembleur

Assembleur

Code
objet
Linker
Code
executable
4
Fichier C (extension .c)

/* exemple de programme C :
- somme des nb de 1 10 et affichage
de la valeur*/ En C le programme principal 1
#include <stdio.h> 0 s'appelle toujours main
int main (void) 1
dclarations de variables de 2
{ type entier (cases mmoire
int somme; int i; 2 pouvant contenir un entier)
somme = 0; 3 instruction d'affectation de 3
for (i = 1; i <= 10; i++) valeur la variable somme
4 {
instructions excutes
somme = somme + i; en squence
} l'instruction entre accolades 4
printf ("%d\n", somme); 5 est excute pour les valeurs
somme = 0; de i allant de 1 10
} affiche l'cran la valeur de 5
l'entier contenu dans somme
Ecrire le programme suivant :
#include <stdio.h>
int main(void) {
int a= 257, b = 381;
if (a > 0 && b > 0) {
printf(" PGCD(%3d,%"d)\n",a,b);
while (a != b) {
if (a < b) b = b-a;
else a = a-b;
printf("=PGCD(%3d,%3d)\n",a,b);
}
printf("=%d\n",a);
}
return 0;
}

6
Anatomie

Programme typique en C

include
Main() toujours la
1ere fonction appele
main()

fonction a() instructions

fonction b() instructions

instructions
7
Commandes simples de compilation

Prtraitement, compilation et dition de liens :


gcc Wall g pgcd.o lm o pgcd
l'option Wall demande une compilation avec des diagnostics sur la
propret du code
l'option g demande que la table des symboles soit ajoute l'excutable
l'option lm demande de lier la librairie mathmatique
l'option o pgcd demande que le rsultat (l'excutable) soit nomm pgcd au
lieu de a.out
Le programme est lancer avec ./pgcd

8
Types dinstruction en C

Dclarations des variables

Assignations

Fonctions

Contrle

9
Types de donnes et de variables

Dclaration des variables


int y;
char yesno, ok;
int ordered = 1, onhand = 0;
float total = 43.132;
char *cptr = NULL;

10
Types de donnes et de variables

Type char ou signed char :


ASCII sur 32 bits
de -2147483648 2147483647.

Type unsigned char :


ASCII sur 32 bits
de 0 4294967295.

11
Types de donnes et de variables

Type short ou signed short


en complment 2 sur 32 bits
de -2147483648 2147483647.

Type unsigned short :


binaire sur 32 bits
de 0 4294967295.

12
Types de donnes et de variables

Type int ou signed int


en complment 2 sur 32 bits
de -2147483648 2147483647.

Type unsigned int :


binaire sur 32 bits
de 0 4294967295.

13
Types de donnes et de variables

Type long ou signed long


en complment 2 sur 32 bits
de -2147483648 2147483647.

Type unsigned long :


binaire sur 32 bits
de 0 4294967295.

14
Types de donnes et de variables

Type enum (ordered list)


en complment 2 sur 32 bits
de -2147483648 2147483647.

Type float
format TMS320C30 sur 32 bits
de 5.9x10-39 3.4 x1038.

15
Types de donnes et de variables

Type double
format TMS320C30 sur 32 bits
de 5.9x10-39 3.4 x1038.

Type long double


format TMS320C30 sur 40 bits
de 5.9x10-39 3.4 x1038.

16
Types de donnes et de variables

Type pointer
binaire sur 32 bits
de 0 0xFFFFFFFF.

17
Les pointeurs

Un pointeur contient ladresse dune autre variable.

Dclaration:
float *wirelen;

18
Les pointeurs

Utilisation:
wirelen = &wire2 ;
Contenu de wirelen = adresse de wire2
*wirelen = 30.5 ;
Mme effet que wire2 = 30.5.

19
Les pointeurs et les vecteurs

Dclaration:
float *arrayptr;
float farray[30];

Utilisation:
arrayptr = farray; ou arrayptr = &farray[0];

20
Les pointeurs et les vecteurs

Accs une valeur dans le vecteur:


*(arrayptr+3) quivalent farray[3]

Balayage simple avec ++arrayptr

21
Les modificateurs des classes de mmorisation

extern :
indique une variable ou une fonction dclare dans un autre module.

register :
demande au compilateur de placer des variables dans les registres du
CPU. Augmente la vitesse de traitement.

22
Les modificateurs des classes de mmorisation

const :
indique que le contenu dune variable ne doit pas tre
modifie.

volatile :
indique quune variable peut voir son contenu changer tout
moment par le programme, des interruptions ou tout autre
facteur extrieur. Empche le compilateur de faire des
optimisations sur cette variable.

23
Oprateurs et expressions

Oprateurs un paramtre:
- change le signe de la variable
~complment 1
* indirection (pointeurs)
value = *salary; /* contenu point par salaire */
&adresse
++/-- incrmentation/dcrmentation
sizeof()

24
Oprateurs et expressions

Oprateurs arithmtique:
*,/,+,-
% modulo

Oprateurs sur bits:


<<,>> dcalage gauche ou droite
status = byte << 4;
&et
| ou
^ ou exclusif

25
Oprateurs et expressions

Oprateurs relationnels:
<,>,<=,=>

Oprateurs dgalit:
==, !=

Oprateurs logiques:
&& et
|| ou

26
Oprateurs et expressions

Oprateur conditionnel:
result = mode > 0 ? 1 : 0;
if mode>0 then result=1 else result=0.

Oprateurs dassignation:
=, *=, /=, %=, +=, -=, <<=, >>=, &=, |=, ^=

27
Fonctions en C

Plusieurs fonctions pr-dfinies:


printf(), sin(), atoi(),

Le prototype de ces fonctions sont dans fichiers dentte (header file)


printf() dans stdio.h
sin() dans math.h

28
Fonctions en C

Extrait de stdio.h

/****************************************************************/
/* FORMATTED INPUT/OUTPUT FUNCTIONS */
/****************************************************************/
extern int fprintf(FILE *_fp, const char *_format, ...);
extern int fscanf(FILE *_fp, const char *_fmt, ...);
extern int printf(const char *_format, ...);
extern int scanf(const char *_fmt, ...);
extern int sprintf(char *_string, const char *_format, ...);
extern int sscanf(const char *_str, const char *_fmt, ...);
extern int vfprintf(FILE *_fp, const char *_format, char *_ap);
extern int vprintf(const char *_format, char *_ap);
extern int vsprintf(char *_string, const char *_format, char *_ap);
29
Fonctions en C

Bien sr, nous pouvons crire nos propres fonctions.

/* Routine de calcul du maximum */


int imax(int n, int m)
{ Dclaration de la fonction
int max;
Variable locale
if (n>m)
max = n;
else
max = m; Valeur retourne par la fonction
return max;
} 30
Fonctions en C

Fonctions sans arguments et ne retournant pas de valeur.


void fonction(void)

Fonctions avec arguments ne retournant pas de valeur.


void fonction(int x, int y, char ch)

31
Fonctions en C

Les fonctions exigent la dclaration dun prototype avant son utilisation:

/* Programme principal */
#include <stdio.h>
int imax(int,int);
main() Prototype de la fonction
{ }

int imax(int n, int m)


{ } La fonction est dfinie ici

32
Fonctions en C

La rcursivit

/* Programme principal */
#include <stdio.h>
void up_and_down(int);
main()
Niveau 1 {
Niveau 2 up_and_down(1)
Niveau 3 }
Niveau 4 void up_and_down(int n)
NIVEAU 4 {
NIVEAU 3 printf(Niveau %d\n n);
NIVEAU 2 if (n<4)
up_and_down(n+1);
NIVEAU 1 printf(NIVEAU %d\n n);
} 33
Boucle for

Initialisation
/* Boucle for */
#include <stdio.h>
#define NUMBER 22 Condition de fin
main() de boucle
{
int count, total = 0;

for(count =1; count <= NUMBER; count++, total += count)


printf(Vive le langage C !!!\n);
printf(Le total est %d\n, total);
}

Incrmentation et autres fonctions


34
Boucle while

/* Boucle while */ Initialisation


#include <stdio.h>
#define NUMBER 22
main() Condition de fin de boucle
{ (boucle tant que vrai)
int count = 1, total = 0; (boucle faite que si vrai)

while(count <= NUMBER)


{
printf(Vive le langage C !!!\n);
count++;
total += count; Incrmentation
}
printf(Le total est %d\n, total);
} 35
Boucle do while

/* Boucle do while */ Initialisation


#include <stdio.h>
#define NUMBER 22
main() Incrmentation
{
int count = 1, total = 0; Condition de fin de boucle
(boucle tant que vrai)
do
{ (boucle faite au moins 1 fois)
printf(Vive le langage C !!!\n);
count++;
total += count;
} while(count <= NUMBER);
printf(Le total est %d\n, total);
} 36
Choix multiple: switch case

/* Utilisation de switch case */


main() Paramtre de dcision
{
char choix;
Excut si choix = a
switch(choix)
{ Excut si choix = a ou b
case a : fonctionA();

case b : fonctionB(); Excut si choix = a, b ou c

case c : fonctionC();
Excut si choix non
default : erreur(3); rpertori par un case
} et si choix = a, b ou c
} 37
Effet du break

/* Utilisation de switch case */


main() Paramtre de dcision
{
char choix;
Excut si choix = a
switch(choix)
{ Excut si choix = b
case a : fonctionA(); break;

case b : fonctionB(); break;Excut si choix = c

case c : fonctionC(); break; Excut si choix non


rpertori par un case
default : erreur(3);
}
} 38
Directives

#define <name> <substitution>


#define ZERO 0

#undefine <name>
#undefine ZERO

#include <filename>
#include <math.h>

#if, #endif, #else

39
Modle de la mmoire

Le compilateur C gnre 6 sections (ou blocs) de code et de donnes


relocalisables.

40
Modle de la mmoire

Sections initialises:
.text:
code excutable.
.cinit:
table des variables globales et statiques initialises.
.const:
table des valeurs dinitialisation des constantes globales et statiques
+ les chanes de car.

41
Modle de la mmoire

Sections non-initialises:
.bss:
espace rserv pour les variables globales et statiques non
initialises.
.stack:
pile systme.
.sysmem:
pool de mmoire pour allocation dynamique (alloc, malloc, calloc).

42
Modle de la mmoire

La section .data nest pas utilise par le compilateur C (rserv pour


lassembleur).

43