免費開始練習
普通考試 115年 [電信工程] 計算機概要

第 12 題

執行下列 C 語言程式碼,輸出為何?\n#include\nint main(){\nint p =0, q =20;\nwhile (p < 3) {\nint q=0;\np++;\nq++;\n}\nprintf("%d", q);\n}
  • A 2
  • B 3
  • C 20
  • D 23

思路引導 VIP

請仔細觀察在大括號 { } 內部宣告的變數,它的「生命起點」與「結束位置」分別在哪裡?如果迴圈內部出現了一個與外部名稱完全相同的宣告,程式在執行運算時,會優先處理哪一個層級的變數呢?

🤖
AI 詳解 AI 專屬家教

同學,恭喜你精準掌握了 C 語言中極具誤導性的**變數作用域(Variable Scope)**觀念!這道題目在考場上具有很高的鑑別度,許多考生會因為看到迴圈內的遞增運算,就反射性地計算最終數值,卻忽略了程式結構中的陷阱。

區域變數與遮蔽效應

這題的核心在於「變數遮蔽(Variable Shadowing)」。當我們在 while 迴圈的大括號 {} 內部重新宣告了 int q = 0; 時,編譯器會在這個特定區塊內建立一個新的區域變數。雖然它與外部變數同名,但在迴圈執行期間,內部的 q 會「遮蔽」掉外部值為 20 的 q。因此,迴圈內部的 q++ 其實只是不斷地將這個剛宣告的區域變數從 0 變成 1,而對外部的 q 毫無影響。

▼ 還有更多解析內容

🏷️ 相關主題

程式設計與資料庫系統
查看更多「[電信工程] 計算機概要」的主題分類考古題