Vous êtes sur la page 1sur 85

Techniques de programmation!

M. Nassar

Ecole Nationale Supérieure d’Informatique


et d’Analyse des Systèmes
- Rabat -
Contenu du cours

q Découvrir le langage C
q Eléments de programmation
q Structures de contrôle
q Les tableaux
q Les structures
q Gestion dynamique de la mémoire
q Programmation modulaire : les fonctions
q  Le préprocesseur et la compilation
conditionnelle
q La compilation séparée
2
Section 1
Découvrir le langage C

Présentation du langage C
Forme Générale d'un programme
Compilation d'un programme
Types de données de base

3
Découvrir le langage C Présentation du langage C
Introduction

•  Développé par Denis Ritchie au début des années 70 pour travailler


sur les toutes premières versions du système d’exploitation UNIX.

•  Le langage C peut remplacer l’assembleur dans le domaine de la


programmation système.

•  C peut être utilisé pour développer des applications ou des logiciels


de base.

C’est aussi la base incontournable pour passer à la programmation


orienté objet avec C++.

4
Découvrir le langage C Présentation du langage C
Eléments de base

C possède les éléments de base de la programmation :

⇒ Procédures

⇒ Fonctions

⇒ Blocs

⇒ Constantes et Variables

⇒ Structures de contrôle

⇒  …
5
Découvrir le langage C Forme générale d ’un programme
Exemple

Bonjour.c

#include <stdio.h>
main()
{
printf (ʺ″ LANGAGE C \nBonjour… ! ʺ″ );
}

« Bonjour.C » présenté ci-dessous, permet d’afficher en


deux lignes sur l’écran le message d’accueil.
LANGAGE C
Bonjour… !

6
Forme générale d ’un programme
Structure d ’un programme

⇒ Fonctions

⇒ Fichiers #include

⇒ Bloc d ’instructions

⇒ Macro-instruction

7
Découvrir le langage C Forme générale d ’un programme
Structure d ’un programme /
Fichiers #include

•  Généralement, les programmes C font appel à des fonctions


externes pour réaliser des opérations d’entrée-sortie ou
autres.

•  Le programmeur doit informer le compilateur sur


l’existence de ces fonctions en incluant le fichier en-tête
approprié : #include <fichier.h>

•  La bibliothèque la plus utilisée est stdio.h qui contient


l’ensemble des fonctions standard d’entrée-sortie parmi
lesquelles on trouve printf.

8
Forme générale d ’un programme
Découvrir le langage C
Structure d ’un programme / Fonction

• Un programme source C se présente sous la forme d’une ou


de plusieurs fonctions.

• Chaque fonction comporte un ou plusieurs blocs


d’instructions pour réaliser une tâche précise.

• Chaque fonction peut faire appel à une autre fonction du


programme.

• La fonction principale de tout programme C s’appelle


main().

9
Découvrir le langage C Forme générale d ’un programme
Structure d ’un programme / Bloc d ’instruction

• Le corps d’un bloc débute par le signe { et se termine par }

• Le concept structure les programmes complexes.

• Les blocs peuvent être emboîtables, conditionnels ou


inconditionnels.

• Les blocs contiennent soit des instructions simples, soit des


appels à d’autres fonctions ou à des sous-programmes
externes.

10
Découvrir le langage C Forma générale d ’un programme
Instruction / Macro-instruction

•  Une instruction est un mot clé permettant d’exécuter une


tâche bien donnée.

•  C permet aussi d’utiliser des macro-instructions traitées


par un pré-processeur au moment même de la compilation
du programme.

•  Une macro-instruction peut par exemple remplacer une


chaîne de caractères, inclure un fichier de code, réaliser
une compilation conditionnelle
11
Découvrir le langage C Forma générale d ’un programme
Commentaires

•  Les commentaires incorporés dans le programme sont


placés entre les délimiteurs /* et */ , ou bien après //

•  Toute instruction C se termine par un point-virgule


excepté les déclarations de fonctions, les accolades et les
macro-instructions du pré-processeur.

12
Section 2
Eléments de programmation
Constantes et Variables
Fonction printf, Fonction scanf
Expressions, Opérateurs
Conversion de types

