[PDF] Programmation Structurée en Langage C





Previous PDF Next PDF



Chapitre 9 Passage de paramètres

par adresse (existe aussi dans le langage C) langages C++ et Java1). 1 Java : passage par valeur pour les primitifs et par référence pour les objets.



Programmation C/C++ : Notions de base

Passage par adresse . Passage par référence . ... Les objectifs de ce cours sont de découvrir les bases du langage C/C++. Premier programme.



Algorithmes et langage C

5 COMPILATION ET EXECUTION D'UN PROGRAMME EN C CHAPITRE 3 CONCEPTS DE BASE DU LANGAGE C ... 5.2 PASSAGE PAR ADRESSE (PAR REFERENCE).



LES VARIABLES :

Dans la technique de la compilation (exemple langage C ou C++) : 3- Le passage par adresse : Il sera revu dans la fiche sur les pointeurs.



Programmation Impérative II Sémantique dun programme C++

Passage par référence. Les pointeurs Langage objets (C++ Java)



Programmation Structurée en Langage C

Le pointeur est une variable destinée à contenir une adresse mémoire. En langage C les passages de paramètres se font par valeur



Les structures et les tableaux

Par convention les noms de structures commencent par une minuscule en C struct point c[10]; ... 1.3 Passage par valeur et par référence. ? En C ...



Chapitre 7 - Programmation modulaire

On peut distinguer en langage C



COURS et TP DE LANGAGE C++

