Vous êtes sur la page 1sur 43

la programmation en langage C

Classification

Tous les Languages de Programmation Languages Imperatifs Programmation Procedurale Ada, Pascal, C Programmation Orientee Objets C++, Java Programmation Concurrente Ada 95 Languages Declaratifs Programmation Fonctionelle LISP, SCHEME Programmation Logique PROLOG

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.

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

Un long fleuve tranquille


Compilateur C

C fichier

Code assembleur

Assembleur Code objet

Linker Code executable

Fichier C (extension .c)


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

1
2

4 5

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; }

Anatomie

Programme typique en C
include main() fonction a() fonction b() Main() toujours la 1ere fonction appele

instructions 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

Types dinstruction en C
Dclarations des variables Assignations Fonctions Contrle

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;
if (n>m) max = n; else max = m; return max; } Variable locale

Valeur retourne par la fonction


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); Prototype de la fonction main() { }


int imax(int n, int m) { } La fonction est dfinie ici
32

Fonctions en C
La rcursivit

Niveau 1

Niveau 2 Niveau 3 Niveau 4 NIVEAU 4 NIVEAU 3 NIVEAU 2 NIVEAU 1

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

33

Boucle for

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

Initialisation
Condition de fin de boucle

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 Condition de fin de boucle main() (boucle tant que vrai) { (boucle faite que si vrai) int count = 1, total = 0; while(count <= NUMBER) { printf(Vive le langage C !!!\n); count++; total += count; } printf(Le total est %d\n, total);

Incrmentation
35

Boucle do while

/* Boucle do while */ Initialisation #include <stdio.h> #define NUMBER 22 Incrmentation main() { 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() { char choix; switch(choix) { case a : fonctionA(); case b : fonctionB(); case c : fonctionC(); default : erreur(3); } }

Paramtre de dcision
Excut si choix = a Excut si choix = a ou b Excut si choix = a, b ou c

Excut si choix non 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