高考申論題
107年
[資訊處理] 程式語言
第 二 題
📖 題組:
以下二小題是完整的 C/C++程式碼,請回答執行的結果為何?(每小題 10 分,共 20 分)
以下二小題是完整的 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;
}
#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..." <
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
- 辨別呼叫方式:這是本題的核心。觀察
fun2和fun3的參數類型。fun2(struct data *ptr)接受指標,屬於「傳址呼叫 (Pass by Address)」,對內容的修改會影響原變數。
小題 (一)
#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;
}
#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
- 識別演算法:觀察
recFun函數,它是一個遞迴函數。判斷邏輯是:如果n小於 10(個位數),回傳n;否則,回傳n除以 10 的遞迴結果加上n對 10 取餘數。 - 追蹤執行過程:代入數字 12345。第一次呼叫:
recFun(1234) + 5;第二次:recFun(123) + 4... 依此類推。