程式設計概要 申論題歷屆試題與參考架構

普通考試,民國 102~115 年共 14 份試卷、62 題,其中 45 題附參考答題架構。考這一科的類科:資訊處理。本頁列出歷年全部題目,參考架構只列開頭的「破題」,完整的答題架構、關鍵字與作答提醒請到站內查看。

▶ 看完整參考架構(程式設計概要)

115 年(考試時間 90 分鐘) 原卷 PDF

  1. 1

    請完成如下 Java 程式(class Circle: code 1 ~ code 3, class Rectangle code 4 ~ code 6, main code 7 ~ code 8),可以印出如下最後一張圖的內容。 (24 分)第一/三個方框 code 1/4 class Circle/Rectangle 宣告繼承父類別第二個方框 code 2/3 實作 Circle 計算面積、周長的方法第四個方框 code 5/6 實作 Rectangle 計算面積、周長的方法第五個方框 code 7/8 多形方式宣告 Circle/Rectangle 物件程式輸 出如下:

    (24 分)

  2. 2

    請說明如下 C#程式,正確執行時的輸出結果為何?如若無法正確執行(即會出現執行時期的錯誤),請說明應如何修正才能正常執行及輸出結果為何。(20 分)

    (20 分)

  3. 3

    請說明如下 C 程式,正確執行時的輸出結果為何?如若無法正確執行(即會出現執行時期的錯誤),請說明應如何修正才能正常執行及輸出結果為何。(20 分)

    (20 分)

  4. 4

    請說明如下 Python 程式,使用 PQ_recursive(3)呼叫後,正確執行時的輸出結果為何?如若無法正確執行(即會出現執行時期的錯誤) ,請說明應如何修正才能正常執行及輸出結果為何。(18 分)

    (18 分)

  5. 5

    請完成如下的 JavaScript function 觸動方式(第一條粗黑線)及內容(第二~第六條粗黑線) 。可以顯示如下網頁頁面,並在按下"Submit"按鈕後,觸動 JS function 根據使用者的輸入,顯示計算複利的本利和。(18 分)

    (18 分)

114 年(考試時間 90 分鐘) 原卷 PDF

  1. 1

    撰寫一個 Java 程式,使用遞迴計算給定正整數 n 的「卡塔蘭數」 (Catalan Number)C(n),其中 C(n)定義為:C(0) = 1,C(n) = Σ(C(i) * C(n-1-i)) for i from 0 to n-1,使用者輸入 n(n 為非負整數且不超過 15) 。輸出 C(n),並使用 long 型別。執行範例如下:例如 n 輸入 4,輸出 C(4) = 14。C(4) = 14回答下列問題:

    (一)完成(A)程式碼(12 分)

    (二)完成(B)程式碼(3 分)

    (三)完成(C)程式碼(3 分)

    (四)完成(D)程式碼(4 分)

    (五)完成(E)程式碼(3 分)import java.util.InputMismatchException; import java.util.Scanner; public class JP2 { public static long catalan(int n) { (A) return sum; } public static void main(String[] args) { Scanner scanner = (B) int n; try { n = scanner.nextInt(); (C){ System.out.println("輸入不合法!"); scanner.close(); return; } } catch (InputMismatchException e) { System.out.println("輸入不合法!"); scanner.close(); return; } (D) System.out.println((E) + result); scanner.close(); } }

    (25 分)

    參考架構・破題

    本題考查 Java 遞迴函式實作、Scanner 輸入串流控制、try-catch 例外處理及基本邏輯判斷,核心在於依據卡塔蘭數的數學遞迴定義與程式骨架填入正確語法。

    完整答題架構與關鍵字:到站內看全文

  2. 2

    依據以下 C 程式碼,回答下列問題:

    (一) 6~12 行程式碼功能(4 分)

    (二) 13~17 行程式碼功能(4 分)

    (三) 19~29 行程式碼功能(7 分)

    (四) 30~32 行程式碼功能(2 分)

    (五) 33~41 行程式碼功能(4 分)

    (六) 42~45 行程式碼功能(2 分)

    (七) 46~49 行程式碼功能(2 分)

    (25 分)

  3. 3

    依據以下 Python 程式碼,回答下列問題:

    (一) 2~8 行程式碼功能(4 分)

    (二) 10~12 行程式碼功能(3 分)

    (三) 14~15 行程式碼功能(4 分)

    (四) 17~20 行程式碼功能(4 分)

    (五) 22~24 行程式碼功能(3 分)

    (六) 26~29 行程式碼功能(4 分)

    (七) 31~32 行程式碼功能(3 分)

    (25 分)

  4. 4

    依據以下 C#程式碼,回答下列問題:

    (一) 6~19 行程式碼功能(9 分)

    (二) 20~31 行程式碼功能(8 分)

    (三)此程式輸出結果為何?(8 分)

    (25 分)

113 年(考試時間 90 分鐘) 原卷 PDF

  1. 1

    請使用 C、C++、C#、Java 或 Python 程式語言,撰寫一個進位制轉換程式的方法,方法接受一個合法的整數,並以參數形式回傳十進位制分別轉成以 string 資料型別表示的二、八、及十六進位制結果;主程式負責可以持續接受輸入,檢查輸入為合法的整數值後,呼叫轉換程式的方法,並顯示結果,如果輸入不是合法的整數,結束程式的執行。執行範例如下:(25 分)測試一:輸入31 → 呼叫tenBaseTo2_8_16base(31),回傳 11111, 37, 1F測試二:輸入168 → 呼叫tenBaseTo2_8_16base(127),回傳 10101000, 250, A8限制一:所撰寫的方法內,不可以使用任何程式語言內建或第三方提供的套件,即Python/Java不可以使用import,C++、C#不可以使用using再加入套件……限制二:不可使用recursive的方式,亦不可以使用goto

    (25 分)

    參考架構・破題

    本題評量十進位轉二、八、十六進位制演算法的底層實作能力,核心在於不依賴內建轉換套件與遞迴的前提下,利用迴圈與除法餘數運算建構字串,並搭配無窮迴圈與輸入合法性驗證完成主程式流程。

    完整答題架構與關鍵字:到站內看全文

  2. 2

    如下的 Python 程式,請說明執行後,如果輸入"guava"顯示的結果為何?又如果輸入"kiwi"顯示的結果又為何?如無法正確執行,請說明原因,及應如何修正?(25 分)假設 createLL方法會正確地建立單向連結的linked list。

    (25 分)

  3. 3

    請就如下的 Java 程式,說明程式中各方法(包括建構子)執行的順序,及最後顯示的結果。註:執行程序說明,如 class LinkedList 建構子(head, tail)→ ……(30 分)

    (30 分)

  4. 4

    請撰寫 HTML 程式,執行後可以呈現如下的頁面,其中"Year"是最多四位數的整數值,Submit 按鈕後,以 POST 形式傳送表單的資料到後端(20 分)"addMovie.php"處理。

    (20 分)

