Année universitaire 2003-2004

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+aa 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.


    Commentaires pascal.lafourcade@lsv.ens-cachan.fr