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