112 年(考試時間 90 分鐘) 原卷 PDF

  1. 1

    根據以下C程式碼,回答下列問題:1 #include <stdio.h> 2 void g(int *x, int *y) { 3 *x = *y - 1; 4 *y = *y - 2; 5 printf("*x = %d, *y = %d\n", *x, *y); 6 } 8 void f(int *z, int *w) { 9 int n = 13; 10 g(w, &n); 11 printf("*z = %d, *w = %d, n = %d\n", *z, *w, n); 12 } 14 int main() { 15 int i = 21; 16 int j = 5; 17 int n = 137; 18 f(&i, &j); 19 printf("print 1: i = %d, j = %d, n = %d\n", i, j, n); 20 g(&n, &n); 21 printf("print 2: i = %d, j = %d, n = %d\n", i, j, n); 22 return 0; 23 }

    (一)請說明程式碼第8行至第12行中,每一行之運算子符號「*」及「&」操作所代表的意義。(10分)

    (二)請問該程式碼執行後輸出的結果為何?(15分)

    (25 分)

    參考架構・破題

    本題評量 C 語言指標(Pointer)運算子機制、傳址呼叫(Call by Reference / Pointer)、變數可見範圍(Scope)以及指標別名(Aliasing)之程式追蹤能力。

    完整答題架構與關鍵字:到站內看全文

  2. 2

    根據以下C程式碼,回答下列問題:1 #include <stdio.h> 2 int f(int a, int b){ 3 if (b==1) return a; 4 else { 5 int value = a + f(a, b-1); 6 return value; 7 } 8 } 9 int main() { 10 printf("%d\n", f(5, 3)); 11 printf("%d\n", f(0, 0)); 12 }

    (一)請問那一行是此遞迴程式的中止條件?(5分)

    (二)請說明第10行的輸出,以及其運作邏輯。(6分)

    (三)請說明第11行的輸出,以及其運作邏輯。(7分)

    (四)請說明函式f的主要功能,包含輸入參數與輸出結果的關係。(7分)

    (25 分)

    參考架構・破題

    本題評量遞迴呼叫機制(Recursion)、終止條件(Base Case)、堆疊溢位(Stack Overflow)分析及以累加實作乘法之演算法理解。

    完整答題架構與關鍵字:到站內看全文

  3. 3

    關於搜尋法程式:

    (一)說明循序(Sequential)搜尋法,以及二元(Binary)搜尋法的優缺點。(8分)

    (二)以下二元搜尋程式碼有部分錯誤,若要修正為正確程式,請說明「最少」需修改程式碼行數、原因與修改方法。(17分)01 public class BinarySearch{ 02 public int faultyBinarySearch(int[] arr, int x){ 03 int l=0, r=arr.length-1; 04 int m=(l+r)/2; 05 while(l<=r){ 06 m=(l+r)/2; 07 if(arr[m]==x) return m; 08 if(arr[m]>x) l=m+1; 09 if(arr[m]<x) r=m-1; 10 } 11 return -1; 12 } 13 }

    (25 分)

    參考架構・破題

    本題評量循序搜尋與二元搜尋之演算法特性、時間複雜度與前置條件比較,並精準抓出二元搜尋中邊界指標更新方向相反之邏輯缺失,以最少修改行數進行除錯。

    完整答題架構與關鍵字:到站內看全文

  4. 4

    請依據以下Java程式碼回答下列問題:01 import java.util.Scanner; 02 public class MyJavaCode { 03 public static void main(String[] args) { 04 Scanner in = new Scanner(System.in); 05 int a = in.nextInt(); 06 Animal dog = new Dog(); 07 dog.run(a); 08 dog.run(); 09 } 10 } 12 class Dog extends Animal { 13 public void run(int units){ 14 System.out.println("Dog's running speed is " + units); 15 } 16 public void run(){ 17 System.out.println("Dog's default running speed is 20"); 18 } 19 }

    (一)請說明Java中class、abstract class與interface之間的主要差異?(10分)

    (二)請說明上述程式碼那幾行會產生編譯錯誤,以及錯誤的原因。(5分)

    (三)不改變原1-19行程式碼順序的條件下,請修正問題(二)之編譯問題,使之可以正常執行。修正不包含左右大括號「{}」 ,新增或修改之指令行數不可以超過3行。 (10分)

    (25 分)

    參考架構・破題

    本題評量物件導向核心觀念中一般類別、抽象類別與介面之特性差異,並考查 Java 編譯時期型別檢查(Type Checking)、多型宣告(Polymorphism)以及父類別缺漏之除錯修正技巧。

    完整答題架構與關鍵字:到站內看全文

111 年(考試時間 90 分鐘) 原卷 PDF

  1. 1

    以下是完整的 C#程式碼,請回答以下各小題執行的結果為何?(每小題 10 分,共 20 分)

    (一)internal class Program { static void Main(string[] args) { float p = 5.5f; int r = calc_square(p); Console.WriteLine(String.Format("Result:{0}", r)); } static int calc_square (float param) { int result = (int)(param * param); return result; } }

    (二)static void Main(string[] args) { float rate = 2.5f; float amount = 10f; computing(rate, ref amount); Console.WriteLine( String.Format("Rate: {0}, Amount: {1}", rate, amount)); } static void computing(float rate, ref float amt) { rate *= 10; amt *= rate; }

    (20 分)

    參考架構・破題

    本題評量 C# 數值型別轉換(Explicit Cast 截斷小數)以及參數傳遞機制中傳值呼叫(Call by Value)與傳參考呼叫(Call by Reference,ref 關鍵字)之執行結果追蹤。

    完整答題架構與關鍵字:到站內看全文

  2. 2

    目前以瀏覽器為主的應用程式大多以 JavaScript 進行前端程式的設計,請閱讀以下各小題程式碼,並回答問題。(每小題 10 分,共 20 分)

    (一)使用 jquery 套件的 JavaScript,請回答每一列程式碼的意義。1 let iconList = []; 3 for (const extId of fs.ls("/extension")) { 4 let extension = fs.read(`/extension/${extId}/extension.js`); 5 ext = eval(extension); 6 iconList.push(fs.read(`/extension/${extId}/${ext.icon}`)); 7 } 9 for (const [index, element] of Object.entries($("span .treeIcon"))) { 10 if (typeof element === "object") { 11 $(element).append(`<img src="${iconList[index]}" >`); 12 } 13 }

    (二)以下程式碼請依執行先後說明執行的結果。1 <button onclick="dialog()">Confirm</button> 2 <p id="result"></p> 3 <script> 4 window.addEventListener('load', function () { 5 alert('Hello!'); 6 }) 8 function dialog() { 9 var message; 10 if (confirm("Press a button!")) { 11 message = "You pressed OK!"; 12 } else { 13 message = "You pressed Cancel!"; 14 } 15 document.getElementById("result").innerHTML = message; 16 } 17 </script>

    (20 分)

    參考架構・破題

    本題評量前端 JavaScript 程式碼逐行語意解析(包含檔案讀取、動態執行 eval、jQuery DOM 操作)以及事件驅動模型(網頁載入生命週期與互動對話方塊流程)之理解。

    完整答題架構與關鍵字:到站內看全文

  3. 3

    請使用 C, C++, C#, Java 或 Python 程式語言撰寫一支完整的程式將班級學生的百分制成績轉換為等第制成績,轉換的規則如下:(20 分)百分制成績 等第制成績成績 ≥(平均數 +2個標準差) A(平均數+1個標準差)≤成績<(平均數+2個標準差) B平均數 ≤成績 <(平均數+1個標準差) C(平均數–1個標準差)≤成績 <平均數 D(平均數–2個標準差)≤成績 <(平均數–1個標準差) E成績 <(平均數–2個標準差) F程式執行需讓使用者輸入班級所有學生的百分制成績,成績以空白格隔開,程式再將班級的平均成績、變異數與標準差、每位學生的編號、百分制成績與等第制成績列印出。程式可使用所採用之程式語言的統計函數、模組或套件來求算平均成績、變異數與標準差,以下為程式執行之參考範例。 (備註:斜體加外框線之整數為使用者所輸入,其餘皆為程式執行的輸出。)請輸入班級修課學生的百分制成績(以空白格隔開) :100 90 80 70 60 50 40 30 20 10班級平均成績=55班級變異數成績=825班級標準差成績=28.72第 1 位學生的百分制成績=100, 等第制成績=B第 2 位學生的百分制成績=90, 等第制成績=B第 3 位學生的百分制成績=80, 等第制成績=C第 4 位學生的百分制成績=70, 等第制成績=C第 5 位學生的百分制成績=60, 等第制成績=C第 6 位學生的百分制成績=50, 等第制成績=D第 7 位學生的百分制成績=40, 等第制成績=D第 8 位學生的百分制成績=30, 等第制成績=D第 9 位學生的百分制成績=20, 等第制成績=E第 10 位學生的百分制成績=10, 等第制成績=E

    (20 分)

    參考架構・破題

    本題評量完整程式實作能力,核心在於字串切割輸入解析、統計指標(母體平均數、變異數、標準差)演算法計算、常態分佈等第區間多重條件判斷(if-elif-else),以及格式化文字輸出。

    完整答題架構與關鍵字:到站內看全文

  4. 4

    問卷常被使用來進行服務滿意度調查,以下數據是某單位資訊中心新系統使用的滿意度調查結果,數值為人次。請以 Python 程式製作一張圓餅圖,圖上須顯示出百分比及標籤。(20 分)非常滿意 :65滿意 :97普通 :103不滿意 :45非常不滿意 :51

    (20 分)

    參考架構・破題

    本題評量考生使用 Python 進行資料視覺化(Data Visualization)的實作能力。作答應以主流繪圖套件 matplotlib.pyplot 為核心,結構化呈現套件載入、資料結構定義、圓餅圖繪製函式之參數配置,並精確達成題目要求的百分比與文字標籤顯示。

    完整答題架構與關鍵字:到站內看全文

  5. 5

    以下二小題是完整的物件導向程式碼,請回答以下各小題。(每小題 10 分,共 20 分)

    (一)以下為 Python 完整程式碼,請回答執行的結果為何?class Employee: all = [] def __init__(self, idno, first_name, last_name): self.id = idno self.first_name = first_name self.last_name = last_name Employee.all.append(self) def __repr__(self): return f"(ID={self.id}, Name={self.first_name} {self.last_name})" if __name__ == "__main__": e1 = Employee('001', 'Peter', 'Lee') e2 = Employee('002', 'Ann', 'Lo') print(Employee.all)

    (二)以下為 C#的類別程式碼,類別 Employee 內的欄位不可以由非繼承的類別讀取或寫入,請檢視此程式是否可以正確執行?若無法正確執行的話,請寫出正確的程式碼。public abstract class Employee { private string id; private string name; private int age; public Employee() { } } public class Staff : Employee { public Staff(string _id, string _name, int _age) { this.id = _id; this.name = _name; this.age = _age; } }

    (20 分)

    參考架構・破題

    本題測驗物件導向程式設計(OOP)的核心概念。第一小題聚焦於 Python 類別屬性(Class Attribute)、物件建構子與物件字串表示法(__repr__)之追蹤;第二小題聚焦於 C# 存取修飾詞(Access Modifiers)的封裝與繼承存取控制。

    完整答題架構與關鍵字:到站內看全文