13
Eléments de programmation Mots réservés

Mots clés prédéfinis en C : à éviter comme identificateurs

Auto else long switch


Break enum register typedef
Case extern return union
Char float short unsigned
Const for signed void
Default goto sizeof volatile
Do if static while
Double int struct

14
Eléments de programmation Constantes
Constantes entières

Constante : donnée inchangée qui ne peut varier pendant


l’exécution d’un programme.
Déclaration : #define Max 100

Constantes entières

Une constante entière se présente sous forme décimale, octale


ou hexadécimale
Décimal…………....Octal…………..Hexadécimal
Entier………….….25…………………...031……………..….0x19
120……..……………0170………….……0x78
Long………………25L………..………...031L………………0x19L
120L………..……….0170L……………...0x78L
15
Eléments de programmation Constantes
Constantes réelles

Une constante réelle représente un nombre à virgule


flottante (de type float ou double) sous forme décimale ou
exponentielle.

123. -123 123.45 .123 .00123E+2 123.456E-2

00123 E+2 <===> 0.00123*102


123.47 E-2 <===> 123.47/10-2

16
Eléments de programmation Constantes
Constantes caractères

Une constante caractère (de type char) peut représenter tout


caractère mis entre apostrophes :
'R' 'r' 'i' '£' ': ’

Les constantes caractères sont codées en interne de


l’ordinateur par leurs valeurs ASCII.
'A' est représenté par la valeur 65 ;
'B ’ // par la valeur 66 ;
etc....

17
Eléments de programmation Constantes
Séquences d ’échappement

Caractère de contrôle non-imprimable : composé d ’un


antislash suivi d’une suite de caractères.

Séquence………………Effet

\n……………………….nouvelle ligne (new line)

\r………………………..retour chariot (carriage return)

\t………………………..tabulation horizontale

\v……………………….tabulation verticale
18
Eléments de programmation Constantes
Séquences d ’échappement

\a……………………….signal sonore (alarme)

\b……………………….retour-arrière d’un caractère (backspace)

\f……………………….saut de page (from feed)

\’……………………….affiche une apostrophe

\’’………………………affiche un guillemet

\\……………………….affiche une barre oblique inverse

\ddd………………….affiche un code ASCII en représentation octale

\xddd…………………idem en représentation hexadécimale


19
Eléments de programmation Variables
Syntaxe

Variable :
• emplacement mémoire contenant une donnée modifiable,
• caractérisée par un nom identificateur et un type.

Syntaxe :
type nomvar1, nomvar2, nomvar3,… ;
•  type représente un type de donnée tel que char, int, short, long,
float ou double

•  le nom d’une variable:


- composé de lettres, de chiffres du caractère souligné,
- ne doit pas commencer par un chiffre
•  Le compilateur différencie les majuscules et les minuscules dans les
noms des variables
20
Eléments de programmation Variables
Exemple

Char L ;

int A, B, iNbre_1 ;

float X, Y, fNbre1 ;

21
Eléments de programmation Variables
Affectation

Opérateur d’affectation =

L’instruction
a = 16 ;
permet d’affecter la valeur entière 16 à la valeur a déjà
définie

Dans une affectation le type de la valeur affectée doit


correspondre au type de la variable définie.

Une variable peut être initialisée lors de sa définition :


int a = 16, b =1, iNbre_1 =64 ;
22
Eléments de programmation Entrées/sorties
Bibliothèque de fonction E/S

Le langage C dispose d’un bibliothèque de fonctions


(stdio.h) pour gérer les entrées-sorties.

Il suffit d’inclure, au début du programme, l’instruction pré-


processeur :

#include <stdio.h>

23
Eléments de programmation
Entrées/sorties
Fonction de sortie printf : syntaxe

printf est la fonction qui permet d’afficher des résultats à


l’écran.

Syntaxe
printf(" chaîne de formatage ", [argument1, argument2,…]) ;

La chaîne de formatage : format d’affichage du résultat

24
Eléments de programmation
Entrées/sorties
Fonction printf : codes de formats

•  Les codes de formats permettent d’interpréter ou convertir


