Exercice langage C corrigé analyser des expressions

#include 
§MEVBCBfint main()
{
  int a;
  int b;
  int c;

  a = 16;
  b = 2;
  c = 10;

  /*
   * 1) on commence par évaluer l'expression
   *    a > 0 && a <= 15, laquelle constitue
   *    le 1er opérande de l'opérateur ?:.
   *    Celle-ci est fausse car les expressions
   *    a > 0 et a <= 15 sont vraie et
   *    fausse respectivement,
   * 2) on évalue donc le 3eme opérande de l'opérateur
   *    ?:, c'est-à-dire l'expression a/b,
   * 3) et enfin on effectue l'affectation.
   */
  c += a > 0 && a <= 15 ? ++a : a/b;
  printf( "c : %d\n", c );  ===>  18

  /*
   * Que dire de l'expression suivante? :
   * ----------------------------------
   */
  a > 30 ? b = 11 : c = 100;

  /*
   * Cette expression provoque une erreur
   * à la compilation car le troisième
   * opérande de l'opérateur ?: est c
   * et non pas c = 100. De ce fait,
   * l'expression a > 30 ? b = 11 : c
   * est d'abord évaluée. Sa valeur est ensuite utilisée
   * comme opérande de gauche de la dernière affectation.
   * D'où l'erreur, car cette valeur n'est pas une g-valeur.
   *
   * On devrait écrire :
   */

  a > 30 ? b = 11 : (c = 100);

  return 0;
}

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *