Упражнение из книги С - PullRequest
       2

Упражнение из книги С

1 голос
/ 25 января 2011

Я хотел знать, эквивалентны ли следующие два утверждения, и если нет, то почему. Спасибо.

1)

if (score >= 90)
  printf("A");
else if (score >= 80)
  printf("B");
else if (score >= 70)
  printf("C");
else if (score >= 60)
  printf("D");
else
  printF("F");

2) Версия 1

if (score < 60)
  printf("F");
else if (score > 70)
  printf("D");
else if (score > 80)
  printf("C");
else if (score > 90)
  printf("B");
else
  printf("A");


2) Версия 2

if (score < 60)
  printf("F");
else if (score < 70)
  printf("D");
else if (score < 80)
  printf("C");
else if (score < 90)
  printf("B");
else
  printf("A");

Извините, я неправильно ввел знак во втором варианте. Они сейчас эквивалентны?

Ответы [ 4 ]

7 голосов
/ 25 января 2011

Они не равнозначны.

Например, скажем, у вас «счет» 95 - в первом варианте вы напечатаете «А», а во втором - «»D "...

Теперь, я подозреваю, что в вышеописанном есть опечатка.Если вы переключите все сравнения во втором примере на <вместо>, тогда они оба выведут один и тот же ответ.

Однако они все равно не будут эквивалентны (по крайней мере, до оптимизации компилятора).Есть некоторые тонкие различия.Например, вторая будет возвращаться быстрее для «D», чем первая, но первая будет возвращаться быстрее для «B».Конечно, это очень тонкое различие, но они разные.


Правка. Подозрение на опечатку выше было правдой, основываясь на правке.См. Вторую половину для различий, которые все еще остаются.

Они будут печатать то же значение, но они не эквивалентны.

3 голосов
/ 25 января 2011

Нет, введите значение 99 и посмотрите, что произойдет в обоих случаях.

Для первого вы увидите A, для второго D.

Теперь, если все эти > были < во втором фрагменте кода, это может быть другая история (толчок, толчок, подмигивание, подмигивание, кивок так же, как подмигивание слепой летучей мыши, не говори больше).


Теперь, основываясь на ваших изменениях (изменив > на <, как предложено), они эквивалентны .С точки зрения производства, так или иначе.Есть очень много других вещей, которые все еще могут отличаться, например, производительность в случае, когда все терпят неудачу: -)

Но, я предполагаю, что результат - это то, что вас интересовало.

2 голосов
/ 25 января 2011

Это не так.Отмените сравнение во втором наборе тестов 70, 80 и 90.

0 голосов
/ 25 января 2011

Нет. Если оценка, скажем, 95, то во втором примере будет напечатано «D», а в первом - «A».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...