Bases de la programmation en C

int a = 7, b = 2;
double x = a / b;
double y = (double)a / b;
printf("%.1f %.1f\n", x, y);

Quelle est la sortie obtenue en exécutant le code ci-dessus, qui contient une division entre entiers ?

  1. A3.0 3.0
  2. B3.0 3.5
  3. C3.5 3.5
Afficher la réponse et l'explication

Réponse : B. 3.0 3.5

a / b divise un int par un int : c'est donc une division entre entiers, qui donne 3 en supprimant la partie fractionnaire. Placer ce 3 dans le double x donne seulement 3,0 ; le 0,5 supprimé ne revient pas. Pour y, a est d'abord converti en double (conversion explicite, ou cast), si bien que b est lui aussi converti en double, et la division se fait en virgule flottante : le résultat est 3,5. La manière de calculer dépend du type des opérandes, et non du type de la destination de l'affectation.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases de la programmation en C

  1. Quelle est la sortie obtenue en exécutant le code ci-dessus, qui utilise ++ en préfixe et en suffixe ?
  2. Quelle est la sortie obtenue en exécutant le code ci-dessus, où = est écrit dans la condition d'une instruction if ?
  3. Le code ci-dessus a été écrit pour tester si le bit 2 de la valeur de registre reg vaut 1. Quel est le résultat de son exécution ?
  4. uint8_t est un type entier non signé de 8 bits. Quelle est la sortie obtenue en exécutant le code ci-dessus ?
  5. uint8_t est un type entier non signé de 8 bits. Quelle est la sortie obtenue en exécutant le code ci-dessus, qui incrémente x 10 fois ?