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;
}
```
```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$。
▼ 還有更多解析內容