所屬科目:程式設計
一、一位程式設計師為解決某一問題找到了一個有效但仍然相當複雜的演算法,因為程式執行完成所花費的時間非常重要,他根據過去所學得知「在相同的執行環境下,針對同一演算法以 C++撰寫的程式其執行速度比以 Java 撰寫的程式來得快」,決定以 C++撰寫程式來實現所找到的演算法。請闡述為何會有上述引號內之說法。(7 分)
二、下面所給 Java 程式有一錯誤以致無法成功釋譯(interpreting),此錯誤落在某一行程式碼中,為讓此程式可以順利釋譯執行產生輸出結果,請指出那一行程式碼敘述有誤,更正其錯誤,並詳述更正的理由。 (7 分)
三、針對下面所給的 C++程式,若輸入是 11 5 -3 42 -20 -43 99 43 -4 11 -220 4 7 9 -1 皆不相同的數,輸出為何?並說明輸出的資料所代表的意義。(8 分)
四、針對下面所給的 C++類別(class)的定義,一程式設計師可以有( A )與( B )兩種使用方式,若某一函數(function)均有使用它們來建立物件,就此程式在編譯時、執行當中以及執行完畢後,詳述這兩種使用方式所建立的物件在記憶體配置與使用上之區別。(8 分)
五、下面所給為一 Java 程式,它的輸入檔 rsData.txt 包含一些以 0 與 1所形成的字串,檔案中每一行(line)只包含一字串。就此程式,若輸入檔的內容如下所示,其輸出為何?並說明輸出的資料所代表的意義。(20 分)
(一)為什麼 operator<<運算子多載(operator overloading)不宣稱為 Array class 的一個成員函數(member function)?請詳述之。 (5 分)
(二)為什麼 copy constructor 如 Array(const Array &)的參數(parameter)必須是 reference type? 請詳述之。 (5 分)
(三)請撰寫一段 C++程式來實現成員函數 Array &operator-(const Array &),此函數將兩個整數陣列 F 與 G 合併成一陣列 R。假設陣列 G是這函數的參數(parameter),合併方式如下:(10 分)● F 中的整數按原順序一一複製到 R 中。●接著 G 中的整數按原順序一一複製到 R 中若此一整數不同時在G 與 F 中。●陣列 R 的大小(即 entry 的數量)需與所複製的整數數量一樣。若所撰寫之程式碼中之陣列名稱不是用F、G、R,請於答案中註明以何變數名稱分別來稱呼F、G、R陣列,未加以註明者,本子題不予計分。此外,請就下面要點標示出所對應的程式碼,未加以標示者,本子題不予計分:●決定陣列 R 的大小之程式碼。● 將陣列 F 的內容複製至陣列 R 的程式碼。●將陣列 G 的內容複製至陣列 R 的程式碼。
(一)為何用這樣的語法”virtual double area() const = 0;”來敘述計算一個幾何形狀面積的成員函數樣板(function prototype)?請詳述之。
(二)請說明輸出結果的第四行”Point(0, 0) is created”是如何產生的。
八、請使用 HTML 與 JavaScript,將本題所提供之程式碼所缺部分(方框1, 2, 3)撰寫完整,設計出可達成下列功能的網頁: (方框 1 占 4 分、方框 2 占 8 分、方框 3 占 8 分,共 20 分)● 產出如下圖( A )( B )( C )之表單(Form) ,表單內主要包含兩個輸入框、一個按鈕、一個 result 區塊及一個 Canvas 元素。輸入框分別為「長度」和「寬度」 ,讓用戶在「長度」和「寬度」的輸入框中可分別輸入長方形的長和寬,單位為像素, 「長度」和「寬度」的數值皆大於0 且小於 500。●按下「計算面積」按鈕後,JavaScript 函式 calculateArea() 會讀取輸入的數值,檢查其有效性,並計算長方形的面積。●計算結果顯示在 result 區塊,並使用 Canvas 元素在網頁上繪製出一個長方形。Canvas 中的長方形會根據輸入的長寬居中顯示,且設定為藍色填充樣式。