阿摩線上測驗 登入

申論題資訊

試卷:99年 - 99 地方政府特種考試_三等_資訊處理:程式語言#27551
科目:程式語言
年份:99年
排序:0

申論題內容

一、下列是以 C、Java 及 Javascript 三種語言撰寫存取陣列(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.println(a[i]); Javascript: var a = [0, 1, 2, 3]; for(i=0; i<=a.length; i++) document.write(a[i]); 請說明變數型態的繫結(Type Binding)和記憶體配置的繫結(Storage Binding) 的種類。

詳解 (共 1 筆)

詳解 提供者:114年高考上榜

這是一個存取陣列的程式片段,不過在三種語言中都有類似的錯誤。在 for 迴圈中,應該使用小於號 (<) 而非小於等於號 (<=) 來判斷迴圈是否要繼續執行。因為陣列的索引是從 0 開始的,所以在使用小於等於號時,會多一次存取陣列的動作,導致存取超過陣列範圍的記憶體,可能造成系統錯誤。

 
以下是修正後的正確程式碼:
 
C:
int a[] = {0, 1, 2, 3};
for (i=0; i<sizeof(a)/sizeof(int); i++)
printf("%d", a[i]);
 
Java:
int[] a = {0, 1, 2, 3};
for (i=0; i<a.length; i++)
System.out.println(a[i]);
 
Javascript:
var a = [0, 1, 2, 3];
for (i=0; i<a.length; i++)
document.write(a[i]);
 
在程式語言中,變數型態的繫結 (Type Binding) 是指變數的資料型態在編譯時期就已經決定,例如在 C 語言中,變數在宣告時就必須指定型態。而記憶體配置的繫結 (Storage Binding) 則是指變數所使用的記憶體空間何時被分配、何時被釋放。一般來說,有靜態配置和動態配置兩種方式:
 
靜態配置:在編譯時期即分配好記憶體空間,例如在 C 語言中,全域變數和靜態變數就是以靜態配置方式分配記憶體。
動態配置:在執行時期根據需要分配記憶體空間,例如在 C 語言中,使用 malloc 函式來分配記憶體空間就是動態配置方式。