chapitre2 prog dsplf3

48
2 #include <stdio.h> void main() { printf("Bonjour!\n"); } Inclusion de la bibliothèque contenant la fonction printf Point d'entré du programme première instruction Début du programme Fin du programme Introduction au Langage C

Upload: responsable-disimmtv

Post on 02-Jul-2015

923 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Chapitre2 prog dsplf3

2

#include <stdio.h>

void main()

{

printf("Bonjour!\n");

}

Inclusion de la bibliothèquecontenant la fonction printf

Point d'entré du programme

premièreinstruction

Début du programme

Fin du programme

Introduction au Langage C

Page 2: Chapitre2 prog dsplf3

3

Définition d'une variablenom:

Unique pour chaque variableCommence toujours par une lettreDifférenciation minuscule-majuscule

type:Conditionne le format de la variable en mémoirePeut être soit un type standard ou un type utilisateur

valeur:Peut évoluer pendant l'exécutioninitialisation grâce à l'opérateur d'affectation

Introduction au Langage C

Page 3: Chapitre2 prog dsplf3

4

Types de variablecharcaractèresint entiersshort [int] entiers courtslong [int] entiers longsfloat nombres décimauxdouble nombres décimaux de précision

supérieurelong double nombres décimaux encore plus

précisunsigned int entier non signé

[..] signifie facultatif

Introduction au Langage C

Page 4: Chapitre2 prog dsplf3

5

Déclaration d'une variableType nom_de_la_variable [= valeur]

Exemple:int nb;float pi = 3.14;char c = 'a';long i,j,k;double r = 6.2879821365;

Introduction au Langage C

Page 5: Chapitre2 prog dsplf3

6

Affichage de la valeur d'une variableen C

printf("format de l'affichage", variables)Exemple

int i =8;int j = 10;printf("i vaut: %d j vaut: %d \n",i,j);

float r = 6.28;printf("le rayon = %f \n",r);

Autres formats:%c caractère%lfdouble%s chaîne de caractères%e réel en notation scientifique

Introduction au Langage C

Page 6: Chapitre2 prog dsplf3

7

Introduction au Langage C

Affichage de la valeur d'une variableen C++

cout <<chaîne 1 <<variable 1<<chaîne 2 <<variable 2;

Exempleint i =8;int j = 10;

cout <<"i vaut:" << i <<"j vaut:"<<j <<'\n';

float r = 6.28;

cout<<"le rayon = "<< r <<'\n';

Page 7: Chapitre2 prog dsplf3

8

Introduction au Langage C

Instructions de baseopérateurs de base

+,-,*, / opérateurs arithmétique de base

% reste d'une division entière

== test d'égalité

!= test de différence

<, >, <=, >= test de comparaison

! négation

|| ou logique pour évaluer une expression

&& et logique pour évaluer une expression

Page 8: Chapitre2 prog dsplf3

9

Introduction au Langage C

Instructions de baseopérateurs de base

a = 2+3 valeur de a: 5r = 3%2 valeur de a: 1a = (3==3) valeur de a: 1a = (6==5) valeur de a: 0a = (2!=3) valeur de a: 1a = (6<=3) valeur de a: 0a = !1 valeur de a: 0a =((3==3) || (6<=3)) valeur de a: 1a =((3==3) && (6<=3)) valeur de a: 0

Page 9: Chapitre2 prog dsplf3

10

Introduction au Langage C

Instructions de baseboucle pour

for(expr1;expr2;expr3){

instructions}

expr1: évaluée 1 seule fois en début de boucleexpr2: évaluée avant chaque itération. Si vrai alors

les instructions de la boucle sont exécutées sinon la boucle est terminée

expr3: évaluée à la fin de chaque itération

Page 10: Chapitre2 prog dsplf3

11

Introduction au Langage C

Instructions de baseboucle pour

exemple// somme des 100 premiers entiersint i,s;s= 0for(i=0;i<=100;i = i+1){

