國家安全情報人員考試五等考試-資訊組計算機大意114 年第 10 題單選題
下列那一段副程式 swap(a,b)可以將 a 和 b 二個變數的數字交換,例如:二變數分別為 a = 3, b = 5 ,執行後,a=5, b = 3?
Aswap(int &a, int &b) { a = 5; b =3;}
Bswap(int &a, int &b) { a = b; b =a;}
Cswap(int &a, int &b) { int temp; temp = a; b = temp; a = b; }
Dswap(int &a, int &b) { int temp; temp = a; a = b; b = temp; }正確答案
D正確答案
交換兩數的標準三步驟:用 temp 暫存 a,再把 b 給 a,最後把 temp 給 b。
為什麼答案是 D
標準交換法:temp=a (temp=3) → a=b (a=5) → b=temp (b=3)。先把 a 的值保存起來,才能安全地讓 b 的值覆蓋 a,再用 temp 回填 b。
載入中…
完整詳解
Pro · 無限重點 交換兩數的標準三步驟:用 temp 暫存 a,再把 b 給 a,最後把 temp 給 b。
看到交換變數題,記口訣:暫存→覆蓋→回填,temp 必須先存才不會被蓋掉。
逐選項分析
A✕ 陷阱
直接寫死 a=5, b=3,只對題目給的特例有效。若 a=1, b=2 執行後仍變成 5 和 3,完全沒有交換功能。
B✕ 陷阱
a=b 後 a 已被覆蓋成 5,原本 a 的值 3 遺失;接著 b=a 時 b 又變成 5。結果 a=b=5,典型沒用暫存變數的錯誤。
C✕
temp=a (temp=3),b=temp (b=3),a=b (a=3)。順序錯誤導致兩變數都變成 3,原本 b 的值 5 遺失。
D✓ 正確
標準交換法:temp=a (temp=3) → a=b (a=5) → b=temp (b=3)。先把 a 的值保存起來,才能安全地讓 b 的值覆蓋 a,再用 temp 回填 b。
交換變數三步驟追蹤 (a=3, b=5)
| 步驟 | 指令 | temp | a | b |
|---|
| 初始 | - | ? | 3 | 5 |
| ①暫存 | temp = a | 3 | 3 | 5 |
| ②覆蓋 | a = b | 3 | 5 | 5 |
| ③回填 | b = temp | 3 | 5 | 3 |
swap 題最大陷阱是「順序」和「有沒有用暫存變數」。B 少了 temp、C 雖有 temp 但順序錯,都會造成變數值遺失。要記得:覆蓋之前一定要先備份要被覆蓋的值。