fonctions
This commit is contained in:
218
fonctions.md
Normal file
218
fonctions.md
Normal file
@@ -0,0 +1,218 @@
|
||||
# Les fonctions
|
||||
|
||||
En langage C, une **fonction** est un bloc de code nommé qui réalise une tâche précise. Les fonctions permettent de :
|
||||
|
||||
* Découper un programme en parties plus simples
|
||||
* Réutiliser du code sans duplication
|
||||
* Rendre le code plus lisible et plus facile à maintenir
|
||||
* Faciliter les tests et le débogage
|
||||
|
||||
Tout programme C contient au minimum une fonction : `main`.
|
||||
|
||||
---
|
||||
|
||||
## Structure générale d’une fonction
|
||||
|
||||
Une fonction en C se compose de :
|
||||
|
||||
1. Un **type de retour**
|
||||
2. Un **nom**
|
||||
3. Une liste de **paramètres** (éventuellement vide)
|
||||
4. Un **corps**, délimité par des accolades `{}`
|
||||
|
||||
```c
|
||||
type_retour nom_fonction(type1 param1, type2 param2)
|
||||
{
|
||||
instructions;
|
||||
return valeur;
|
||||
}
|
||||
```
|
||||
|
||||
Exemple simple :
|
||||
|
||||
```c
|
||||
int addition(int a, int b)
|
||||
{
|
||||
return a + b;
|
||||
}
|
||||
```
|
||||
|
||||
## La fonction `main`
|
||||
|
||||
Le point d’entrée d’un programme C est la fonction `main`.
|
||||
|
||||
Exemple minimal :
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
printf("Bonjour le monde !\n");
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
* `int` : type de retour (code de sortie du programme)
|
||||
* `return 0` : indique que le programme s’est terminé correctement
|
||||
|
||||
---
|
||||
|
||||
## Déclaration et définition d’une fonction
|
||||
|
||||
### Définition
|
||||
|
||||
La **définition** contient le code réel de la fonction.
|
||||
|
||||
```c
|
||||
int carre(int x)
|
||||
{
|
||||
return x * x;
|
||||
}
|
||||
```
|
||||
|
||||
### Déclaration (prototype)
|
||||
|
||||
La **déclaration** informe le compilateur de l’existence de la fonction.
|
||||
|
||||
```c
|
||||
int carre(int x);
|
||||
```
|
||||
|
||||
Elle est généralement placée :
|
||||
|
||||
* en haut du fichier
|
||||
* ou dans un fichier d’en-tête (`.h`)
|
||||
|
||||
### Exemple complet
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
|
||||
int carre(int x);
|
||||
|
||||
int main(void)
|
||||
{
|
||||
printf("%d\n", carre(4));
|
||||
return 0;
|
||||
}
|
||||
|
||||
int carre(int x)
|
||||
{
|
||||
return x * x;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Les paramètres et arguments
|
||||
|
||||
* **Paramètres** : variables définies en entrée de la fonction
|
||||
* **Arguments** : valeurs ou varaibles passées lors de l’appel à la fonction
|
||||
|
||||
```c
|
||||
int multiplier(int a, int b)
|
||||
{
|
||||
return a * b;
|
||||
}
|
||||
|
||||
int resultat = multiplier(3, 5);
|
||||
```
|
||||
|
||||
En C, les paramètres sont passés **par valeur**.
|
||||
|
||||
|
||||
### Passage par valeur
|
||||
|
||||
Lorsqu’une variable est passée à une fonction, une **copie** est utilisée.
|
||||
|
||||
```c
|
||||
void incrementer(int x)
|
||||
{
|
||||
x = x + 1;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int a = 5;
|
||||
incrementer(a);
|
||||
printf("%d\n", a); // affiche 5
|
||||
}
|
||||
```
|
||||
|
||||
La variable originale n’est pas modifiée.
|
||||
|
||||
|
||||
### Fonctions sans paramètres et/ou sans retour
|
||||
|
||||
#### Sans paramètre
|
||||
|
||||
```c
|
||||
void afficher_message(void)
|
||||
{
|
||||
printf("Bienvenue !\n");
|
||||
}
|
||||
```
|
||||
|
||||
#### Sans valeur de retour
|
||||
|
||||
Le type `void` indique qu’aucune valeur n’est retournée.
|
||||
|
||||
```c
|
||||
void dire_bonjour(void)
|
||||
{
|
||||
printf("Bonjour\n");
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. La directive `return`
|
||||
|
||||
* Termine **immédiatement** l’exécution de la fonction
|
||||
* Peut retourner une valeur (sauf pour `void`)
|
||||
|
||||
```c
|
||||
int signe(int x)
|
||||
{
|
||||
if (x > 0)
|
||||
return 1;
|
||||
if (x < 0)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. Bonnes pratiques
|
||||
|
||||
* Donner des noms explicites aux fonctions
|
||||
* Une fonction = une responsabilité
|
||||
* Limiter la taille des fonctions
|
||||
* Déclarer les fonctions avant leur utilisation
|
||||
|
||||
---
|
||||
|
||||
## Exercices
|
||||
|
||||
### Exercice 1
|
||||
|
||||
Écrire une fonction `max(int a, int b)` qui retourne le plus grand des deux nombres.
|
||||
|
||||
### Exercice 2
|
||||
|
||||
Écrire une fonction `est_pair(int n)` qui retourne 1 si le nombre est pair, 0 sinon.
|
||||
|
||||
### Exercice 3
|
||||
|
||||
Écrire une fonction `afficher_carre(int n)` qui affiche les carrés des nombres de 1 à `n`.
|
||||
|
||||
---
|
||||
|
||||
## À retenir
|
||||
|
||||
* Une fonction est un bloc de code réutilisable
|
||||
* `main` est une fonction comme les autres
|
||||
* Les paramètres sont passés par valeur
|
||||
* `void` signifie "aucun"
|
||||
Reference in New Issue
Block a user