地特四等申論題
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;
}
(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)」、「變數遮蔽(Variable Shadowing)」以及「傳值呼叫(Call by Value)」的理解程度。解題時須區分:(1) 第一行的 t 是全域變數,初始為 10。(2) main 呼叫 sum(t) 時是將 10 複製傳入。(3) sum 函式內部宣告了同名的區域變數 t=20,這會在 sum 函式執行期間「遮蔽」全域變數 t。因此 sum 迴圈裡的列印與加法計算都是針對區域變數 t,不會影響全域變數 t 的值。(4) 迴圈結束回到 main 後,列印的 t 又會指回原本未改變的全域變數 t(10)。(5) 最後 main 程式強制賦值 t=15 並印出。依序寫下所有被印出的數字即可。
🤖
AI 詳解
AI 專屬家教
【考點分析】 考查變數的作用域(Scope rules)、全域變數與區域變數的遮蔽效應(Variable Shadowing)、傳值呼叫(Call by Value)及迴圈內運算子執行的順序。 【理論/法規依據】
▼ 還有更多解析內容