1 la programmation en langage c. 2classification languages imperatifs: langages incluant des moyens...

43
1 la programmation en langage C la programmation en langage C

Upload: sylvestre-chambon

Post on 03-Apr-2015

106 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

1

la programmation en langage Cla programmation en langage C

Page 2: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

2

ClassificationClassification

Program m ationProcedurale

Ada, Pascal, C

Program m ationOrientee Objets

C++, Java

Program m ationConcurrente

Ada 95

LanguagesIm peratifs

Program m ationFonctionelle

LISP, SCHEME

Program m ationLogique

PROLOG

LanguagesDeclaratifs

Tous les Languagesde Program m ation

Languages Imperatifs: Langages incluant des moyens pour le programmeur d ’attribuer des valeurs a des locations en mémoire.Languages Declaratifs: Langages pour lesquels le programmeurréfléchit en terme de valeurs des fonctions et de relations entre entités diverses. Il n ’y a pas d ’attribution de valeurs aux variables.

Page 3: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

3

Caractèristique du CCaractèristique du C

Structuré

Modulaire: peut être découpé en modules qui peuvent être compilés séparement

Universel: n'est pas orienté vers un domaine d'application particulier

Typé: tout objet C doit être déclaré avant d’être utilisé

Portable: sur n'importe quel système en possession d'un compilateur C

Page 4: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

4

Un long fleuve tranquilleUn long fleuve tranquille

Cfichier

Cfichier

Compilateur C

Codeassembleur

Assembleur

Codeobjet

LinkerCode

executable

Page 5: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

/* exemple de programme C :- somme des nb de 1 à 10 et affichage de la valeur*/ #include <stdio.h> int main (void) { int somme; int i; somme = 0; for (i = 1; i <= 10; i++) { somme = somme + i; } printf ("%d\n", somme); somme = 0;}

Fichier C (extension .c)Fichier C (extension .c)

1

En C le programme principals'appelle toujours main 1

déclarations de variables de type entier (cases mémoirepouvant contenir un entier)

2

23 instruction d'affectation de

valeur à la variable somme3

4 instructions exécutéesen séquence

l'instruction entre accolades est exécutée pour les valeursde i allant de 1 à 10

4

affiche à l'écran la valeur de l'entier contenu dans somme

5

5

0

Page 6: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

6

Ecrire le programme suivant : 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;

}

Page 7: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

7

Programme typique en C

include

main()

fonction a()

fonction b()

instructions

instructions

instructions

Main() toujours la1ere fonction appelée

AnatomieAnatomie

Page 8: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

8

Commandes simples de compilationCommandes simples de compilation

Prétraitement, 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 ajoutée à l'exécutable

l'option –lm demande de lier la librairie mathématique

l'option –o pgcd demande que le résultat (l'exécutable) soit nommé pgcd au lieu de a.out

Le programme est à lancer avec ./pgcd

Page 9: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

9

Types d’instruction en CTypes d’instruction en C

Déclarations des variables

Assignations

Fonctions

Contrôle

Page 10: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

10

Types de données et de variablesTypes de données et de variables

Déclaration des variables

int y;

char yesno, ok;

int ordered = 1, onhand = 0;

float total = 43.132;

char *cptr = NULL;

Page 11: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

11

Types de données et de variablesTypes de données 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.

Page 12: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

12

Types de données et de variablesTypes de données et de variables

Type « short » ou « signed short »

en complément à 2 sur 32 bits • de -2147483648 à 2147483647.

Type « unsigned short »:

binaire sur 32 bits • de 0 à 4294967295.

Page 13: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

13

Types de données et de variablesTypes de données et de variables

Type « int » ou « signed int »

en complément à 2 sur 32 bits • de -2147483648 à 2147483647.

Type « unsigned int »:

binaire sur 32 bits • de 0 à 4294967295.

Page 14: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

14

Types de données et de variablesTypes de données et de variables

Type « long » ou « signed long »

en complément à 2 sur 32 bits • de -2147483648 à 2147483647.

Type « unsigned long »:

binaire sur 32 bits • de 0 à 4294967295.

Page 15: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

15

Types de données et de variablesTypes de données et de variables

Type « enum » (ordered list)

en complément à 2 sur 32 bits • de -2147483648 à 2147483647.

Type « float »

format TMS320C30 sur 32 bits • de 5.9x10-39 à 3.4 x1038.

Page 16: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

16

Types de données et de variablesTypes de données 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.

Page 17: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

17

Types de données et de variablesTypes de données et de variables

Type « pointer »

binaire sur 32 bits • de 0 à 0xFFFFFFFF.

Page 18: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

18

Les pointeursLes pointeurs

Un pointeur contient l’adresse d’une autre variable.

Déclaration:

float *wirelen;

Page 19: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

19

Les pointeursLes pointeurs

Utilisation:

wirelen = &wire2 ;• Contenu de wirelen = adresse de wire2

*wirelen = 30.5 ;• Même effet que wire2 = 30.5.

Page 20: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

20

Les pointeurs et les vecteursLes pointeurs et les vecteurs

Déclaration:

float *arrayptr;

float farray[30];

Utilisation:

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

Page 21: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

21

Les pointeurs et les vecteursLes pointeurs et les vecteurs

Accès à une valeur dans le vecteur:

*(arrayptr+3) équivalent à farray[3]

Balayage simple avec ++arrayptr

Page 22: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

22

Les modificateurs des classes de mémorisationLes modificateurs des classes de mémorisation

