DEUG MIAS
Module Info 2
Travaux pratiques
Séance 6:
Fonctions
TP 6 : Fonctions
1. Soit la fonction suivante:
int fun(int x);
{
int z;
z = x + 5;
printf("%d est la valeur de z.\n", z);
}
Est-ce que le compilateur accepte l'absence du return?
Insérer return(z); juste avant le printf. Ecrire un
programme qui appelle la fonction et imprime la valeur
retournée. Quel est la dernière instruction exécutée
à l'intérieur de la fonction?
Est-ce que l'expression fun(5) est admissible, c'est-à
-dire peut-on passer une constante à la fonction fun?
Même question pour 3*5, 3*5+1, 3*5+a où a est une
variable entière.
Ecrire un petit programme contenant l'instruction fun(a);
c'est-à -dire utiliser fun non pas comme une variable
mais comme une instruction. Est-ce que le compilateur
proteste? Exécuter le programme. Qu'arrive-t-il à la
valeur retournée par fun?
Ecrire un petit programme contenant 2 instructions, un appel
à fun suivi de:
printf("%d \n", z);
autrement dit, essayer d'imprimer zà partir de
l'extérieur de la fonction. Pourquoi est-ce que le
compilateur proteste?
2. (a) Compiler un petit programme qui déclare un entier de
nom p et une fonction de nom p. Que dit le
compilateur?
(b) Compiler un petit programme qui déclare une variable de
nom x et une fonction p contenant aussi une
déclaration de variable de
nom x. Le compilateur accepte-t-il? Expliquer.
(c) Compiler un petit programme qui déclare une variable de
nom x et une fonction p qui a un paramètre
de
nom x. Expliquer.
(d) Reprendre (b): au lieu de déclarer seulement une variable
globale de nom x, l'initialiser aussi à 5. Placer les
deux lignes suivantes dans le programme:
printf("%d \n", x);
p(x);
et deux lignes suivantes dans la fonction:
x = 8;
printf("%d \n", x);
Expliquer le résultat de l'exécution.
(e)
Supposons que plusieurs personnes travaillent sur un très
gros programme, chacune étant responsable d'une fonction
particulière. Ces personnes doivent-elles être vigilantes
sur le choix des noms des variables locales utilisées dans
leur propre fonction pour ne pas entrer en conflit avec les
choix des autres?
3. Pour chacune des questions suivantes, il faut écrire une
fonction, et tester la fonction avec un petit programme qui
appelle la fonction et imprime le résultat.
(a) Ecrire une fonction qui convertit une heure en secondes.
Entrée: trois entiers: heures, minutes secondes
Sortie : un entier qui est l'équivalent de l'entrée en
secondes.
(b) Ecrire une fonction qui convertit une lettre minuscule
en lettre majuscule correspondante.
Entrée: un caractère
Sortie :la version majuscule du caractère si l'entrée est
une des 26 lettres (minuscules) de l'alphabet, un point
d'interrogation sinon.
(c) Ecrire une fonction qui calcule le cube d'un nombre en
appelant une autre fonction qui calcule son carré.
Entrée: un nombre réel
Sortie : le cube de l'entrée.
4. Ecrire une fonction AfficheMult qui a deux
paramètres entiers (positifs) val et n et
affiche les n premiers multiples de val.
Utiliser cette fonction dans un programme qui imprime la table
de multiplication des entiers de 1 à 12. La table aura 12
lignes et 12 colonnes.