s = s+i; / / ou s+=i;}cout <<"s = "<<s<<'\n';

Page 11: Chapitre2 prog dsplf3

12

Introduction au Langage CInstructions de base

boucle tant quewhile (expression){

instructions;}expression est évaluée avant chaque itération. Si le

résultat est vrai alors les instructions sont exécutées sinon on sort de la boucle

exemple

i =0;n = 20;while (i<n){

i++;}

Page 12: Chapitre2 prog dsplf3

13

Introduction au Langage C

Instructions de baseboucle répéter

do{

instructions;} while (expression)expression est évaluée après chaque itération. Si le

résultat est vrai alors les instructions sont exécutées sinon on sort de la boucle

exemplei =0;n = 20;do{

i++;} while(i<n)

Page 13: Chapitre2 prog dsplf3

14

Introduction au Langage C

Instructions de baseinstruction conditionnelle simple si alors

if (expression){

instructions;}expression est évaluée après chaque itération. Si le

résultat est vrai alors les instructions sont exécutées sinon on sort de la boucle.

exempleint i =5;int n;if (i<=20){

n =0;}

Page 14: Chapitre2 prog dsplf3

15

Introduction au Langage CInstructions de base

instruction conditionnelle simple si alors sinonif (expression){

instructions1;} sinon{

instrutions2;}expression est évaluée après chaque itération. Si le

résultat est vrai alors les instructions1 sont exécutées sinon on exécute l'ensemble instructions2

exempleint i =5;int n;if (i<=20)

n =0;else

n=5;

Page 15: Chapitre2 prog dsplf3

16

Introduction au Langage CInstructions de base

instruction conditionnelle multipleswitch (expression){

case valeur1:instructions1;break;

case valeur2:instructions2;break;

.

.

.case valeur3:

instruction3;break;default:

instruction4;break;} expression est évaluée. Si le résultat vaut valeur1, alors

instruction1 est exécutée et on quitte le switch, sinon si expression vaut valeur2, ……, sinon on va dans default pour exécuter instruction4.

Page 16: Chapitre2 prog dsplf3

17

Introduction au Langage CInstructions de base

instruction conditionnelle multipleexemple

int c='a';switch (c){

case 'a':file();break;

case 'b':save();break;

case 'q':quitter();break;

default:beep();break;

}

Page 17: Chapitre2 prog dsplf3

18

Introduction au Langage CInstructions de base

l'instruction breakpermet d'interrompre prématurément une boucle et de se brancher vers la première instruction n'appartenant pas à la boucleexemple:

int i;int n=20;for (i=0;i<10;i++){

if (n==31) break;n=n+2;

}cout <<n<<'\n';

Quand n vaut 31 alors la boucle est

interrompue

Page 18: Chapitre2 prog dsplf3

19

Introduction au Langage C

Les PointeursDeux manières d'utiliser une variable

Par son nom adressage directcompilateur réserve de la mémoire pour la variable

exemple:

int x =17;

Page 19: Chapitre2 prog dsplf3

20

Introduction au Langage C

Les PointeursPar son adresse adressage indirect

une variable de type pointeur contient l'adresse d'une autre variable

Le lien entre pointeur et la variable pointée est géré par le programmeur

exemple:int x =17;int * px = &x;

px pointe vers x

Page 20: Chapitre2 prog dsplf3

21

Introduction au Langage C

Les Pointeursdéclaration d'un pointeur

type * nom_du_pointeur

exempleschar *buffer;

int *pf;

float *ppi;

C'est au programmeur d'initialiser le pointeur

Page 21: Chapitre2 prog dsplf3

22

Introduction au Langage C

Les Pointeursinitialisation d'un pointeur

Il faut lui fournir l'adresse d'une variable existant en mémoireIl doit pointer vers une zone mémoire réservée par le compilateur comme étant une variable

utilisation de l'opérateur d'adressage &int f;int *pf,*pg;pf = &f;

pg =(int*)malloc(sizeof(int));..free(gf);

