免費開始練習
高考申論題 107年 [資訊處理] 程式語言

第 二 題

📖 題組:
以下二小題是完整的 C/C++程式碼,請回答執行的結果為何?(每小題 10 分,共 20 分)
📝 此題為申論題,共 2 小題

小題 (二)

#include
#include
#include
using namespace std;
struct data {
string name;
int a, b;
};
void fun1(struct data), fun2(struct data *), fun3(struct data);
int main(void) {
struct data man={"John", 11, 33}, lady={"Linda", 22, 44};
cout<< "After process..." < fun2(&man);
fun3(lady);
fun1(man);
fun1(lady);
return 0;
}
void fun1(struct data in) {
cout<< "Name: " << in.name << endl;
cout<< "a=" << in.a << ", ";
cout<< "b=" << in.b <}
void fun2(struct data *ptr) {
int tmp;
tmp = ptr->a;
ptr->a = ptr->b;
ptr->b = tmp;
}
void fun3(struct data in) {
int tmp;
tmp = in.a;
in.a = in.b;
in.b = tmp;
}

思路引導 VIP

  1. 辨別呼叫方式:這是本題的核心。觀察 fun2fun3 的參數類型。
    • fun2(struct data *ptr) 接受指標,屬於「傳址呼叫 (Pass by Address)」,對內容的修改會影響原變數。
🤖
AI 詳解
AI 專屬家教

【考點分析】 本題主要測試 C++ 中結構體(Struct)作為參數時的傳遞方式:傳址呼叫(Pass by Address/Pointer)與傳值呼叫(Pass by Value)的差異。 【理論/法規依據】

小題 (一)

#include
#include
int recFun(int);
int main(void) {
printf("%d\n", recFun(12345));
return 0;
}
int recFun(int n) {
if (n<10)
return n;
else
return recFun(n/10) + n%10;
}

思路引導 VIP

  1. 識別演算法:觀察 recFun 函數,它是一個遞迴函數。判斷邏輯是:如果 n 小於 10(個位數),回傳 n;否則,回傳 n 除以 10 的遞迴結果加上 n 對 10 取餘數。
  2. 追蹤執行過程:代入數字 12345。第一次呼叫:recFun(1234) + 5;第二次:recFun(123) + 4... 依此類推。
🤖
AI 詳解
AI 專屬家教

【考點分析】 本題考查「遞迴函數(Recursion)」的追蹤與理解,以及整數除法(/)與取餘數(%)運算子的應用。 【理論/法規依據】

🏷️ 相關主題

C/C++程式設計:語法、邏輯與應用實例
查看更多「[資訊處理] 程式語言」的主題分類考古題

📝 同份考卷的其他題目

查看 107年[資訊處理] 程式語言 全題