高考申論題
106年
[資訊處理] 程式語言
第 三 題
三、下列是以 C,Java,Javascript,C++,PHP 及 JSP 六種語言撰寫存取陣列(array)的
程式片斷,請問此程式片斷執行後,會產生什麼結果?如果有結果錯誤,錯誤訊息
為何?各用什麼方法可避免錯誤?請寫出完整的程式來說明你的方法。(25 分)
C: int a[] = {0, 1, 2, 3}; for(i=0; i<=sizeof(a); i++) printf("%d", a[i]);
Java: int[] a = {0, 1, 2, 3}; for(i=0; i<=a.length; i++) System.out.print(a[i]);
Javascript: var a = [0, 1, 2, 3]; for(i=0; i<=a.length; i++) document.write(a[i]);
C++: int a[] = {0, 1, 2, 3}; for(i=0; i<=sizeof(a); i++) printf("%d", a[i]);
PHP: $a = array(0,1,2,3); for($i=0; $i<=count($a); $i++) echo $a[$i];
JSP: int[] a = {0, 1, 2, 3}; for(i=0; i<=a.length; i++) out.print(a[i]);
📝 此題為申論題
思路引導 VIP
看到這題先確認各語言的『陣列長度取得方式』與『陣列邊界檢查機制』。注意到所有程式碼的迴圈條件都誤用了 <=(導致存取到 index=length),且 C/C++ 誤用 sizeof(a)(取得的是總 Bytes 數而非元素個數)。接著依據各語言的型別特性及例外處理機制(Exception, Notice, undefined, 或印出垃圾值),分別精確寫出執行結果、錯誤訊息與修正代碼。
🤖
AI 詳解
AI 專屬家教
【破題】本題考查各主流程式語言對「陣列邊界存取(Array Bounds Access)」的處理機制與記憶體管理特性。程式片段共同的邏輯錯誤在於「迴圈終止條件設定不當(誤用 <= 或 sizeof)」,導致陣列越界存取(Out of Bounds)。
【論述】
一、 C 語言
▼ 還有更多解析內容