PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
Grad-ProbAsk
Fw: [課業] c語言 運算元
作者:
mike31830
2017-05-10 00:35:06
※ [本文轉錄自 Examination 看板 #1P4Uqjzd ]
作者: mike31830 () 看板: Examination
標題: [課業] c語言 運算元
時間: Wed May 10 00:24:10 2017
int abc(int *k) {
*k += 4;
return 3 * ( *k) - 1;
}
void main() {
int i = 10, j = 10, result1, result2;
result1 = (i / 2) + abc( &i);
result2 = abc( &j) + (j / 2);
}
如果在運算式中的運算元估算的順序是由右到左,則result1,則result2的值為何?
看了補習班答案是 result1=48, result2=46
result1= (i/2) + abc(&i)
= (14/2) + 41 (*k=14; 3*14 - 1=41)
= 48
想問的是,為什麼在abc裹的計算是先乘除後加減呢
而不是由右到左推算呢
因為本題沒有提運算子優先權,是不是應該照題目要求一律從右到左呢
謝謝
作者:
kyuudonut
(善良è€ç™¾å§“)
2017-05-10 01:14:00
呃,你搞錯了,C expression 是由左往右的沒有提到運算子優先權,請自行參閱 C precedence這題的重點是 C compiler 會先對 operand 進行value computation,才會開始計算 expression啊...抱歉,我搞錯問題了,這題的答案應該是未定義的舉 C++ 而言他沒有定義 operand 的求值順序(實務上由 compiler 任意決定) 補習班的答案看看就好與 i = i++ 異曲同工的一題天啊...我再回答什麼... (看到未定義行為太興奮)總之,題目的設定是為了避免我5~8F描述的情況至於你的問題,你應該去練習寫一下程式。
作者:
shownlin
(哈哈阿喔)
2017-05-10 09:00:00
k大題目有假定由右往左
作者:
imindflow
(imindflow)
2017-05-10 09:00:00
運算子優先順序"大於"結合律,結案!
作者:
shownlin
(哈哈阿喔)
2017-05-10 09:01:00
這題就是優先權相同下右結合,而優先權既然題目沒要求當然不變
作者:
kyuudonut
(善良è€ç™¾å§“)
2017-05-10 10:42:00
不是,這跟結合律並沒有關係。運算依然是左結合。題目的假設與此無關,此假設是定義operand 求值順序,避免 side effect 會帶來 undefined behavior
作者:
TWkobe
(中華柯比)
2017-05-10 11:24:00
undefined behavior+1 因為sequence point每個compiler實作未必如你所想由左而右 因為+號並沒有保證side effect的順序
作者:
ryan0508
(水屁哥)
2017-05-11 08:42:00
" target="_blank" rel="nofollow">
!我看懂樓上幾樓了 我也順便學了一下
繼續閱讀
[理工] 時間複雜度
Huffman
[理工] 2x |x| 判斷是否線性獨立
bightw24261
[理工] 計組 store的記憶體存取
king8313
[理工] 95成大資工-計組
Huffman
[理工] 線代基底小問題
ss455032
[理工] 工數 聯立ode
r833123
冪級數解ODE 收斂範圍疑問
bightw24261
Re: [理工] 計組 數值範圍之計算問題
shownlin
[理工] 計組 數值範圍之計算問題
jim790917
[理工] pipeline harzard判斷
shownlin
Links
booklink
Contact Us: admin [ a t ] ucptt.com