Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Introduction au Langage C
LAL - Orsay
2
Structure générale d'une application C
Fichier source Fichier source Fichier source Fichier source Fichier source Fichier source Fichier source LAL - Orsay
3
Structure générale d'une application C
Fichier source Fichier source Fichier source déclaration ... fonction Fichier source Fichier source Fichier source Fichier source Fichier source LAL - Orsay
4
Structure générale d'une application C
Variables globales Fichier source float Valeur; int Tableau [100]; déclaration ... fonction Types typedef enum { faux, vrai } booleen; typedef void* Pointeur; LAL - Orsay
5
Structure générale d'une application C
fonction Fichier source int division (int v1, int v2) { /* déclarations locales */ instructions executables } déclaration ... fonction LAL - Orsay
6
Structure générale d'une application C
fonction Fichier source int addition (int v1, int v2) { int resultat; resultat = v1 + v2; return (resultat); } déclaration ... fonction LAL - Orsay
7
Structure générale d'une application C
fonction int division (int v1, int v2) { int resultat = 0; if (v2 == 0) printf ("erreur! \n"); } else resultat = v1 / v2; return (resultat); Fichier source déclaration ... fonction LAL - Orsay
8
Structure générale d'une application C
fonction Fichier source int main () { } déclaration ... fonction «main» fonction LAL - Orsay
9
Déclarations : types et variables.
Type = modèle pour les objets Variable = objet réalisé selon un des modèles LAL - Orsay
10
Déclarations : types et variables.
Type = modèle pour les objets char short int long float double types simples LAL - Orsay
11
Déclarations : types et variables.
valeur : int valeur; double nombre = ; double autreNombre = nombre * 3; float Pi = ; int largeur, hauteur; char code = 'x'; nombre : autreNombre : Pi : largeur : hauteur : code : 'x' LAL - Orsay
12
Déclarations : types et variables.
valeur : int valeur; double nombre = ; double autreNombre = nombre * 3; float Pi = ; int largeur, hauteur; char code = 'x'; nombre : autreNombre : Pi : largeur : hauteur : code : 'x' LAL - Orsay
13
Déclarations : types et variables.
valeur : int valeur; double nombre = ; double autreNombre = nombre * 3; float Pi = ; int largeur, hauteur; char code = 'x'; nombre : autreNombre : Pi : largeur : hauteur : code : 'x' LAL - Orsay
14
Déclarations : types et variables.
valeur : int valeur; double nombre = ; double autreNombre = nombre * 3; float Pi = ; int largeur, hauteur; char code = 'x'; nombre : autreNombre : Pi : largeur : hauteur : code : 'x' LAL - Orsay
15
Déclarations : types et variables.
valeur : int valeur; double nombre = ; double autreNombre = nombre * 3; float Pi = ; int largeur, hauteur; char code = 'x'; nombre : autreNombre : Pi : largeur : hauteur : code : 'x' LAL - Orsay
16
Déclarations : types et variables.
valeur : int valeur; double nombre = ; double autreNombre = nombre * 3; float Pi = ; int largeur, hauteur; char code = 'x'; nombre : autreNombre : Pi : largeur : hauteur : code : 'x' LAL - Orsay
17
Instructions exécutables.
assignations, expressions controles tests if boucles for, do, while, break fins de fonctions return blocs appels de fonctions LAL - Orsay
18
Instructions exécutables.
void f () { int nombre; float valeur; nombre = 123; valeur = nombre * 3; } assignations , expressions controles tests if boucles for, do, while, break fins de fonctions return blocs appels de fonctions LAL - Orsay
19
Instructions exécutables.
Opérateurs arithmétiques * / % += -= *= /= %= binaires << >> & | ^ ~ <<= >>= &= |= ^= ~= ! && || logiques comparaisons == >= <= != LAL - Orsay
20
Instructions exécutables.
Opérateurs arithmétiques * / % += -= *= /= %= binaires << >> & | ^ ~ <<= >>= &= |= ^= ~= ! && || logiques modulo comparaisons == >= <= != LAL - Orsay
21
Instructions exécutables.
Opérateurs arithmétiques * / % += -= *= /= %= binaires << >> & | ^ ~ <<= >>= &= |= ^= ~= ! && || logiques décalage (droite - gauche) comparaisons == >= <= != LAL - Orsay
22
Instructions exécutables.
Opérateurs arithmétiques * / % += -= *= /= %= binaires << >> & | ^ ~ <<= >>= &= |= ^= ~= ! && || logiques and - or - xor comparaisons == >= <= != LAL - Orsay
23
Instructions exécutables.
Opérateurs arithmétiques * / % += -= *= /= %= binaires << >> & | ^ ~ <<= >>= &= |= ^= ~= ! && || logiques bit-not comparaisons == >= <= != LAL - Orsay
24
Instructions exécutables.
Opérateurs arithmétiques * / % += -= *= /= %= binaires << >> & | ^ ~ <<= >>= &= |= ^= ~= ! && || logiques not comparaisons == >= <= != LAL - Orsay
25
Instructions exécutables.
Opérateurs arithmétiques * / % += -= *= /= %= binaires << >> & | ^ ~ <<= >>= &= |= ^= ~= ! && || logiques and - or comparaisons == >= <= != LAL - Orsay
26
Instructions exécutables.
Opérateurs arithmétiques * / % += -= *= /= %= binaires << >> & | ^ ~ <<= >>= &= |= ^= ~= ! && || logiques égalité comparaisons == >= <= != LAL - Orsay
27
Instructions exécutables.
void f () { int nombre; enum {negatif, positif} signe; if (nombre >= 0) signe = positif; else signe = negatif; } assignations , expressions controles tests if boucles for, do, while, break fins de fonctions return blocs appels de fonctions LAL - Orsay
28
Instructions exécutables.
void f () { int nombre; enum {negatif, nul, positif} signe; if (nombre > 0) signe = positif; else if (nombre < 0) signe = negatif; else signe = null; } assignations , expressions controles tests if boucles for, do, while, break fins de fonctions return blocs appels de fonctions LAL - Orsay
29
Instructions exécutables.
void f () { int nombre = 1; int compteur; for (compteur = 0; compteur < 10; compteur++) nombre *= 3; } assignations , expressions controles tests if boucles for, do, while, break fins de fonctions return blocs appels de fonctions LAL - Orsay
30
Instructions exécutables.
void f () { int nombre = 1; int compteur; compteur = 0; do nombre *= 3; if (nombre > 100) break; compteur++; } while (compteur < 10); } assignations , expressions controles tests if boucles for, do, while, break fins de fonctions return blocs appels de fonctions LAL - Orsay
31
Instructions exécutables.
void f () { int nombre = 1; int compteur; compteur = 0; while (compteur < 10) nombre *= 3; if (nombre > 100) break; compteur++; } assignations , expressions controles tests if boucles for, do, while, break fins de fonctions return blocs appels de fonctions LAL - Orsay
32
Instructions exécutables.
assignations , expressions controles tests if boucles for, do, while, break fins de fonctions return blocs appels de fonctions void f () { int nombre = 1; int compteur; for (compteur = 0; compteur < 10; compteur++) nombre *= 3; if (nombre > 100) return; } LAL - Orsay
33
Instructions exécutables.
int f () { int nombre = 1; int compteur; for (compteur = 0; compteur < 10; compteur++) nombre *= 3; if (nombre > 100) break; } return (nombre); assignations , expressions controles tests if boucles for, do, while, break fins de fonctions return blocs appels de fonctions LAL - Orsay
34
Instructions exécutables.
void f () { int nombre; enum {negatif, nul, positif} signe; if (nombre > 0) signe = positif; else if (nombre < 0) signe = negatif; nombre = - nombre; } else signe = negatif; assignations , expressions controles tests if boucles for, do, while, break fins de fonctions return blocs appels de fonctions LAL - Orsay
35
Instructions exécutables.
assignations , expressions controles tests if boucles for, do, while, break fins de fonctions return blocs appels de fonctions void f () { int nombre = 1; int compteur; for (compteur = 0; compteur < 10; compteur++) nombre *= 3; if (nombre > 100) break; } LAL - Orsay
36
Instructions exécutables.
assignations , expressions controles tests if boucles for, do, while, break fins de fonctions return blocs appels de fonctions int addition (int val1, int val2); void f () { int nombre; nombre = addition (12, 34); } LAL - Orsay
37
Le prototypage des fonctions.
Permet de déclarer les fonctions : leur type le type de leurs arguments Necessaire avant toute utilisation des fonctions. Exemple : int affiche (char* message); LAL - Orsay
38
Instructions exécutables.
double sin (double angle); void f () { float valeur; valeur = sin (PI/6); } assignations , expressions controles tests if boucles for, do, while, break fins de fonctions return blocs appels de fonctions LAL - Orsay
39
Instructions exécutables.
void* get_next_item (); void f () { void* reference; reference = get_next_item (); } assignations , expressions controles tests if boucles for, do, while, break fins de fonctions return blocs appels de fonctions LAL - Orsay
40
Instructions exécutables.
void start (int parametre); void stop (); void f () { start (10); stop (); } assignations , expressions controles tests if boucles for, do, while, break fins de fonctions return blocs appels de fonctions LAL - Orsay
41
Visibilité des définitions.
Définitions globales : visibles (accessibles) à partir des autres fichiers. Fichier source déclaration ... fonction LAL - Orsay
42
Visibilité des définitions.
Définitions locales : Les arguments des fonctions. Tout ce qui est défini à l'interieur d'un bloc. int addition (int v1, int v2) { int resultat; resultat = v1 + v2; if (resultat) int temp; temp = -resultat; resultat = temp; } return (resultat); LAL - Orsay
43
Déclarations : types et variables.
Type = modèle pour les objets types simples : énumérations enum booleen { faux, vrai } LAL - Orsay
44
Déclarations : types et variables.
valeur : enum booleen { faux, vrai } valeur; enum bleu, blanc, rouge } couleur = rouge; couleur : rouge LAL - Orsay
45
Déclarations : types et variables.
Type = modèle pour les objets types complexes : les tableaux int x[100]; char string[80]; float valeur[10][5] LAL - Orsay
46
Déclarations : types et variables.
void f() { float valeur[2][5]; valeur[1][2] = 10; } valeur [0][0]: valeur [1][0]: valeur [0][1]: valeur [1][1]: valeur [0][2]: valeur [1][2]: valeur [0][3]: valeur [1][3]: valeur [0][4]: valeur [1][4]: LAL - Orsay
47
Déclarations : types et variables.
void f() { float valeur[2][5]; valeur[1][2] = 10; } valeur [0][0]: valeur [1][0]: valeur [0][1]: valeur [1][1]: valeur [0][2]: valeur [1][2]: 10 valeur [0][3]: valeur [1][3]: valeur [0][4]: valeur [1][4]: LAL - Orsay
48
Déclarations : types et variables.
Type = modèle pour les objets types complexes : les structures struct point { int x; int y; } LAL - Orsay
49
Déclarations : types et variables.
sommet.x : 12 sommet.y : 23 struct Point { int x; int y; } sommet = {12, 23}; LAL - Orsay
50
Déclarations : types et variables.
sommet.x : 12 sommet.y : 23 struct Point { int x; int y; } sommet = {12, 23}; p[0].x : p[0].y : p[1].x : p[1].y : p[2].x : p[2].y : p[3].x : p[3].y : struct Point p[4]; LAL - Orsay
51
Déclarations : types et variables.
image [0].x : image [0].y : struct Point { int x; int y; } image[100]; struct float hauteur; float largeur; enum couleur fond; } rectangle; image [1].x : image [1].y : image [2].x : image [2].y : ... rectangle.hauteur : rectangle.largeur : rectangle.fond : LAL - Orsay
52
Déclarations : types et variables.
carre.sommet[0].x : carre.sommet[0].y : carre.sommet[1].x : carre.sommet[1].y : carre.sommet[2].x : carre.sommet[2].y : carre.sommet[3].x : carre.sommet[3].y : carre.fond : struct quadrilatere { struct Point sommet[4]; enum couleur fond; } rectangle, carre; LAL - Orsay
53
Déclarations : types et variables.
Type = modèle pour les objets les pointeurs char* double* enum booleen* struct Point* void* LAL - Orsay
54
Les pointeurs en C. valeur : float valeur; void* pointeur; pointeur :
LAL - Orsay
55
Les pointeurs en C. valeur : void f () { float valeur; void* pointeur;
pointeur = &valeur; } pointeur : LAL - Orsay
56
Les pointeurs en C. nombre : void f () valeur : { int nombre;
float valeur; void* pointeur; pointeur = &valeur; } valeur : pointeur : LAL - Orsay
57
Les pointeurs en C. nombre : void f () { int nombre; float valeur;
void* pointeur; pointeur = &valeur; pointeur = &nombre; } valeur : pointeur : LAL - Orsay
58
Les pointeurs en C. void f () { int nombre; int* p1 = &nombre;
} Ecritures équivalentes LAL - Orsay
59
Allocation de mémoire en C : malloc et free.
typedef struct { int x, y; } Point; main () Point* p1; p1 = (Point*) malloc (sizeof(Point)); free (p1); } Définition du type Point. LAL - Orsay
60
Allocation de mémoire en C : malloc et free.
typedef struct { int x, y; } Point; main () Point* p1; Point* p2; p1 = (Point*) malloc (sizeof(Point)); free (p1); } Déclaration de deux pointeurs sur des types Point. LAL - Orsay
61
Allocation de mémoire en C : malloc et free.
typedef struct { int x, y; } Point; main () Point* p1; p1 = (Point*) malloc (sizeof(Point)); free (p1); } Allocation d'une structure Point : p1 la désigne. LAL - Orsay
62
Allocation de mémoire en C : malloc et free.
typedef struct { int x, y; } Point; main () Point* p1; p1 = (Point*) malloc (sizeof(Point)); free (p1); } Libération de la mémoire. p1 ne désigne plus rien. LAL - Orsay
63
Allocation de mémoire en C : malloc et free.
typedef struct { int x, y; } Point; main () Point* p1; Point* p2; p1 = (Point*) malloc (sizeof(Point)); free (p1); } p1 : p2 : LAL - Orsay
64
Allocation de mémoire en C : malloc et free.
typedef struct { int x, y; } Point; main () Point* p1; Point* p2; p1 = (Point*) malloc (sizeof(Point)); free (p1); } p1 : 0x p2 : p1->x : p1->y : LAL - Orsay
65
Allocation de mémoire en C : malloc et free.
typedef struct { int x, y; } Point; main () Point* p1; Point* p2; p1 = (Point*) malloc (sizeof(Point)); free (p1); } p1 : 0x p2 : LAL - Orsay
66
Allocation de mémoire en C : malloc et free.
typedef struct { int x, y; } Point; main () Point* p1; p1 = (Point*) malloc (sizeof(Point)); p1->x = 10; p1->y = p1->x * 2; free (p1); } LAL - Orsay
67
Les tableaux de pointeurs
Des objets alloués en mémoire : main () { Point* p; p = (Point*) malloc (sizeof(Point)); } LAL - Orsay
68
Les tableaux de pointeurs
main () { Point* p[10]; int i; for (i = 0; i < 10; i++) p[i] = NULL; } LAL - Orsay
69
Les tableaux de pointeurs
main () { Point* p[10]; p[0] = malloc (sizeof(Point)); } LAL - Orsay
70
Les tableaux de pointeurs
main () { Point* p[10]; p[0] = malloc(sizeof(Point)); p[1] = malloc(sizeof(Point)); } LAL - Orsay
71
Des ensembles : tableaux et listes.
#include "list.h" main () { List liste; liste = ListCreate (); } liste : .first : .last : LAL - Orsay
72
Des ensembles : tableaux et listes.
#include "list.h" main () { List liste; Point* p; liste = ListCreate (); p = malloc (sizeof(Point)); } liste : .first : .last : p : LAL - Orsay
73
Des ensembles : tableaux et listes.
#include "list.h" main () { List liste; Point* p; liste = ListCreate (); p = malloc (sizeof(Point)); ListAddEntry (liste, p); } liste : .first : .last : p : .reference : LAL - Orsay
74
Des ensembles : tableaux et listes.
#include "list.h" main () { List liste; Point* p; liste = ListCreate (); p = malloc (sizeof(Point)); ListAddEntry (liste, p); } liste : .first : .last : p : .reference : LAL - Orsay
75
Des ensembles : tableaux et listes.
#include "list.h" main () { List liste; Point* p; liste = ListCreate (); p = malloc (sizeof(Point)); ListAddEntry (liste, p); } liste : .first : .last : p : .reference : LAL - Orsay
76
Des ensembles : tableaux et listes.
#include "list.h" main () { List liste; Point* p; liste = ListCreate (); p = malloc (sizeof(Point)); ListAddEntry (liste, p); } liste : .first : .last : p : .reference : .reference : LAL - Orsay
77
Des ensembles : tableaux et listes.
#include "list.h" main () { List liste; Point* p; liste = ListCreate (); p = malloc (sizeof(Point)); ListAddEntry (liste, p); } liste : .first : .last : p : .reference : .reference : LAL - Orsay
78
Des ensembles : tableaux et listes.
#include "list.h" main () { List liste; Point* p; int i; liste = ListCreate (); for (i=0; i < 4; i++) p = malloc (sizeof(Point)); ListAddEntry (liste, p); } liste : .first : .last : .reference : .reference : .reference : .reference : LAL - Orsay
79
Des ensembles : tableaux et listes.
.first : .last : current : Chaînage dans les listes. next : .reference : next : .reference : next : .reference : next : 0 .reference : LAL - Orsay
80
Des ensembles : tableaux et listes.
.first : .last : current : main () { List liste; Point* p; liste = ...; ListStartLoop (liste); } next : .reference : next : .reference : next : .reference : next : 0 .reference : LAL - Orsay
81
Des ensembles : tableaux et listes.
.first : .last : current : main () { List liste; Point* p; liste = ...; ListStartLoop (liste); while (( p = ListGetNextEntry(liste) )) p->x = 0; p->y = 10; } next : .reference : next : .reference : next : .reference : next : 0 .reference : LAL - Orsay
82
Une liste multiforme. p : liste : main () { List liste; Point* p;
Ligne* l; liste = ListCreate (); p = malloc (sizeof(Point)); ListAddEntry (liste, p); l = malloc (sizeof(Ligne)); ListAddEntry (liste, l); } .first : .last : l : .reference : .reference : LAL - Orsay
83
Une liste multiforme : problème
Polygone Point Ligne Ligne x1, y1 x2, y2 x1, y1 x2, y2 x, y x1, y1 x2, y2 ... xn, yn LAL - Orsay
84
Une liste multiforme : construction
.ref .ref .ref .ref Polygone Point Ligne Ligne x1, y1 x2, y2 x1, y1 x2, y2 x, y x1, y1 x2, y2 ... xn, yn LAL - Orsay
85
Une liste multiforme. .first .last .next .next .next .next .ref .ref
Polygone Point Ligne Ligne x1, y1 x2, y2 x1, y1 x2, y2 x, y x1, y1 x2, y2 ... xn, yn LAL - Orsay
86
Une liste multiforme. .first .last .next .next .next .next .ref .ref
? ? ? ? LAL - Orsay
87
Une liste multiforme. .first .last .next .next .next .next .ref .ref
.type: .type: .type: .type: LAL - Orsay
88
Une liste multiforme. .first .last .next .next .next .next .ref .ref
.type: Polygone .x1, .y1: .x2, .y2: ... .xn, .yn: .type: Point .x, .y: .type: Ligne .x1, .y1: .x2, .y2: .type: Ligne .x1, .y1: .x2, .y2: LAL - Orsay
89
Une liste multiforme. .first .last .next .next .next .next .ref .ref
.type: Polygone .x1, .y1: .x2, .y2: ... .xn, .yn: .type: Point .x, .y: .type: Ligne .x1, .y1: .x2, .y2: .type: Ligne .x1, .y1: .x2, .y2: LAL - Orsay
90
Une liste multiforme. .type: .type: .type: .type: .x1, .y1: .x2, .y2:
... .xn, .yn: .x, .y: .x1, .y1: .x2, .y2: .x1, .y1: .x2, .y2: LAL - Orsay
91
Une liste multiforme. .type: .figure: .x1, .y1: .x2, .y2: ...
.xn, .yn: .figure: .x, .y: .figure: .x1, .y1: .x2, .y2: .figure: .x1, .y1: .x2, .y2: LAL - Orsay
92
Une liste dans une structure.
.figure: FigurePolygone .x1, .y1: .x2, .y2: ... .xn, .yn: main () { Polygone* poly; poly = malloc (sizeof(Polygone)); poly->figure.type = FigurePolygone; poly->x1 = ...; etc... } LAL - Orsay
93
Une liste dans une structure.
.figure: FigurePolygone .lignes: main () { Polygone* poly; poly = malloc (sizeof(Polygone)); poly->figure.ident = FigurePolygone; poly->lignes = ListeCreate (); } .first .last LAL - Orsay
94
Une liste dans une structure.
main () { Polygone* poly; Ligne* ligne; poly = malloc (sizeof(Polygone)); poly->figure.ident = FigurePolygone; poly->lignes = ListeCreate (); ligne = malloc (sizeof(Ligne)); ListAddEntry (poly->lignes, ligne); } .figure: FigurePolygone .lignes: .first .last .figure: Ligne .x1, .y1: .x2, .y2: LAL - Orsay
95
Une liste dans une structure.
main () { Polygone* poly; Ligne* ligne; poly = malloc (sizeof(Polygone)); poly->figure.ident = FigurePolygone; poly->lignes = ListeCreate (); ligne = malloc (sizeof(Ligne)); ListAddEntry (poly->lignes, ligne); } .figure: FigurePolygone .lignes: .first .last .figure: Ligne .x1, .y1: .x2, .y2: .figure: Ligne .x1, .y1: .x2, .y2: LAL - Orsay
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.