création du lien entre le pointeur et la

variable allocation dynamique

d'une variable de type int

création du lien entre pg et l'espace mémoire réservé

libération de l'espace réservé

Page 22: Chapitre2 prog dsplf3

23

Introduction au Langage C

Les tableaux statiques à 1 dimensiondéfinition

Ensemble de variables de même type, de même nom caractérisées par un index.

déclarationtype nom_tableau[dimension]

exemples:char buffer[80];int mat[10];

doit être une

constante

Page 23: Chapitre2 prog dsplf3

24

Introduction au Langage C

Les tableaux statiques à 1 dimensionaccès aux éléments du tableau

Nom_tableau[indice]

exemples:buffer[5] = 'c';

mat[6] = 10;

le premier élément commence à l'indice 0 !!

Les valeurs ne sont pas initialisées !!

Les débordements ne sont pas vérifiés

Page 24: Chapitre2 prog dsplf3

25

Introduction au Langage C

Les tableaux statiques à 2 dimensions et plus

définitionIl s'agit d'un tableau de tableaux

déclarationtype nom_tableau[dim1][dim2]…[dimn]

exemples:char buffer[20][80];

int mat[6][10];

char livres[100][60][80];

Page 25: Chapitre2 prog dsplf3

26

Introduction au Langage C

Les tableaux statiques à 2 dimensions et plus

accès aux élémentsnom_tableau[ind1][ind2]…[indn]

exemples:livre[30][15][20] = 'c';

mat[5][6] =13;

cout << mat[5][6]<<'\n';

Page 26: Chapitre2 prog dsplf3

27

Introduction au Langage C

Lien entre le nom d'un tableau à 1 dimension et les pointeurs

Nom du tableau = adresse du premier élément du tableau

nom_tableau[i] peut s'écrire *(nom_tableau+i)

exemples:char buffer[80];

*buffer = 'C'; accès au premier caractère

*(buffer + 5) = 'V'; accès au 6 ème caractère

Page 27: Chapitre2 prog dsplf3

28

Introduction au Langage C

Lien entre le nom d'un tableau à 2 dimension et les pointeurs

un tableau 2d est un tableau de tableau de dimension 1

On peut donc dire que le nom d'un tableau 2d est l'adresse d'un tableau d'adresse de tableaux de dimension 1On dit aussi qu'il s'agit d'un pointeur de pointeur

exemple:int TAB[6][7];int **p; déclaration d'un pointeur de pointeurp = TAB; initialisation du pointeur de pointeur

Page 28: Chapitre2 prog dsplf3

29

Introduction au Langage C

Lien entre le nom d'un tableau à 2 dimension et les pointeurs

TAB

0

1

2

3

4

5

0 1 2 3 4 5 6

tableaux de pointeurs vers des tableaux

d'entiers

tableaux d'entiers

Page 29: Chapitre2 prog dsplf3

30

Introduction au Langage C

Initialisation dynamique d'un tableauTableau une dimensionint * t;

t = (int*)malloc(20*sizeof(int));

nom du tableau

fonction de calcul

automatique de la taille d'un entier en octet

fonction d'allocation

dynamique de la mémoire

nombre d'éléments

dans le tableau

Page 30: Chapitre2 prog dsplf3

31

Introduction au Langage C

Initialisation dynamique d'un tableauTableau à deux dimensions n*m

déclaration dynamique du tableau de n pointeurs et des n tableaux à une dimension de m éléments

quelques lignes de code sont nécessaires

Page 31: Chapitre2 prog dsplf3

32

Introduction au Langage C

Initialisation dynamique d'un tableauTableau à deux dimensions n*m

int **TAB,l;TAB = (int**)malloc(n*sizeof(int*));for (l=0;l<n;l++){

TAB[l] = (int*)malloc(m*sizeof(int));}

//désallocation:

for (l=0;l<n;l++)free(TAB[l]);

free(TAB);

Page 32: Chapitre2 prog dsplf3