les données des arguments à afficher.
•  Ces codes doivent correspondre en nombre et en type aux
arguments dans la fonction printf.

%d ou %i……………..Nombre entier sous forme décimale

%u……….………………Nombre Entier non signés

%o………….……………Nombre Entier sous forme Octal

%x ou %X……..…....Nombre Entier sous forme hexadécimal

%c…………………….…Caractère ASCII
25
Eléments de programmation
Entrées/sorties
Fonction printf : codes de formats

%f…………….Nombre à virgule flottante sous forme exponentielle

%e ou % E …….Nombre à virgule flottante sous forme exponentielle

%g ou % G…Nombre à virgule flottante sous forme décimale ou


exponentielle si l’exposant est inférieur à - 4 ou supérieur à la précision
de la valeur.

%s………………Chaîne de caractères

%p………………Pointeur: adresse mémoire d’une autre donnée

26
Eléments de programmation Entrées/sorties
Fonction printf : Exemple

#include<stdio.h>
main()
{
printf(" Génie ") ;
printf(" Logiciel\n " ) ;
printf(" Formation Langage C\n\n " ) ;
printf(" Les caractères %c et %c ont les codes ASCII :%d et %d \n\n ”,
'A', 'a', 'A', 'a') ;
printf(" %f est un nombre réel \n\ n" , 1.234) ;
printf (" Réels en notation exponentielle :%e %e %e \n " , 123.4,
0.00123, 0.01234e5, 123.40e-6) ;
printf (" %s " , " Fin des exemples " );
}
27
Eléments de programmation
Entrées/sorties
Fonction d ’entrée scanf :syntaxe

scanf est la fonction qui permet de lire les données saisies à


partir du clavier.

Syntaxe :
scanf (" codes formats ", [ adresse1, adresse 2, adresse3,….]) ;

Pour faire référence à l’adresse d’une variable, utiliser


l’opérateur & devant l’identificateur de cette variable.

Mêmes codes formats que printf.

28
Eléments de programmation
Entrées/sorties
Fonction scanf :exemple

#include<stdio.h>
main()
{
char lettre ;
int Nbre1, Nbre2 ;
float Nbre3 ;

printf(" Taper une lettre : ") ;


scanf(" %c", &lettre) ;
printf(" Vous avez taper la lettre %c\n ", lettre) ;
printf(" Taper trois nombres : ") ;
scanf(" %d %d %f ", & Nbre1, &Nbre2, &Nbre3) ;
printf ("Les nombres entrés sont : \n \t %d \t %d \t %f ", Nbre1, Nbre2,
Nbre3) ;
}

29
Eléments de programmation
Entrées/sorties
Fonctions getchar/putchar

Saisie ou affichage non formaté d’un seul caractère :


getchar () et putchar ().
#include <stdio.h>
main()
{
char x ;

printf(" Taper une lettre et valider par entrée : ") ;


x=getchar() ;
printf("Vous avez tapé la lettre ") ;
putchar(x) ;
}

30
Eléments de programmation
Expressions
Généralités

Expression : représentation de valeur mettant en jeu des opérations et des


opérandes : constantes, variables, éléments tableau, etc....

Le type de la valeur de l’expression dépend des types des opérandes mis


en jeu..

Une expression peut être utilisée en tant que valeur dans une instruction
ou autre expression.
int val=6 ;
/* les instructions suivantes sont équivalentes */
printf(" %d ", val=6) ;
printf(" %d ", val) ;
printf(" %d ", 6) ;

31
Eléments de programmation
Expressions
Expressions d ’affectation

Affectation Expressions Opération


équivalente
x++ x=x+1 Incrémentation

x-- x=x-1 Décrémentation

x=y x=y Affectation simple

x+=y x=x+y Affectation avec addition

x-=y x=x-y Affectation avec soustraction

x*=y x=x*y Affectation avec multiplication

x/=y x=x/y Affectation avec division


32
Section 3
Structures de contrôle
Instruction if
Instruction switch
La boucle while
La boucle do … while
La boucle for
Instructions break et continue
Structures de contrôle Instruction if-else
Syntaxe et définition

