免費開始練習
普考申論題 114年 [資訊處理] 程式設計概要

第 四 題

給定下列程式,其中t被宣告為全域變數,請問程式執行後輸出為何?
(20分)
int t=10; //全域變數
void sum(int a) {
int t=20;
for(; a>=0; a=a-5) {
printf("%d,", t);
t=t+a;
printf("%d,", t);
}
}
int main () {
printf("%d,", t);
sum(t);
printf("%d,", t);
t=15;
printf("%d", t);
return 0; }
📝 此題為申論題

思路引導 VIP

本題解題關鍵在於辨別「全域變數」與「區域變數」的作用域(Scope),以及變數遮蔽(Shadowing)效應。考生應將 main 函式與 sum 函式的變數狀態分開紀錄,並逐圈追蹤 for 迴圈內變數 a 與 t 的數值變化與輸出結果。

🤖
AI 詳解 AI 專屬家教

【解題思路】本題考查變數作用域(全域變數與區域變數的遮蔽效應)以及迴圈追蹤。需注意 sum 函式內的 t 為區域變數,不會影響 main 函式中的全域變數 t。 【詳解】 已知全域變數初始為 t = 10

▼ 還有更多解析內容
📝 變數作用域與遮蔽效應
💡 掌握全域與區域變數的生命週期,以及名稱衝突時的遮蔽優先權。
比較維度 全域變數 (Global) VS 區域變數 (Local)
宣告位置 函式外部 函式內部或參數列
作用範圍 整個程式(檔案) 僅該函式或大括號內
名稱衝突 會被區域變數遮蔽 優先被編譯器採用
生命週期 隨程式啟動至結束 隨函式呼叫至返回
💬編譯器依據「由內而外」原則搜尋變數,最內層的定義具有最高優先權。
🧠 記憶技巧:近水樓台先得月(區域優先),步步為營追迴圈(條列狀態)。
⚠️ 常見陷阱:最容易誤以為函式內的計算會連帶修改同名的全域變數,或是在迴圈最後一圈判斷出錯。
變數生命週期 (Lifetime) 指標與 Call by Reference 靜態變數 (Static Variables)

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

考前複習神器,一眼掌握重點

🏷️ 相關主題

程式設計基礎概念與實作演練
查看更多「[資訊處理] 程式設計概要」的主題分類考古題