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

地方特考三等,民國 109~112 年共 4 份試卷、16 題,其中 12 題附參考答題架構。考這一科的類科:資訊處理。本頁列出歷年全部題目,參考架構只列開頭的「破題」,完整的答題架構、關鍵字與作答提醒請到站內查看。

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

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

  1. 1

    關於下列 C 程式碼,請說明程式執行後,程式碼編號 27~33 的輸出,以及其運算邏輯。(25 分)01 #include <stdio.h> 02 #define SIZE 30 03 typedef enum direction {North, South, East=3, West} dir_t; 04 int f1(int a, int b) { 05 int x = 3.0/a; 06 double y = (a/2)*(b%3) + x; 07 return y; 08 } 09 int f2(dir_t d) { 10 d= (North+East)/2 > d? East: West; 11 return d; 12 } 13 int f3(int a, int b) { 14 if (b==a || b<=1) return a+b; 15 else if (a<=1) return b-a; 16 else return f3(a-b, a-1)+b+a; 17 } 18 int f4(int a, int b) { 19 int data[SIZE]; 20 for (int i=1, k=0; i<a; i++) { 21 if (i%2==0) data[k++]=i; 22 } 23 return data[b]; 24 } 25 unsigned int f5(unsigned int a, unsigned int b) { return (~a&b); } 26 int main() { 27 printf("%d\n", f1(10, 4)); 28 printf("%d\n", f2(South)); 29 printf("%d\n", f3(6, 4)); 30 printf("%u\n", f3(7, 4)); 31 printf("%d\n", f4(20, 5)); 32 printf("%d\n", f4(10, 4)); 33 printf("%u\n", f5(4, 7)); 34 return 0; 35 }

    (25 分)

    參考架構・破題

    本題考 C 語言的型別轉換、整數運算、enum 數值、遞迴追蹤與位元運算。作答重點是逐行手動追蹤,每個輸出都要寫出中間值,讓閱卷者看到運算邏輯,而不是只寫答案。

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

  2. 2

    針對下列 C++程式,請標示出 Except 類別的 f1, …, f6 函式中有問題的函式,與說明其問題之原因;並請說明若將有問題的函式和程式碼刪除,其程式執行後之輸出。(25 分)01 #include <stdexcept> 32 void Except::f3() { 02 #include <iostream> 33 try { 03 #include <string> 34 f1(-1); 04 using namespace std; 35 cout<<"ok"<<endl; 05 class Except{ 36 }catch(exception &e) { 06 public: 37 cout<<"exc2"<<endl; 07 void f1(int c); 38 } 08 void f2(); 39 } 09 void f3(); 40 void Except::f4() { 10 void f4(); 41 try { 11 void f5(); 42 throw out_of_range("no"); 12 void f6(); 43 }catch(out_of_range &e) { 13 }; 44 cout<<e.what()<<endl; 14 int main() { 45 cout<<"exc3"<<endl; 15 Except e; 46 } 16 e.f1(1); 47 } 17 e.f2(); 48 void Except::f5() { 18 e.f3(); 49 try { 19 e.f4(); 50 throw out_of_range("yes"); 20 e.f5(); 51 }catch(exception &e) { 21 e.f6(); 52 cout<<"exc41"<<endl; 22 return 0; 53 }catch(out_of_range &e) { 23 } 54 cout<<e.what()<<endl; 24 void Except::f1(int c) { 55 cout<<"exc42"<<endl; 25 if (c<0) 56 } 26 throw out_of_range("large"); 57 } 27 cout<<"exc1"<<endl; 58 void Except::f6() { 28 } 59 try { 29 void Except::f2() { 60 throw out_of_range("ok"); 30 f1(-1); 61 }finally { 31 } 62 cout<<"exc6"<<endl;; 63 } 64 }

    (25 分)

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

  3. 3

    針對下列 Java 程式碼,請完成統一塑模語言(UML)類別圖(a)~(e);另外請標示出錯誤程式碼行數並說明錯誤原因;以及說明若將錯誤行數程式碼予以註解後,執行其程式的輸出。(25 分)01 import java.io.*; 02 interface Pet { 03 public abstract int eat(int f); 04 }; 05 class Dog implements Pet { 06 public Dog(int f) {food = f; } 07 public int eat(int f) { 08 food += f; 09 return food; 10 } 11 private int food; 12 }; 13 public class Main{ 14 public static void main(String[] args) { 15 Pet d1 = new Pet(); 16 Pet d2 = new Dog(); 17 Pet d3 = new Dog(5); 18 d1.eat(5); 19 d2.eat(5); 20 System.out.println("dog: "+d3.eat(5)); 21 } 22 }

    (25 分)

    參考架構・破題

    本題結合 Java 的介面與實作、建構子規則、編譯錯誤判讀與 UML 類別圖。核心觀念是介面不能被實例化,類別只提供帶參數的建構子時,編譯器不會再產生預設建構子。

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

  4. 4

    針對下列 Python 程式碼,依序在兩個 Terminal 執行 server.py 和 client.py後,在 client.py 輸入 Tom 和 quit;請說明 client.py 的 Terminal 之輸出內容,並說明 Line 03, 04, 05 程式碼的運作邏輯。(25 分)01 # server.py 02 import socket 03 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 04 s.bind(('127.0.0.1', 7000)) 05 s.listen(5) print('wait for connection...') 08 while True: 09 conn, addr = s.accept() 10 print('connected by ' + str(addr)) 11 indata = conn.recv(1024) 12 print('recv: ' + indata.decode()) 13 if 'quit' in indata.decode(): 14 outdata = 'bye ' 15 else: 16 outdata = 'hi ' + indata.decode() 17 conn.send(outdata.encode()) conn.close() 20 if 'quit' in indata.decode(): 21 break 22 print('listen...') 23 s.close() 26 #client.py 27 import socket 28 while True: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('127.0.0.1', 7000)) 32 name = input('>name:') 33 print('send: ' + name) 34 s.send(name.encode()) 35 indata = s.recv(1024) 36 s.close() 37 print('>' + indata.decode()) 38 if 'quit' in name: 39 break

    (25 分)

    參考架構・破題

    本題考 Python socket 程式設計,重點是 TCP 用戶端與伺服器端的溝通流程,以及 client 端畫面上實際印出的順序與文字。

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

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

  1. 1

    有關 C 程式設計,回答下列問題:

    (一)下列程式執行結果為何?(13 分)

    (二)下列程式執行結果為何?(10 分)

    (23 分)

  2. 2

    有關 Python 程式設計,回答下列問題:

    (一)以下程式執行時,輸入正數為 15 和 21 時,其輸出結果分別為何?(14 分)

    (二)以下是將 x = [-5, 16, 30, -11, 26, -22] 整數串列,利用氣泡排序法,由小到大逐次排列,並顯示每一次排列的 python 主程式,此程式執行結果如下:寫出氣泡排序法的 func_2_2(x)函數,來完成上述程式。(11 分)

    (25 分)

  3. 3

    有關 C++程式設計,回答以下問題:建立一個 Rect 類別,其 Rect.h 定義如下:其屬性有 length 和 width,每個屬性內定為 1.0。提供計算矩形周長(perimeter)和面積(area)的成員函數。另外,提供寬度屬性的設定(setWidth)和獲取(getWidth)函數,也提供長度屬性的設定(setLength)和獲取(getLength)函數。設定函數要檢查長度和寬度均為大於 0.0 且小於 20.0 的浮點數。以下為測試 Rect 類別的主程式:執行結果如下:寫出 Rect.h 中的 Rect( ),setWidth( ),setLength( ),getWidth( ),getLength( ),perimeter( ),area( )等 C++函數,來完成上述主程式和執行結果的功能。(25 分)

    (25 分)

    參考架構・破題

    本題考 C++ 類別設計:以封裝隱藏資料成員,並在設定函數中驗證輸入範圍。作答要點是建構子預設值、setter 的檢查條件、getter 與計算函數如何配合主程式。

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

  4. 4

    有關 Java 程式設計,回答下列問題:

    (一)寫一找尋小於 10,000 的完美數(Perfect number)程式,所謂完美數是指:如果一個正整數等於它所有正因數的和,但不包括它自己,則此正整數被稱為完美數。例如,6 是第一個完美數,因為 6 = 3 + 2 + 1。接下來是 28 = 14 + 7 + 4 + 2 + 1。(11 分)

    (二)以下程式功能為何?當輸入 32,56,80 時,其輸出結果分別為多少?(16 分)

    (27 分)

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

  1. 1

    請問下列程式碼之輸出結果為何?(25 分)#include <stdio.h> #include <stdlib.h> int function(int n) { if (n < 10) return n; int sum = 0; while (n > 0) { sum += n % 10; n /= 10; } return function(sum); } int main() { int n = 12345; int output; output = function(n); printf("output%d\n", output); return 0; }

    (25 分)

    參考架構・破題

    本題是遞迴函數的追蹤題,函數的作用是不斷把一個正整數的各位數字相加,直到剩下個位數為止,也就是求數根(digital root)。

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

  2. 2

    假設一堆疊(Stack)的推入(Push)順序為:123、234、345、456、567,並且途中可以隨意彈出(Pop)取值,則下列彈出(Pop)取值之順序有無可能出現?345、567、456、234、123若有可能,請依序將推入(Push)與彈出(Pop)的步驟列出。若無可能,請解釋原因為何?(25 分)

    (25 分)

    參考架構・破題

    本題考堆疊(Stack)後進先出(LIFO)的特性,題目給定推入順序,判斷某個彈出順序是否可能。作答時直接模擬推入與彈出,若可行就列出完整步驟。

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

  3. 3

    請問下列程式碼之輸出結果以及該程式碼的目的為何?(25 分)#include "stdio.h" int f(int a, int b) { if(a%b == 0) return b; return f(b,a%b); } int main(void) { printf("f(21,9) = %d\n",f(21,9)); printf("f(6,44) = %d\n",f(6,44)); return 0; }

    (25 分)

    參考架構・破題

    本題是遞迴版的輾轉相除法(歐幾里得演算法),函數 f(a,b) 計算 a 與 b 的最大公因數(GCD)。作答需寫出兩個輸出結果與程式目的。

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

  4. 4

    請問下列程式碼之輸出結果為何?(25 分)#include <stdio.h> #include <stdlib.h> void function(int a, int b) { printf("a=%d,b=%d\n", a, b); for (i = 0; i < 8; i++) { if (!(a > 10 && b < 10) && (a <= 10 || b >= 10)) { a = a + 1; b = b - 1; printf("a=%d,b=%d\n", a, b); } } } int main() { int x = 5; int y = 10; function(x, y); return 0; }

    (25 分)

    參考架構・破題

    本題表面是迴圈與邏輯運算式的追蹤題,但程式碼中有一個陷阱:函數內的迴圈變數 i 沒有宣告。作答時要先指出編譯問題,再在補上宣告的前提下寫出輸出結果。

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

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

  1. 1

    請使用 Java、C#、C++或 Python 等物件導向程式語言,建立矩陣相關運算的系統,系統一共有三個類別,分別為抽象類別 Matrix,實作類別MatrixMultiply 及 MatrixAdd,其中:(30分)*抽象類別 Matrix 中所有的變數跟方法皆為 protected,主要包含了:.matrix1, matrix2, resultM 三個實數值二維 matrices 資料.一個抽象的 checkDimension( )方法,用來檢查 matrix1跟 matrix2是否適合做所指定的運算.一個抽象的 matrixOperation( )方法,用來對 matrix1跟 matrix2進行運算.一個 setMatrix( )方法,可以將所傳入的兩個 matrices 複製到 matrix1, matrix2.改寫物件的 toString( )方法,可以顯示 matrix1, matrix2及 resultM 的內容*類別 MatrixMultiply,繼承類別 Matrix:.實作 Matrix 中的兩個抽象方法,分別可以實現父類別內 matrix1及matrix2進行乘法時的維度檢查及乘法運算,進行運算前會主動呼叫checkDimension( ),確定是否可以進行相關運算,如無法運算,resultM 會被設定為 null 並回傳,否則進行運算,結果存於父類別的resultM 並回傳.一個空建構子及一個可以接受兩個二維 matrices 的建構子,建構子中呼叫父類別的 setMatrix( )方法,設定 matrix1及 matrix2(空建構子會將 matrix1及 matrix2設為 null)*類別 MatrixAdd,同 MatrixMultiply,僅實作抽象方法時,是以 matrices加法為對象,進行維度的檢查及運算

    (30 分)

    參考架構・破題

    本題考物件導向三大特性中的抽象化、繼承與多型:以抽象類別定義共同介面與資料,由子類別各自實作維度檢查與運算,並示範 protected 存取控制與 toString 覆寫。

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

  2. 2

    請使用 Java、C、C++、C#或 Python,分別使用 iterative 跟 recursive 方法,撰寫二元搜尋法,搜尋已排序的整數值數列。(20分)註:假設數列資料是以具有 array 性質的 list 來存放*模組程式應能接受欲搜尋的資料及已排序數列的相關資料*模組程式應回傳所欲搜尋的資料是否在數列資料中

    (20 分)

    參考架構・破題

    二元搜尋法在已排序數列中每次比較中間元素、將搜尋範圍減半,時間複雜度 O(log n)。本題要求同一演算法分別以迴圈與遞迴實作,並回傳是否找到。

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

  3. 3

    請使用 Java、C、C++、C#或 Python 撰寫相關程式模組,使用 stack(先進後出的線性資料結構)來完成 preorder 的深度優先(Depth First Search)樹狀圖追蹤(traversal)。(25分)註:假設樹狀圖的節點資料可以為任意型別註:假設樹狀圖的節點結構內含三個全域變數:資料、父節點、所有子節點串接的 linked list*模組程式應能接受樹狀圖的樹根*模組程式應以字串數列方式,回傳樹狀圖追蹤的結果(以空白、逗號或換行符號區隔資料字串)*樹狀圖中的節點需另以獨立的 class 定義節點資料、相關的建構子(Constructor)與存取子(Accessor/Mutator)

    (25 分)

    參考架構・破題

    前序深度優先追蹤是先拜訪節點、再依序拜訪各子樹。題目禁止只用遞迴,而要以 stack 模擬遞迴,關鍵在子節點須「反序推入」才能保持由左到右的拜訪順序;另需以獨立類別封裝節點。

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

  4. 4

    請使用 Java、C、C++、C#或 Python 撰寫相關模組程式,可以找出某一整數的所有 generator(s)。(25分)digit-sum:正整數 N 的 digit-sum 定義為「該正整數本身跟構成該整數個別數字的總和」 ,如245的 digit-sum 為256,因為245+2+4+5等於256 generator:正整數 M 是正整數 N 的 digit-sum 時,則 N 為 M 的 generator如245是256的 generator如1979是2005的 generator,因為1979+1+9+7+9等於2005如198及207皆是216的 generator,而198是216最小的 generator*模組程式應能接受使用者由標準輸入裝置所輸入的資料*模組程式中應控制使用者輸入資料的正確性與合法性,如輸入資料非正整數,程式應顯示輸入資料不正確的訊息,然後結束程式*輸入資料無誤,執行程式後,應顯示該輸入資料的所有 generator(s)

    (25 分)

    參考架構・破題

    本題核心是搜尋範圍的推導:若 N 是 M 的 generator,則 N < M,且 N 的各位數和最多為 9 × M 的位數 d,故只需檢查 M − 9d 到 M − 1 之間的整數,再加上輸入驗證與例外處理。

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

其他等別的「程式設計」

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