LONGEPASS
數位電子/程式語言/Q80
中等
正確率 -
Q80.

執行下列C 語言程式,何者正確?數位電子 甲級 程式語言 第 80 題 題目 圖片

數位電子 · 甲級 · 程式語言 · 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=10
0%
②執行到20 列printf("x=%d , y=%d
", x,y);後,其輸出為:x=10,y=5
0%
③執行到24 列printf("x=%d , y=%d
", x,y);後,其輸出為:x=10,y=5
0%
④執行到24 列printf("x=%d , y=%d
", x,y);後,其輸出為:x=5,y=10
0%

此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!

相似類型題目