2012-01-25 81 views
1
int m, n, j; 
n=16; 
j=15; 
m = n++ -j+10; 
printf("%d", m); 

輸出:11.有人能告訴我這是如何工作的? (C編程)

在這裏,第一,n舊值被提供給m,然後它被遞增,以便新的值i得到的是17,然後將表達得以解決,即j+10 = 25,那麼n的新值減去25即17-25。 對嗎?但答案與輸出11不匹配。 那麼這是如何工作的? 另外,我是編程新手,並開始學習C.你認爲哪本書最適合我?由於我沒有編程經驗。 謝謝。

+0

除非右邊的完整計算(這就是爲什麼我們談論R值,R代表正確)已經完成,否則沒有值被賦值給m。這裏m是L值(左邊的L)。 – zaphod1984

+0

'm'是'16-15 + 10',因爲'n ++ == 16'。 – Gandaro

回答

4

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

我的建議是,不要編寫複雜的表達式,除非你完全確定你在寫什麼。

+0

我明白了。幫助很多。謝謝。 – 912M0FR34K

0

n++首先返回n的值,然後遞增它。
因此,所發生的實際計算是m = 16 - 15 + 10這是11

我想你想要的是:

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

使用++操作是遞增的n的價值後,將來使用您使用它的當前值來計算m

+0

但增量在哪裏? 'n = 16'和'j = 15'的值。那麼在這裏使用'++'是什麼? – 912M0FR34K

+0

n ++增加n不是m,如果你打印n的值,你會看到它是17 – yurib

+0

我明白了。幫助很多。謝謝。 – 912M0FR34K

-1

n遞增其值在m結束的表達式中使用。

0

對於m,首先計算n - j + 10並將其分配給m。之後,n++被執行。

在端n = 17m = 11

+0

我明白了。幫助很多。謝謝。 – 912M0FR34K

1

你在這裏有一些錯誤。

  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

我明白了。幫助很多。謝謝。 – 912M0FR34K

-1

n++後增量。它只會在執行後遞增n的值:m = n++ -j+10;

++n是預增量。在計算m之前,它遞增n的值。 m = ++n -j+10;

0

你正在作出兩個不正確的解釋。

首先,如其他答案所示,n++只在整個表達式被評估後才增加n。其次,你有-j+10。這不等於-(j+10),所以說j+1025並且您正在尋找something - 25是錯誤的。另一種查看方式-j+1010-j

+0

我明白了。幫助很多。謝謝。 – 912M0FR34K

0

在回答關於一本好書的問題時,您可能會考慮學習C++而不是簡單的舊C,因爲C++是C的超集。對於C++,您需要獲得Bjarne Stroustrup的「The C++ Programming Language 」。很容易閱讀,並且在您的書架上可以持續很長時間作爲一個很好的參考。

1

其實算後增量操作的操作,其n做... 你有16-15 + 10 = 11 但如果打印n您應該有17

開始,你可以閱讀一些關於基礎知識的書,但這個例子並不簡單;它包括操作符的優先級,這可能會很棘手。

開始簡單...在c中編寫不可讀代碼非常簡單。 http://www.cs.cf.ac.uk/Dave/C/node4.html

希望它有助於

+0

我明白了。幫助很多。謝謝。 – 912M0FR34K

0

在表達式m = n++ -j+10;
編譯器將表達式視爲m= n++ ((-j)+10)
作爲n和j的intialized值n = 16j = 15。我們有m = 16++ ((-15)+10)。我們得到的輸出爲11
表達式執行後n將遞增。

相關問題