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.