33

Introduction au Langage C

Les structures de donnéesintérêt

Rassembler des données hétérogènes caractérisant une entité pour en faire un type utilisateur.exemple:

point dans l'espace 3 entiers nœud d'un arbre binaire 2 adresses vers les fils, 3 entiers pour les données du nœudnoms et références des pièces mécaniques constituant une voiture 600 tableaux de caractères + 600 entiers pour la référence

Page 33: Chapitre2 prog dsplf3

34

Introduction au Langage C

Les structures de donnéesdéclarationstruct nom_structure

{

type1 nomchamps1;

type2 nomchamps2;...typeN nomchampsN;

};

Page 34: Chapitre2 prog dsplf3

35

Introduction au Langage C

Les structures de donnéesexemple et utilisation

struct pt{

int x;int y;int z;char nom;

};

main(){

struct pt p;}

Page 35: Chapitre2 prog dsplf3

36

Introduction au Langage C

Les structures de donnéessimplification de l'écriturestruct pt{

int x;int y;int z;char nom;

};typedef struct pt point;

main(){

point p;}

typedef struct pt

{

int x;int y;int z;char nom;

} point;

Notationséquivalentes

Page 36: Chapitre2 prog dsplf3

37

Introduction au Langage C

Les structures de donnéesaccès aux données

Deux cas de figureOn dispose du nom de la variable

Accès par: NomVariable.NomChamps

exemple

main()

{

point p1;

p1.x = 8; p1.y = 9; p1.z = 10;

cout <<p1.x<<p1.y<<p1.z<<'\n';

}

Page 37: Chapitre2 prog dsplf3

38

Introduction au Langage C

Les structures de donnéesaccès aux données

Deux cas de figureOn dispose de l'adresse de la variable (pointeur)

Accès par: NomVariable->NomChamps

exemple

main(){

point *pp1, p1;pp1 = &p1;pp1->x = 8; pp1->y = 9; pp1->z = 10;cout <<pp1->x<<pp1->y<<pp1->z<<'\n';

}

Page 38: Chapitre2 prog dsplf3

39

Introduction au Langage C

Les fonctionsdéfinition

Ensemble d'instructions pouvant être appelés de manière répétitive par un nom

déclarationtype arg_ret nom_f( type arg1,type arg2, …type argn){

ensemble instructions}- arg_ret est l'argument renvoyé par la fonction (instruction

return- nom_f est le nom de la fonction- arg1 …argn sont les arguments envoyés à la fonction

Page 39: Chapitre2 prog dsplf3

40

Introduction au Langage C

Les fonctionsrègles d'utilisation

L'ordre, le type et le nombre des arguments doivent être respectés lors de l'appel de la fonction

L'appel d'une fonction doit être située après sa déclaration ou celle de son prototype (voir exemple transp suivant)

Si la fonction ne renvoie rien alors préciser le type void

Page 40: Chapitre2 prog dsplf3

41

Introduction au Langage C

Les fonctionsexemple:int min(int a, int b);void main(){

cout <<min(a,b)<<'\';}int min(int a, int b){

if (a <b) return a;else return b;

}

Prototype de la fonction

min

Programme principal

Fonction min et son bloc d'instruction

s

Page 41: Chapitre2 prog dsplf3

42

Introduction au Langage C

Les fonctionsLes paramètres se passent par valeur

Recopie en mémoire des paramètres dans des paramètres temporaires.

Toute modification des paramètres dans la fonction est sans effet sur les paramètres originelles

Quand on quitte la fonction, les paramètres temporaires sont effacés de la mémoire

Recopie dans le sous programme appelant de la valeur du paramètre retourné par la fonction return.

Page 42: Chapitre2 prog dsplf3

43

Introduction au Langage C

Les fonctionsexemple:

void permutter(int a, int b){

int temp;temp = a;a = b;b= temp;

}void main(){

int x=3;int y =5;permutter(x,y);cout << "x="<<x<<" y="<<y<<'\n';

}x=3 y=5

