Вы находитесь на странице: 1из 54

Langage C - Niveau 2

Langage C Niveau 2

Les fonctions
Les fonctions

Plan de la partie
Voici les chapitres que nous allons aborder :
La notion de fonction
La notion de passage
par valeur
Les notions de dure de
vie et de porte dune
variable
Les fonctions

La notion de fonction
Une nouvelle tape

Jusqu prsent
Petits programmes une
fonction
Prsence obligatoire du
main

Maintenant
Programmes plusieurs
fonctions
Calcul de la racine carre
Les fonctions

La notion de fonction
La programmation monobloc

Tout placer dans le main


Allongement rapide des
programmes
Manque de lisibilit
Les fonctions

La notion de fonction
Dplacer le calcul de la racine carre dans une fonction

Crer une fonction


racineCarree
Nombre dont on veut
calculer la racine en
paramtre
Racine du nombre
retourne par la
fonction
Appele dans le main
Les fonctions

La notion de fonction
Anatomie de la fonction racineCarree
Paramtres
Nom Liste des arguments typs
Type de de la fonction et spars par une virgule
retour quand il y en a plusieurs

Prototype Corps
Egalement appel signature, il est Ensemble des
form du type de retour, du nom de instructions places
la fonction et des paramtres entre accolades
Les fonctions

La notion de fonction
Le type de retour

Contrle dans la fonction


Type de donne retourne =
type de retour ?
A dfaut, conversion
implicite possible ?
Contrle au point dappel
Type de variable accueillant
la donne = type de retour ?
A dfaut, conversion
implicite possible ?
Les fonctions

La notion de fonction
Le type de retour contrle dans la fonction
Type de retour racine
Le type de retour est Dclaration de la variable
float, qui correspond racine de type float
au type de racine

return
Renvoi de la valeur
de racine
Les fonctions

La notion de fonction
Le type de retour contrle au point dappel

Contrle des types Appel


Le type de racineCalcule, float, appel de la fonction
correspond au type de retour de la racineCarree
fonction racineCarree
Les fonctions

La notion de fonction
Les arguments

Contrle dans la fonction


Type de largument = type
attendu (affectation ) ?
A dfaut, conversion
implicite possible ?
Contrle lors de lappel
type de donnes en
paramtre = type de
largument ?
A dfaut, conversion
implicite possible ?
Les fonctions

La notion de fonction
Les arguments Contrle dans la fonction

parametre
La valeur, passe en paramtre
de la fonction est de type float

Utilisation de parametre
Parametre intervient dans une expression
uniquement compose de float
Les fonctions

La notion de fonction
Les arguments Contrle au point dappel

nombre Appel
Dclaration de la variable On passe nombre en paramtre
nombre de type float de la fonction qui attend un float
Les fonctions

La notion de fonction
Le prototype de la fonction

Dclarer explicitement la
fonction : il est suivi dun
point-virgule
Indiquer le dbut de
limplantation de la fonction :
il est suivi du code plac
entre accolades
Les fonctions

La notion de fonction
La dclaration implicite lors lappel dune fonction

Analyse linaire du code


Appel dune fonction avant dclaration : dclaration
implicite
Dclaration implicite gale la signature de la fonction
lors de son implantation : le compilateur accepte
Les fonctions

La notion de fonction
La dclaration implicite lors lappel dune fonction

Analyse linaire du code


Appel dune fonction avant dclaration : dclaration
implicite
Dclaration implicite diffrente de la signature de la
fonction lors de son implantation : il y a erreur
Les fonctions

La notion de fonction
Dclarations implicite lors de limplantation

Pas de dclaration explicite avant implantation alors


dclaration implicite lors de limplantation
Implantation dune fonction place avant son appel : le
compilateur accepte
Les fonctions

La notion de fonction
Nouvelle structure des programmes
A adopter pour viter les problmes
Les fonctions

La notion de fonction
Le corps de la fonction racineCarree
racine Paramtres
Autre variable locale dclare Considrs comme
au dbut du bloc de code des variables locales

Accolades return
Le corps est un bloc de code Mot cl permettant de
dlimit par des accolades sortir de la fonction
Les fonctions

Le passage par valeur


Lors de lappel de la fonction
Cration dune variable locale pour stocker une copie de la
valeur passe en paramtre
La fonction travaille sur une copie et loriginal est conserv
Les fonctions

Le passage par valeur


Lors du retour de la fonction
return prend en paramtre la donne que doit retourner la
fonction (ici racine).
Cette donne est copie (dans racineCalculee) par
lopration daffectation
Les fonctions

Porte et dure de vie dune variable