110 年(考試時間 90 分鐘) 原卷 PDF

  1. 1

    PHP 是網際網路應用系統常用之程式語言。

    (一)請寫出以下 PHP 程式的執行結果,並說明得到此結果的原因。(10 分)<?php $a = array("a" => 1, "b" => 0); if($a["b"] == NULL) echo "null"; else echo "not null"; ?>

    (二)以下 PHP 程式(檔名 input.php)以瀏覽器初次執行會顯示右下畫面。在「Your name」欄位輸入資料後按 OK 鈕,會顯示輸入資料;若未輸入資料按 OK 鈕,則會再次顯示右下畫面。請完成程式(I)~(III)指令,使程式正確執行上述功能。(15 分)<html> <head><title>Input Data</title></head> <?php if(is_null( (I) )||( (I) === "")){ ?> <form method=" (II) " action="input.php"> <p>Your name: <input type="text" name="name"></p> <input type="submit" value="OK"> </form> <?php } else { ?> <p>Thank you, <? (III) $_GET['name'] ?></p> <?php } ?> </html>

    (25 分)

    參考架構・破題

    本題測驗 PHP 網頁程式開發之核心語法。第一小題針對鬆散比較(Loose Comparison)與型別轉換特性進行診斷;第二小題則考驗網頁表單傳遞機制(GET 方法)、超全域變數存取及條件渲染之實務應用。

    完整答題架構與關鍵字:到站內看全文

  2. 2

    程式語言 C 的程式碼是由許多函式(Function)組成。#include <stdio.h> int memo[20][20], number=0; int B(int n, int k){ if((n >= 0)&&(k >= 0)&&(n >= k)) if((k == 0)||(k == n)){ memo[n][k] = 1; return 1; } else if(memo[n][k] > 0) return memo[n][k]; else{ memo[n][k] = B(n-1, k-1)+ B(n-1, k); number+=2; return memo[n][k]; } else return 0; } void f(int N, int M){ int sum=0; for(int i=1; i<=N; i++){ if(i>=10)break; if(i%3==0)continue; sum = sum + B(i, 2); } printf("%d %d ", sum, number); } int g(int N, int M){ if((N<=0)||(M<0))return 1; else return(M + N + g(M-2, N-3)); } int main(){ f(20, 10); printf("%d\n", g(20, 10)); return 0; }

    (一)請說明上述程式執行的結果。(15 分)

    (二)請說明上述程式中 break 與 continue 指令行的意義,並比較兩個指令之功能差異。(5 分)

    (三)請說明 C 程式使用遞迴(Recursion)與迴圈(Loop) ,在時間、空間與程式可讀性之優缺點。(5 分)

    (25 分)

    參考架構・破題

    本題綜合評量 C 語言之程式追蹤、流程控制陳述式及演算法實作概念。第一小題為包含動態規劃記憶化遞迴(巴斯卡三角形組合數)與非對稱遞迴函式的綜合追蹤;第二小題探討迴圈控制指令之語意差異;第三小題比較遞迴與迴圈在演算法分析與軟體維護上的核心取捨。

    完整答題架構與關鍵字:到站內看全文

  3. 3

    Java 是常用的物件導向程式語言。

    (一)請寫出以下三個 Java 程式的執行結果。(15 分)

    ⑴ class square { int edge; square(int e){ edge = e; } } public class app { public static void main(String args[]) { square s1 = new square(10); square s2 = new square(10); if(s1 == s2) System.out.print("Equal square"); else System.out.print("Not equal square"); } }

    ⑵ public class app { public static void main(String args[]) { int a[] = {1,2,3,4,5}; show(a); } public static void show(int i){ System.out.println(i); } public static void show(int b[]){ for(int i = 0; i < b.length; i++) System.out.print(b[i] + " "); } }

    ⑶ class Circle { protected double radius; Circle(double r){ radius = r; } void show(){ System.out.print(radius); } } class Coin extends Circle { private int value; Coin(double r, int v){ super(r); value = v; } void show(){ System.out.print(radius+" "+value); } } public class app { public static void main(String args[]){ Circle coin = new Coin(3.0, 10); coin.show(); } }

    (二)下列 Java 程式之需求為:設定變數 color 的值並輸出。請指出其編譯錯誤原因,並針對該錯誤原因說明程式如何修正使之能正確執行。 (10 分)class Car { private String color; void showcolor() { System.out.println(color); } } public class app { public static void main(String args[]) { Car c1 = new Car(); c1.color = "blue"; c1.showcolor(); } }

    (25 分)

    參考架構・破題

    本題測驗 Java 物件導向程式設計的核心特性。第一小題透過三個獨立程式碼檢驗物件參考比較、方法多載(Overloading)及繼承多型下的動態繫結(Dynamic Binding);第二小題考驗封裝性(Encapsulation)原則、存取修飾詞權限限制及常見修正模式。

    完整答題架構與關鍵字:到站內看全文

  4. 4

    程式語言 C 可使用不同資料型別的變數存取資料與傳遞函式的參數。#include <stdio.h> #include <stdlib.h> #include <string.h> void myFunction(int *a, int b, int *c, char *d){ c[1] = *a + b; d[*c] = d[2]; b = 17; int *r = c + 1; c = a; *c = *a + 1; printf("during:%s %d %d %d %d\n", &d[1], *a, b, *c, *r); } int main(){ char animal[7] = "cat"; int x = strlen(animal); int z[3] = {1, 3, 5}; int * y =(int *)malloc(sizeof(int)*3); int *p = &x; int *q = &z[1]; q[1] = *p + 10; printf("before:%s %d %d %d %d\n", animal, *z, z[1], z[2], x); myFunction(p, x, q, animal); printf("after:%s %d %d %d %d\n", animal, z[0], z[1], z[2], x); return 0; }

    (一)請說明上述程式執行的結果。(15 分)

    (二)請說明比較 C 程式宣告一個陣列時,如上述程式變數 y、z,使用一般陣列變數與指標變數的異同。(5 分)

    (三)請說明比較 C 程式語言中,函式參數傳遞方法,傳值呼叫(call by value)與傳址呼叫(call by address)異同。(5 分)

    (25 分)

