2014-09-02 63 views
-3

今天,因爲我試圖用C解決一個簡單的二維數學函數。但是我得到的結果在那兒有點兒有趣。代碼是在這裏:在C編程中的算術順序

int main() 
{ 
    int x, y; 

    x = 10 - y; 
    y = x - 2; 
    printf("the x and y would be %d, %d ", x, y); 
    return 0; 
} 

因此,大家可以看到,答案就會很容易地計算出作爲x=6y=4但上面列出的程序給我x=8y=6。似乎程序以某種方式得到y的值爲6首先,然後忽略第一個方程,並直接把6在第二個方程,然後得到x值。有趣的看到這個壽。希望有人能向我解釋原因!

+6

你的代碼有未定義的行爲:''沒有價值! – 2014-09-02 15:21:41

+0

在'x ='行缺少';'。 – xxbbcc 2014-09-02 15:22:29

+0

@KerrekSB但是如何?我對x和y做了同樣的事情我認爲... – user1579701 2014-09-02 15:30:25

回答

2

C語言不解決方程式。語言中沒有這種功能。 C語言評估表達式。

由於您從未初始化變量,因此xy最初都包含垃圾值。您的第一個表達式x = 10 - y表示:從10中減去垃圾值並將其存儲在x中。

y開始生活在它2垃圾值(給你8x)時,這只是一個隨機的巧合。我真的很驚訝你有這樣一個漂亮的垃圾值。通常情況下它更可怕。

+0

哦,看起來我在這裏犯了一個大錯。非常感謝您的解釋!我現在明白這一點。 – user1579701 2014-09-02 15:35:34

+1

它看起來像'y'開始爲2.我不知道這是否有助於一些C大師找出爲什麼它開始的方式,而不是一些可怕的事情。 – Teepeemm 2014-09-02 18:36:04

+0

@Teepeemm:是的,好點。 – AnT 2014-09-02 18:49:12

5

原因是一個命令式編程語言的基本誤解。 C語言不是一個方程求解器。 '='表示分配,而不是等式。

+0

所以我應該把所有'='符號都替換成'=='?或者這個方程在C中是不可接受的... – user1579701 2014-09-02 15:31:52

+0

@ user1579701這在C中是不可能的(呃,它可能是*可能*,但它會涉及很多工作而不是兩個簡單的方程) – Teepeemm 2014-09-02 18:33:17