Adloun

informatique (MP2I/MPI) · Chapitre 1 · Exercice de TD

Deux valeurs de retour

Le langage C · niveau 2

Énoncé

Écrire une fonction qui rend à la fois le quotient et le reste d'une division euclidienne.

Corrigé

Une fonction C ne rend qu'une valeur. Deux procédés :

Par pointeurs de sortie — le plus courant :


/* Range dans *q le quotient et dans *r le reste de a par b.
   Précondition : b > 0, a >= 0, q et r non nuls et distincts. */
void division(int a, int b, int* q, int* r) {
    assert(b > 0 && a >= 0 && q != NULL && r != NULL);
    *q = a / b;
    *r = a % b;
}

Par une structure — plus lisible quand les deux valeurs forment un tout :


struct div_s { int quotient; int reste; };
typedef struct div_s division_t;

division_t division(int a, int b) {
    assert(b > 0 && a >= 0);
    division_t d;
    d.quotient = a / b;
    d.reste = a % b;
    return d;
}

Le second se lit mieux à l'appel — d.reste plutôt que *r — et supprime toute question sur la validité des pointeurs. On le préfère dès que les deux valeurs vont ensemble.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre