Vous êtes sur la page 1sur 19

Cours programmation C2

Licence Informatique Appliquée


S2

Préparé par :
Pr.Noura AHERRAHROU

Année universitaire 2023/2024


Pointeurs et Les fonctions Les chaines Structures Gestion2
allocation et récursivité de en C des
dynamique caractères fichiers
Chapitre2
Pointeurs et Les fonctions Les chaines Structures Gestion3
allocation et récursivité de en C des
dynamique caractères fichiers
Les fonctions
Une fonction est un sous-programme qui à partir de
données produit un (et un SEUL) résultat.
Type du resultat <nom_fonction> ( <liste des paramètres> )
{
< déclaration des objets locaux à la fonction>
{ corps de la fonction}
Return (résultat)
}
Appel d’une fonction (dans un autre bloc d’instructions) …

nomFonction(val1,val2,…,valN);
Pointeurs et Les fonctions Les chaines Structures Gestion4
allocation et récursivité de en C des
dynamique caractères fichiers
Les fonctions-------------Exemple
Pointeurs et Les fonctions Les chaines Structures Gestion5
allocation et récursivité de en C des
dynamique caractères fichiers
Prototype d’une fonction
Prototype de la fonction
Type du resultat <nom_fonction> (<liste des paramètres>);>);
 le prototype est identique à l’en-tête de la fonction et qu’il se
termine par un point-virgule.
 Le prototype de la fonction fournit au compilateur la
description d’une fonction qui va être définie plus loin dans le
programme.
 Grâce au prototype, vous pourrez positionner vos
fonctions dans n'importe quel ordre dans le code
source.
 Le prototype est obligatoire si la fonction est définie après un
appel à celle-ci. Sinon, le compilateur n’en a pas connaissance
et signale une erreur.
Pointeurs et Les fonctions Les chaines Structures Gestion6
allocation et récursivité de en C des
dynamique caractères fichiers
Prototype d’une fonction----------Exemple
Pointeurs et Les fonctions Les chaines Structures Gestion7
allocation et récursivité de en C des
dynamique caractères fichiers
Les Procédures
Une procédure est une série d'instructions regroupés
sous un nom, qui permet d'effectuer des actions par un
simple appel de la procédure dans un programme ou
dans un autre sous-programme.
Une procédure peut être considérée comme une
fonction ne renvoyant pas de valeur.
Void nomProc (param1:type1; var param2:type2; …)
{
{déclaration des variables locales}
{…bloc d’instructions}
}
Pointeurs et Les fonctions Les chaines Structures Gestion
8
allocation et récursivité de en C des
dynamique caractères fichiers
Les procédures---------Exemple
Pointeurs et Les fonctions Les chaines Structures Gestion9
allocation et récursivité de en C des
dynamique caractères fichiers
Variables locales et globales
On peut manipuler 2 types de variables dans un
programme : des variables locales et des variables
globales. Elles se distinguent par ce qu'on appelle leur
portée (leur "espace de visibilité", leur "durée de vie") :
 Une variable définie à l'intérieur d’une fonction est
une variable locale, elle n’est connue qu'à l'intérieur
de cette fonction. Elle est crée à l'appel de la fonction
et détruite à la fin de son exécution.
 Une variable définie à l’extérieur des fonctions est une
variable globale. Elle est définie durant toute
l’application et peut être utilisée et modifiée par les
différentes fonctions de l’algorithme.
10
Pointeurs et Les fonctions Les chaines Structures Gestion
allocation et récursivité de en C des
dynamique caractères fichiers
Variables locales et globales
 Une variable connue uniquement dans la fonction ou
dans main() est une variable locale.
 Une variable connue dans tout le programme est une
variable globale (déclarée au début du programme et en
dehors de toute fonction y compris main).
 Une variable locale à une fonction n’est accessible que
par cette fonction. Cependant, une variable globale est
accessible à toutes les fonctions (y compris le programme
principal)
Rappel
Une variable statique peut être déclarée à l’intérieur d’une
fonction mais possède un même comportement que la variable
globale:
Exemple : static int c ;
11
Pointeurs et Les fonctions Les chaines Structures Gestion
allocation et récursivité de en C des
dynamique caractères fichiers
Passage d’arguments par valeurs
Les valeurs de ces arguments ne changent pas après l’appel de la
fonction.3:
Exemple : Echange de deux entiers
Après exécution:
-------------------------------------------
avant appel : 10 20
debut echange: 10 20
fin echange : 20 10
après appel : 10 20
12
Pointeurs et Les fonctions Les chaines Structures Gestion
allocation et récursivité de en C des
dynamique caractères fichiers
Passage d’arguments par adresse
Exemple : Le même exemple que pour les paramètres passés par
valeur mais en utilisant le mode de passage par adresses.
Après exécution:
-----------------------------
avant appel : 10 20
debut echange:10 20
fin echange :20 10
après appel : 20 10
13
Pointeurs et Les fonctions Les chaines Structures Gestion
allocation et récursivité de en C des
dynamique caractères fichiers
Fonctions récursives
Le processus dans lequel une fonction s’appelle elle-
même directement ou indirectement par une autre
fonction est appelée récursivité .
On distingue trois types de récursivité:
 Récursivité simple
 Récursivité multiple
 Récursivité croisée