if (expression)
instruction
else
instruction

instruction peut être une instruction ou un bloc


d ’instructions entre accolades pouvant être composées à
leur tour de if …else

34
Structures de contrôle
Instruction if
Syntaxe et définition

début

faux
expression if (i>0)
printf("Positif\n");
vrai

Instruction i
...
Instruction n

fin

35
Structures de contrôle
Instruction if-else
Syntaxe et définition

début

vrai expression faux if (i>0)


{
printf("Positif\n");
i = 1;
Instruction i Instruction i }
else
{
Instruction n Instruction n printf("Négatif\n");
i = 0;
}

fin
36
Structures de contrôle
Instruction if-else
Exemples
main()
{
int i, j;

printf("i et j ?\n");
scanf("%d&d ",&i, &j);

if (i>j)
printf( "i est plus grand que j \n");
else
printf("i est plus petit ou égal à j\n");
if (i>j)
{
printf( "i est plus grand ");
printf(" que j \n ");
}
else
printf("i est plus petit ou égal à j\n");

}
37
Structures de contrôle Instruction if-else
Exemples

main()
{
int i, j;
printf("i et j ?\n");
scanf("%d %d ",&i, &j);

if (i>j)
{
printf( "i est plus grand ");
printf(" que j \n ");
}
else
{
printf("i est plus petit ");
printf("ou égal à j\n");
}
}
38
Structures de contrôle
Instruction if-else
Exercices

Exercice 1 :
Écrire un programme C demandant à l ’utilisateur de deviner une lettre.
Ce programme devra indiquer si la réponse donnée est correcte ou non.
La bonne réponse est ‘ a ’ ou ‘ A ’.

Exercice 2 :
Écrire un programme C où l ’utilisateur saisit un caractère, le programme teste
s ’il s ’agit d ’une lettre majuscule, si oui il renvoie cette lettre en minuscule,
sinon il renvoie un message d ’erreur.

39
Structures de contrôle
Instruction switch
Syntaxe et définition

L ’instruction switch réalise un aiguillage vers différentes instructions


en fonction de la valeur d’une expression de contrôle.

switch (expression)
{
case expression1: instructions
case expression2: instructions

default : instructions
}

40
Structures de contrôle Instruction switch
Syntaxe et définition

début

Variable

Valeur1 Valeur2 valeur3

Instructions Instructions Instructions Instructions

fin
41
Structures de contrôle
Instruction switch
instruction break

• L ’instruction break provoque la sortie immédiate du


switch

• Il est plus que conseillé d ’utiliser systématiquement


break; à la fin de chaque séquence d ’instruction. Sinon,
le test se poursuivera (généralement inutilement)

•  Les instructions de chaque case ne sont pas des


instructions composées. Il n ’y a pas d ’accolades

42
Structures de contrôle
Instruction switch
Exemples

main()
{
int i;
printf("i ?\n");
scanf(%d,&i);

switch(i)
{
case 0: printf("la valeur est 0\n");

case 1:
case 2: printf ("la valeur est 1 ou 2\n");
break;
case 3: break;
default: printf ("autre valeur\n");
}
}
43
Structures de contrôle
Instruction switch
Exercice

Exercice1 :
Même exercice que celui de if-else, en utilisant cette fois-ci l’instruction
switch.

44
Structures de contrôle
Boucle while
Syntaxe et définition

while (expression)
instruction

instruction peut être une instruction ou un bloc d ’instructions


entre accolades.

45
Structures de contrôle
Boucle while
Syntaxe et définition

• L’instruction simple ou composée est


exécutée tant que la condition a pour
oui Condition non valeur VRAI (différente de 0).
vraie
• Si l’expression de la condition vaut
dès l’entrée, l’instruction n’est jamais
effectuée.
Bloc d’instructions

Suite du programme

46
Structures de contrôle
Boucle while
Exemple

main() main()
{ {
int i = 2, j = 7; int i = 2, j = 3;

while (i<j) while (!i)


{ printf("i: %d\n", i);
printf("i: %d et j: %d\n", i,j); }
i++;
j--;
}
}

Boucle limitée Boucle infinie

