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

看板Examination作者 (吼..)時間9年前 (2016/07/12 19:46), 編輯推噓17(17036)
留言53則, 17人參與, 最新討論串1/2 (看更多)
不好意思因為是不同小題 就分開貼了 不是為了賺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的不同嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.238.94.9 ※ 文章網址: https://www.ptt.cc/bbs/Examination/M.1468324003.A.89B.html

07/12 19:57, , 1F
不知道編譯器遇到這樣的寫法是怎麼編譯
07/12 19:57, 1F

07/12 19:58, , 2F
哀 再寫的時候就想說怎麼可能這麼簡單 但還是錯了
07/12 19:58, 2F

07/12 20:01, , 3F
我跑出來的結果也跟你一樣
07/12 20:01, 3F

07/12 20:05, , 4F
我完全不知道會由後往前耶 長知職了(可惜是考完後)
07/12 20:05, 4F

07/12 20:05, , 5F
是compiler的關係嗎?
07/12 20:05, 5F

07/12 20:14, , 6F
直覺會是前往後吧…
07/12 20:14, 6F

07/12 20:16, , 7F
反倒覺得老師不會真的去用編譯器跑,太多版本了
07/12 20:16, 7F

07/12 20:40, , 8F
應該是考系統傳入副程式參數處理的順序 細到只會在考卷
07/12 20:40, 8F

07/12 20:40, , 9F
上看到的用法
07/12 20:40, 9F

07/12 20:40, , 10F
在公司用這種寫法還不被後面的人抓出來摔...
07/12 20:40, 10F

07/12 20:48, , 11F
嗯 真的是為了考試為難學生吧~其實當天我在心裡念了很久
07/12 20:48, 11F

07/12 20:49, , 12F
沒意義的題目…略過吧同學
07/12 20:49, 12F

07/12 20:52, , 13F
我朋友說這張是計概等級的題目...平均要創新高
07/12 20:52, 13F

07/12 20:54, , 14F
如果有人寫出compiler的答案 我輸也能輸得心服口服
07/12 20:54, 14F

07/12 20:58, , 15F
QoiiwWe 那可以請你朋友幫忙解說一下此題嗎?真的很想知道
07/12 20:58, 15F

07/12 20:58, , 16F
拜託
07/12 20:58, 16F

07/12 21:03, , 17F
07/12 21:03, 17F

07/12 21:04, , 18F
printf parameter evaluation order沒定義
07/12 21:04, 18F

07/12 21:04, , 19F
果然是台灣會出現的考試題目…
07/12 21:04, 19F

07/12 21:15, , 20F
看討論也是說沒定義 順序留給各個編譯器優化決定
07/12 21:15, 20F

07/12 21:16, , 21F
所以左推算 右推算 跳著推算都可以...
07/12 21:16, 21F

07/12 21:19, , 22F
考Side effect真的很有種 實作都會避免這種寫法
07/12 21:19, 22F

07/12 21:22, , 23F
同感,研究所考試出就算了,國家考試也這麼出…
07/12 21:22, 23F

07/12 21:23, , 24F
Orz…因為想說b*=a代表b=b*a,是一個算式,所以我寫結果
07/12 21:23, 24F

07/12 21:23, , 25F
非0即為true,輸出寫1…哭
07/12 21:23, 25F

07/12 21:23, , 26F
最後答案應該也是會是10,2,5,4吧,我覺得
07/12 21:23, 26F

07/12 21:27, , 27F
今年程式真的2020分拿 要噴也一次2020的噴
07/12 21:27, 27F

07/12 21:30, , 28F
我本來感覺這題的本意是要給考生拉分的,應該沒有這麼
07/12 21:30, 28F

07/12 21:30, , 29F
兇殘吧…(還從後面來…)
07/12 21:30, 29F

07/12 22:03, , 30F
我剛剛自己測試了一下答案是 22 10 5 4 考試的時候就
07/12 22:03, 30F

07/12 22:04, , 31F
覺得毛毛的 想說怎麼可能是10 2 5 4這麼簡單 果然有
07/12 22:04, 31F

07/12 22:04, , 32F
陷阱 a101大那個想法我也有想過 在if判斷裡面指定算
07/12 22:04, 32F

07/12 22:04, , 33F
式非0的話就為true 想寫1 但最後反正22 10那種推法
07/12 22:04, 33F

07/12 22:04, , 34F
我完全沒考慮到 所以也沒有惋惜的遺憾 肯定被扣10分
07/12 22:04, 34F

07/12 22:04, , 35F
心裡面沒疙瘩了
07/12 22:04, 35F

07/12 23:29, , 36F
其實最早的K&R C有定義這種operation
07/12 23:29, 36F

07/12 23:50, , 37F
http://goo.gl/7Pv9W0 先按compile再按execute
07/12 23:50, 37F

07/13 00:32, , 38F
為什麼上一篇發問被刪掉了?
07/13 00:32, 38F

07/13 01:25, , 39F
補習班對 大一這種題目早就被老師出到爛掉了
07/13 01:25, 39F

07/13 01:26, , 40F
c的程式執行會從後面開始 就跟網路處理封包會從後面CR
07/13 01:26, 40F

07/13 01:26, , 41F
C開始檢查起一樣 要特別注意的點
07/13 01:26, 41F

07/13 01:27, , 42F
不是compiler的特性 是c語言處理的方式是這樣
07/13 01:27, 42F

07/13 18:48, , 43F
考完回再研究了一下 是跟calling conventions有關
07/13 18:48, 43F

07/13 18:49, , 44F
C預設使用cdecl 裡面定義參數有右至左傳入
07/13 18:49, 44F

07/13 18:49, , 45F
所以不是C語言就這樣 要看使用哪種calling conventions
07/13 18:49, 45F

07/13 18:53, , 46F
但前面都說了cdecl就是C的使用標準 其他都應該為特例
07/13 18:53, 46F

07/13 18:53, , 47F
所以答案還是以右到左為主吧..
07/13 18:53, 47F

07/13 21:30, , 48F
我覺得 答案搞不好是 10 2 5 5...
07/13 21:30, 48F

07/14 16:22, , 49F
這種題目在普考很常見,有做普考考古題的,應該就知道
07/14 16:22, 49F

07/14 16:23, , 50F
這是從左到右喔,而且是考選不公佈的解答 所以解答是:
07/14 16:23, 50F

07/14 16:24, , 51F
10 2 5 4 不用想太多囉 但實務上 不會有人這樣寫程式
07/14 16:24, 51F

07/14 16:25, , 52F
本身寫程式不會這樣用 還是有高手 常這樣用... 佩服
07/14 16:25, 52F

07/14 16:26, , 53F
所以重點還是在考古題囉 先推我有上榜吧@@
07/14 16:26, 53F
文章代碼(AID): #1NXDYZYR (Examination)
文章代碼(AID): #1NXDYZYR (Examination)