Deux valeurs de retour
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 1 — Le langage C
É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 <em>r — et supprime toute question sur la validité des pointeurs. On le préfère dès que les deux valeurs vont ensemble*.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.