免費開始練習
高考申論題 111年 [資訊處理] 程式設計

第 二 題

📖 題組:
請問以下三小題 C 程式執行的結果為何?請注意須說明答案是如何產生的,否則不給分。
📝 此題為申論題,共 3 小題

小題 (二)

(5 分)
#include
#include
int a=10, fun(int);
int main(void) {
int b=6;
printf("a=%d, b=%d, fun(a)=%d\n", a, b, fun(a));
return 0;
}
int fun(int b) {
a-=5; b/=2;
return(a+b);
}

思路引導 VIP

看到本題,首先要辨識出關鍵考點有二:一是「全域變數與區域變數的覆蓋及作用域」,二是「C 語言中函式引數(Arguments)的求值順序(Evaluation Order)」。多數考卷與 C 編譯器實作(cdecl 呼叫慣例)中,printf 的參數是由右至左求值並推入堆疊的。因此,要先執行最右邊的 fun(a),這會改變全域變數 a 的值,接著才會依序提取 ba 的值。必須向閱卷委員說明這個求值順序的概念。

🤖
AI 詳解
AI 專屬家教

【考點分析】 本題測驗全域變數的作用域,以及函式呼叫時引數(Arguments)的求值順序(Evaluation Order)。 【理論/法規依據】

小題 (一)

(5 分)
#include
#include
int main(void) {
int x;
float y;
for (x=0, y=50; x<25; x+=5, y/=2)
printf("x=%d, y=%4.2f\n", x, y);
return 0;
}

思路引導 VIP

看到本題,首先要辨識出這是 C 語言中基本的 for 迴圈與變數追蹤題。接著應該按部就班地列出每一次迴圈迭代時 xy 的初始值、條件判斷以及更新後的值。同時,要注意 printf%4.2f 的格式化輸出意義(浮點數,包含小數點總寬度至少 4,小數點後保留 2 位並四捨五入)。將每次印出的結果精確記錄下來即可。

🤖
AI 詳解
AI 專屬家教

【考點分析】 本題測驗考生對 C 語言 for 迴圈執行流程的追蹤能力,以及浮點數格式化輸出 (%4.2f) 的理解。 【理論/法規依據】

小題 (三)

(10 分)
#include
#include
#define SIZE 10
void fun(int *, int);
int main(void) {
int x[SIZE] = {1,2,3,4,5,6,7,8,9,10};
fun(x, SIZE);
printf("\n");
return 0;
}
void fun(int *a, int size) {
if (size > 0) {
fun(a+3, size-3);
printf("*(a+%d)=%d\n", SIZE-size, *a);
}
}

思路引導 VIP

看到本題,首先辨識出考點為「遞迴函式(Recursion)」與「指標算術(Pointer Arithmetic)」。解題關鍵是畫出遞迴的呼叫堆疊(Call Stack)。要注意 fun 函式中,遞迴呼叫 fun(a+3, size-3) 是發生在 printf 之前,這意味著最深層的呼叫會最先執行印出動作(Head Recursion)。按步驟推演每次傳入的指標位置與 size,即可得出反向印出的結果。

🤖
AI 詳解
AI 專屬家教

【考點分析】 本題測驗遞迴函式的執行順序(Call Stack 機制)以及陣列與指標運算的結合運用。 【理論/法規依據】

📝 同份考卷的其他題目

查看 111年[資訊處理] 程式設計 全題