Нашел этот код в книге:

if(a > b)
    if(c > b) printf("one");
    else if(c == a) printf("two");
    else printf("three");
else printf("four");

Вопрос был в следующем: Программа никогда не будет печатать
< Код > а. один б . два с . три д . четыре

Правильный ответ: b. two

Здесь я не могу понять, почему он не напечатает two, так как в данном условии c может быть равен a, а c может быть больше, чем b в в то же время

0
mustangDC 20 Авг 2018 в 19:15

4 ответа

Лучший ответ

Если a больше b и c не больше b, c никогда не может быть равен a.

Вы можете распространять условия:

one будет напечатан, когда a > b && c > b.

two будет напечатан, когда a > b && c <= b && c == a. Из-за c == a эти условия эквивалентны c > b && c <= b, что никогда не может быть истинным.

3
Thomas Jager 20 Авг 2018 в 16:17

Еще один способ взглянуть на это, если переписать код логически:

  • если a ≤ b, случай "четыре"
  • если a > b AND c > b, случай "один"
  • если a > b AND c ≤ b AND c = a, случай "два"
  • если a > b AND c ≤ b AND c ≠ a, случай "три"

Единственный случай, который вы можете переписать, - это третий маркер, потому что с c = a у вас есть:

если a> b AND c ≤ b AND c = a

Что логически эквивалентно

если a> b И a ≤ b

Что никогда не верно для любого значения a и b

0
Patrick Mevzek 20 Авг 2018 в 17:07

Вы использовали еще в 4-й и 5-й строках. Вы не можете использовать другое утверждение два раза.

-3
Narra Ajay 20 Авг 2018 в 16:21

Это из-за другого. В частности, чтобы добраться до этого предложения, a> b и c!> B (потому что, если c> b, «one» будет печатать). Таким образом, поскольку c!> B, c b, то c! = A, поэтому «два» не могут быть напечатаны.

0
K. Dackow 20 Авг 2018 в 16:20
51934769