Может кто-нибудь сказать мне, как это работает? (C программирование) - PullRequest
1 голос
/ 25 января 2012
int m, n, j;
n=16;
j=15;
m = n++ -j+10;
printf("%d", m);

Выход: 11.

Здесь, во-первых, старое значение n присваивается m, а затем оно увеличивается, поэтому новое значение, которое я получаю, равно 17, а затем выражение решается, т.е. j+10 = 25, затем новое значение n вычитается на 25, т.е. 17-25. Я прав ? но ответ не соответствует выводу 11. Тогда как это работает? А также, я новичок в программировании и начал изучать C. Какую книгу вы предложите мне лучше всего? Поскольку у меня нет опыта программирования. Спасибо.

Ответы [ 10 ]

4 голосов
/ 25 января 2012

m = n++ -j+10; совпадает с

m = n -j+10;
n = n + 1; // m is 11.

Если бы это было ++n Это было бы

n = n + 1;
m = n -j+10; //m is 12.

тогда выражение решается, т.е. j + 10 = 25

Нет. Было бы -j+10 = -5

Мое предложение таково: не пишите сложное выражение, если вы не полностью уверены в том, что пишите.

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

фактически операция пост-инкремента выполняется на n после операции ... у вас 16-15 + 10 = 11 но если вы напечатаете, у вас должно быть 17.

для начала, вы можете прочитать некоторые книги по основам, но этот пример не прост; это включает приоритет оператора, который может быть хитрым.

начинайте с простого ... довольно просто написать нечитаемый код на языке c. http://www.cs.cf.ac.uk/Dave/C/node4.html

надеюсь, это поможет

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

У тебя там несколько вещей не так.

  1. n++ будет увеличивать n и возвращать исходный результат, поэтому вы получите m = 16 ....

  2. -j так что у вас есть m = 16 - 15 ....

  3. +10 так что у вас есть m = 16 - 15 + 10.

Теперь, когда я в последний раз делал математику, получилось бы m = 11, как вы видите.

Если вы хотели, чтобы оно было m = 17 - (15 + 10), тогда вы хотели:

int m, n, j;
n=16;
j=15;
m = ++n -(j+10);
printf("%d", m);
0 голосов
/ 02 сентября 2013

В выражении m = n++ -j+10;
Компилятор обрабатывает выражение как m= n++ ((-j)+10)
Поскольку инициализированные значения n и j равны n = 16 и j = 15.У нас есть m = 16++ ((-15)+10).Мы получаем вывод как 11.
После выполнения выражения n будет увеличиваться.

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

В ответ на ваш вопрос о хорошей книге - вы, вероятно, захотите изучить изучение C ++ вместо простого старого C, поскольку C ++ является надмножеством C. И для C ++ вам нужно получить «Язык программирования C ++» Бьярна Страуструпа. , Его достаточно легко прочитать, и он долго прослужит вам на книжной полке в качестве хорошего справочника.

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

Вы делаете две неверные интерпретации.

Во-первых, как указано в других ответах, n++ только увеличивает n после того, как все выражение было оценено.

Во-вторых, выиметь -j+10.Это не равно -(j+10), поэтому неправильно говорить, что j+10 - это 25, а вы ищете something - 25.Другой способ просмотра -j+10 - это 10-j.

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

n++ - это постинкремент . Увеличивает значение n только после выполнения: m = n++ -j+10;

++n - предварительное увеличение. Это увеличивает значение n перед вычислением m. m = ++n -j+10;

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

для m, прежде всего вычислите n - j + 10 и присвойте его m.После этого n++ выполняется.

в конце n = 17, m = 11

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

n увеличивается после его значение используется в выражении, которое заканчивается на m.

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

n++ сначала возвращает значение n, а затем увеличивает его.
Итак, фактическое вычисление имеет место m = 16 - 15 + 10, что равно 11

Я думаю, что вы хотите:

m = (n+1) - (j+10);

использование оператора ++ заключается в увеличении значения n для будущего использования после использования его текущего значения для вычисления m.

...