[問題] 105高三資訊處理 程式語言的 第三題

作者: ssac (吼..)   2016-07-12 19:46:40
不好意思因為是不同小題 就分開貼了 不是為了賺P幣~XD
題目 int main(){
int a=1,b=2,c=3,d=4;
prinf("%d %d %d %d ", a+b+c+d , (b*=a) , (a+=d),(d++));
}
補習班的答案
10 2 5 4
使用gcc的結果
26 12 6 4
這部份也是覺得推算起來很鬼異~
畢竟d++的生效要是下一行 才有反應~?
這只是compiler的不同嗎?
作者: QoiiwWe (G)   2016-07-12 19:57:00
不知道編譯器遇到這樣的寫法是怎麼編譯
作者: k010r10a27 (jijijijij)   2016-07-12 19:58:00
哀 再寫的時候就想說怎麼可能這麼簡單 但還是錯了我跑出來的結果也跟你一樣
作者: lexus7310 (Fox)   2016-07-12 20:05:00
我完全不知道會由後往前耶 長知職了(可惜是考完後)是compiler的關係嗎?
作者: fatty3321   2016-07-12 20:14:00
直覺會是前往後吧…反倒覺得老師不會真的去用編譯器跑,太多版本了
作者: s2327259 (史東)   2016-07-12 20:40:00
應該是考系統傳入副程式參數處理的順序 細到只會在考卷上看到的用法在公司用這種寫法還不被後面的人抓出來摔...
作者: ssac (吼..)   2016-07-12 20:48:00
嗯 真的是為了考試為難學生吧~其實當天我在心裡念了很久
作者: carterdunk (妳能聽到我的心嗎)   2016-07-12 20:49:00
沒意義的題目…略過吧同學
作者: QoiiwWe (G)   2016-07-12 20:52:00
我朋友說這張是計概等級的題目...平均要創新高
作者: bear6709 (熊)   2016-07-12 20:54:00
如果有人寫出compiler的答案 我輸也能輸得心服口服
作者: ssac (吼..)   2016-07-12 20:58:00
QoiiwWe 那可以請你朋友幫忙解說一下此題嗎?真的很想知道拜託
作者: ogre0403 (肚子餓)   2016-07-12 21:03:00
http://goo.gl/ZF4ITcprintf parameter evaluation order沒定義果然是台灣會出現的考試題目…
作者: s2327259 (史東)   2016-07-12 21:15:00
看討論也是說沒定義 順序留給各個編譯器優化決定所以左推算 右推算 跳著推算都可以...考Side effect真的很有種 實作都會避免這種寫法
作者: ogre0403 (肚子餓)   2016-07-12 21:22:00
同感,研究所考試出就算了,國家考試也這麼出…
作者: a1012253 (A1)   2016-07-12 21:23:00
Orz…因為想說b*=a代表b=b*a,是一個算式,所以我寫結果非0即為true,輸出寫1…哭
作者: ogre0403 (肚子餓)   2016-07-12 21:23:00
最後答案應該也是會是10,2,5,4吧,我覺得
作者: k010r10a27 (jijijijij)   2016-07-12 21:27:00
今年程式真的2020分拿 要噴也一次2020的噴
作者: fatty3321   2016-07-12 21:30:00
我本來感覺這題的本意是要給考生拉分的,應該沒有這麼兇殘吧…(還從後面來…)
作者: Juniorlin01 (虛擬)   2016-07-12 22:03:00
我剛剛自己測試了一下答案是 22 10 5 4 考試的時候就覺得毛毛的 想說怎麼可能是10 2 5 4這麼簡單 果然有陷阱 a101大那個想法我也有想過 在if判斷裡面指定算式非0的話就為true 想寫1 但最後反正22 10那種推法我完全沒考慮到 所以也沒有惋惜的遺憾 肯定被扣10分心裡面沒疙瘩了
作者: angerD (丹佐)   2016-07-12 23:29:00
其實最早的K&R C有定義這種operation
作者: iPhone007 (iPhone007)   2016-07-12 23:50:00
http://goo.gl/7Pv9W0 先按compile再按execute
作者: kisha024 (4545454554)   2016-07-13 00:32:00
為什麼上一篇發問被刪掉了?
作者: garychangb (屁屁)   2016-07-13 01:25:00
補習班對 大一這種題目早就被老師出到爛掉了c的程式執行會從後面開始 就跟網路處理封包會從後面CRC開始檢查起一樣 要特別注意的點不是compiler的特性 是c語言處理的方式是這樣
作者: s2327259 (史東)   2016-07-13 18:48:00
考完回再研究了一下 是跟calling conventions有關C預設使用cdecl 裡面定義參數有右至左傳入所以不是C語言就這樣 要看使用哪種calling conventions但前面都說了cdecl就是C的使用標準 其他都應該為特例所以答案還是以右到左為主吧..
作者: Snack (多多)   2016-07-13 21:30:00
我覺得 答案搞不好是 10 2 5 5...
作者: max60716 (Brady)   2016-07-14 16:22:00
這種題目在普考很常見,有做普考考古題的,應該就知道這是從左到右喔,而且是考選不公佈的解答 所以解答是:10 2 5 4 不用想太多囉 但實務上 不會有人這樣寫程式本身寫程式不會這樣用 還是有高手 常這樣用... 佩服所以重點還是在考古題囉 先推我有上榜吧@@

Links booklink

Contact Us: admin [ a t ] ucptt.com