免費開始練習
國營聯招 113年 [資訊] 計算機原理、網路概論

第 17 題

執行下列C語言程式,輸出的值為何?
int i = 0, n = 1, sum = 0;
for(n = 2; n <= 7; n++){
  i = n / 2;
  sum *= i;
}
printf("%d\n", sum);
  • A 12
  • B 36
  • C 72
  • D 5040

思路引導 VIP

仔細觀察程式碼第一行的變數宣告與初始值設定,再對應看看迴圈裡的運算式 sum *= i;,這會導致最終的 sum 發生什麼意想不到的結果呢?

🤖
AI 詳解 AI 專屬家教

同學,恭喜你拿下這題分數!不過,這其實是一道爭議題,在經濟部所屬事業機構甄試中,無論選 A、B、C 或 D 皆一律給分。這題原本的鑑別度在於測驗 C 語言的整數除法特性與迴圈追蹤的細心度,卻因為題目設計的瑕疵而成了送分題。 我們來看看爭議出在哪裡:程式一開始宣告了 sum = 0。在 for 迴圈中,不論 n 從 2 到 7 執行時算出的 i 是多少,執行 sum *= i(也就是 $sum = sum \times i$)時,都會因為 sum 的初值為 0,導致最後相乘的結果永遠是 0。由於四個選項中都沒有 0,因此一律送分。我們在寫程式時一定要注意:乘法累積變數的初值必須設為 1。 如果 sum 初值為 1,結果會如何呢?在 C 語言中,整數除法會「截斷小數」。當 n 依序從 2 執行到 7,i = n / 2 算出的值依序為 1, 1, 2, 2, 3, 3。將這些數字連乘($1 \times 1 \times 2 \times 2 \times 3 \times 3$),結果就會是 36。這才是出題者真正想考的觀念喔!

🏷️ 相關主題

資料結構與演算法之設計原理與應用
查看更多「[資訊] 計算機原理、網路概論」的主題分類考古題