2012-02-03 73 views
1

我目前正在學習C編程(我的第一種編程語言)。 我有點困惑與運營商的優先權。算術運算符的優先順序如下。C編程中的運算符優先

  1. *
  2. /
  3. %
  4. +
  5. -

這就是在我的書至少給出。 我感到困惑的是如何在我的理論考試中解決表達問題? 我試着用上面給出的命令解決很多問題,但是沒有得到正確的答案。

給出如下定義:

int a = 10, b = 20, c; 

如何將我們解決這個表情?

a + 4/6 * 6/2 

這是我書中的一個例子。

+0

我從來沒有聽說過\運算符。你確定你在學習C而不是PHP嗎? – 2012-02-03 11:02:43

+0

@KerrekSB該死!那應該是'/'。對不起,感到困惑。從早上開始學習。 – 912M0FR34K 2012-02-03 11:03:57

+2

@ 912M0FR34K:然後是休息時間了!編程主要是關於迂腐和注重細節。散步並喝杯咖啡,之後會更容易。 – 2012-02-03 11:11:01

回答

4
a + 4/6 * 6/2 
= 10 + 4/6 * 6/2 
= 10 + 0*6/2 
= 10 + 0/2 
= 10 

注意,作爲整數除法用於4/6評估爲0

+1

啊,這就是OP「解決表達」的意思! :D +1 – 2012-02-03 11:15:13

2

一個安全的現實生活的解決方案是始終使用括號()

+0

那是我製作節目的時候。但是我可以簡單地在我的考卷上添加圓括號? 儘管感謝您的建議。讚賞。 – 912M0FR34K 2012-02-03 11:12:13

+0

我會在考試中添加他們:) – andreadi 2012-02-03 11:14:57

4

/*的優先級在C一樣的,只是因爲它是在數學。問題是,在數學下列表達式是等效的,而用C他們可能不:

(a/b) * (c/d) 
(a/b*c)/d 

這些都不是等價的C,因爲如果abcd是整數,則/操作意味着整數除法(它只產生結果的整數部分)。

例如,

(7/2)*(4/5); //yelds 0, because 4/5 == 0 
(7/2*4)/5; //yields 2 

一般好的編碼做法正在明確對你的意圖。特別是在有疑問時加上括號。有時甚至當你不是。