109 年(考試時間 90 分鐘) 原卷 PDF

  1. 1

    下面的遞迴程式執行後,印出的信息為何?(作答必須解釋計算過程,只寫答案而未加解釋,只能得部分分數。)(25分)# include <stdio.h> int new1(int p){ if (p > 90) return(new1(new1(p-11))); return(p-10); } int new2(int p){ if (p < 91) return(new2(p+11)); return(p); } int new(int p){ return(new1(new2(p))); } int main(int argc, char **argv){ int q; q = 65; printf("new(%d)= %d.\n", q, new(q)); q = 95; printf("new(%d)= %d.\n", q, new(q)); q = 100; printf("new(%d)= %d.\n", q, new(q)); q = 104; printf("new(%d)= %d.\n", q, new(q)); q = 110; printf("new(%d)= %d.\n", q, new(q)); return(0); }

    (25 分)

    參考架構・破題

    本題考遞迴追蹤。new(p)=new1(new2(p)):new2 先把 p 每次加 11,直到 p≥91;new1 則在 p>90 時做「雙重遞迴」new1(new1(p-11)),p≤90 時直接回傳 p-10。作答要把每一層呼叫展開,不能只寫答案。

    完整答題架構與關鍵字:到站內看全文

  2. 2

    請參考以下Java程式。如果第一個輸入是25,第二個輸入是-34(負34) 。最後印出來是什麼?(作答必須解釋計算過程,只寫答案而未加解釋,只能得部分分數。)(25分)import java.util.Scanner; public class JavaExample { public static void main(String args[]) { int num1, num2; Scanner scanner = new Scanner(System.in); System.out.print("Enter first number:"); num1 = scanner.nextInt(); System.out.print("Enter second number:"); num2 = scanner.nextInt(); num1 = num1 ^ num2; num2 = num1 ^ num2; num1 = num1 ^ num2; scanner.close(); System.out.println("The First number is "+num1); System.out.println("The Second number is "+num2); } }

    (25 分)

    參考架構・破題

    本題考 XOR 互換(XOR swap):不用暫存變數,靠 a^a=0、a^0=a 與交換律、結合律,三次 XOR 把兩個整數對調。輸入 25 與 -34,最後輸出兩數互換。

    完整答題架構與關鍵字:到站內看全文

  3. 3

    請問下列程式執行後,印出結果為何?(作答必須解釋計算過程,只寫答案而未加解釋,只能得部分分數。)(25分)(define return #f) (+ 1 (call/cc [lambda(cont) (set! return cont) 1] )) (return 22)

    (25 分)

    參考架構・破題

    本題是 Scheme 的 call/cc(call-with-current-continuation)。重點是:call/cc 把「目前這個位置之後還要做的計算」包成一個 continuation 物件,存進 return 後,日後再呼叫 return 就會回到當初那個位置、以新值繼續算。

    完整答題架構與關鍵字:到站內看全文

  4. 4

    請問下列程式執行後,印出結果為何?(作答必須解釋計算過程,只寫答案而未加解釋,只能得部分分數。)(25分)#include <iostream> using namespace std; bool sqst(int arr[], int n, int sum){ if (sum == 0) { return true; } if (n < 0 || sum < 0) { return false; } bool include = sqst(arr, n - 1, sum - arr[n]); bool exclude = sqst(arr, n - 1, sum); return include || exclude; } int main(){ int arr[] = { 7, 3, 2, 5, 8 }; int sum = 14; int n = sizeof(arr)/ sizeof(arr[0]); if (sqst(arr, n - 1 , sum)) cout << "Yes"; else cout << "No"; return 0; }

    (25 分)

    參考架構・破題

    本題是子集合加總(Subset Sum)問題的遞迴解:對每個元素分「選(include)」與「不選(exclude)」兩條路,只要有一條路讓剩餘總和剛好歸零就回傳 true。陣列 {7,3,2,5,8} 能否湊出 14?

    完整答題架構與關鍵字:到站內看全文

108 年(考試時間 90 分鐘) 原卷 PDF

  1. 1

    Java 程式 PreStars 會印出什麼結果?維持巢狀 for 迴圈架構,小修PreStars,讓它印出以下的星星構圖。(25 分)2 public class PreStars 3 { 4 public static void main(String[] args) 5 { 6 for (int i=1; i<=5; i++) { 7 for (int j=1; j<=i; j++) 8 System.out.print('*'); 9 System.out.println(); 10 } 11 } 12 } ********** ********* ******** ******* ****** ***** **** *** ** *

    (25 分)

    參考架構・破題

    本題兩部分:先追蹤原本巢狀 for 迴圈印出的圖形,再在不改變巢狀結構的前提下修改,使它印出第一列 10 顆星、逐列遞減到 1 顆星的倒三角形。

    完整答題架構與關鍵字:到站內看全文

  2. 2

    下列為 Reverse class 的程式規範與其執行結果,試以遞迴(recursive)的方式完成副程式 reverse(int[] arr, int x),撰寫時,必須使用相同的參數名稱與資料型態。reverse(int[] arr, int x)會回傳一個倒過來擺置的整數串:arr[n-1], arr[n-2], … arr[x+1], arr[x],假設 arr 內共有 n 個元素,而且 x <= n。(25 分)2 public class Reverse 3 { 4 public static String reverse(int[] arr, int x) 5 { 7 } 9 public static void main(String[] args) 10 { 11 int[] intArr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 12 String results = reverse(intArr, 2); 13 System.out.println(results); 14 System.out.println(reverse(intArr, 7)); 15 } 16 } 10 9 8 7 6 5 4 3 10 9 8

    (25 分)

    參考架構・破題

    本題要以遞迴寫出 reverse(int[] arr, int x),回傳從 arr[n-1] 倒著排到 arr[x] 的字串。核心是找出終止條件與「把小問題結果接在前面」的遞迴關係。

    完整答題架構與關鍵字:到站內看全文

  3. 3

    下列 Python 程式的執行結果為何?(15 分)list = [2,2,3,7,7,7,9,9,10,10] count = 1 current = list[0] for i in list: if i > current : list[count] = i count += 1 current = i last = len(list) if last > count: for i in range(count, last): list.pop() print("count = ", count) print("list = ", list)

    (15 分)

    參考架構・破題

    本題程式是在已排序串列上「原地去除重複元素」:count 記錄已放好的不重複個數,遇到比 current 大的新值就寫到 list[count],最後把多餘的尾巴 pop 掉。要逐步追蹤串列內容。

    完整答題架構與關鍵字:到站內看全文

  4. 4

    數學中複數是實數的延伸,複數通常表示為 a+bi 或(a, b),其中 a, b 為實數,分別稱為複數的實部與虛部,i 為虛數單位,且 i2=-1。複數的加、減、乘、除運算定義如下:(a+bi)+(c+di) = (a+c)+(b+d)i (a+bi)–(c+di) = (a–c)+(b–d)i (a+bi)*(c+di) = (ac-bd)+(ad+bc)i (a+bi)/(c+di) = ((ac+bd)/(c2+d2))+((bc-ad)/(c2+d2))試參考以下程式回答問題: (35 分)

    (一)此程式的列印結果為何?

    (二)利用 add(),在 ComplexTest.java 中加入一行程式以印出“x + y = (3.0, 3.0)”

    (三)於 Complex.java 中撰寫public Complex division(Complex right)回傳資料型態與參數命名必須分別為 Complex 與 right。

    (四)利用 division(),在 ComplexTest.java 中算出 y=(2, 2)的倒數(如果 y’*y=1則稱 y’為 y 的倒數) ,並列印出有意義的訊息。

    (五)撰寫 public String standardForm()以印出複數的另一表示法 a+bi。注意0.0+bi 要表示為 bi;a+0.0i 要表示為 a;a+1.0i 要表示為 a+i。2 public class Complex 3 { 4 private double real; 5 private double imaginary; 7 public Complex() 8 { 9 this(0.0, 0.0); 10 } 11 public Complex(double r, double i) 12 { 13 real = r; 14 imaginary = i; 15 } 16 public Complex add(Complex right) 17 { 18 return new Complex(real + right.real, 19 imaginary + right.imaginary); 20 } 21 public Complex subtract(Complex right) 22 { 23 return new Complex(real - right.real, 24 imaginary - right.imaginary); 25 } 26 public String toString() 27 { 28 return String.format("(%.1f, %.1f)", real, imaginary); 29 } 30 } // end class Complex 2 public class ComplexTest 3 { 4 public static void main(String[] args) 5 { 6 Complex x = new Complex(1, 1); 7 Complex y = new Complex(2, 2); 9 System.out.printf("x = %s%n", x.toString()); 10 System.out.printf("y = %s%n", y); 11 } 12 } // end class ComplexTest

    (35 分)

    參考架構・破題

    本題考物件導向類別設計:讀懂 Complex 類別的建構子、add、subtract、toString,再擴充除法與標準表示法,並在測試類別中呼叫。五小題要逐一回答,程式碼要能編譯。

    完整答題架構與關鍵字:到站內看全文

107 年(考試時間 90 分鐘) 原卷 PDF

  1. 1

    請回答以下對 C/C++程式語言的敘述正確與否?如果敘述是錯誤的,需說明正確敘述為何。(每小題 3 分,共 30 分)

    (一)程式執行的結果與預期的不同,這種錯誤稱為執行期錯誤(Runtime Error)。

    (二)屬自由格式(Free-Form)、隱含型別宣告(Implicit Type Declaration)程式語言。

    (三) switch 選擇結構中,default 敘述為選擇性,故可省略。

    (四)陣列(Array)無法存放一連串資料型別不同的相關資料。

    (五)當&&運算子中的只要有一個運算元為真時,則該運算式的結果為真。

    (六)可使用結構(Structure)陣列變數的名稱指向該陣列中的任一個資料。

    (七)程式在編譯階段即配置完成其所需記憶體的方式稱為動態記憶體配置(Dynamic Memory Allocation)。

    (八)當不同的物件收到相同的訊息時,會以各自的方法作處理的特點稱為多載(Overloading)。

    (九)子類別將繼承自父類別的方法重新定義,而且不會影響到父類別的方法,這個特點稱為多載(Overloading)。

    (十)子類別可多重繼承自父類別內所有的資料成員與成員函數。

    (30 分)

    參考架構・破題

    本題十個是非小題,考 C/C++ 基本觀念與物件導向術語。每題先判斷對錯,錯的要寫出正確敘述,關鍵在分清錯誤種類、型別宣告、記憶體配置,以及多型、多載、覆寫三個名詞。

    完整答題架構與關鍵字:到站內看全文

  2. 2

    請問以下程式輸出的結果為何?(10 分)#include <iostream> #include <cstdlib> using namespace std; int main(void){ int i=0, sum=0; while(i < 21) { if(i % 3 != 0) { i++; continue; } sum += i++; } cout<< "i=" <<i<< ", SUM=" << sum <<endl; return 0; }(請接第二頁)全三頁第二頁

    (10 分)

    參考架構・破題

    本題考 while 迴圈搭配 continue 與後置遞增 i++。只有 i 是 3 的倍數才會累加,其餘直接 i++ 跳過,要追蹤 sum 累加哪些值、迴圈結束時 i 是多少。

    完整答題架構與關鍵字:到站內看全文

  3. 3

    請問以下程式輸出的結果為何?(10 分)#include <iostream> #include <cstdlib> using namespace std; void fun1(int, int); void fun2(int *, int *); void fun3(int *, int, int); int main(void){ int a[]={1, 2, 3, 4, 5}, i; fun1(a[1], a[3]); fun2(a, a+2); fun3(a, 5, 0); cout<< "執行所有函數後,陣列的內容為:" << endl; for(i=0; i<5; i++) cout<< “a[” << i << “]=” << a[i] <<endl; return 0; } void fun1(int x, int y){ int tmp; tmp=y; y=x; x=tmp; } void fun2(int *x, int *y){ int tmp; tmp=*y; *y=*x; *x=tmp; } void fun3(int *ptr, int n, int num){ *(ptr+n-1) = num; }

    (10 分)

    參考架構・破題

    本題考 C++ 傳值呼叫(call by value)與以指標傳址(call by address)的差異:fun1 只交換副本,原陣列不變;fun2 透過指標真正交換兩個元素;fun3 以指標運算改寫最後一個元素。

    完整答題架構與關鍵字:到站內看全文

  4. 4

    以下是一個完整的 Python 程式,請問執行後的結果為何?(10 分)for i in range(1, 7): #產生一個 1,2,3,4,5,6 的整數序列for j in range(i, 1, -1): #-1 表示階值(step value)print(" ", end="") for j in range(1, 7-i+1): print(j, end="") print()(請接第三頁)全三頁第三頁

    (10 分)

    參考架構・破題

    本題考 Python 的 range(start, stop, step) 與 print 的 end 參數。外層 i 從 1 到 6,每列先印若干空白再印一串遞減長度的數字,形成右對齊的倒三角形。

    完整答題架構與關鍵字:到站內看全文

  5. 5

    撰寫一個完整的 C/C++、Java 或 Python 程式,讓使用者輸入姓名(name)、小考成績(quiz)、期中考成績(midterm)與期末考成績(final)後,將這三個成績傳入呼叫函數 calScore(),該函數需傳回所計算後的學期成績;程式再將學期成績傳入呼叫函數 calGrade(),該函數需傳回成績等第結果;最後程式需從螢幕顯示出使用者所輸入的姓名、學期成績與成績等第結果。程式顯示結果後,需再詢問使用者是否繼續輸入,當使用者輸入’Y’或’y’時則繼續輸入,否則結束離開程式。(20 分)學期成績計算公式為:小考成績*0.15+期中考成績*0.35+期末考成績*0.5成績等第標準如下:學期成績 成績等第學期成績≧90 A 89≧學期成績≧80 B 79≧學期成績≧70 C 69≧學期成績≧60 D學期成績≦59 F

    (20 分)

    參考架構・破題

    本題考程序式程式設計的基本功:輸入、函式呼叫與回傳值、if-else 分級判斷、以及「詢問是否繼續」的迴圈控制。選一種最熟的語言,寫出能直接執行的完整程式。

    完整答題架構與關鍵字:到站內看全文

  6. 6

    撰寫一個完整的 C/C++、Java 或 Python 程式,以物件導向方式設計一個名為 transcript的類別,此類別包括以下屬性與方法:(20 分)¾ name 代表姓名的私有(private)字串資料項目¾ quiz 代表小考成績的私有數值資料項目¾ midterm 代表期中考成績的私有數值資料項目¾ final 代表期末考成績的私有數值資料項目¾ 建構函數可將新建立物件之姓名作初始化¾ 設計 calScore()公有方法計算學期成績(score)的私有數值資料項目¾ 設計 calGrade()公有方法計算成績等第(grade)的私有字元資料項目¾ 設計 printReport()方法從螢幕顯示出學生姓名、學期成績與成績等第結果¾ 學期成績計算公式與成績等第標準同第五題程式需設計迴圈讓使用者輸入資料以驗證程式的正確性,直到使用者輸入’n’或’N’時結束程式。

    (20 分)

    參考架構・破題

    本題是第五題的物件導向版本,重點在封裝:資料成員設為 private、以建構子初始化、以 public 方法計算與輸出,主程式以迴圈建立物件驗證。

    完整答題架構與關鍵字:到站內看全文

106 年(考試時間 90 分鐘) 原卷 PDF

  1. 1

    用 C 語言撰寫一個函式 void bit_pattern(unsigned num),它能將一個 32-bit整數數值 0 與 1 的 bit pattern 列印出來。例如數值是 444 所列印出來的 bit pattern 應該是 00000000 00000000 00000001 10111100?(15 分)

    (15 分)

    參考架構・破題

    本題考位元運算:用右移與 AND 遮罩逐一取出 32 個位元,由最高位(第 31 位)印到最低位,並每 8 位加一個空白。

    完整答題架構與關鍵字:到站內看全文

  2. 2

    用 C 語言撰寫一個函式,能反轉一單向鍊結串列(singly linked list):struct node* reverse(struct node *h)。單向鍊結串列範例如圖一。 (25 分)函式內請勿複製結點,其中節點的資料結構為struct node { int d; struct node *next; } h h 3 5 8 反轉 8 5 3圖一、單向鍊結串列範例

    (25 分)

    本題含圖表或公式,請對照原卷 PDF。

  3. 3

    用 C 語言撰寫反覆結構(for-loop)及遞迴(recursive)2 個版本的函式,分別計算出費式數列(Fibonacci Sequence) :int F(int n),其數學定義如下:F0 = 0, F1 = 1, and Fn = Fn–1 + Fn–2 for n >1。(25 分)例如: 呼叫 F(6) 計算出 8 and F(7) 計算出 13。

    (25 分)

    參考架構・破題

    本題考迴圈與遞迴兩種解法的寫法與比較:迭代版用兩個變數滾動累加,遞迴版直接照數學定義寫出基底條件與遞迴關係。

    完整答題架構與關鍵字:到站內看全文

  4. 4

    在物件導向語言(JAVA or C++),宣告變數為 public, private, protected,其差異性為何?(10 分)全一張(背面)

    (10 分)

    參考架構・破題

    存取修飾子決定類別成員能被哪些程式碼存取,是封裝與資訊隱藏的實作手段;作答要分別定義三者並以表格比較,再點出 Java 與 C++ 的差異。

    完整答題架構與關鍵字:到站內看全文

  5. 5

    AJAX 即「Asynchronous JavaScript and XML」(非同步的 JavaScript 與 XML 技術)為一重要且普遍用來產生高互動網頁的技術,可讓使用者在執行 AJAX 網頁時就像在執行桌上電腦程式(desktop application)一樣順暢(如圖二)。

    (一)請說明 AJAX 三個主要技術為何並說明其目的。(9 分)

    (二)並請以以下網頁為例,當使用者輸入字元後的網頁反應,說明傳統非 AJAX 與 AJAX網頁不同之處。(10 分)

    (三)請說明網頁程式碼中‘xmlhttp.readyState==4’,‘xmlhttp.status==200’及‘"gethint.php?q="+str’代表的意義為何?(6 分)<html lang="en-US"> <head><script> function showHint(str) { if (str.length==0) { document.getElementById("txtHint").innerHTML=""; return; } else { var xmlhttp=new XMLHttpRequest(); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("txtHint").innerHTML=xmlhttp.responseText; } }; xmlhttp.open("GET","gethint.php?q="+str, true); xmlhttp.send(); } } </script></head> <body> <div class="w3-example"> <h3>Example</h3> <form action="javascript:void(0);" class="w3-code-result"> <p><b>Start typing a name in the input field below:</b></p> <p> Name: <input type="text" id="txt1" onkeyup="showHint(this.value)" size="20"> &nbsp;&nbsp;Suggestions: <span id="txtHint"></span> </p> </form> </div></body></html>圖二、2 個 AJAX 範例程式執行結果

    (25 分)

    本題含圖表或公式,請對照原卷 PDF。

