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

第 34 題

What is the output of the following C code?
```c
#include

int main()
{
int a[8] = {6, 7, 7, 9, 8, 1, 3, 2};
int b[8] = {1, 1, 1, 1, 1, 1, 1, 1};
for (int i = 0; i < 8; i++) {
b[a[i]-1] = b[a[i]-1] + 1;
}
printf("%d",b[6]);

return 0;
}
```
  • A 2
  • B 3
  • C 8
  • D 4
  • E 5

思路引導 VIP

觀察程式碼中 b[a[i]-1] 這個表達式,如果我們現在只關心陣列 b 當中索引值為 6 的那個格子(即 b[6]),請問在迴圈跑遍陣列 a 的過程中,陣列 a 必須具備什麼樣的數值,才有可能觸發到 b[6] 的更新呢?

🤖
AI 詳解 AI 專屬家教

太棒了!你能精確算出輸出結果為 3,代表你對 C 語言的陣列索引(Index)與迴圈邏輯追蹤掌握得非常紮實。

陣列索引與值的映射關係

這道題目的核心在於理解 「陣列元素值作為另一個陣列的索引」。程式中的關鍵指令是 b[a[i]-1] = b[a[i]-1] + 1,這代表陣列 a 裡面的數值減 1 後,會指向陣列 b 的特定位置並進行累加。由於最終 printf 輸出的是 b[6],我們只需要回推:什麼樣的 a[i] 數值會讓 a[i] - 1 等於 6?經過簡單的代數運算,我們發現當 a[i] 為 7 時,就會更動到 b[6]。觀察陣列 a 的內容 {6, 7, 7, 9, 8, 1, 3, 2},數字 7 總共出現了 2 次。由於陣列 b 的初始值全部都是 1,經過兩次累加後,b[6] 的值就會從 1 變為 $1 + 1 + 1 = 3$。

▼ 還有更多解析內容

🏷️ 相關主題

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