Ici le passage par référence est obligatoire puisque la fonction “ saisie ” modifie les valeurs des arguments. - Une fonction de prototype void calcul(float aa 



ALGORITHMIQUE ET PROGRAMMATION STRUCTUREE EN

langage C utilise le principe du passage des paramètres effectifs par adresse. • On utilise pour cela des variables particulières permettant de stocker une.



[PDF] Chapitre 9 Passage de paramètres

En C++ 3 types de passage de paramètres: ? par valeur (existe aussi dans les langages C et Java1) ? par adresse (existe aussi dans le langage C)



[PDF] Programmation en langage C - Centre Inria de Paris

Chaque octet de la mémoire est caractérisé par son adresse qui est un entier Deux octets contigus en mémoire ont des adresses qui diff`erent d'une unité



[PDF] Langage C - LPTHE

Langage C 8 5 4 Passage de tableau de taille inconnue `a la compilation 190 8 5 5 Exemple de passage d'un tableau 1D de taille variable



[PDF] Algorithmes et langage C - Ecole Mohammadia dingénieurs

Le langage C met en jeu deux opérateurs utilisés lors de l'usage de pointeurs Il s'agit des opérateurs et * &variable signifie adresse de variable * 



[PDF] Le Langage C

langage machine (manipulations de bits d'adresses ) ? efficace d'afficher : notre premier programme C et \n ordonne le passage à la ligne suivante



[PDF] Programmation Structurée en Langage C - Institut Fresnel

une définition précise du langage C appelée C reference manual Le pointeur est une variable destinée à contenir une adresse mémoire



[PDF] Les fonctions et les procédures en C

fonctions et procédures 11 Procédures (2/3) maprocedure c En langage C il n'existe pas d'autre Carré avec passage de paramètres par adresse



Passage par référence - CERMICS

C++ comme Pascal offre deux modes de passage des arguments à une fonction : par valeur et par référence Par contre C Java et CAML par simplicité n'en 



[PDF] Langage C et aléa séance 3 - Loria

Le moyen le plus simple de faire est que l'appelant déclare le tableau et le passe en argument à la fonction ——————————————— Exercice 3 (passage par référence)

:

Révision 2.5, 2006.

7

1.2 Présentation du langage C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8

1.3 Premier programme en C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

1.4 Langage C et programmation structurée . . . . . . . . . . . . . . . . . . . . . . . . .

10 14

2.2 Constantes associées aux types de base . . . . . . . . . . . . . . . . . . . . . . . . . .

15

2.3 Variables de base : déclaration et initialisation . . . . . . . . . . . . . . . . . . . . . .

16

2.4 Types dérivés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

2.5 Conversion de types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19 21
22
25

4.2 Opérateurs binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

27

4.3 Opérateur ternaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

30

4.4 Précédence des opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

30
33

5.2 Instructions de répétition ou d'itération . . . . . . . . . . . . . . . . . . . . . . . . .

37

5.3 Ruptures de séquence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

40
45

6.2 Passage des paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

46

6.3 Utilisation de pointeurs en paramètres . . . . . . . . . . . . . . . . . . . . . . . . . .

47
47

6.5 Retour de fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

48

6.6 Récursivité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

48

6.7 Paramètres de la fonction principale . . . . . . . . . . . . . . . . . . . . . . . . . . .

48

6.8 Étapes d'un appel de fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

49
51

7.2 Inclusion de chiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

52

7.3 Variables de précompilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

52

7.4 Dénition de macro-expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

53

7.5 Sélection de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

53
55

8.2 Visibilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

56

8.3 Prototypes des fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

59

8.4 Fonctions externes et fonctions dénies ultérieurement . . . . . . . . . . . . . . . . .

60

8.5 Déclarations et dénitions multiples . . . . . . . . . . . . . . . . . . . . . . . . . . .

60
65

9.2 Arithmétique d'adresse et tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . .

66

9.3 Tableaux multi-dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

67

9.4 Pointeurs et tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

67

9.5 Tableau de pointeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

69
71

10.2 Unions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

74

10.3 Énumérations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

76

10.4 Types synonymes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

77
80

11.2 Ouverture d'un chier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

82

11.3 Fermeture d'un chier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

84

11.4 Accès au contenu du chier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

84

11.5 Entrées-sorties formatées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

89

11.6 Déplacement dans le chier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

94

11.7 Gestion des tampons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

98

11.8 Gestion des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

99
101

12.2 Types de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

102

12.3 Fonctions mathématiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

102

12.4 Fonctions utilitaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

103

12.5 Fonctions de dates et heures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

105

12.6 Messages d'erreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

106

B Mots réservés du C 108

C Quelques pointeurs sur Internet 109

109
C.2 Librairies scientiques et graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
C.3 Sources et sites de programmeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

Liste des tableaux111

Liste des programmes 113

Bibliographie115

7

1.2 Présentation du langage C . . . . . . . . . . . . . . . . . . . . . . . . . . .

8

1.3 Premier programme en C . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

1.4 Langage C et programmation structurée . . . . . . . . . . . . . . . . . .

10

Ces deux langages partagent avec le C :

Les deux langages prédécesseurs du C avaient la particularité d'être sans type. Ils ne connaissent que

le mot machine, ce qui leur donne un degré de portabilité nul. Le langage C comble ces lacunes en

introduisant des types de données tels que l'entier ou le caractère. Les dates marquantes de l'histoire du C sont les suivantes : Jusqu'en 1987, il n'y avait pas de norme. Le livre The C programming language [RK78] contient

une dénition précise du langage C appelée C reference manual . C'est principalement de ce livre

(et de sa traduction française [KR94]) que s'inpire ce support de cours.

Le langage C a été conçu pour l'écriture de systèmes d'exploitation. Plus de90%?? ????? ?? ???????

Il est cependant susamment général pour permettre de développer des applications variées de type

scientique, ou encore pour l'accès aux bases de données (application de gestion) Le C est un langage impératif classique qui comporte

Il reète bien le savoir faire des années 70, et se situe dans la famille du langage Pascal. Son avantage

vis-à-vis du Pascal est son plus grand pragmatisme. Il autorise clairement deux styles de program-

mation, le style bidouille pour produire du code ecace et le style génie logiciel pour produire

des programmes plus lisibles, plus sûrs et plus facilement modiables.

Bien que pouvant être considéré de bas niveau, le langage C supporte les structures de base néces-

saires à la conception des applications structurées. Cette caractéristique le range dans la catégorie

des langages de haut niveau. Il est aussi un des premiers langages orant des possibilités de program-

mation modulaire. Un programme en C peut être constitué de plusieurs modules. Chaque module

Lorsque nous parlons du langage C, nous faisons référence à ce que sait faire le compilateur lui-même.

Plusieurs outils interviennent dans la transformation d'un ensemble de chiers sources, constituant

un programme, en un chier binaire exécutable, résultat de ce que l'on appelle communément, la

Le langage C se limite aux fonctionnalités qui peuvent être traduites ecacement en instructions

machine. Cette règle de fonctionnement doit permettre de détecter ce qui est fait directement par le

compilateur lui-même et ce qui ne peut pas être fait. Illustrons cette règle par quelques exemples :

à partir du code ASCII

Pour réaliser des fonctions plus compliquées, le programmeur doit écrire ses propres fonctions ou

faire appel aux fonctions pré-dénies de la bibliothèque du langage C (cf. chapitres 11 et 12). Ces

fonctions sont elles-aussi standardisées.

Prog. 1.1 Hello World!

Programme

Affiche

Hello World #include

Affiche

le message

Valeur

de retour de la fonction

5. Ce type de commentaire a été introduit avec le langage C++ et n'est pas purement C-ANSI. Il est cependant

supporté par tous les compilateurs actuels. Précisons que dans ce cas, le commentaire doit se limiter à une unique

ligne.

À sa base, le langage C n'est qu'un ensemble de bibliothèques à partir desquelles le compilateur trouve

les fonctions et les applications qui lui permettent de créer un programme exécutable. Exactement ce

que l'on fait lorsqu'on cherche dans une encyclopédie pour faire un exposé. Certaines bibliothèques

(les plus courantes) sont incluses dans le compilateur, ce qui permet à notre programme de com-

Les librairies standards du C seront présentées au fur et à mesure de leur utilisation dans ce cours.

Néanmoins, nous pouvons déjà en dire quelques mots. À l'instar de l'étudiant qui recherche dans des

livres, on peut dire que le chier .h représente l'index du livre et le chier .cpp correspondant

le contenu du chapitre concerné. Ainsi, lorsque le compilateur rencontre le mot??????? ?? ???????

Le langage C est apparu en 1972, c'est à dire en pleine période de réexion sur les langages structurés.

Il supporte donc un ensemble de fonctionnalités qui sont directement issues de ce courant de pensée.

Le langage C a été conçu et réalisé pour écrire un système d'exploitation et le logiciel de base de ce

système. Il doit être capable de faire les mêmes choses que l'assembleur. Il est assez permissif, ce qui

va à l'encontre de la programmation structurée telle que Wirth [Wir74] l'a décrite. En eet, en C, le

programmeur peut écrire des choses explicites qui sont liées à la structure de la machine. Le langage C est assez peu contraignant. Il ore des structures de programme mais il n'oblige pas

à les utiliser. En particulier, il autorise les entrées multiples et les sorties multiples dans les tâches.

La mise en page est libre, ce qui permet d'écrire des programmes dont la mise en page reète la structure. Les programmes sans mise en page sont rapidement illisibles du fait de la richesse de la syntaxe du C. Comme le montre la gure 1.1, un programme en C est constitué d'un ensemble de chiers sources destinés à être compilés séparément et à subir une édition de liens commune

Le fait de pouvoir compiler chaque chier source de manière autonome amène à concevoir des pro-

grammes de manière modulaires en regroupant, dans chaque chier source, des fonctions qui mani-

7. Les diérentes étapes de la compilation sont plus complexes que cela. Toutes ces opérations sont relativement

transparentes avec le logiciel Visual C++ de Microsoft, puisqu'il sut de cliquer sur un bouton pour réaliser l'ensemble

des étapes aboutissant à l'exécutable! (source, module) compilation fichier1.o (objet) fichier2.cpp (source, module) compilation fichier2.o (objet) edition de liens fichier.exe (executable) fichier3.cpp (source, module) compilation fichier3.o (objet) Figure 1.1 Les étapes de compilation d'un programme.

Maîtriser la programmation en langage C nécessite beaucoup de savoir faire et donc de pratique.

Elle s'apprend essentiellement à partir de ses erreurs, alors n'hésitez pas à mettre les mains dans le

cambouis ... 14 14 14

2.1.3 Le type vide :????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

15

2.1.4 Taille des types de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

15 15 15

2.2.2 Constantes avec partie décimale . . . . . . . . . . . . . . . . . . . . . . . .

16

2.2.3 Constantes caractère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16 16 17

2.3.2 Qualicatifs des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . .

17 18 18

2.4.2 Les chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . .

19 19 1. dénir le domaine de valeur de cette variable (taille en mémoire et représentation machine). 2. dénir les opérations possibles sur cette variable. 3. dénir le domaine de validité de cette variable. 4. permettre à l'environnement d'exécution du programme d'associer le nom de la variable à une adresse mémoire. 5. initialiser la variable avec une valeur compatible avec le domaine de valeur.

En langage C, une variable se caractérise à partir de son type et de sa classe mémoire. Les points

1 et 2 sont associés au type de la variable, les points 3 et 4 sont associés à la classe mémoire de la

variable. 2 [¡2147483648;2147483647]? Tableau 2.1 Longueur des types de base sur un processeur Intel i686.

Taille (octets)

Les constantes peuvent être suxées par un l ou un L pour préciser que leur type associé

Voici quelques exemples de constantes de type entier : Voici quelques constantes avec partie décimale : ?nn?? ?n?? ?n??? ?n??? Un certain nombre d'abréviations est également disponible : ?n??? ?n??? ?n??? ?n??? ?n??? ?n??? Une dénition de variable a les rôles suivants :

5. Le nombre 100 correspond au code ASCII décimale du caractère????

Une dénition de variable est l'association d'un identicateur à un type et la spécication d'une

classe mémoire.

Les deux qualicatifs peuvent être utilisés sur la même variable, spéciant que la variable n'est pas

modiée par la partie correspondante du programme mais par l'extérieur.

Nous allons examiner en détails les deux premiers types dérivées. Les tableaux et les structures seront

examinés dans les chapitres 9 et 10.

Le compilateur C vérie le type des adresses mises dans un pointeur. Le type du pointeur conditionne

les opérations arithmétiques sur ce pointeur. Les opérations les plus simples sur un pointeur sont les

suivantes :

Une fois un pointeur aecté avec l'adresse d'une variable, ce pointeur peut être utilisé pour accéder

aux cases mémoires correspondant à la variable (valeur de la variable) :?????? ? ??? ???? ?

Tableau 2.2 Chaîne de caractères constante

e s s a g e n?

Il est impossible d'utiliser les opérateurs sur les chaînes de caractères. Notamment, il est interdit de

Il est néanmoins possible d'initialiser une chaîne de caractères constante de la manière suivante :????

Tableau 2.3 Exemples d'initialisation de chaînes.

La notion de richesse d'un type est précisée dans la norme. Le type dans lequel le calcul d'une

expression à deux opérandes doit se faire est donné par les règles suivantes : 1. 2. 3. 4. sinon, appliquer la règle de promotion en entier, puis : (a) (b) (c) (d)

La règle de promotion en entier précise que lorsque des variables ou des constantes des types suivants

sont utilisées dans une expression, alors les valeurs de ces variables ou constantes sont transformées

en leur équivalent en entier avant de faire les calculs. Ceci permet d'utiliser des caractères et des

entiers courts de la même façon que des entiers. Des exemples de conversions implicites sont donnés dans le tableau 2.4.

Tableau 2.4 Exemples de conversion implicite.

li = f + i; transformé en?????? ????? ??????? transformé en????? ????? ??????

Il est possible de forcer la conversion d'une variable (ou d'une expression) dans un autre type avant

de l'utiliser par une conversion implicite. Cette opération est appelée cast . Elle se réalise de la

21
22

Bien sûr, le langage C est un langage des années 70 et l'idée de l'interaction avec l'utilisateur est celle

des systèmes centralisés à temps partagé. Un utilisateur de ce type de système est connecté via une

voie d'entrée-sortie qui permet d'échanger des caractères. Ces voies sont la plupart du temps reliées

à un télétype (écran, clavier, avec sortie optionnelle sur papier). Les caractères sont écrits sur l'écran

du terminal et lus à partir du clavier.

Les entrée-sorties en langage C ne sont pas prises en charge directement par le compilateur mais elles

Tableau

de 80
caractères

Le tableau 3.1 donne un résumé des déclarations de variables et des formats nécessaires à leurs

L'exemple 3.2 montre qu'il est possible de réaliser l'écriture ou la lecture de plusieurs variables en

utilisant une seule chaîne de caractères contenant plusieurs descriptions de formats.

Prog. 3.2 Lectures multiples avec???????

Lecture

Écriture

Format externe

scanf("%d",&i); printf("%d",i); scanf("%o",&i); printf("%o",i); scanf("%x",&i); printf("%x",i); scanf("%u",&i); printf("%u",i); scanf("%hd",&j); printf("%d",j); scanf("%ho",&j); printf("%o",j); scanf("%hx",&j); printf("%x",j); scanf("%hu",&j); printf("%u",j); scanf("%ld",&k); printf("%ld",k); scanf("%lo",&k); printf("%lo",k); scanf("%lx",&k); printf("%lx",k); scanf("%lu",&k); printf("%lu",k); scanf("%f",&l); printf("%f",l); scanf("%e",&l); printf("%e",l); printf("%g",l); scanf("%lf",&m); printf("%lf",m); scanf("%le",&m); printf("%le",m); printf("%lg",m); scanf("%Lf",&n); printf("%Lf",n); scanf("%Le",&n); printf("%Le",n); printf("%Lg",n); scanf("%c",&o); printf("%c",o); scanf("%s",p); printf("%s",p);

Voici quelques exemples :

25
26

4.1.2 Opérateur d'incrémentation et de décrémentation . . . . . . . . . . . . . . .

26

4.1.3 Opérateur de dimension . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

27

4.1.4 Non logique, plus et moins unaires . . . . . . . . . . . . . . . . . . . . . . .

27
27
27

4.2.2 Opérateurs de manipulation de bits . . . . . . . . . . . . . . . . . . . . . .

28

4.2.3 Opérateurs booléens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

28

4.2.4 Opérateur d'aectation et de succession . . . . . . . . . . . . . . . . . . . .

29
30

4.4 Précédence des opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . .

30

L'organisation de ce chapitre est guidée par le nombre d'opérandes mis en cause par l'opérateur et

non par l'utilisation des opérateurs.

Tableau 4.1 Liste des opérateurs unaires.

Utilisation

Il est possible d'utiliser les opérateurs unaires d'incrémentation et de décrémentation après ou avant

la variable. Ce qui permet de post-incrémenter, de pré-incrémenter, de post-décrémenter ou de pré-

décrémenter. Lorsque l'opérateur est préxé, l'opération est appliquée avant que la valeur correspon-

dant à l'opération ne soit calculée. Dans le cas où l'opération est post-xée, la valeur de la variable

avant l'opération est utilisée pour les autres calculs et ensuite l'opération est appliquée.

Le moins unaire inverse le signe de l'expression qui le suit. Le plus unaire sert à conrmer le signe

de l'expression.

Tableau 4.2 Liste des opérateurs binaire.

Opérateurs

Usage

Masquage

Décalage

Relation

Logique

Aectation

cf. tableau 4.3 aectation.

Succession

Comme nous avons déjà vu les opérateurs unaires, vous remarquerez l'utilisation contextuelle dans le

Le langage C permet de construire des opérateurs binaires d'aectation à partir des opérateurs

binaires arithmétiques, des opérateurs de masquage et des opérateurs de décalage, en les faisant

Tableau 4.3 Liste des opérateurs binaires d'aectation. Tableau 4.4 Exemple d'opérateurs binaires d'aectation.

Résultat

Équivalence

Lecture

110
i = i + 10 i += j 115
i = i + j i -= 5 110
i = i - 5 i -= j 105
i = i - j i *= 10 1050
i = i * 10 5250
i = i * j i /= 10 525
i = i / 10 i /= j 105
i = i / jquotesdbs_dbs44.pdfusesText_44
[PDF] passage par référence c#

[PDF] passage par valeur et par variable

[PDF] passage par référence php

[PDF] difference entre passage par valeur et passage par adresse en c

[PDF] passage par référence c++

[PDF] passage par valeur et par adresse en c

[PDF] passage par référence c++ open classroom

[PDF] acting out psychanalyse

[PDF] le salaire du sniper analyse

[PDF] le salaire du sniper texte pdf

[PDF] le salaire du sniper questionnaire

[PDF] redaction le salaire du sniper

[PDF] le salaire du sniper personnage principal

[PDF] passé composé terminaison

[PDF] passé composé cm2