« extern »:

indique une variable ou une fonction déclarée dans un autre module.

« register »:

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

Page 23: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

23

Les modificateurs des classes de mémorisationLes modificateurs des classes de mémorisation

« const »:indique que le contenu d’une variable ne doit pas être modifiée.

« volatile »:indique qu’une variable peut voir son contenu changer à tout moment par le programme, des interruptions ou tout autre facteur extérieur. Empêche le compilateur de faire des optimisations sur cette variable.

Page 24: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

24

Opérateurs et expressionsOpérateurs et expressions

Opérateurs à un paramètre:

- change le signe de la variable

~ complément à 1

* « indirection » (pointeurs)• value = *salary; /* contenu pointé par salaire */

& adresse

++/-- incrémentation/décrémentation

sizeof()

Page 25: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

25

Opérateurs et expressionsOpérateurs et expressions

Opérateurs arithmétique:*,/,+,-% modulo

Opérateurs sur bits:<<,>> décalage à gauche ou à droite

• status = byte << 4;& et| ou^ ou exclusif

Page 26: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

26

Opérateurs et expressionsOpérateurs et expressions

Opérateurs relationnels:

<,>,<=,=>

Opérateurs d’égalité:

==, !=

Opérateurs logiques:

&& et

|| ou

Page 27: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

27

Opérateurs et expressionsOpérateurs et expressions

Opérateur conditionnel:

result = mode > 0 ? 1 : 0;

if mode>0 then result=1 else result=0.

Opérateurs d’assignation:

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

Page 28: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

28

Fonctions en CFonctions en C

Plusieurs fonctions pré-définies:

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

Le prototype de ces fonctions sont dans fichiers d’entête (header file)

printf() dans stdio.h

sin() dans math.h

Page 29: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

29

Fonctions en CFonctions 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);

Page 30: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

30

Fonctions en CFonctions en C

Bien sûr, nous pouvons écrire nos propres fonctions.

/* Routine de calcul du maximum */int imax(int n, int m) { int max; if (n>m)

max = n; else

max = m; return max;}

Déclaration de la fonction

Variable locale

Valeur retournée par la fonction

Page 31: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

31

Fonctions en CFonctions 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)

Page 32: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

32

Fonctions en CFonctions en C

Les fonctions exigent la déclaration d’un prototype avant son utilisation:

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

int imax(int n, int m){ … }

Prototype de la fonction

La fonction est définie ici

Page 33: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

33

Fonctions en CFonctions en C

La récursivité

/* 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); }

Niveau 1

Niveau 2Niveau 3

Niveau 4NIVEAU 4

NIVEAU 3NIVEAU 2

NIVEAU 1

Page 34: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

34

Boucle « for »Boucle « for »

/* Boucle for */#include <stdio.h>#define NUMBER 22main(){ 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);}

Initialisation

Condition de fin de boucle

Incrémentation et autres fonctions

Page 35: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

35

Boucle « while »Boucle « while »

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

while(count <= NUMBER) { printf(“Vive le langage C !!!\n”); count++; total += count; } printf(“Le total est %d\n”, total);}

Initialisation

Condition de fin de boucle (boucle tant que vrai)(boucle faite que si vrai)

Incrémentation

Page 36: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

36

Boucle « do while »Boucle « do while »

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

do { printf(“Vive le langage C !!!\n”); count++; total += count; } while(count <= NUMBER); printf(“Le total est %d\n”, total);}

Initialisation

Incrémentation

Condition de fin de boucle (boucle tant que vrai)(boucle faite au moins 1 fois)

Page 37: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

37

Choix multiple: « switch case »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); }}

Paramètre de décision

Exécuté si choix = a

Exécuté si choix = a ou b

Exécuté si choix = a, b ou c

Exécuté si choix non répertorié par un « case »et si choix = a, b ou c

Page 38: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

38

Effet du « break »Effet du « break »

/* Utilisation de switch case */main(){ char choix; … switch(choix) { case ‘a’ : fonctionA(); break;

case ‘b’ : fonctionB(); break;

case ‘c’ : fonctionC(); break;

default : erreur(3); }}

Paramètre de décision

Exécuté si choix = a

Exécuté si choix = b

Exécuté si choix = c

Exécuté si choix non répertorié par un « case »

Page 39: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

39

DirectivesDirectives

#define <name> <substitution>#define ZERO 0

#undefine <name>#undefine ZERO

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

#if, #endif, #else

Page 40: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

40

Modèle de la mémoireModèle de la mémoire

Le compilateur C génère 6 sections (ou blocs) de code et de données relocalisables.

Page 41: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

41

Modèle de la mémoireModèle de la mémoire

Sections initialisées:

.text:• code exécutable.

.cinit:• table des variables globales et statiques initialisées.

.const:• table des valeurs d’initialisation des constantes globales et statiques

+ les chaînes de car.

Page 42: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

42

Modèle de la mémoireModèle de la mémoire

Sections non-initialisées:

.bss:• espace réservé pour les variables globales et statiques non

initialisées.

.stack:• pile système.

.sysmem:• pool de mémoire pour allocation dynamique (alloc, malloc, calloc).

Page 43: 1 la programmation en langage C. 2Classification Languages Imperatifs: Langages incluant des moyens pour le programmeur d attribuer des valeurs a des

43

Modèle de la mémoireModèle de la mémoire

La section « .data » n’est pas utilisée par le compilateur C (réservé pour l’assembleur).