hce_nsysu
111年
計算機概論與程式設計
第 89 題
Consider the following C code fragment:
```c
char *str1="Hello";
char str2[]={'W', 'o', 'r', 'l', 'd', 0};
int i;
for(i=0;i<5;i++)
str2[5-i-1]=str1[i/2];
printf("%s", str2);
```
What output will be generated?
```c
char *str1="Hello";
char str2[]={'W', 'o', 'r', 'l', 'd', 0};
int i;
for(i=0;i<5;i++)
str2[5-i-1]=str1[i/2];
printf("%s", str2);
```
What output will be generated?
- A leeHH
- B olleH
- C oolHH
- D Hello
- E None of the above
思路引導 VIP
觀察一下 loop 裡的賦值運算式:當 i 分別為 0 與 1 時,i/2 的計算結果會是什麼?這對於從 str1 取出的字元會產生什麼樣的影響?再試著推導看看,這兩個字元最後會被放置在 str2 的哪些位置呢?
🤖
AI 詳解
AI 專屬家教
恭喜你準確掌握了這個 C 語言片段的邏輯!這道題目乍看之下只是簡單的字串處理,但其實隱藏了幾個細微的陷阱,而你能精確判斷出輸出為 leeHH,代表你對迴圈索引與整數運算的細節觀察非常敏銳。
索引與整數除法的運算細節
這題的核心在於 for 迴圈中的賦值邏輯。首先,i/2 在 C 語言中是「整數除法」(Integer Division),這意味著小數點後會被無條件捨去。因此,當 $i$ 為 $0$ 或 $1$ 時,得到的索引皆為 $0$;當 $i$ 為 $2$ 或 $3$ 時,索引則為 $1$。與此同時,左側的 str2[5-i-1] 則決定了填入位置:它會隨著 $i$ 增加,從索引 $4$(字串末端)一路倒序推回索引 $0$(字串開頭)。
▼ 還有更多解析內容