105 年(考試時間 90 分鐘) 原卷 PDF

  1. 1

    依據下方 C 語言程式碼,請完成ㄧ布林(Bool)型態之函式 Triangle( ),並填寫呼叫此一函式之程式碼。此一函式參數包含整數型態陣列 Edge,Edge 陣列內含有三個代表三角形邊長之數值。請撰寫判斷此三個邊長是否可構築成為一個三角形之函式,函式運算後,依回傳結果分別顯示 true 或 false 値,分別代表能否構成三角形。(25 分)bool Triangle (/*請填寫函式參數*/){ /*請填寫函式程式碼*/ } int main(){ int Give[3]={6,7,8}; printf("%s\n",/*請填寫主程式程式碼*/?"true":"false" ); }

    (25 分)

    本題含圖表或公式,請對照原卷 PDF。

  2. 2

    根據 IEEE 754 二進位浮點數算術標準,請問下列 C 語言程式碼執行後輸出為何?(25 分)int main(){ float A = 100; float B = -125.53125; printf("%08X\n", *(unsigned int *) &A); printf("%08X\n", *(unsigned int *) &B); }

    (25 分)

    參考架構・破題

    本題考 IEEE 754 單精度浮點數格式:1 位符號、8 位指數(偏移 127)、23 位尾數,並以指標轉型把浮點數的位元直接當成無號整數以十六進位印出。答案為 42C80000 與 C2FB1000。

    完整答題架構與關鍵字:到站內看全文

  3. 3

    觀察以下 C++語言之程式,試回答下列問題:int main(){ double a = 0.2 * 0.2, b = 0.04; if(a == b){ cout << "a = b" << endl; } else if(a < b){ cout << "a < b" << endl; } else{ cout << "a > b" << endl; } cout << a << endl << b << endl; }試問該程式之輸出為何?(10 分)之輸出為 a = b、a < b 或 a > b,請說明其原因?(15 分)全一張(背面)

    (25 分)

    參考架構・破題

    本題考浮點數的表示誤差:0.2 與 0.04 都無法以二進位精確表示,0.2 × 0.2 的運算結果與直接存放的 0.04 不是同一個 double,因此 == 比較失敗。在 IEEE 754 雙精度下輸出為 a > b、0.04、0.04。

    完整答題架構與關鍵字:到站內看全文

  4. 4

    觀察以下 C 語言之程式,回答下列問題:C 語言程式碼,試問執行結果輸出為何?(10 分)承上題,根據 Result 比對 Source 陣列內容,試問此轉換目的為何?(15 分)int priority(char Operation){ if (Operation == '+' || Operation == '-'){ return 1; } else if (Operation == '*' || Operation == '/'){ return 2; } else { return 0; } } void Transform(char* Source, char* Result){ char stack[50] = { '\0' }; int i = 0, j = 0, top = 0; for (; Source[i] != '\0'; i++){ if (Source[i] == '('){ stack[++top] = Source[i]; } else if (Source[i] == ')'){ while (stack[top] != '(') { Result[j++] = stack[top--]; } top--; } else if (Source[i] == '*' || Source[i] == '/' || Source[i] == '+' || Source[i] == '-'){ while (priority(stack[top]) >= priority(Source[i])){ Result[j++] = stack[top--]; } stack[++top] = Source[i]; } else Result[j++] = Source[i]; } while (top != 0){ Result[j++] = stack[top--]; } } int main(){ char Source[50] = { " a-d+(b*e)/c" }, Result[50] = { '\0' }; Transform(Source, Result); for (int i = 0; Result[i] != '\0'; i++){ printf("%c", Result[i]); } return 0; }

    (25 分)

    參考架構・破題

    本程式以堆疊實作中序(infix)轉後序(postfix)運算式:運算元直接輸出,運算子依優先權進出堆疊,括號控制範圍。逐步追蹤可得輸出為「 ad-be*c/+」(開頭有一個空白,因 Source 第一個字元是空白,被當作運算元輸出)。

    完整答題架構與關鍵字:到站內看全文

