【阿摩網站-置頂欄顏色票選問卷】只要填寫就能獲得500Y,結束時間 2024/04/25 11:59:59。 前往查看

計算機概論、大意(資訊科學概論,電腦常識,電子計算機概論)題庫下載題庫

上一題
27. 執行下列 C 語言程式後產生的輸出為何?
#include <stdio.h> 
main() { 
int a= 2, b = 5; 
a *= a-- * --b; 
printf("%dn", a); 
 
(A) 4
(B) 8
(C) 15
(D) 19


答案:B
難度: 適中
6F
蔡松翰 小一下 (2019/04/15)

可是考選部標準答案為C

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幾分的人一定哭死。

27. 執行下列 C 語言程式後產生的輸出為何?#include <stdio...-阿摩線上測驗