Рубрики

C | Операторы | Вопрос 10

Каков вывод следующей программы?

#include <stdio.h>

  

int main()

{

   int a = 1;

   int b = 1;

   int c = a || --b;

   int d = a-- && --b;

   printf("a = %d, b = %d, c = %d, d = %d", a, b, c, d);

   return 0;

}

(А) а = 0, б = 1, с = 1, д = 0
(B) a = 0, b = 0, c = 1, d = 0

(С) а = 1, б = 1, с = 1, д = 1
(D) a = 0, b = 0, c = 0, d = 0

Ответ: (Б)
Объяснение: Давайте разберемся с исполнением построчно.
Начальные значения a и b равны 1.

   // Since a is 1, the expression --b is not executed because
   // of the short-circuit property of logical or operator
   // So c becomes 1, a and b remain 1
   int c = a || --b;

   // The post decrement operator -- returns the old value in current expression 
   // and then updates the value. So the value of expression --a is 1.  Since the 
   // first operand of logical and is 1, shortcircuiting doesn't happen here.  So 
   // the expression --b is executed and --b returns 0 because it is pre-increment.
   // The values of a and b become 0, and the value of d also becomes 0.
   int d = a-- && --b;

Рекомендуемые посты:

C | Операторы | Вопрос 10

0.00 (0%) 0 votes