高考申論題
105年
[資訊處理] 程式語言
第 一 題
📖 題組:
二、請觀察以下程式碼: class Smart{ public: explicit Smart(int *p = NULL) { sp = p; } ~Smart() { delete(sp); } int& operator*() { return *sp; } private: int *sp; }; int main(void){ Smart p(new int()); *p = 2016; cout << *p << endl; return 0; }
二、請觀察以下程式碼: class Smart{ public: explicit Smart(int *p = NULL) { sp = p; } ~Smart() { delete(sp); } int& operator*() { return *sp; } private: int *sp; }; int main(void){ Smart p(new int()); *p = 2016; cout << *p << endl; return 0; }
📝 此題為申論題,共 5 小題
小題 (一)
請問以下 C++程式碼輸出答案為何?(5 分)
思路引導 VIP
看到此題應立刻辨識出這是 C++ 中「智慧指標(Smart Pointer)」的簡易實作。解題關鍵在於追蹤動態記憶體的配置與生命週期,並理解多載解參考運算子 operator* 回傳參考(reference)的特性,使其能作為左值(L-value)被賦值與讀取。
小題 (二)
請問執行至 return 0 時,是否回收原分配給物件 p 之動態記憶體?(5 分)
思路引導 VIP
看到此題,應先辨識物件 p 是一個配置在堆疊(Stack)上的區域變數,而傳入的 new int() 則是配置在堆積(Heap)上的動態記憶體。接著聯想 C++ 的生命週期與 RAII 機制:當區域變數離開作用域時會發生什麼事(自動呼叫解構子),藉此推導出記憶體是否被釋放。
小題 (三)
請說明此方法為解決何種問題?且程式概念為何?(10 分)
思路引導 VIP
看到自訂類別內部封裝指標,並在建構子賦值、解構子 delete,應立刻聯想到「智慧型指標 (Smart Pointer)」與「RAII」機制。答題時需切分兩部分:一是解決 C++ 手動管理記憶體易導致的 Memory Leak 問題;二是說明 RAII 與運算子多載的概念。
小題 (四)
何謂 CNN(convolutional neural network)?
思路引導 VIP
看到 CNN,首先要點出其最擅長處理的資料類型(影像/網格資料)。接著必須精準寫出它的三大核心機制:卷積層(擷取局部特徵)、池化層(降維與特徵保留)、以及權重共享(大幅減少參數並避免過擬合),最後輔以 AlphaGo 或影像辨識的應用做結。
小題 (五)
在深度學習裡,除了 C 以外,另一種常用的語言為 Python,請試述 Python 跟 C 有何差別?
思路引導 VIP
本題測驗核心程式語言特性之比較。考生應從語言層級的『執行方式(直譯 vs 編譯)』、『型別系統(動態 vs 靜態)』、『記憶體管理(自動 vs 手動)』,以及兩者在『深度學習生態系中的角色定位(膠水語言 vs 底層運算引擎)』切入作答,方能精準拿分。