Distinction entre les deux notions
Appel de racineCarree
racineCalculee et nombre existent
toujours mais ne sont plus connues

Porte de
parametre
et de racine

Porte de
racineCalculee
et nombre
Langage C Niveau 2

La bibliothque standard
La bibliothque standard

Prsentation succincte
Exemples de fonctions toute faites Le module math
Fonctions de calculs
mathmatiques
(trigonomtrie, puissance,
racine carre )
Ajouter #include <math.h>
au dbut du code
La bibliothque standard

Prsentation succincte
Les fonctions trigonomtriques
Ajouter #include <math.h>
au dbut du code
sin, cos et tan prennent en
paramtre un double,
correspondant un angle
exprim en radian, et
renvoient un double
asin, acos et atan prennent
un double et renvoient un
autre double correspondant
un angle exprim en
radian
La bibliothque standard

Prsentation succincte
Exemple dutilisation des fonctions trigonomtriques
La bibliothque standard

Prsentation succincte
Les fonctions puissance et racine
Ajouter #include <math.h> au
dbut du code
pow prend deux double (par
exemple x et y) et renvoie le
rsultat (xy) sous forme de
double.
sqrt prend un double et
renvoie le rsultat (la racine
carre) sous forme dun
double
La bibliothque standard

Prsentation succincte
Exemple dutilisation des fonctions puissance et racine
Langage C Niveau 2

Les entres-sorties
standard
Les entres-sorties standard

Plan de la partie
Voici les chapitres que nous allons aborder :
La notion dentre-sortie
La fonction printf
Le formatage des
entres-sorties
La fonction scanf
Les entres-sorties standard

La notion dentre-sortie
Lentre standard et la sortie standard
Lentre standard (stdin)
est connecte par dfaut
lentre du terminal : le
clavier
La sortie standard (stdout)
est connecte par dfaut
la sortie du terminal :
lcran
Possibilit de rediriger
ces canaux vers dautres
priphriques
Les entres-sorties standard

La notion dentre-sortie
La sortie standard derreur
Appele stderr
Distinguer les affichages
dues aux erreurs des
affichages normaux
Par dfaut, dirige vers
lcran
Souvent redirige vers un
fichier de log , analys
posteriori pour faciliter le
dbogage
Les entres-sorties standard

La fonction printf
Prsentation gnrale de la fonction
Ajouter #include <stdio.h> au dbut du code
Nombre variables darguments :
format est la chane de caractres (char*) crire
dans la sortie standard
Les autres arguments sont des donnes qui sont
utilises pour construite la chane de caractres
Renvoie un int gal au nombre de caractres crits dans
stdout ou -1 en cas de problme

int printf( const char *format [, argument, ...])


Les entres-sorties standard

La fonction printf
Sans argument optionnel
Dj utilis au dbut du cours
criture dune chane de caractres dans la sortie standard
Affichage de cette chane lcran dans un fonctionnement
normal
Les entres-sorties standard

La fonction printf
Sans argument optionnel
Couper les longues chane de caractres afficher pour
amliorer la lisibilit du code
Utiliser plusieurs printf successif.
Les entres-sorties standard

La notion dentre-sortie
Avec des arguments optionnels
% est utilis comme caractre dchappement pour
indiquer comment afficher largument, autrement dit
comment formater de la sortie
crire %% pour affiche le symbole %

Exemple o %u est remplac par la valeur de i (soit 1)

i=1
Les entres-sorties standard

La fonction printf
Avec des arguments optionnels
Les indications de formatage sont associs dans lordre
dapparition aux arguments
Le nombres dindicateurs de formatage est gal au nombre
darguments
Les entres-sorties standard

La fonction scanf
Prsentation gnrale de la fonction
Ajouter #include <stdio.h> au dbut du code
Nombre variables darguments :
format dcrit la chane de caractres qui est
attendue dans lentre standard
Les autres arguments correspondent aux variables qui
recevront les donnes saisies sur stdin
Renvoie un int gal au nombre de donnes correctement
interprtes (aprs avoir tap la touche entre ).

int scanf( const char *format [, argument, ...])


Les entres-sorties standard

La fonction scanf
Saisie dentiers
Placer %d, %i, %o, %u, %x et %X dans le format
Spcifier le nombre de caractres dont il faut tenir compte
grce la taille minimale
Indiquer ladresse de la variable qui recueillera la donnes
en mettant & devant le nom (la notion dadresse sera
dtaille plus tard)
Les entres-sorties standard

La fonction scanf
Saisie dentiers Exemple 1

Caractres saisis Affichage

123456789 val = 1234 et nbDonnees = 1

12.34 val = 12 et nbDonnees = 1