47
Structures de contrôle
Boucle while
Exercice

Exercice 1 :
Reprendre l ’exercice des devinettes (if-else, switch), sauf que cette fois-
ci, l ’utilisateur a le droit d ’essayer jusqu ’à ce que sa réponse soit
correcte.

Exercice 2 :
Saisir une suite de caractères, compter et afficher le nombre de lettres e et
d’espaces.

48
Structures de contrôle
Boucle do ...while
Syntaxe et définition

do
instructions
while (condition);

•  instruction peut être une instruction ou un bloc


d ’instructions entre accolades.
•  Noter le point virgule à la fin de chaque instruction :
obligatoire

49
Structures de contrôle
Boucle do ...while
Syntaxe et définition

• L’instruction simple ou composée


Bloc d’instructions est exécutée jusqu’à ce que la
condition prenne la valeur (FAUX)

oui Condition non


vraie

Suite du programme

50
Structures de contrôle
Boucle do ...while
Exemples

main()
{
int i = 2, j = 0;

do
{
printf("i :%d et j: %d\n", i,j);
i++;
j--;
}
while (i<j);
}
51
Structures de contrôle
Boucle do ...while
Exercice

Exercice 1 :
Même exercice1 que while, en utilisant cette fois la boucle do-
while.

Exercice 2 :
Écrire un programme affichant les multiples de 2. La sortie se fait
soit par la fonction kbhit, ou par une temporisation (de valeur égale
à 5000).
La fonction kbhit appartient à la bibliothèque conio.h. Cette
fonction teste si un caractère a été frappé au clavier. Tant que ce
n ’est pas vrai kbhit renvoie 0 (ceci signifie que la valeur de la
fonction kbhit est 0)

52
Structures de contrôle
Boucle for
Syntaxe et définition

for (expr1;expr2; expr3)


instructions;

expr1: initialisation

expr2: la boucle est effectuée tant que cette condition est vraie
expr3: ce qu ’il faut faire à chaque fin de boucle (la mise à jour)

instructions peut être une instruction ou un bloc d ’instructions entre


accolades.
53
Structures de contrôle
Boucle for
Syntaxe et définition

expr1

for (expr1;expr2; expr3)


instructions;
oui non
expr2

Bloc d’instructions

Suite du programme
expr3

54
Structures de contrôle
Boucle for
Exemples

main() main()
{ {
int i,j; int i;

for (i=2, j=4; i<5 && j>2; i++, j--) for (i=2; i<5; i++)
printf("i:%d et j:%d\n",i,j); printf("i:%d \n",i);
} }
expr1;
while (expr2)
For (expr1; expr2; expr3) équivalent {
instructions instructions
expr3;
}

55
Structures de contrôle
Boucle for
Exercice

Exercice 1 :
Même exercice que pour while et do-while, cette fois-ci l ’utilisateur n ’a droit
qu ’à 3 essais.

Exercice 2 :
Écrire un programme C où l ’utilisateur saisit un entier n. Le programme devra
calculer et afficher n!.

56
Structures de contrôle
break et continue
Syntaxe et définition

break
instruction permettant de sortir directement d ’une
boucle for, while ou do … while

continue
instruction permettant de passer directement à
l ’itération suivante de la boucle

57
Structures de contrôle
break et continue
Exemples

Conditions initiales affichage


main()
i = 2 et j = 3 i : 2 et j : 3
{ i: 1 et j : 2
int i, j;
i = 5 et j = 3 i : 6 et j : 3
… /* instruction affectant i et j */
i : 4 et j : 1
for (;i>0 && j>0;i--,j--)
{
i = 3 et j = 5 i : 3 et j : 5
if (i==5) continue;
printf("i :% d et j : %d\n", i,j);
if (j==5) break;
}
}

58
Section 4
Les tableaux

59
Les tableaux Tableaux à une dimension
Déclaration du tableau /syntaxe

Un tableau est une suite séquentielle de cellules, chacune


d’elles pouvant contenir une donnée de même type.

Type Nom_Tableau[Nombre_éléments];

60
Les tableaux Tableaux à une dimension
Déclaration du tableau /exemple