14
Pointeurs et Les fonctions Les chaines Structures Gestion
allocation et récursivité de en C des
dynamique caractères fichiers
Récursivité simple
On parle de récursivité simple quand la fonction s’appelle elle-
même, sans appeler d’autre fonction récursive.

Exemple: soit la suite


𝑎 𝑠𝑖 𝑛 ∈ [0,1[
Un=
𝑢𝑛−1 + 𝑏 𝑠𝑖𝑛𝑜𝑛
Version récursive Version itérative
15
Pointeurs et Les fonctions Les chaines Structures Gestion
allocation et récursivité de en C des
dynamique caractères fichiers
Récursivité multiple
On parle de récursivité multiple quand, la fonction s’appelle
elle-même plusieurs fois, sans appeler d’autre fonction
récursive.
Exemple: soit la suite
𝑎 𝑠𝑖 𝑛 ∈ {0,1}
Un =
𝑢𝑛−1 + 𝑢𝑛−2 + 𝑏 𝑠𝑖𝑛𝑜𝑛
16
Pointeurs et Les fonctions Les chaines Structures Gestion
allocation et récursivité de en C des
dynamique caractères fichiers
Récursivité croisée
On parle de récursivité croisée quand, la fonction s’appelle
indirectement, via une ou plusieurs autres fonctions.
Exemple: soit les deux suites
𝑎𝑢 𝑠𝑖 𝑛 ∈ {0,1} 𝑎v 𝑠𝑖 𝑛 ∈ {0,1}
un= vn=
3𝑢𝑛−1 + 2𝑣𝑛−1 + 𝑏𝑛 𝑠𝑖𝑛𝑜𝑛 𝑢𝑛−1 + 4𝑣𝑛−1 + 𝑏v 𝑠𝑖𝑛𝑜𝑛
La fonction récursive à u La fonction récursive à v
17
Pointeurs et Les fonctions Les chaines Structures Gestion
allocation et récursivité de en C des
dynamique caractères fichiers
Récursivité/Itérativité
 les programmes récursifs et itératifs ont les mêmes capacités de
résolution des problèmes.
 Tout usage de la récursivité est un moyen très simple et très
rapide pour effectuer des taches complexes. Mais consomme
beaucoup d’espaces mémoires pour sauvegarder les traces
des niveaux d’appels récursives. le temps requis est plus
long en raison d'appels de fonction.
 Cela ne veut pas dire que l’approche itérative est
toujours la meilleure solution, Il faut prendre en
considération, en particulier la difficulté à écrire le
programme et la lisibilité du code source obtenu.
18
Pointeurs et Les fonctions Les chaines Structures Gestion
allocation et récursivité de en C des
dynamique caractères fichiers
Exercice d’application
1. Ecrire une fonction récursive Factorielle permettant de
calculer la factorielle d’un nombre entier.

2. Ecrire un programme principal de test

#include <stdio.h> int main ()


int factoriel (int n) {
{ int n;
int fact; printf("Entrer un nombre :");
if (n == 0) scanf("%d", &n);
fact = 1; printf("Factoriel de %d est
else %d",n,factoriel(n));
fact = n * factoriel(n - 1); return 0;
return fact; }
}
Pointeurs et Les fonctions Les chaines Structures Gestion
allocation et récursivité de en C des
dynamique caractères fichiers
Sources
Livres de références
Claude DELANNOY , « Le guide complet du langage C ».
Claude DELANNOY , « Programmer en langage C ».
Claude DELANNOY, « Langage C » , Eyrolles, 2005.
Claude DELANNOY , « Programmer en langage C avec exercices corrigés ».

Cours de références
Pr. Jaouad Boumhidi, « Cours Programmation II, SMI, S4 », Université Sidi
Mohammed Ben Abdellah, Faculté des Sciences Dhar El Mahraz.

Vous aimerez peut-être aussi