104 年(考試時間 90 分鐘) 原卷 PDF

  1. 1

    請舉例說明⑴輸入方式限制⑵數值資料檢查⑶執行時期例外處理⑷資料存取權限控制等四種程式設計技巧,如何防止使用者輸入的資料,或程式執行過程產生的資料,發生資料值錯誤、不合理現象、執行錯誤程式中斷、或未符合資料限制等狀況。(20 分)

    (20 分)

    參考架構・破題

    本題考防禦式程式設計:從輸入端限制、數值驗證、例外處理到存取控制,層層把關資料正確性。四項都要「說明概念+舉具體程式例子」。

    完整答題架構與關鍵字:到站內看全文

  2. 2

    如下程式,使用堆疊(Stack)的概念來存放數字基底轉換的結果,轉換完成後,再將 Stack 內的資料一一取出,作結果的顯示;請依程式中標號的說明,於程式中填入適當的程式碼,以完成十進位數字轉換為二、四、八、十六等四種進位制的數值。(每小題 3 分,共 15 分)

    (一)創造 ArrayList 物件

    (二)設定迴圈起始狀態

    (三)改變控制變數

    (四)加入餘數 0~F 的字元到 ArrayList

    (五)從最後加入的資料開始,一一取出存放在 ArrayList 中的資料(ArrayList 資料的長度在 Java 中可使用 size()方法取得)void base10toBaseNum(int sourceNum, int targetBase) { String ss = ""; if (sourceNum < 0) { ss = ("轉換基底的數字必須大於等於零"); } else if ((targetBase == 2) || (targetBase == 4) || (targetBase == 8) || (targetBase == 16)) { char [] base16 = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; ArrayList result = /* (一) 創造 ArrayList 物件 */; for (int rr = /* (二) 設定迴圈起始狀態 */; rr > 0; rr = /* (三) 改變控制變數 */) { result.add(/* (四) 加入餘數 0~F 的字元到 ArrayList */); } ss = ("轉換" + sourceNum + "到基底" + targetBase + ": "); for(int i = /* (五) 由後往前取出 ArrayList 內容資料 */; i--) { ss += ("" + result.get(i)); if ((i%4) == 0) { ss += (" "); } } ss += "\n"; } else { ss = ("轉換至的基底只能是 2, 4, 8, 16"); } /* print out ss */ } // End of base10toBaseNum(請接第二頁)全三頁第二頁

    (15 分)

    參考架構・破題

    本題以「除基底取餘數」做進位轉換:餘數由低位到高位產生,依序放入 ArrayList(當作堆疊),最後由最後一筆往前取出即為正確順序。

    完整答題架構與關鍵字:到站內看全文

  3. 3

    如 下 程 式 碼 所 構 成 的 方 法 / 函 數 ( method/function ) , 在 呼 叫 時 , 使 用recursiveFlowControl(3, "ss", "dd", "aa"),請問該方法被呼叫執行後,顯示結果為何?如為語法有誤或執行時期發生中斷,請說明原因,並請修正錯誤或引起中斷的程式,讓程式可以正常執行結束並顯示結果。註:System.out.println();會將小括號中的字串顯示到螢幕輸出裝置。(15 分)void recursiveFlowControl(int num, String s1, String s2, String s3) { System.out.println("... I am here ..."); if (num == 1) { System.out.println("num==1, Move from " + s1 + " to " + s2); } else { recursiveFlowControl(num-1, s1, s3, s2); System.out.println("num!=1, Move from " + s1 + " to " + s2); recursiveFlowControl(num-1, s3, s2, s1); } } / / End of recursiveFlowContorl

    (15 分)

    參考架構・破題

    此方法即河內塔(Tower of Hanoi)遞迴:把 num 個盤子從 s1 移到 s2,以 s3 為輔助。程式邏輯正確、可以正常結束;唯一的問題是結尾註解寫成「/ /」中間有空白,若照抄屬語法錯誤,須改為「//」。

    完整答題架構與關鍵字:到站內看全文

  4. 4

    請使用 C-like 程式語言(C, C++, C#, Java…),撰寫一方法接受兩個已經由小到大排序好,但長度不等的整數型資料序列,回傳合併所傳入的兩個資料序列為一個由大到小排序好的新資料序列。限制:所撰寫的方法內,不可以使用所使用語言內建的排序方法輔助兩個排序好資料序列的合併。(20 分)

    (20 分)

    參考架構・破題

    本題考合併(merge)演算法:兩個已遞增排序的序列,可用雙指標在線性時間合併;因要求遞減輸出,可從兩序列尾端往前比較,每次取較大者放入結果。

    完整答題架構與關鍵字:到站內看全文

  5. 5

    如下的 HTML 程式執行後,執行頁面為何?請以圖示解釋執行結果。又當按下"Submit"動作按鈕後,會將帳號、密碼等資料,以不透過 URL 的方式,傳送給login.php 程式來處理,請問應於表單標記中加入那些屬性,及相對應的資料值。(15 分)<html> <head> <title> Log in </title> </head> <body> <center><h1><strong>網際網路應用</strong></h1></center> <hr /> <form id="Login" name="Login"> <p> <label for="account"> Account </label> <input name="account" type="text" id="account" /> </p> <p> <label for="Password"> Password </label> <input name="Password" type="password" id="Password" /> </p> <p> <input type="reset" name="Reset" id="Reset" value="Reset" /> <input type="submit" name="Submit" id="Submit" value="Submit" /> </p> </form> </body> </html>(請接第三頁)全三頁第三頁

    (15 分)

    參考架構・破題

    本題考 HTML 表單結構的判讀與表單送出方式。先依標記順序畫出畫面,再說明 form 標記缺少 action 與 method 屬性,要以 POST 送到 login.php。

    完整答題架構與關鍵字:到站內看全文

  6. 6

    就物件導向程式而言,現有如下的繼承關係的類別。(15 分)class GrandFather { String name = "GrandFather"; String getName() { return name; } String whereIam() { return "class GrandFather"; } } // End of GrandFather class class Father extends GrandFather { String getName() { return name; } String whereIam() { return "class Father"; } } // End of Father class class Son extends Father { String name = "Son"; String getName() { return name; } String whereIam() { return "class Son"; } } // End of Son class class Daughter extends Father { String getName() { return name; } String whereIam() { return "class Daughter"; } } // End of Daughter class於其他類別方法中使用如下的 statement:Father f1 = new GrandFather(); Father f2 = new Son(); Father f3 = new Daughter(); System.out.println(f2.getName()); System.out.println(f3.getName()); System.out.println(f2.whereIam()); System.out.println(f3.whereIam());請問編譯執行後,會顯示什麼結果?如為語法有誤或執行時期發生中斷,請說明原因,並將該 statement 予以忽視,然後說明可以正確執行 statement 所產生的結果。

    (15 分)

    參考架構・破題

    本題考 Java 繼承中的型別相容(向上轉型)、方法覆寫的動態繫結,以及欄位遮蔽(field hiding)是靜態繫結。先指出第一行敘述的錯誤,再逐行推出輸出。

    完整答題架構與關鍵字:到站內看全文

103 年(考試時間 90 分鐘) 原卷 PDF

  1. 1

    請完成下述程式片段。請完成下方兩個函數 is_odd()及 is_even(),使其可以用相互遞迴(mutual recursion)的方式檢查所輸入的正整數為奇數或偶數。不管 n 是奇數或是偶數,is_odd(n)及 is_even(n)都應回傳正確的布林值(TRUE 或 FALSE)。請扼要解說程式之正確性。(15 分)bool is_even(unsigned int n) { if (??????) return ?????? else return ?????? } bool is_odd(unsigned int n) { if (??????) return ?????? else return ?????? }請撰寫單一遞迴函數(single recursive function)check 以判斷所給之正整數為奇數或偶數,若為奇數回傳 FALSE,若為偶數回傳 TRUE。請扼要解說程式之正確性。(15 分)

    (30 分)

    參考架構・破題

    本題考遞迴設計與正確性證明:相互遞迴以「n 是偶數 ⇔ n-1 是奇數」逐步遞減到 0;單一遞迴則每次減 2。正確性以數學歸納法說明。

    完整答題架構與關鍵字:到站內看全文

  2. 2

    研究下方的片段 C 語言程式並回答下列問題。scanf (“%d”, &n); if (n > 0) for (m=0, i=1; i<=n; m++, i=i*2); printf (“%d\n”, m);請說明該程式片段最後輸出的數字的意涵,也就是 m 與 n 的關係。(10 分)請改寫該程式片段,在不使用迴圈的情況下可以得到相同的結果。(15 分)scanf (“%d”, &n); if (n > 0) ?????? printf (“%d\n”, m);全一張103年 公 務人員 普通考 試試 題 代號:44420(背面)

    (25 分)

    參考架構・破題

    本題考迴圈追蹤:i 從 1 開始每次乘 2,m 計數迴圈執行次數,結果 m 等於 n 的二進位位數,即 floor(log2 n) + 1。第二小題以對數函式取代迴圈。

    完整答題架構與關鍵字:到站內看全文

  3. 3

    假設書架上有七本書,已知每一本書的高度都不一樣,請以下列方式進行排序:第一個與第二個位置上的書先比較,較低的書放到第一個位置,較高的書放到第二個位置;再來第二個與第三個位置的書相比較,依此類推。第一輪做完後,再從頭開始進行第二輪的比較與交換,然後再進行第三輪、第四輪等,直至第六輪結束為止。若這七本書高度分別為 15, 12, 17, 18, 11, 14, 19,請問每一輪需交換書本位置的次數為何?(10 分)若總共有 n 本書本,最多共需交換幾次書本才能排序完成?(5 分)請宣告並說明如何以一維陣列 books[n]來表示書本的位置與高度。(5 分)請以上述宣告的一維陣列資料結構為基礎,用 C, C++或 Java 寫出上述排序演算法。(10 分)

    (30 分)

    參考架構・破題

    本題描述的就是氣泡排序(bubble sort):相鄰兩兩比較、較大者往後換,每輪把最大值推到最後。先逐輪追蹤交換次數,再談最壞情況、資料表示與程式實作。

    完整答題架構與關鍵字:到站內看全文

  4. 4

    請完成下列網頁程式以呈現如下表之資料。品牌 庫存 銷售數Volvo 18 20 Luxgen 57 145 Toyota 41 78 Honda 17 15請宣告二維陣列$cars 並事先儲存上述四種汽車品牌、庫存、銷售數。(5 分)請用迴圈印出上述表格內容。(10 分)<!DOCTYPE html> <html> <body> <?php $cars = . . . . . . </body> </html>

    (15 分)

    本題含圖表或公式,請對照原卷 PDF。

102 年(考試時間 90 分鐘) 原卷 PDF

  1. 1

    (一)假設目前陣列 PrimeAry 儲存所有比 n 小的質數,撰寫一函數 IsPrime(n)判別 n 是否為質數。譬如:IsPrime(3)回覆 True,IsPrime(4)回覆 False。(15 分)

    (二)撰寫一函數 BuildPrime(m),使用 IsPrime 函數建立陣列 PrimeAry,使其擁有小於或等於 m 的所有質數。譬如:BuildPrime(5)將使 PrimeAry 陣列依序儲存 2, 3, 5,而 BuildPrime(10)將使 PrimeAry 陣列依序儲存 2, 3, 5, 7。(15 分)

    (30 分)

    參考架構・破題

    本題考以已知質數表做試除法判斷質數,再用遞增建表的方式產生質數陣列。重點是善用「PrimeAry 已存所有比 n 小的質數」這個前提,以及 BuildPrime 由小到大呼叫 IsPrime 能維持此前提。

    完整答題架構與關鍵字:到站內看全文

  2. 2

    (一)假設目前陣列 PrimeAry 儲存所有比 n 小的質數,撰寫一遞迴函數(Recursive function)FactorTimes(n, p),回覆正整數 n 含有質數 p 的因數次數。譬如:792 = 23 × 32 × 11 , FactorTimes(792, 2) 回覆 3 , FactorTimes(792, 3) 回覆 2 ,FactorTimes(792, 5)回覆 0,FactorTimes(792, 11)回覆 1。(15 分)

    (二)假設目前陣列 PrimeAry 儲存所有比 n 小的質數,撰寫一函數 PrimeFactor(n)求出正整數 n 的質因數及其因數次數,並將結果以字串傳回。譬如:PrimeFactor(20)將回傳字串"2^2 * 5",PrimeFactor(72)將回傳字串"2^3 * 3^2",而 PrimeFactor(97)將回傳字串"97"。(15 分)

    (30 分)

    參考架構・破題

    本題考遞迴計算某質因數的次數,以及利用質數表進行質因數分解並組成字串。關鍵是遞迴的基底條件,以及字串格式(次方大於 1 才加 ^、因數間以 * 連接、剩餘的大質數要補上)。

    完整答題架構與關鍵字:到站內看全文

  3. 3

    (一)若將上述方法(主程式除外)封裝成一個類別 PrimeClass,請實踐上述規劃的及。(10 分)

    (二)使用網頁技術來建立下列系統:要求使用者輸入一個小於 10000 的正整數,判別它是否在要求的範圍內;該判別方法(名稱為 Check_Inp_Val)必須在客戶端(Client)完成,不可在伺服器(Server)完成。若輸入值在範圍內,則呼叫伺服器端處理函數 mainPrime;否則在網頁直接發布相關訊息,中斷處理(不呼叫處理函數 mainPrime)。(20 分)

    (三)請撰寫處理函數 mainPrime,讓系統可以求出輸入數值的質因數分解。(10 分)

    (40 分)

其他等別的「程式設計概要」

題目來源:考選部考畢試題查詢平臺(政府資訊公開資料);參考架構為本站自撰,僅供準備方向參考,非官方標準答案。最後更新:。