int tab[6] ; /* déclarer un tableau de 6 éléments */


6 : nombre d ’éléments du tableau (tab [0],…, tab[5])
Où tab : nom du tableau
int : type des éléments du tableau

tab

Indices 0 1 2 3 4 5

61
Les tableaux Tableaux à une dimension
Accés aux éléments du tableau / Syntaxe

Chaque élément est accédé par l’intermédiaire d’un indice


(qui doit être un entier), l’indice 0 donnant accès au premier
élément.

Nom_Tableau[indice_tableau]

62
Les tableaux Tableaux à une dimension
Accés aux éléments du tableau / Exemple

Pour mettre la valeur 2 dans les premières et dernières


entrées du tableau tab
tab[0]=2;
tab[5]=2;
ou bien
tab[0]=tab[5]=2;

L’indice peut être une variable ou une expression arithmétique.


int i =3;

tab[i] = 5;
tab[2*i-2] = 6;
63
Les tableaux Tableaux à une dimension
Initialisation des tableaux

On peut initialiser les éléments d’un tableau à une seule


valeur de deux façons différentes

int i; /* variables de contrôle */


int V[5];
for (i=0; i<5; i++)
V[i] = 0;
ou
int v[5] = {0, 0, 0, 0, 0};
/* initialisation au moment même de la déclaration du tableau*/
ou bien
int V[5] = {0};
64
Les tableaux Tableaux à une dimension
Exercices

Exercice 1
Écrire un programme qui compte les fréquences des voyelles dans une
saisie.
Le caractère de fin de saisie EOF est produit par une combinaison de
touches : CTRL+Z

65
Section 5
Structures

66
Types de données complexes
Structures
Déclaration/exemple

Structure : collection de données regroupées dans une entité


logique.

struct Nom_Structure
{
type_champs1 Champs1,
type_champs1 Champs1,
...
type_champs1 Champs1,

} Nom donné à la variable;

67
Types de données complexes
Structures
Déclaration/exemple

struct date { int jour,


mois,
année
} d1 ;

Nom donnée à la variable

Elément (ou membres) de la structure

Nom donné à la structure

Mot réservé

68
Types de données complexes
Structures
Accès aux données des structures/ syntaxe

Pour accéder à un membre d’une structure, utiliser la syntaxe

nom_variable.nom_membre

ou

nom_pointeur->nom_membre

69
Types de données complexes
Structures
Exemple d’accès direct

main()
{
struct signe{ int jour, mois,
char zodiac[10] ;
}; /*aucune variable*/
struct signe d1, d2 ;
/*2 variables ayant la description signe */

d1.jour = 14 ;
strcpy(d1.zodiac, " bélier ") ;
d2.mois = 11 ;
d2.jour = d1. jour +1 ;
}
70
Types de données complexes Structures
Exemple d’accès via un pointeur

main()
{
struct signe { int jour, mois ;
char zodiac[10] ;
};
struct signe d3, /* variable de struct signe*/
*p1 ; /*pointeur vers var de struct signe */

p1=&d3 ; /* p1 contient l’adresse du 1° octect de d3*/


p1->mois = 12 ; /* d3. Mois vaut 12 */
strcpy(p1->zodiac, " bélier ") ;
printf(" mois:\nsigne :%s \n ",p1->mois,p1->zodiac) ;
}
71
Types de données complexes Structures
Exercice

Reprendre l’exercice des devinettes, avec 3 essais maximum.


Utilisez une structure stock, où on peut trouver la lettre à deviner
en minuscules, en majuscules, ainsi que le nombre d’essais
maximum.

72
Section 6
Les fonctions
Modularité et Utilisation de fonctions
Types et nombre d'arguments

Passage d'argument par adresse

73
Les fonctions Généralités
Notions de fonctions

•  Les fonctions permettent de décomposer un programme en entités plus petites


et donc de simplifier à la fois la réalisation et la mise au point de programme.

•  Une fonction peut se trouver :


Ø  dans le même module de texte (toutes les déclarations et instructions qui
la composent s’y trouvent),