a val = 0 et nbDonnees = 0
Les entres-sorties standard

La fonction scanf
Saisie de caractres
Placer %c
Spcifier le nombre de caractres dont il faut tenir compte
grce la taille minimale : le tableau ou la zone de
mmoire doivent donc tre assez grands pour accueillir
tous les caractres
Indiquer ladresse de la variable qui recueillera la donnes
en mettant & devant le nom

Remarque : Pour dcrire la saisie des caractres, nous


utilisons un tableau de 6 char. Le dernier char est un \0 qui
est un indicateur de fin de chane de caractres pour printf
Les entres-sorties standard

La fonction scanf
Saisie de caractres Exemple 1

Caractres saisis Affichage

abcdefghijklmn val = abcde et nbDonnees = 1

abcdefghijklm val = ab et nbDonnees = 1


Les entres-sorties standard

La fonction scanf
Saisie de chanes de caractres
Placer %s
Spcifier le nombre de caractres dont il faut tenir compte
grce la taille minimale : le tableau ou la zone de
mmoire doivent donc tre assez grands pour accueillir
tous les caractres et le \0
Indiquer ladresse de la variable qui recueillera la donnes
en mettant & devant le nom
Sarrte si on tape entre ('\n'), tabulation ('\t') ou espace
Ajoute automatiquement un \0 la fin
Supprime les espaces lanalyse
Les entres-sorties standard

La fonction scanf
Saisie de chanes de caractres Exemple 1

Caractres saisis Affichage

abcdefghijklmn val = abcde et nbDonnees = 1

abcdefghijklm val = abcde et nbDonnees = 1


Langage C Niveau 2

La modularisation du
dveloppement
La modularisation du dveloppement

Plan de la partie
Voici les chapitres que nous allons aborder:
La notion de module
La notion de projet
Les fichiers dentte et les
fichiers de corps
La protection des enttes
par #ifndef, #define et
#endif
La modularisation du dveloppement

La notion de module
Diviser pour mieux rgner
Analyser le programme pour
le dcouper en modules plus
simple implanter et tester.
Un module est un ensemble
de fonctions, groups de
manire ce que le module
soit le plus indpendant
possible des autres modules.
Souvent groups par thme :
module graphique ;
module calcul etc
La modularisation du dveloppement

Le fichier dentte et le fichier de corps


Scission du fichier source
Scinder le fichier source en deux parties :
Un fichier dentte (suffixe .h) qui regroupe les
signatures des fonctions et des constantes
symboliques
Un fichier de corps (suffixe.c) qui inclut le fichier
dentte et qui contient les implantations (les corps)
de fonctions

Inclure le fichier dentte dun module A dans un fichier


de corps dun module B lorsquune fonction de ce
module utilise une autre fonction ou une constante
dfinie dans le module A
La modularisation du dveloppement

Le fichier dentte et le fichier de corps


Scission du fichier source

Avant la scission Aprs la scission


La modularisation du dveloppement

La protection des enttes


Mise en vidence du problme
Lorsquune constante symbolique, une variable ou une
fonction sont dclares plusieurs fois, le compilateur
retourne une erreur.
Lorsquon scinde le programme en modules, on est amen
inclure plusieurs fois un mme fichier dentte dans
diffrents fichiers de corps : cela entrane un risque certain
de dclaration multiple.

Il est donc ncessaire de mettre en place un mcanisme


de protection permettant de vrifier si un fichier
dentte a dj t inclus (donc si les dclarations sont
dj prsentes en mmoire)
La modularisation du dveloppement

La protection des enttes


Les directives du prprocesseur #ifndef, #define et #endif
#ifndef teste si une constante symbole est dfinie en
mmoire :
si ce nest pas le cas, on passe linstruction suivante
sinon on saute la directive #endif
#define dfinie une constante symbole (il nes pas
ncessaire de lui attribuer une valeur)
#endif termine un bloc de test
La modularisation du dveloppement

La protection des enttes


Les directives et le mcanisme de protection
Le principe consiste tester (par #ifndef) si une variable
dont le nom correspond celui du module existe en
mmoire :
Si ce nest pas le cas alors :
Dclarer cette variable par #define
Charger en mmoire les dclarations contenues
dans le fichier dentte
Sinon sauter la directive #endif la fin du fichier
La modularisation du dveloppement

La protection des enttes


Les directives et le mcanisme de protection

Debut

MON_MODULE Non Crer la variable


existe ? MON_MODULE

Charger les
dclarations en
mmoire

Fin
La modularisation du dveloppement

La protection des enttes


Les directives e t le mcanisme de protection

Вам также может понравиться