Aller au contenu

TP3 — Fonctions (2h)

Objectifs

  • Écrire des fonctions avec prototypes, paramètres par valeur et par adresse.
  • Comprendre la portée des variables et la récursivité.

Exercice 1 — Bibliothèque de fonctions mathématiques

Écrire (avec prototypes séparés) : - int est_premier(int n) - long factorielle(int n) (version itérative) - long factorielle_recursive(int n) (version récursive) - int pgcd(int a, int b) (algorithme d'Euclide)

Comparer dans main les deux versions de factorielle pour n = 15 et n = 25 (observer le dépassement de capacité d'un long au-delà d'un certain n : lien avec les débordements d'entiers vus au chapitre 2).

Exercice 2 — Passage par adresse

Écrire une fonction void echanger(int *a, int *b) qui échange réellement le contenu de deux variables, et une fonction void minmax(int tab[], int taille, int *min, int *max) qui renvoie le min et le max d'un tableau via deux pointeurs de sortie.

Exercice 3 — Portée et static

Écrire une fonction int compteur_appels(void) utilisant une variable static locale qui s'incrémente à chaque appel. Vérifier expérimentalement que la valeur persiste entre les appels, contrairement à une variable locale ordinaire.

Exercice 4 — Récursivité : suite de Fibonacci

Écrire une version récursive puis itérative du calcul du n-ième terme de Fibonacci. Mesurer (avec clock() de time.h) le temps d'exécution pour n = 30 dans les deux versions et expliquer la différence de complexité (O(2ⁿ) contre O(n)).

À rendre

Fichier tp3.c avec toutes les fonctions prototypées en haut de fichier, définies après main.


Dr. Zakaria Sawadogo — École Polytechnique de Ouagadougou