Ø  être incluse automatiquement dans le texte de programme (par une


directive #include)

Ø  ou compilée séparément (elle sera réunie au programme lors de la phase


d’édition de liens).

74
Les fonctions Généralités
Syntaxe

[type_retourné] nom_fonction ([type1 p1, type2 p2…, typen pn])

{
[Définition de variables locales]
[Définitions de variables externes]
[Déclarations de fonctions supplémentaires]
[Instructions]
[Résultats retournés]
}

75
Les fonctions Généralités
Exemple de Déclaration d’une fonction

int triple(int nb) /* déclaration de la fonction */


{
return(nb*3) ; /* valeur entière retournée */
}

main()
{
int i, j ; /* variable appartenant uniquement à main */
i=2;
j = triple(i) ; /* appel de la fonction appelée triple */
j = triple(4) ; /* nouvel appel de la fonction */
} /* fin de main */

76
Les fonctions Généralités
Appel d’une fonction

La ligne suivante est une instruction :


j = triple (i) ;


i : argument de la fonction (si plusieurs arguments, ils doivent
être séparés par les virgules). un argument peut être une
expression

triple : nom de la fonction

j : variable pour stocker la valeur retournée par la fonction

Une fonction peut être appelée à partir du programme principal,


d’une fonction ou d’elle-même (récursivité).

77
Les fonctions Généralités
Types et nombre d ’arguments

float moitie (int nb)


{
return (nb/2.0) ;
}

main()
{
float x ;
x = moitie() ; /* ! ! erreur sur nombre d’arguments ! !* /
x = moiti(2, 5) ; /* ! ! erreur sur nombre d’arguments ! ! */

x = moitie(7) ; /* bon */
x = moitie(x) ; /* ! ! erreur sur type d’arguments ! ! */
}

78
Les fonctions Généralités
Types et nombre d ’arguments (suite)

float moitie(int nb)


{
return (nb/2.0) ;
}

main()
{
float x ;

x = moitie() ; /* erreur sur nombre d’arguments ! ! */


x = moitie(7) ; /* bon */
x = moitie(x) ; /*TURBO effectuera une conversion de réel à entier sur
l’argument*/
}

79
Les fonctions Utilisation des fonctions

main ()
{
int i, j ; /* i, j, x et st ne peuvent être utilisés que dans main*/
char st[10] ;
float x, func3(int) ; /* func3 est une fonction prototype */

i = func1(st) ; /* funcl retourne un entier. L’argument passé à func1


est l’adresse de début du tableau st*/
func2(st) ; /*func2 ne retourne pas de valeur ou bien on ne se
préoccupe pas de la valeur retournée*/
x = func3(i) ; /*func3 retourne un float (comme indiqué plus haut)*/

func4() ; /*appel de func4 sans passage d’argument les () sont


néanmoins nécessaires*/
}
80
Les fonctions Utilisation des fonctions

int func1(char *s)


{
int k ;
….
Return (k*2) ; /* Valeur retournée par func1 */
}

func2(char *s)
{
int i, k ;

return ; /* sortie de func2 sans valeur retoutnée */

}

81
Les fonctions Utilisation des fonctions

float func3(int nb)


{
float y ;

return(y) ; /* la valeur retournée par func3 est un float */
}

func4()
{
printf(" func4 \n ") ; /* pas de return explicite, on quitte la fonction
après la dernière instruction */
}

82
Les fonctions
Les fonctions Utilisation des fonctions
Exercice

Écrire un programme calculant le volume d’un cube.


Modifier ce programme pour qu’il calcule le volume de n’importe
quel parallélépipède.

83
Les fonctions
Les fonctions Passage d ’arguments par adresse
Définition

Le passage d’arguments par adresse (ou référence)


permet à une fonction de modifier une variables de la
fonction appelante.

84
Les fonctions
Passage d ’arguments par adresse
Exemple

main()
{
int i = 4 ;

triple_val(i) ;
printf("passage argument par valeur : %d\n", i) ;

triple_adr(&i) ;
printf(" passage argument par adresse : %d\n", i) ;
}

triple_val(int nb) triple_adr(int *nb)

{ {
nb = nb*3 ; *nb = (*nb)*3 ;
} }

85