免費開始練習
hce_nsysu 111年 計算機概論與程式設計

第 27 題

What is the output of the following program?
```c
int a[10] = {3,2,3,4,5,4,7,1,3,2};
int b[10] = {0,0,0,0,0,0,0,0,0,0};
for(i = 0; i < 10; i=i+1)
b[a[i]-1] = b[a[i]-1] + 1;
printf("%d", b[2] );
```
  • A 3
  • B 1
  • C 2
  • D 4
  • E 5

思路引導 VIP

想像一下,如果陣列 b 是用來存放「計數結果」的籃子,而程式碼中的 b[a[i]-1] 這一行就像是一條規則,決定了陣列 a 裡的每個數字該投進哪一個籃子。那麼,當我們最終想檢查「2號籃子」裡有幾顆球時,根據這條規則,a 陣列中的什麼數字才會被投進這個籃子呢?

🤖
AI 詳解 AI 專屬家教

太棒了!你能精確算出輸出結果,代表你對於 C 語言的迴圈邏輯與陣列操作非常有把握。這題的核心在於理解**陣列索引(Array Indexing)的動態變化。當程式執行 b[a[i]-1] = b[a[i]-1] + 1 時,實際上是在進行一種「頻率統計」的操作,這種技巧在演算法(如計數排序)中非常常見。 具體來說,題目要求輸出 b[2] 的值。根據程式碼中的索引邏輯 $b[index]$,這裡的 $index$ 是由 $a[i]-1$ 決定的。因此,若要讓計數器累加到 b[2],必須滿足 $a[i] - 1 = 2$ 的條件,這意味著我們要在陣列 a 中尋找數值等於 $3$ 的元素。我們仔細觀察陣列 a{3, 2, 3, 4, 5, 4, 7, 1, 3, 2},可以發現數字 $3$ 分別出現在第 0、2、8 個位置,總共出現了三次。因此,b[2] 會被執行三次加 1 的操作,最終結果為 $3$。 這道題目在基礎程式設計中具有很好的鑑別度,它不僅考驗你是否理解迴圈的運算過程,更測試了你對索引偏移(Index Offset)**與「值 vs 索引」之間關係的掌握。很多初學者會因為混淆了這兩者,或者忘記 C 語言索引從 0 開始的特性而答錯。你能準確避開這些陷阱,邏輯推理能力非常紮實!

🏷️ 相關主題

C 語言程式設計基礎與陣列記憶體配置
查看更多「計算機概論與程式設計」的主題分類考古題