Aucune action sur

les paramètresx et y

Page 43: Chapitre2 prog dsplf3

44

Introduction au Langage C

Les fonctionsPassage d'arguments par adresse

On passe non pas la valeur de la variable mais son adresse

Il est donc possible par les pointeurs de modifier le contenu de l'adresse, donc la variable originelle

Permet de modifier plusieurs arguments à la fois dans une fonction

Permet de passer des tableaux en argument

Page 44: Chapitre2 prog dsplf3

45

Introduction au Langage C

Les fonctionsexemple:

void permutter(int *pa, int *pb){

int temp;temp = *pa;*pa = *pb;*pb= temp;

}void main(){

int x=3;int y =5;permutter(&x,&y);cout << "x="<<x<<" y="<<y<<'\n';

}

Action sur les paramètres

x et y

x=5 y=3

Page 45: Chapitre2 prog dsplf3

46

Introduction au Langage C

Les FichiersLes fichiers sont soit:

binaires (un float sera stocké comme il est codé en mémoire , d'où gain de place mais incompatibilité entre logiciels)formaté ASCII (un float binaire sera transformé en décimal puis on écrira le caractère correspondant à chaque chiffre).

Pour accéder aux données, on le fait soit:

De manière séquentielle (on accède au contenu dans l'ordre du stockage)Par un accès direct (on peut directement accéder à n'importe quel endroit du fichier)

Page 46: Chapitre2 prog dsplf3

47

Introduction au Langage CLes Fichiers

Les FonctionsPrototypées dans stdio.h, io.h, fcntl.hOuverture d’un fichier

handle = open(char *nomfic, int mode);nomfic: pointeur vers une chaîne de caractère contenant le

chemin, le nom du fichier et l’extension du fichier

mode: variable entière dont chaque bit possède une signification particulière. Utilisation de constantes prédéfinies

O_RDONLY Ouverture pour lecture seuleO_WRONLY Ouverture pour écriture seuleO_RDWR Ouverture pour lecture et écritureO_APPEND Ajout des données à la fin du fichierO_CREAT Crée le fichier s’il n’existe pasO_BINARY Ouvre le fichier en mode Binaire

(Stockage de l’info comme elle est stockée dans la mémoire de l’ordinateur)

O_TEXT Ouvre le fichier en mode Texte. (On mémorise le code ASCII de chaque nombre ou caractère)

Page 47: Chapitre2 prog dsplf3

48

Introduction au Langage CLes Fichiers

Les FonctionsÉcriture dans un fichier

int write(int handle, void *bloc, unsigned taille);Handle: numéro entier caractérisant le fichier (renvoyé lors de l’ouverture du fichier avec la fonction open)

Bloc: pointeur vers le bloc de données

Taille: taille en octet de ce bloc

Lecture dans un fichier (idem écriture avec fonction read)

int read(int handle, void *bloc, unsigned taille);

Fermeture d’un fichierint close(int handle)

Page 48: Chapitre2 prog dsplf3

49

Introduction au Langage CLes Fichiers

Exemple// inclusion des entêtes des fonctions#include <io.h>#include <fcntl.h>#include <string.h>main(){

int handle; // numéro caractérisant le fichierchar string[40]; // tableau de caractèresint length; // Variable mémorisant la taille du bloc de donnéesint x=40; // entier x valant 40int y=102; // entier y valant 102// ouverture du fichier Monfichier.txt avec création s'il n'existe pas// Fichier ouvert en écriture en mode textehandle = open("c:\\Monfichi.txt",O_CREAT |O_RDWR |O_APPEND);

// Fonction (idem à printf) qui écrit un message formaté dans un tableau// de caractères (printf l'écrit vers l'écran)length=sprintf(string,"valeur de x=%d valeur de y=%d \n",x,y);// Ecriture de la chaîne de caractères dans le fichierwrite(handle,string,length);// Fermeture du fichierclose(handle);

}