高考申論題
110年
[資訊處理] 程式語言
第 一 題
📖 題組:
一、語意分析(Semantics Analysis)對於程式語言的正確執行非常重要。 (一)以下是 Java 和 C++程式,請說明程式編譯、執行結果與其原因,以及程式指令之意義或影響。(18 分) (1)Java 程式 static void test1(){ int n; int [] x = new int[n]; } (2)Java 程式 static void test2(){ int n=0; int [] x = new int[n]; } (3)Java 程式 static void test3(){ int n=0; int [] x = new int[n]; x[0]=0; } (4)C++程式 void test4(){ int n; int x[n]; } (5)C++程式 void test5(){ int n=0; int x[n]; x[0] =0; } (6)C++程式 void test6(){ int n=0; int *x = new int[n]; x[0] =0; } (二)請說明 Java 與 C++語言在陣列宣告上的語意分析的方法,與其優缺點。(7 分)
一、語意分析(Semantics Analysis)對於程式語言的正確執行非常重要。 (一)以下是 Java 和 C++程式,請說明程式編譯、執行結果與其原因,以及程式指令之意義或影響。(18 分) (1)Java 程式 static void test1(){ int n; int [] x = new int[n]; } (2)Java 程式 static void test2(){ int n=0; int [] x = new int[n]; } (3)Java 程式 static void test3(){ int n=0; int [] x = new int[n]; x[0]=0; } (4)C++程式 void test4(){ int n; int x[n]; } (5)C++程式 void test5(){ int n=0; int x[n]; x[0] =0; } (6)C++程式 void test6(){ int n=0; int *x = new int[n]; x[0] =0; } (二)請說明 Java 與 C++語言在陣列宣告上的語意分析的方法,與其優缺點。(7 分)
📝 此題為申論題,共 2 小題
小題 (一)
以下是 Java 和 C++程式,請說明程式編譯、執行結果與其原因,以及程式指令之意義或影響。(18 分)
(1)Java 程式
static void test1(){
int n;
int [] x = new int[n];
}
(2)Java 程式
static void test2(){
int n=0;
int [] x = new int[n];
}
(3)Java 程式
static void test3(){
int n=0;
int [] x = new int[n];
x[0]=0;
}
(4)C++程式
void test4(){
int n;
int x[n];
}
(5)C++程式
void test5(){
int n=0;
int x[n];
x[0] =0;
}
(6)C++程式
void test6(){
int n=0;
int *x = new int[n];
x[0] =0;
}
思路引導 VIP
本題考驗考生對於 Java 與 C++ 兩大主流語言在變數初始化、陣列動態分配、以及記憶體邊界檢查上的語意差異。分析時應專注於:1. 局部變數是否強制初始化。2. 陣列大小為 0 時的合法性。3. 陣列索引越界(Index Out of Bounds)的行為。4. 靜態 vs 動態記憶體分配。建議逐一列點說明每個程式碼片段的行為。
小題 (二)
請說明 Java 與 C++語言在陣列宣告上的語意分析的方法,與其優缺點。(7 分)
思路引導 VIP
此題要求從「語意分析方法」的角度來比較。核心概念在於「靜態語意分析(Static Semantics)」與「動態語意分析(Dynamic Semantics)」。思考 Java 如何透過編譯器檢查與 JVM 執行期檢查來達成安全;而 C++ 如何追求極致效能而放棄部分檢查。