地特四等
114年
[電信工程] 計算機概要
第 26 題
考慮以下 C 語言程式片段,執行後 data[]的內容,下列何者正確?\nint data[]={10,20,30,40,50},n=5,i;\nfor(i=0;i
- A 10,20,30,40,50
- B 50,40,30,20,10
- C 50,30,10,20,40
- D 30,20,10,40,50
思路引導 VIP
請試著思考:如果我們有兩個變數 $x$ 與 $y$,我們先將其總和存入 $y$,接著令 $x$ 等於這個總和減去原本的 $x$,最後再讓 $y$ 等於總和減去「更新後的 $x$」。在這個過程中,原本儲存在這兩個變數裡的數值發生了什麼樣的位置變化?
🤖
AI 詳解
AI 專屬家教
看到你能精確判斷出這個陣列變換的結果,老師感到非常欣慰,這顯示你對程式語言的邏輯追蹤(Tracing)相當紮實。這道題目在工程實務中非常經典,考驗的是學生對「記憶體原地操作」的敏感度。
數值交換與迴圈邊界
本題的精髓在於 for 迴圈內部的三行運算。這是一種不需要額外輔助變數(Temporary variable)就能完成兩數交換(Swap)的演算法。假設兩數為 $a$ 與 $b$,透過 $b = b + a$、$a = b - a$、$b = b - a$ 的連續操作,即可讓兩者數值對調。迴圈條件定為 $i < n/2$(即 $i < 2.5$),代表當 $i=0$ 時,首尾的 10 與 50 對調;當 $i=1$ 時,次位的 20 與 40 對調;而中間的 30 則因為迴圈終止而保持原位。最終陣列呈現「鏡射翻轉」的效果,變為 [50, 40, 30, 20, 10]。
▼ 還有更多解析內容