27. 執行下列 C 語言程式後產生的輸出為何?#include <stdio...-阿摩線上測驗
6F
|
7F Kari 國一下 (2020/07/04)
a *= a-- * --b; 會先執行完 a-- * --b (我先假設有另一個變數 c = a-- * --b,方便區分),才計算 a *= c c = a-- * --b = 2*4 = 8 算出 c 以後執行 a-- ,此時 a = 1 接著計算a * = c,可寫成a = a * c a = 1 * 8 = 8 所以編譯器才會算出8 先說結論:這題考選部出題有誤,給了錯誤解答 再詳細探討編譯器的行為的話 其實 a *= a-- * --b; 的先後順序是未定義行為 因為無法判斷編譯器如何執行帶有 *= 與 a-- 同時出現時的先後順序 可能每個編譯器算出來的結果都不同 應該會有兩種情況 情況一: a *= a-- * --b;可寫成 a = a * (a-- * --b); 假設編譯器將 a 都以 2 代入,一次執行完 a * (a-- * --b) (此時左右兩個 a 的值皆為2) a = 2 * (2 * 4) =16 (注意... 查看完整內容 |
8F Phil(112高普雙榜) 高三上 (2020/07/07)
說實話,一樓的算法我完全看不懂,到底是怎麼算出15的; a=a*(a--*--b),要括號比較清楚。 正常的程式運算會先執行(a--*b--)後才會再*a,所以正確的答案應該是8才對。 當初這題都沒有人去申覆,直接少2分,那些總分差0.0幾分的人一定哭死。 |