parkavikkk Ответов: 2

Какое число будет z В приведенном ниже примере кода? Int z, x=5, y= -10, a=4, b=2; z=x++ - --y *b/a;


Кто-нибудь может, пожалуйста, решить эту проблему и объяснить приоритет. я не получаю правильного ответа. Cry|: ((мой ответ-8.5. но это неправильно. я борюсь в нем. пожалуйста, решите ее и объясните. Заранее спасибо. Улыбка | :)

Что я уже пробовал:

5++ - (--(-10)) * 2/4
6 - (-11)*2/4
6+11*0.5
17*0.5
8.5

parkavikkk

Ответ, данный для него, равен 5

Patrice T

z=5
упс
ОГ прав.

parkavikkk

можете ли вы вывести его пожалуйста

Patrice T

OriginalGriff дал ответ в решении 1.

Richard Deeming

Репост
Вы уже опубликовали это на форуме C++ :
https://www.codeproject.com/Messages/5413676/Problem-in-precedence-of-operators.aspx[^]

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
Какое число будет z В приведенном ниже примере кода?
Int z, x=5, y= -10, a=4, b=2; z=x++ - --y *b/a;

Сделайте это программой и используйте отладчик, чтобы увидеть, что происходит.
Цитата:
6+11*0.5
17*0.5

Вы должны узнать о приоритете операторов в математике.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
2

OriginalGriff

Попробуй и увидишь...
Это довольно очевидно, если вы посмотрите на то, что происходит.

z = x ++ ...

++ происходит после того, как используется значение x, и на x больше не ссылаются, поэтому для целей этого вычисления постинкремент можно игнорировать.
z = x - --y ...
Predecrement происходит до того, как значение используется, и опять же, y больше не используется, так что это эквивалент
z = x - ( y - 1) ...

А теперь самое хитрое ... что это за ценности?
Если это целые числа, то вы не получите 5: вы получите 10
Если это поплавки, то вы получите 10,5
В чем разница? Почему вы не можете получить 5?
Вы можете, но вам нужно использовать целые числа и "форсировать" приоритет:
int z = x++ - --y * (b / a);

Я позволю тебе разобраться, почему это работает - в конце концов, это твоя домашняя работа ... у вас достаточно улик!