Q80.
執行下列C 語言程式,何者正確?
數位電子 · 甲級 · 程式語言 · Q80
難易度分析
3 / 5
此題評為3分,因為需要正確認識傳值與傳址呼叫的差異,判斷兩個不同函式對全域變數的影響,並在多選題中正確選擇兩個符合條件的答案。雖包含兩個正確選項,但核心概念屬於基礎知識,層次中等。
正確答案 (複選):①, ③
- ① 執行到20 列printf("x=%d , y=%d
", x,y);後,其輸出為:x=5,y=10:傳值呼叫(pass by value):`swap()` 函式接收的是全域變數 `x` 與 `y` 的副本,函式內部的交換僅影響區域參數,不影響原始變數,因此第 20 列輸出仍為 x=5, y=10。 - ③ 執行到24 列printf("x=%d , y=%d
", x,y);後,其輸出為:x=10,y=5:傳址呼叫(pass by pointer):`swap1()` 接收的是變數的位址,透過指標解參考(dereference)直接修改記憶體中的原始值,因此第 24 列輸出為 x=10, y=5。
錯誤選項解析
- ② 執行到20 列printf("x=%d , y=%d
", x,y);後,其輸出為:x=10,y=5:此選項誤以為 `swap()` 能交換全域變數的值。實際上 傳值呼叫 無法修改呼叫端的原始變數,輸出應為 x=5, y=10 而非 x=10, y=5。 - ④ 執行到24 列printf("x=%d , y=%d
", x,y);後,其輸出為:x=5,y=10:此選項誤以為 `swap1()` 無法交換變數。實際上 指標參數 能直接操作原始記憶體位址,成功將 x 與 y 的值互換,輸出應為 x=10, y=5。
Learning Tip
"本題核心考點為 傳值呼叫 vs 傳址呼叫 的差異。傳值僅複製資料,函式內修改不影響原變數;傳址透過指標直接操作記憶體位址,可修改原變數。常考陷阱為混淆兩種呼叫方式的行為,實務上若需函式回傳多個結果或交換變數,必須使用指標參數。"
學員答題分佈
①執行到20 列printf("x=%d , y=%d
", x,y);後,其輸出為:x=5,y=100%
", x,y);後,其輸出為:x=5,y=100%
②執行到20 列printf("x=%d , y=%d
", x,y);後,其輸出為:x=10,y=50%
", x,y);後,其輸出為:x=10,y=50%
③執行到24 列printf("x=%d , y=%d
", x,y);後,其輸出為:x=10,y=50%
", x,y);後,其輸出為:x=10,y=50%
④執行到24 列printf("x=%d , y=%d
", x,y);後,其輸出為:x=5,y=100%
", x,y);後,其輸出為:x=5,y=100%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!