程式設計概要 申論題歷屆試題與參考架構
地方特考四等,民國 102~114 年共 13 份試卷、68 題,其中 59 題附參考答題架構。考這一科的類科:資訊處理、離島・資訊處理。本頁列出歷年全部題目,參考架構只列開頭的「破題」,完整的答題架構、關鍵字與作答提醒請到站內查看。
114 年(考試時間 90 分鐘) 原卷 PDF
- 1
給定 n x m(n 行 m 列)影像的各像素灰度值,灰度值為 0 至 255 之間的整數(包含 0 和 255) ,像素的相鄰性是指當前像素與周邊像素的鄰接性質,八鄰域(eight neighbors)包括對應當前像素位置的上、下、左、右、左上、右上、左下、右下像素位置,換言之,為原像素及其上下左右與對角線相鄰八個像素位置,如下圖所示:P當對此影像進行降低雜訊的模糊化處理時:1.影像四周最外側的像素灰度值不變;2.影像中間各像素新灰度值由原像素及其八鄰域像素原灰度值的平均值(捨入到最接近的整數)取代原像素值。輸入資料第一行包含兩個整數 n 和 m,表示影像中像素點的行數和列數,1<=n<= 100,1<=m<= 100,接下來 n 行,每行 m 個整數,表示影像中每個像素灰度值。相鄰兩個整數之間用單個空格隔開,每個元素均在 0~255 之間。例如一個 5x6 影像及其各像素灰度值如下所示:5 6 100 0 120 0 50 70 50 110 200 0 0 180 70 50 100 120 200 0 150 120 50 50 100 10 10 110 0 50 120 30請使用 Java 或 C++實作一完整程式,讀入一個影像行數、列數和像素灰度值,並使用八鄰域像素灰度值對影像進行降低雜訊的模糊化處理,再輸出模糊化後影像。 (20 分)
(20 分)
參考架構・破題
本題是二維陣列的 3×3 平均濾波(均值模糊):邊框像素原樣輸出,內部像素以自己加八鄰域共 9 格的原始值取平均、四捨五入後取代。關鍵是「用原值計算」,必須另開一個輸出陣列,不能邊算邊覆寫。
完整答題架構與關鍵字:到站內看全文
- 2
請問以 a(7,20)呼叫下列 a()函式,函式執行完後其回傳值為何?並需詳述執行過程。(20 分)int a(int n, int m) { if (n >= 10) { if (m < 16) { return n + m ; } else { return a(n, m-2) + m ; } } else { return a(n+1, m) + n ; } }
(20 分)
參考架構・破題
本題測驗遞迴函式(Recursive Function)的呼叫追蹤、基礎終止條件(Base Case)判定及堆疊回溯運算。解題關鍵在於依序拆解遞迴呼叫的展開式,釐清兩層條件分支對參數 n 與 m 的遞減與遞增控制,最後精確推導出函式最終回傳值為 102。
完整答題架構與關鍵字:到站內看全文
- 3
若以 f(30)呼叫下列 f()函式,會列印出那些數字?(20 分)void f(int n) { printf ("%d\n", n); while (n != 1) { if ((n%3)==1) { n = n + 2; } else if((n%3)==2) { n = n + 1; } else { n = n / 3; } printf ("%d\n", n); } }
(20 分)
參考架構・破題
本題測驗 C 語言迴圈控制結構(while 迴圈)與多分支條件判斷式(if-else if-else)之狀態追蹤與餘數(模數)運算能力。作答關鍵在於細心模擬整數除法與餘數變更歷程,並準確記錄標準輸出函式 printf 的每次印出數值,推導出由 30 至 1 的完整輸出序列。
完整答題架構與關鍵字:到站內看全文
- 4
給定下列程式,其中 t 被宣告為全域變數,請問程式執行後輸出為何?(20 分)int t=10; //全域變數void sum(int a) { int t=20; for( ; a>=0; a=a-5) { printf("%d,", t); t=t+a; printf("%d,", t); } } int main () { printf("%d,", t); sum(t); printf("%d,", t); t=15; printf("%d", t); return 0; }
(20 分)
參考架構・破題
本題測驗 C 語言之變數有效範圍(Scope)、生命週期(Lifetime)、變數遮蔽效應(Variable Shadowing)及 for 迴圈執行狀態追蹤。核心在於辨析函式內部宣告之區域變數如何遮蔽同名全域變數,以及確認區域變數釋放後全域變數保持原值不變之行為。
完整答題架構與關鍵字:到站內看全文
- 5
單鏈結串列(Singly Linked List)特點是鏈結串列的連結方向為單向,對單鏈結串列的訪問要通過從頭部開始,依序往下讀取,每個節點(node)包含兩部分:存儲數據的資料(data)和指向下一個節點的指標(pointer) ,節點定義如下:struct Node{ int data; struct Node *next; }單鏈結串列中的所有節點通過指標串聯,最後一個節點的指標指向空值(null),表示單鏈結串列結尾。請使用 Java 或 C++實作一完整程式,通過從頭部(head)開始,依序往下讀取,訪問一單鏈結串列操作,輸出單鏈結串列中節點個數,若單鏈結串列中不存在任何節點,為一個空鏈結串列,則輸出-1。(20 分)
(20 分)
參考架構・破題
本題測驗單向鏈結串列(Singly Linked List)之結構定義、指標走訪(Traversal)操作與特殊邊界條件處理。核心要求為走訪計算串列之節點總數,並特別針對空串列(Empty List)依照題意正確輸出 -1。
完整答題架構與關鍵字:到站內看全文
113 年(考試時間 90 分鐘) 原卷 PDF
- 1
(一)請針對 C++, Java 及 Python 三種程式語言,以列表方式比較四種特性:執行方式(編譯或直譯)、物件導向繼承機制、性能(執行速度)、應用場景領域。(15 分)
(二)請用 C, C#, C++, Java 或 Python 程式語言撰寫一個程式,定義一個100 元素的陣列,每一個元素可以儲存的資料包含 10 個字元長度的字串,用以儲存姓名,一個整數用以儲存薪資,及一個浮點數用以儲存年資,提供使用者一筆一筆輸入這些資料。(15 分)
(30 分)
參考架構・破題
本題測驗主流程式語言(C++、Java、Python)核心特性之橫向比較,以及自訂複合資料結構陣列在大量資料輸入時的程式實作能力。作答應以清晰表格歸納三種語言特性,並以結構化程式碼展示包含字串、整數、浮點數之複合資料型態宣告與逐筆輸入迴圈。
完整答題架構與關鍵字:到站內看全文
- 2
(一)請將下列 C++語言的迴圈程式以 for 迴圈方式改寫,並寫出此程式片段輸出的結果。(5 分)int i=1; while (i <= 10) { if (i < 5 && i !=2) std::cout << 'X'; i ++; }
(二)下列 C++程式有一行錯誤,使得編譯無法通過。請列出那一行錯誤,並寫出正確程式碼。修正後執行此程式,使用者輸入 153 後輸出為何?(5 分)1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int number, originalNumber, remainder, result = 0; 6 cout <<"請輸入三位數: "; 7 cin >> number; 8 originalNumber = number; 9 while (originalNumber != 0) 10 { 11 remainder = originalNumber%10; 12 result += remainder*remainder*remainder 13 originalNumber /= 10; 14 } 15 cout << "輸出為:"<< result; 16 return 0; 17 }
(三)執行下列 C++程式,當使用者輸入 32,其輸出結果為何?(5 分)#include <iostream> using namespace std; int main() { int x; cout << "請輸入一個正整數:"; cin >> x; for (int i = 1; x > 0; i++) { if (x % i == 0) cout << i << " "; if (x == i) { i = 0; cout << "\n"; cout << "請輸入一個正整數:" ; cin >> x; } } return 0; }
(四)請利用 C, C#, C++, Java 或 Python 程式語言寫一個副程式,求二個正整數的最大公因數(GCD)及最小公倍數(LCM)。(10 分)
(25 分)
參考架構・破題
本題為綜合程式設計實務題,涵蓋迴圈控制轉換與執行追蹤、編譯語法偵錯、因數分解演算法追蹤,以及經典數論演算法(輾轉相除法求最大公因數與最小公倍數)之副程式設計。
完整答題架構與關鍵字:到站內看全文
- 3
(一)下列 C++程式,當程式執行後輸入二個正整數,「7 10」,其輸出為何?(5 分)#include <iostream> using namespace std; void getNumbers(int& input1, int& input2); void function1(int& var1, int& var2); void function2(int var1, int var2); void showResult(int result1, int result2); int main() { int first, second; getNumbers(first, second); function1(first, second); showResult(first, second); return 0; } void getNumbers(int& input1, int& input2) { cout <<"輸入二個正整數: "; cin >> input1 >> input2; } void function1(int& var1, int& var2) { int temp; temp = var1; var1 = var2; var2 = temp; } void showResult(int result1, int result2) { cout << "二個數輸出結果為:" << result1 << " " << result2 << endl; }
(二)若 C++程式包含下列宣告:class Automobile { public: void setPrice(double newPrice); void setProfit(double newProfit); double getPrice(); private: double price; double profit; double getProfit(); }且主程式(main function)包含下列宣告,並設定完成其 member 變數中的值。Automobile Toyota, Nissan;下列那些指令敘述(statements)在主程式中是合法的(legal),那些是不合法的(illegal)?(10 分)Toyota.price = 5233.99; Nissan.setPrice(4000.24); double aPrice, aProfit; aPrice = Nissan.getPrice(); aProfit= Nissan.getProfit(); aProfit= Toyota.getProfit(); Toyota = Nissan;
(三)請說明物件導向程式中多型(Polymorphism)的概念。多型通常可以透過多載(Overloading)和覆寫(Overriding)來實現。請說明多載與覆寫的定義與特性。(15 分)
(30 分)
- 4
(一)請說明下列二個 PHP 程式的輸出結果。(8 分) <!DOCTYPE html> <html> <body> <?php $i = 1; while ($i < 6) { if($i == 3) break; echo $i; $i++; } ?> </body> </html> <!DOCTYPE html> <html> <body> <?php $x = 5; function myTest() { echo "<p>Variable x inside function is: $x</p>"; } myTest(); echo "<p>Variable x outside function is: $x</p>"; ?> </body> </html>
(二)請寫一個 PHP 程式,隨機產生一個 0-100 的數。若該數小於等於50,則輸出該數及「小」,若大於 50 小於 100,則輸出該數及「大」。例如當產生 65 時,輸出為「65 大」。(7 分)
(15 分)
參考架構・破題
第(一)小題考 PHP 的 while 與 break 流程,以及變數作用域(函式內看不到外部全域變數);第(二)小題考亂數產生與 if/elseif 條件判斷、字串輸出。
完整答題架構與關鍵字:到站內看全文
112 年(考試時間 90 分鐘) 原卷 PDF
- 1
撰寫遞迴函式是重要程式設計技巧之一。
(一)請說明下列遞迴函式 findnum 目的為何?(5 分)int items, price[100];//全域變數 int main () { int i, num; int findnum (int i, int num) { // 讀入數量及所有正整數價錢if (i < items) { scanf("%d", &items); if (num < price[i]) for (i=0; i<items; i++) num = price[i]; scanf ("%d", &price[i]); num = findnum (i+1, num); num = findnum (0, -1); } printf ("The ... is %d\n", num); return num; return 0; } }
(二)請將 findnum()函式改寫成非遞迴的函式。(10 分)
(三)請說明下列非遞迴程式目的為何?(5 分)void convert (long m) { int main() { long count=-1, n=0; long m; while (0 < m) { n = n*10 + m%2; scanf("%ld",&m); m = m / 2; printf(" The ... value is "); count++; convert (m); } printf ("\n"); while (0 < count) { return 0; printf ("%ld", n%10); } n = n / 10; count--; } printf ("%ld", n%10); return; }
(四)請將 convert()函式改寫成以遞迴運算的函式,且函式內不可新增變數。(10 分)
(30 分)
參考架構・破題
本題測驗遞迴與非遞迴(迭代)演算法的分析與轉換能力,內容涵蓋全域陣列走訪極值尋找演算法,以及利用呼叫堆疊(Call Stack)特性進行進位制轉換(十進位轉二進位)之程式改寫。
完整答題架構與關鍵字:到站內看全文
- 2
請說明下列 PHP 程式設計的觀念。
(一) Class 和 Interface 的差異為何?請從可否宣告屬性、可否實例化、可否有實作方法 3 個面相加以說明。(5 分)
(二)若前端網頁以 HTML 程式上傳一個檔案到後端,請以 PHP 寫出後端要處理的部分,包括檢查檔案是否上傳成功、檢查檔案是否存在(不可覆蓋) 、將上傳的檔案搬移到指定位置。(15 分)前端:<form method="post" enctype="multipart/form- data" action="upload.php"> <input type="file" name="to be uploaded"> <input type="submit" value="Upload"> </form>後端:<?php ... ?>
(20 分)
參考架構・破題
本題測驗 PHP 物件導向設計中類別(Class)與介面(Interface)之語法規範差異,以及 Web 後端處理 HTML 檔案上傳的安全驗證、防覆蓋邏輯與安全搬移程序之實務撰寫能力。
完整答題架構與關鍵字:到站內看全文
- 3
請說明下列程式設計概念的差異。(每小題 5 分,共 20 分)
(一)請說明傳址(call-by-reference)與傳值(call-by-value)參數傳遞的差異。
(二)請說明靜態及動態記憶體(static memory allocation vs. dynamic memory allocation)配置的主要差別。
(三)請說明語法錯誤(syntax error) 、語意錯誤(semantic error)、執行錯誤(run-time error)的主要差別。
(四)上述的錯誤,編譯程式過程中可以發現的是那一種錯誤(可複選)?
(20 分)
參考架構・破題
本題測驗程式語言核心理論基礎,內容涵蓋函式參數傳遞機制、記憶體生命週期與配置管理、各類程式錯誤分類特徵,以及編譯器各階段(語法分析與語意分析)偵錯能力評析。
完整答題架構與關鍵字:到站內看全文
- 4
超商預計發展合併集點卡程式,說明如下。若有 n 張集點卡要合併,但只能兩張兩張合併,因此共需合併 n-1 次才能把點數全部集中到一張卡。2張合併時會扣掉較少點數那張的 1/10 點數(無條件進位至整數)做為手續費。例如,若有 A, B, C 3 張集點卡要合併,且點數分別為 25, 30, 51點。若先合併 A, B,再合併 C,則會扣掉 3+6 點,因此合併後剩 97 點,這也剛好是最差合併策略下的合併總點數;但在最佳的合併策略下(先合併 B, C,再合併 A),則可有 100 點。(每小題 15 分,共 30 分)
(一)請寫 best_case() 函式,計算 n 張集點卡合併過後最多可有多少點數。
(二)請寫 worst_case() 函式,計算 n 張集點卡合併過後最少可有多少點數。#include <stdio.h> int a[101], n; // 最多可有 100 張集點卡要合併,實際上要合併 n 張卡int best_case () { ... } int worst_case () { ... } int main () { scanf ("%d", &n); for (i=0; i<n; i++) scanf ("%d", a[i]); printf ("Best case: %d points\n", best_case()); printf ("Worst case: %d points\n", worst_case()); return 0; }
(30 分)
參考架構・破題
本題測驗貪婪演算法(Greedy Algorithm)策略分析、無條件進位整數運算技巧與排序應用。核心在於推導出每次合併扣除手續費之數學公式,並透過控制合併順序使兩兩合併手續費累積達到極小化(最佳策略)或極大化(最差策略)。
完整答題架構與關鍵字:到站內看全文
111 年(考試時間 90 分鐘) 原卷 PDF
- 1
針對以下 Java 程式,執行後輸出為何?(25 分)public class Count { public static int A(int x) { if (x < 20) x = A(x+5) + B(x); return x; } public static int B(int x) { System.out.print("*"); return 3 * x; } public static int C(int x) { System.out.print("*"); return 3 * A(x-3); } public static boolean D(boolean x, boolean y) { return ((x || !y) || (x && y)); } public static boolean E(boolean x, boolean y) { return (!x && (x && y)); } public static void main(String[] args) { System.out.println(A(3)); // (I) System.out.println(B(3)); // (II) System.out.println(C(3)); // (III) System.out.println(D(true, true)); // (IV) System.out.println(E(true, false)); // (V) } }
(25 分)
- 2
以下 JavaScript 程式,其功能為驗證輸入密碼是否合法,其合法規則為:
⑴ 密碼不為空;
⑵密碼長度必須是 6 或 7 或 8;
⑶密碼包含至少一個大寫與一個小寫英文字母;若違反規則⑴,跳出視窗顯示"Empty",若違反規則⑵,跳出視窗顯示"6~8 char",若違反規則⑶,跳出視窗顯示"Uppercase and lowercase",若無違反規則,則在頁面密碼後面顯示「ok」。完成程式碼空格(I)、(II)、(III)、(IV)、(V),使執行正確。(25 分)<html> <head> <title> Verification</title> </head> <script> function verifyPass() { var password = document.getElementById("password"). (I) ; if(password == (II) ) { alert("Empty"); return false; } else if ((password.length < (III) ) || (password.length > (IV) )) { alert("6~8 char"); return false; } else if (!(password.match(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])/))) { alert("Uppercase and lowercase"); return false; } else { document.getElementById("M"). (V) = "ok"; return false; } } </script> <body> <h1 style="color:blue">Password</h1> <h3>Password Verification </h3> <form onsubmit ="return verifyPass()"> <td> Enter Password : </td> <input type = "password" id = "password" value = ""> <span id = "M" style="color:red"> </span> <br><br> <input type = "submit" value = "Submit"> </form> </body> </html>
(25 分)
參考架構・破題
本題考 JavaScript 的 DOM 操作與表單驗證:用 getElementById 取得輸入欄位的值、判斷空字串與長度範圍,最後把結果寫回頁面上的 span 元素。
完整答題架構與關鍵字:到站內看全文
- 3
針對以下 C 程式,其輸出為下列表格,說明 compress 函式的功能,並完成程式碼(I)、(II)、(III)、(IV),使之執行正確。(25 分)程式輸出#include <stdio.h> void compress(int data[][SIZE], int (I) [][SIZE], #define SIZE 10 int size, int n) { int op(int data[][SIZE], int x, int y, int n) { int cSize = (II) ; int value = 0; for (int x=0; x< cSize; x++) for (int i = x; i < x+n; i++) for (int y=0; y<cSize; y++) for (int j = y; j < y+n; j++) target (III) =op(data, x*n, y*n, n); value = value + data[i][j]; (IV) (target, cSize); return value/(n*n); } } int main() { void print(int target[][SIZE], int size) { int data[][SIZE] = {{1, 2, 3, 4, 5, 6}, for (int x = 0; x < size; x++) { {3, 4, 5, 6, 7, 8}, for (int y = 0; y < size; y++) {5, 6, 1, 2, 3, 4}, printf("%d ", target[x][y]); {7, 7, 9, 9, 5, 5}, printf("\n"); {2, 2, 4, 4, 8, 8}, } {1, 1, 5, 5, 9, 9}}; } int target[SIZE][SIZE]; compress(data, target, 4, 2); compress(data, target, 6, 2); compress(data, target, 6, 3); return 0; }
(25 分)
參考架構・破題
本題考二維陣列的區塊平均(類似影像縮小、平均池化 average pooling):compress 把 size×size 的左上區域切成 n×n 的小區塊,每塊取整數平均,壓成 (size/n)×(size/n) 的陣列並印出。要靠程式輸出反推空格。
完整答題架構與關鍵字:到站內看全文
- 4
針對以下 C#程式,其輸出為 80, 85,完成程式碼(I)、(II)、(III)、(IV)、(25 分)(V),使之執行正確。public (I) class Score { public class Test { protected int [] data; static void Main(string[] args) { protected int value; int[] data1 = {90, 80, 70, 85}; public Score(int [] d) { int[] data2 = {90, 80, 80, 85}; data = new int[d.Length]; int[] weight1 = {1, 2, 3, 4}; value = 0; int[] weight2 = {4, 2, 1, 3}; for (int i = 0; i < d.Length; i++) Score x = new WeightScore(data1); data[i] = d[i]; Score y = new WeightScore(data2); } x.getValue(weight1); private void print() {Console.WriteLine(""+value); } y.getValue(weight2); protected abstract void compute(int[] weight); } public void getValue(int[] weight) { } compute(weight); (II) (); } } public class WeightScore:Score { public WeightScore(int [] data): (III) (data) {} protected (IV) void compute(int [] weight) { int totalWeight = 0; for (int i = 0; i < data.Length; i++) { value = value + data[i] * weight[i]; totalWeight = totalWeight + weight[i]; } value = value / (V) ; } }
(25 分)
110 年(考試時間 90 分鐘) 原卷 PDF
- 1
請使用 C、C++、C#、Java 或 Python 程式語言,撰寫一個可以接受整數array 及一個目標整數值的 twoSum()方法,此方法會找出 array 中兩個整數值相加結果等於目標整數值的註標位置,並回傳由此兩註標所組成的array;主程式則負責呼叫 twoSum(dataArray, targetValue)方法,並顯示結果。您的方法中必需檢查輸入 array 至少有兩個整數值相加結果等於目標整數值,否則回傳 Null/None,同時主程式應測試如下的資料並顯示結果:(25 分)測試一:dataArray { 3,11,14,6},目標值 9,回傳顯示 0,3測試二:dataArray { 3,11,14,6},目標值 18,回傳顯示 None 或 Null註:只需找出一組答案。註:如果無法找出兩個 array 內的整數值加總等於目標值,則回傳 Null or None。限制:所撰寫的方法內,不可以使用任何程式語言內建或第三方提供的套件,即 python/java 不可以使用 import,C++、C#不可以使用 using再加入套件……
(25 分)
- 2
請問如下的 Python 程式正確執行後的結果為何?如有語法或執行時期的錯誤,請說明為那種錯誤,應如何修正,修正後執行的結果為何?(25 分)
(25 分)
- 3
請就如下的 Java 程式,說明程式中各方法(包括建構子)執行的順序,及最後顯示的結果。 (30 分)註:執行程序說明,如主程式呼叫 MyVaccinePassport 建構子→……
(30 分)
- 4
請撰寫一支包含Javascript 及HTML 程式碼的checkLegalForVaccineShot.html程式,執行後可以呈現如下的頁面,其中「身分證字號」 、「健保卡卡號」 、及「手機號碼」輸入欄位的長度由 HTML 控制,資料內容則使用 Javascript檢查,資料內容檢查後,在對應的資料輸入位置右方顯示, 「請輸入正確的……」或"OK"表示檢查的結果。(20 分)註:身分證字號由一碼的英文字母及九碼的數字所組成,如 A123456789註:健保卡卡號由三組四碼的數字所組成,如 1234-5678-1234註:手機號碼由 09 加上八碼的數字所組成,如 0912345678預約平台身分驗證分 A123456789
(20 分)
參考架構・破題
本題測驗 Web 前端網頁開發實務,涵蓋 HTML 表單元件長度控制屬性應用、JavaScript 正則表達式(RegEx)格式驗證機制,以及透過 DOM 操作動態在輸入欄位右方反饋提示文字。
完整答題架構與關鍵字:到站內看全文
109 年(考試時間 90 分鐘) 原卷 PDF
- 1
下列 C 程式的執行結果為何?(15分)#include <stdio.h> #include <stdlib.h> #define X 3 #define Y 4 void funA(int *, int, int), funB(int *, int, int); int main(void){ int arr[X][Y] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}; printf("輸出1:\n"); funA(*arr,X,Y); funB(*arr,X,Y); printf("輸出2:\n"); funA(*arr,X,Y); system("pause"); return 0; } void funA(int *ptr,int x,int y){ int i,j; for (i=0;i<x;i++){ for(j=0;j<y;j++) printf("%3d ", *(ptr+i*y+j)); printf("\n"); } } void funB(int *ptr,int x, int y){ int i,j; int arr[x][y]; for (i=0;i<x;i++) for(j=0;j<y;j++) arr[x-i-1][y-j-1] = *(ptr+i*y+j); for (i=0;i<x;i++) for(j=0;j<y;j++) *(ptr+i*y+j) = arr[i][j]; }
(15 分)
參考架構・破題
本題考 C 語言二維陣列在記憶體中以列優先(row-major)連續存放,以及用一維指標 *(ptr+i*y+j) 存取二維元素。funA 依序印出陣列,funB 把整個陣列「上下左右同時反轉」(等於旋轉 180 度)後寫回原陣列,因此第二次輸出是反序。
完整答題架構與關鍵字:到站內看全文
- 2
請依行號解說下列 Python 程式碼與說明此程式的功能為何?(15分)01 while(True): 02 number=input("請輸入至少三位數的整數值或輸入'q'或'Q'結束程式:") 03 if(number.upper()!='Q'): 04 while(len(number)<3): 05 number=input("輸入值至少須為三位數,請重新輸入:") 06 listA = [] 07 for x in number: 08 listA.append(int(x)) 10 var=0 11 for y in listA[0:len(listA)-1]: 12 var+=y 13 if (var%10==listA[-1]): 14 print(var%10, listA[-1], number, ”is acceptable”) 15 else: 16 print(var%10, listA[-1], number, ”is unacceptable”) 17 else: 18 break
(15 分)
參考架構・破題
本題要逐行解說一支 Python 檢查碼(check digit)驗證程式:使用者輸入至少三位數的數字字串,程式把「除最後一位以外各位數的總和」取個位數,與最後一位比較,相同即判定 acceptable,輸入 q 或 Q 結束。
完整答題架構與關鍵字:到站內看全文
- 3
請使用 C 程式語言撰寫一猜數字遊戲程式,此程式必須滿足下列規定:(25分) 撰寫一函式 int Randomize(int n),可回傳一個隨機產生介於 1 到 n 間(包含 1 與 n)的正整數,此正整數即為此遊戲的答案。 利用上述函式實作一猜數字遊戲,此遊戲開始時先讓使用者輸入此猜數字遊戲的最大值,程式須確認使用者所輸入的數值必須大於 20。 使用者每次猜答時,程式必須顯示出是第幾次的猜答。 使用者每次輸入後,程式必須顯示結果,如果猜錯時,程式必須依使用者的輸入值縮小範圍;當猜對時,就顯示『恭喜你猜對了!』。 當使用者猜答次數超過 10 次仍未猜中答案時,程式就必須結束使用者的猜答,並顯示出正確答案。程式執行範例如下:請輸入答案的可能最大值(至少必須大於20):15輸入錯誤!15沒有大於20,請重新輸入!請輸入答案的可能最大值(至少必須大於20):30第1次猜答:15結果為:猜錯了,答案介於 15 與 30 之間!第2次猜答:23結果為:猜錯了,答案介於 15 與 23 之間!第3次猜答:19結果為:猜錯了,答案介於 15 與 19 之間!第4次猜答:17結果為:猜錯了,答案介於 17 與 19 之間!第5次猜答:18結果為:恭喜你猜對了!請按任意鍵繼續 . . .
(25 分)
- 4
下列 C 程式的執行結果為何?(20分)#include<stdio.h> #include<stdlib.h> int funA(int x), funB(int y); int main(void){ printf("funA(5)=%d, funB(5)=%d\n", funA(5), funB(5)); return 0; } int funA(int x){ int i, answer=1; if(x<1) return -1; for(i=1;i<=x;i++) answer*=(i*2); return answer; } int funB(int y){ if(y<1) return -1; else if(y==1) return 3; else return 3*y + funB(y-1); }
(20 分)
參考架構・破題
本題考迴圈累乘與遞迴函式的追蹤。funA(x) 計算 2×4×6×…×(2x),funB(y) 是遞迴累加 3y+3(y-1)+…+3。答案為 funA(5)=3840, funB(5)=45。
完整答題架構與關鍵字:到站內看全文
- 5
請使用 C++,Java 或 Python 程式語言為三角形面積計算公式設計一個名為 HeronFormula 類別,並撰寫一測試程式驗證此類別程式碼的正確性。此類別須包含:(25分) 三邊長的私有資料 a,b,c。 三邊長 a,b,c 的初始化設定或建構元方法。 inputSide( )公有方法:讓使用者輸入三邊長 a,b,c。此方法須能確認使用者所輸入的三邊長皆須大於 0,另此方法不須回傳值。 getAssessResult( )公有方法:判斷三邊長 a,b,c 是否可以構成三角形。如果可以的話則回傳布林型別(Boolean)“真”,如果不可以的話則回傳“假”。 getPerimeter( )公有方法:回傳三角形的周長。此方法須呼叫 getAssessResult( )方法,如果回傳值為“真”則回傳三角形的周長,如果回傳值為“假”則回傳-1。 getArea( )公有方法:回傳三角形的面積。此方法須呼叫getAssessResult( )方法,如果回傳值為“真”則回傳三角形的面積,如果回傳值為“假”則回傳-1。三角形面積的 Heron計算公式為:s(s a)(s b)(s c) ,其中 s (a b c) / 2 。程式執行範例如下:請輸入大於0的三邊長:-3,6,9輸入錯誤,請重新輸入大於0的三邊長:3,6,9所輸入的三個整數無法構成三角形繼續玩嗎?若想繼續玩,請按'y'或'Y':y請輸入大於0的三邊長:3,4,5周長等於:12面積等於:6.0繼續玩嗎?若想繼續玩,請按'y'或'Y':n
(25 分)
108 年(考試時間 90 分鐘) 原卷 PDF
- 1
以下 Java 程式執行後,螢幕會顯示什麼?(15 分)public class Problem1 { public static void main(String[] args) { for(int i = 1; i <= 5; i++) { for(int j = 1; j <= i; j++) System.out.print(' '); for(int j = 1; j <= 6-i; j++) System.out.print("**"); System.out.println(); } } }
(15 分)
參考架構・破題
本題考巢狀 for 迴圈的輸出追蹤:外層 i 從 1 到 5,每列先印 i 個空白,再印 (6-i) 次「**」,形成一個向右縮排、往下縮短的倒三角形。
完整答題架構與關鍵字:到站內看全文
- 2
質數(prime number)是大於 1 的自然數中,只能被 1 和自身整除的數。例如,2, 3, 5, 7, …。試在不使用 Java 中質數相關 API 的情況下,撰寫Java main()程式(不要另訂 class, method 或 function) ,來找出小於 500的所有質數,其結果列印必須如下: (25 分)2 is prime. 3 is prime. 5 is prime. 7 is prime. 11 is prime. 13 is prime. 17 is prime. 19 is prime. 23 is prime. . . . 491 is prime. 499 is prime. 95 primes found.
(25 分)
參考架構・破題
本題要在 main() 內以巢狀迴圈完成質數判斷,不得另寫方法或使用 API。核心是試除法:對 2~499 的每個數 n,用 2 到 √n 的整數試除,都除不盡即為質數,並計數,最後印出 95 primes found.
完整答題架構與關鍵字:到站內看全文
- 3
請以遞 迴( recursive)的方式撰寫下 列 Java 程式片斷 中的 method sumOfEvens()。sumOfEvens(n)會回傳小於或等於 n 的所有正偶數的總和,例如 sumOfEvens(6)會回傳 12,因為 12 = 2+4+6。sumOfEvens()完成後,必須確保 main()執行後會印出正確結果,不需檢查 n 是否為含零的正整數。 (20 分)public class Problem3 { public static int sumOfEvens(int x) {…} public static void main(String[] args) { System.out.printf("sumOfEvens(0) = %d\n", sumOfEvens(0)); System.out.printf("sumOfEvens(1) = %d\n", sumOfEvens(1)); System.out.printf("sumOfEvens(2) = %d\n", sumOfEvens(2)); System.out.printf("sumOfEvens(10) = %d\n", sumOfEvens(10)); System.out.printf("sumOfEvens(15) = %d\n", sumOfEvens(15)); } }執行結果:sumOfEvens(0) = 0 sumOfEvens(1) = 0 sumOfEvens(2) = 2 sumOfEvens(10) = 30 sumOfEvens(15) = 56
(20 分)
參考架構・破題
本題考遞迴設計:找出終止條件與遞迴關係。sumOfEvens(x) 在 x<2 時為 0;x 為偶數時為 x+sumOfEvens(x-2);x 為奇數時等於 sumOfEvens(x-1)。
完整答題架構與關鍵字:到站內看全文
- 4
請寫出以下 Python 程式的執行結果。 (15 分)def secret(nums, target): seen = [] for index, num in enumerate(nums): other = target - num if other in seen: return [seen[other], index] else: seen[num] = index return [] print(secret([1,3,5], 4)) print(secret([2,3,6,8,10], 16)) print(secret([1,3,5], 7))
(15 分)
參考架構・破題
本題表面上是 Two Sum(找兩數和等於 target 的索引),但程式把 seen 宣告成空串列 seen = [],執行 seen[num] = index 時會發生 IndexError,所以照題目原樣執行,第一個 print 就會中止。作答要先指出實際結果,再說明若改成字典的預期輸出。
完整答題架構與關鍵字:到站內看全文
- 5
下列 Java 程式有三個類別(class): TeeShirt, CustomTee and DemoTees,其中 CustomTee 繼承 TeeShirt,而 DemoTees 為測試類別。試回答以下問題:(25 分)
(一)請撰寫 TeeShirt 類別中的public String toString()格式請參考執行後結果。
(二)請撰寫 CustomTee 類別中的public String toString()格式請參考執行後結果。
(三)在 main()中,以 array 的方式和兩個 for 迴圈,產生 5 件 T 恤,依序印出每件 T 恤屬性,最後加總 5 件的總價,結果顯示如後。public class TeeShirt { private int orderNumber; private String size; private String color; private double price; public void setOrderNumber(int num) { orderNumber = num; } public void setSize(String sz) { size = sz; if(size == "XXL" || size == "XXXL") price = 22.99; else price = 19.99; } public void setColor(String color) { this.color = color; } public int getOrderNumber() { return orderNumber; } public String getSize() { return size; } public String getColor() { return color; } public double getPrice() { return price; } public String toString() {…} } public class CustomTee extends TeeShirt { private String slogan; public void setSlogan(String slgn) { slogan = slgn; } public String getSlogan() { return slogan; } public String toString() {…} } public class DemoTees { public static void main(String[] args) {…} }執行結果:Order # 100 Description: S red Slogan: Cute Girl Price: $19.99 Order # 101 Description: S red Slogan: Cute Girl Price: $19.99 Order # 102 Description: XXL blue Slogan: Happy Boy Price: $22.99 Order # 103 Description: XXL blue Slogan: Happy Boy Price: $22.99 Order # 104 Description: XXL blue Slogan: Happy Boy Price: $22.99 ----------------------------- Total: $108.95
(25 分)
參考架構・破題
本題考 Java 繼承、方法覆寫(override)與物件陣列。父類別 toString() 輸出訂單編號、尺寸顏色與價格;子類別覆寫 toString() 多加 Slogan;main 用陣列與兩個 for 迴圈建立 5 件 T 恤並加總價格 108.95。
完整答題架構與關鍵字:到站內看全文
107 年(考試時間 90 分鐘) 原卷 PDF
- 1
下列程式皆以 C 語言語法呈現,請依據所給程式片段回答問題。
(一)請說明下列程式片段執行結果為何。(5 分)for (i=0; i<=10; i++) { i = i+2; } printf (“%d\n”, i);
(二)給定下列函式,請說明 fun(123456)執行結果為何。(5 分)int fun (int x) { if (x > 0) return (x % 10) + fun (x / 10); else return 0; }
(三)若 int 變數是以 4 位元(bytes)來儲存,請問最大及最小整數分別為何?(5 分)
(四)若下列程式片段目的是要判斷 x 是否能被 2,3,4,5 整除,若可被整除就輸出可被整除之訊息。請問程式有何錯誤?請說明該如何修正方能符合預期目的。 (10 分)if (x/2 == 0) printf (“%d 被 2 整除\n”, x); else if (x/3 == 0) printf (“%d 被 3 整除\n”, x); else if (x/4 == 0) printf (“%d 被 4 整除\n”, x); else if (x/5 == 0) printf (“%d 被 5 整除\n”, x);
(25 分)
- 2
給定 X()函數的數學定義如下:(每小題 10 分,共 30 分)X(0)=1, X(1)=1, X(2)=1, X(k+1)=X(k-2)+X(k-1)+X(k)
(一)請完成下列的遞迴函式,用以計算並回傳 X(i)的值。int X1 (int k) { if (________) return __________; else return (___________); }
(二)請用六行以內的程式碼完成下列的 for-迴圈函式,用以計算並回傳 X(i)的值。int X2 (int k) { int S1=1, S2=1, S3=1, sum = 0; // sum 為需要回傳的值if (k > 3) for ( ) { … } return sum; }
(三)上述兩個不同函式,請說明何者執行上會比較有效率。
(30 分)
參考架構・破題
本題 X() 是三項遞迴數列(Tribonacci 類型):前三項為 1,之後每項為前三項之和。要分別以遞迴與迴圈實作,並比較效率;結論是迴圈版 O(n) 遠優於遞迴版的指數時間。
完整答題架構與關鍵字:到站內看全文
- 3
請用下列程式回答下列問題。(每小題 5 分,共 25 分)
(一) num[]一維陣列最多可儲存幾個正整數?
(二)若依序輸入 1, 2, 3, …, 99, 0,請說明 num[0]值為何。
(三)若依序輸入 99, 98, …, 2, 1, 0,請說明 num[0]值為何。
(四)輸入 99 個亂數產生的正整數後再輸入 0,請說明 num[0]值為何。
(五)請說明 reorder()遞迴函數的功用為何。int num[100]={0}; int n=0; void reorder (int k) { int temp; if ( (k != 0) && (books[k] > books[k/2]) ) { temp = books[k]; books[k] = books[k/2]; books[k/2]=temp; reorder (k/2); } } int main () { int i=0; scanf (“%d”, &num[i]); while (i != 0) { reorder (i); i = i + 1; scanf (“%d”, &num[i]); } }
(25 分)
參考架構・破題
本題程式以陣列實作二元堆積(binary heap)的插入:每讀入一個數就呼叫 reorder() 向上調整(sift-up),父節點索引為 k/2,使 num[0] 永遠保持目前最大值。題目程式有筆誤(books 應為 num、while 條件應判斷輸入值),作答時先說明以出題意圖解讀。
完整答題架構與關鍵字:到站內看全文
- 4
請說明在物件導向程式設計中:(每小題 10 分,共 20 分)
(一) public 變數與 private 變數的差別。
(二)物件與類別的關係。
(20 分)
106 年(考試時間 120 分鐘) 原卷 PDF
- 1
試問以下 C++程式若輸入 believe,則輸出結果各為多少?(25 分)#include<iostream> using namespace std; char* POP_A(char*d){ char*p=d; for(;*p;p++) *p=*(p+1); return d; } char* POP_B(char*d){ char*p=d; while(*p) p++; *(p-1)=0; return d; } int main(){ char d[1024]; cin>>d; POP_A(d); cout<<d<<endl; POP_A(d); cout<<d<<endl; POP_B(d); cout<<d<<endl; POP_B(d); cout<<d<<endl; return 0; }
(25 分)
參考架構・破題
本題考 C 字串(以 '\0' 結尾的字元陣列)與指標走訪。POP_A 把每個字元往前搬一格,等於刪掉第一個字元;POP_B 先走到結尾再把最後一個字元改成 0,等於刪掉最後一個字元。只要逐步追蹤字串內容即可得解。
完整答題架構與關鍵字:到站內看全文
- 2
試問下列 C++程式碼的輸出為何?(25 分)#include <iostream> using std::cout; using std::endl; int main() { int a[10][20][30][40]; cout<<"a="<<a[5][5]-a[0][0]<<endl; cout<<"b="<<&a[5][5]-&a[0][0]<<endl; cout<<"c="<<a[5]-a[0]<<endl; }全一張(背面)等 別:四等考試
(25 分)
參考架構・破題
本題考多維陣列的退化(decay)與指標相減的單位:兩個指標相減的結果是「中間相隔幾個所指型別的元素」,而不是位元組數。關鍵在判斷每個運算式的指標型別。
完整答題架構與關鍵字:到站內看全文
- 3
下列 C++程式執行後,試問 A、B、C 值分別為多少?(25 分)int F2(int &f, int f1) { int sum = (f1 + f++); return sum; } void F1(int &a, int b, int* c) { for (int i = a, j = b; j >= 0; i++, j--) { if (c[j] % 2 == 0) c[j] = F2(a, b); else c[j] = F2(b, a); } } void main() { int A = 5, B = 3, C[4] = { 1,4,7,6 }; F1(A, B, C); system("pause"); }
(25 分)
參考架構・破題
本題考傳值、傳參考(reference)與傳指標三種參數傳遞的差異,以及後置遞增 f++ 先取值後加 1 的語意。關鍵是分清楚哪個變數的修改會影響到 main。
完整答題架構與關鍵字:到站內看全文
- 4
試問下列 C++程式碼逐一執行後,Value 與 list 輸出結果各為多少?(25 分)void swap_ref(int &a, int &b) { int temp; temp = a; a = b; b = temp; } void swap(int a, int b) { int temp; swap_ref(a, b); temp = a; a = b; b = temp; } void main() { int Value = 5, list[3] = { 1,2,3 }; swap(Value + list[2]++, ++list[0]); swap_ref(list[0], ++list[2]); }
(25 分)
參考架構・破題
本題考傳值與傳參考的差異,並檢驗前置/後置遞增在引數中的副作用。swap 以傳值接收參數,內部無論怎麼交換都只動到複本;只有 swap_ref 會真正交換呼叫端變數。
完整答題架構與關鍵字:到站內看全文
105 年(考試時間 120 分鐘) 原卷 PDF
- 1
請回答下列問題:(每小題 5 分,共 10 分)
(一)目前的電腦都遵循范紐曼(Von Neumann)架構,請說明范紐曼架構。
(二)因為范紐曼架構會產生所謂的范紐曼瓶頸,請說明之。
(10 分)
- 2
在程式語言中,變數命名有一定的規則,下列何者為正確的變數名稱,請解釋說明之。(每小題 2 分,共 10 分)
(一) 3C
(二) Face-book
(三) CO2
(四) 4G_Iphone
(五) Date:20115
(10 分)
參考架構・破題
先寫出通用的識別字(identifier)命名規則,再逐一套用判斷。以 C/C++、Java 等主流語言為準:只能由英文字母、數字與底線組成,且不可以數字開頭,不可為保留字,大小寫有別。
完整答題架構與關鍵字:到站內看全文
- 3
請試述下列名詞之意涵:(每小題 4 分,共 16 分)
(一) Virtual Machine
(二) Dynamic Binding
(三) Heap tree
(四) Concurrency
(16 分)
- 4
如果我們採取不同參數傳遞的方法,請回答下面程式執行的結果:(每小題 4 分,共 12 分)
(一) pass-by-reference
(二) pass-by-name
(三) pass-by-value-result int y=1, x=1; int fun(int a, int b) {b+=a; a=b+x; return a;} void main() { int x=2; y=fun(x, y) + y; printf(“x=%d, y=%d”, x, y); }全一張(背面)等 別:四等考試
(12 分)
參考架構・破題
本題同時考參數傳遞方式與靜態範圍(static scoping)。fun 內的 x 指的是全域 x(值 1),main 傳入的 x 是區域 x(值 2),y 則是全域變數。依三種傳遞方式分別追蹤即可。
完整答題架構與關鍵字:到站內看全文
- 5
請將下列中置式(infix formula)改成後置式(postfix formula) ,並依據 ANSI C 的優先權( the priority defined in ANSI C)來回答:(每小題 4 分,共 8 分)
(一)(A/D+B) *D+E/(F+A*(D+C))
(二)!(A && ! ((B+F<C) || (C>D))) || (C>E )
(8 分)
參考架構・破題
中置轉後置可用「依優先權完整加括號再把運算子移到右括號」或「堆疊演算法」兩種方法。本題第二小題含邏輯與關係運算子,關鍵是記住 ANSI C 的優先順序。
完整答題架構與關鍵字:到站內看全文
- 6
請寫出副程式 factor(int N),對正整數 N,做因數分解,例如 N=10,輸出 1, 2, 5, 10。(8 分)
(8 分)
參考架構・破題
題意是列出正整數 N 的所有因數(例 10 → 1, 2, 5, 10),用迴圈測試 N % i == 0 即可。可寫直接版,再提出開根號的改良版以顯示演算法概念。
完整答題架構與關鍵字:到站內看全文
- 7
在微軟的注音輸入法裡頭,會根據前後字的關係,幫你選字,但常常會發生最常用的字出現在最後。(每小題 4 分,共 8 分)
(一)請問這是什麼問題造成的?
(二)如何改變這投票機制(voting scheme),解決上述的問題?
(8 分)
參考架構・破題
輸入法依候選字的使用統計排序,若只用「累計使用次數」當票數,過去累積的高票字會一直壓在前面,使用者近期真正常用的字反而排在後面。解法是在投票機制中加入時間因素,讓近期使用的權重較高。
完整答題架構與關鍵字:到站內看全文
- 8
下列變數 a、b、c、d、e 在 Visual C++ 程式語言(32 位元的作業系統)裡各占多少的記憶體?(每小題 2 分,共 8 分)
(一) int a = -100000;
(二) double b[2] = {0.0};
(三) double *c = 0x10000;
(四) char d[10] = “AB”;
(8 分)
參考架構・破題
本題考 Visual C++ 在 32 位元環境下各基本型別與陣列、指標所佔的記憶體大小,可用 sizeof 驗證。關鍵是:陣列大小由宣告長度決定,指標大小由位址寬度決定,與初值無關。
完整答題架構與關鍵字:到站內看全文
- 9
請將下列式子最後的 y 值計算出來:(每小題 4 分,共 8 分)
(一) int x[10] = { 1, 3, 7, 8, 4, -1, 7, 6,-1,6 }, y = 0; while (x[y++] > 0);
(二) int x[10] = { 1, 3, 7, 8, 4, -1, 7, 6,-1,6 }, y = 0; while (x[++y/2] > 0);
(8 分)
- 10
在 32 位元的作業系統下,試回答下列問題:
(一) int a; 請問 a 的範圍?(4 分)
(二)計時系統都是以正整數範圍(負整數範圍不計)來計算秒數,假如開始計時時間為:1 January, 1970 at 12:00:00 a.m.(午夜 12 點,非中午 12 點),請問在西元何年何月何日何時,這樣的計時系統會出現問題?(8 分)
(12 分)
104 年(考試時間 90 分鐘) 原卷 PDF
- 1
請試述下列名詞之意涵:(每小題 4 分,共 24 分)
(一) AVL tree
(二) Merge Sort
(三) BNF Grammar
(四) Dynamic Scope
(五) Dynamic Linker
(六) Heap-dynamic Variable
(24 分)
- 2
int a; 則變數 a 最小值與最大值分別為何?(3 分)
(3 分)
- 3
定義一個函數如下:int f(int n) { if( n==0) return 0; if( n== 1) return 1; if( n==2) return 2; return f(n-1)+f(n-2)+f(n-3); }請問計算 f(6)時,共呼叫 f(n)幾次?(8 分)
(8 分)
- 4
有 C 程式如下,請寫出函數 add()正確的函數定義,輸入為一個二維 array,輸出為一整數值。(8 分)void main() { int a[12][15], sum; sum=add(a, 12, 15); }
(8 分)
- 5
若有 N 個資料,每次做資料處理時都需選最大,請依下列資料結構:unordered linked list、sorted array 及 heap,分別寫出這些資料作 insert 及 delete 時的時間複雜度。(12 分)
(12 分)
參考架構・破題
本題是優先佇列(priority queue,取最大值)的實作比較。要對三種資料結構分別說明 insert 與 delete(刪除最大值)的作法與時間複雜度,最好以表格整理。
完整答題架構與關鍵字:到站內看全文
- 6
假設有一個演算法,它的計算量可寫成如下的遞迴式 T(n)= T(n-1)+ 1/ n,T(1)=1,請問此演算法的時間複雜度為何?(8 分)
(8 分)
- 7
請用非遞迴的方式,寫出一副程式 gcd(int m, int n),藉以求出兩整數 m 與 n 之間的最大公因數。(8 分)
(8 分)
- 8
給定一個二元樹 T,它的 inorder sequence 為“maxengbyc”;它的 preorder sequence 為“gamexncby”。
(一)請將 T 構建出來。 (5 分)
(二)為何只給 preorder 與 postorder 的結果,無法唯一決定出一棵二元樹?(3 分)全一張(背面)等 別:四等考試
(8 分)
- 9
請依下列程式求出 x 與 y 的值。(9 分)int x=0, y=0; for(int i=0;i<100;i++) for(int j=i+1;j<100;j++) { x++; for(int z=j+1; z<=100;z++) y++; }
(9 分)
- 10
請用遞迴的方式,寫出 quicksort(int *A, 0, n-1)的副程式,利用 quicksort 的演算法,將 A 陣列裡的 n 筆資料,從小排到大。(12 分)
(12 分)
參考架構・破題
本題要寫遞迴版快速排序:選一個 pivot,分割成小於與大於 pivot 的兩段,再遞迴排序兩段。重點是 partition 寫對、遞迴終止條件與範圍正確。
完整答題架構與關鍵字:到站內看全文
103 年(考試時間 90 分鐘) 原卷 PDF
- 1
請試述下列物件導向程式語言名詞之意義與特性:(每小題 5 分,共 25 分)建構子(constructor)朋友函式(friend function)泛型類別(generic class)抽象方法(abstract method)純粹虛擬函式(pure virtual function)
(25 分)
- 2
請回答下列 C 語言程式問題:請問下列函式,f1(0.5, 6.5)的輸出為何(該數字的精確度到小數點後第一位)?(5 分)double f1(double x, double y) { int a=2, b=1, c=1; x+=(a+b+c==2*b); x-=a*b/x; return (x+c); }請問下列函式,f2(0, 3)的輸出為何?(5 分)int f2(int x, int y) { if (x > 5) return (y+1); else if (x > 3) return 3 + f2(x+1, y+1); else return 1 + f2(x+1, y); }以下程式功能為:輸入的第一個參數為指定的進位制(base),B(2<=B<=9),第二個參數為以 B 進位制表示的數字,N(0 < N < 10,000)。請將 N 經十進位制轉換後輸出,例如將九進位的 1621 轉成十進位的 1234,我們有程式碼,如printf("%d\n", transformX10(9, 1621));其中會呼叫 transformX10(9, 1621)做進位制(base)的轉換且其輸出為 1234。有關 transformX10 的程式如下,請填寫空格處。(每一空格 5 分,共 15 分)int transformX10(int base, int x) { int ans=0, index=1; while (x> (1) ) ans = (2) + index*(x%10); index= (3) *base; x = x/10; } return ans; }(請接第二頁)全三頁第二頁等 別: 四等考試
(15 分)
- 3
使用 C 或 Java 填寫空格處,以完成下列函式。輸入 a, b, c 三個浮點數(實數),計算並回傳(b2 - 4ac)的開根號之值,若(b2 - 4ac)是負數,則回傳-1。(5 分)double f1(double a,double b,double c){ if( (1) ) return -1; else return sqrt((b*b)-(4*a*c)); }輸 入 a, b, c 三 個浮點 數 (實 數), 利用上 題的一 個函式 f1,計算並回傳F(x) = ax 2 + bx + c 的兩個根。若有虛根,則回傳-999, -999;若為實根,則兩個根分別為(-b+Q)/(2a)和(-b-Q)/(2a),Q 為(b2 - 4ac)的開根號之值。(10 分)void f2(double a,double b, double c, double *ans1, double *ans2){ if( (1) -1){ (2) = -999; (*ans2) = -999; } else{ (*ans1) = (-b+f1(a, b, c))/(2*a); (*ans2) = (-b-f1(a, b, c))/(2*a); } }利用上題的函式 f2,回答本題。本函式的第一個輸入為正整數 n,再輸入 n 組(a, b, c)三個實數,每一組可以求得一個 F(x)的兩個根( ),計算並回傳其中最大的實根。(10 分)double f3(){ int i, n; double a, b, c, ans1, ans2, max = -999; scanf("% d",&n); for(i=0;i<n;i++){ scanf("%lf %lf %lf ",&a, &b ,&c); f2(a,b,c, &ans1, &ans2); if( (1) ){ max = ans1; } if( (2) ){ max = ans2; } } return max; }(請接第三頁)全三頁第三頁等 別: 四等考試
(25 分)
- 4
撰寫以下空格 html 網頁和 JavaScript 程式碼,完成如下圖畫面與功能。或 passwd 欄位沒有輸入值,則跳出 EMPTY 視窗訊息。(10 分)欄位輸入值的長度小於 8,則跳出 passwd<8 視窗訊息。(5 分)顯示兩個單選按鈕(radio button)。(10 分)<html><head> <title>Exam</title> <script language=javascript> function checkString(s1,s2) { if ( ){ alert("EMPTY"); return false; } if ( ){ alert("passwd <8"); return false; } return true; } </script></head> <BODY TEXT=#FFFFFF BGCOLOR=#000000> <form action = Login method=POST name=FORM1> name:<input type = text name = name><br> passwd:<input type = password name = passwd><br> <INPUT name=rdoCourse value=1 checked> Java <INPUT name=rdoCourse value=2> C# <br> <input type = submit onClick="return checkString(FORM1.name.value, FORM1.passwd.value);" style=width:60 value =Ok> </form></body></html>
(25 分)
本題含圖表或公式,請對照原卷 PDF。
102 年(考試時間 90 分鐘) 原卷 PDF
- 1
下列的 Java 語言程式中,存在一個 Math 的類別做為遞迴演算。
(一)請問下列程式的輸出為何?請依據下列程式邏輯,寫下運算輸出結果的過程。(10 分)
(二)如果在第 06 與 07 行之間加入一行敘述 System.out.println(n);請問執行程式後 n 值依序輸出的結果為何?(10 分)01 class Math { 02 int math_num(int n) { 03 if(n <= 2) 04 { 05 return 1; 06 } 07 return math_num(n - 3) + math_num(n - 2) + math_num(n - 1); 08 } 09 } 10 public class ShowMath { 11 public static void main(String[] argv) { 12 Math m = new Math(); 13 System.out.println(m.math_num(8)); 14 } 15 }
(20 分)
參考架構・破題
本題是三項遞迴的追蹤:n≦2 時回傳 1(包括 0、負數),否則 f(n)=f(n−3)+f(n−2)+f(n−1)。第(一)小題算值,第(二)小題考 Java 由左至右求值所決定的呼叫順序。
完整答題架構與關鍵字:到站內看全文
- 2
請回答下列問題:
(一)XML 與 HTML 的主要區別。(5 分)
(二)ADO.NET 有兩大重點,分別是 DataReader 與 DataSet 這兩種,請描述其相異之處。(5 分)
(三)在 ASP.NET 中建置一個 Web 網站,這個應用程式包含了 100 個頁面。若想要在建置應用程式的環境中,當發生一個 HTTP 代碼錯誤時,可以顯示一個自訂的錯誤頁面給使用者。請問要花最小的代價完成這些目標,可以在這個應用程式那二個檔案中,建置 CustomErrors 事件去處理 HTTP 錯誤?(5 分)
(四)在 C#中,string str = null 與 string str = " " 的區別為何?(5 分)(請接第二頁)全四頁第二頁等 別: 四等考試類 科: 資訊處理
(20 分)
- 3
由於避免個資外洩,欲撰寫一 Java 程式,姓名與身分證字號僅顯示部分內容,下列為 Java 部分程式片段,請依據下列原則以迴圈方式完成方框內的程式:(20 分)
(一)姓名顯示原則為只顯示名字的第一個字與最後一個字,但是名字如果只有二個字,則顯示「李 X」,例如名字為「李大同」,則顯示「李 X 同」。不限定名字的長度都可以顯示此型態。
(二)身 分 證 字 號 顯 示 原 則 為 顯 示 一 個 字 元 、 隱 藏 一 個 字 元 , 例 如 身 分 證 字 號 為「A123456789」,則顯示「A*2*4*6*8*」。public static void main(String[] arg) { String hidename="李大同"; String hideid="A123456789"; String name=""; String id=""; //隱藏姓名System.out.println(name); //隱藏身分證字號System.out.println(id); }(請接第三頁)全四頁第三頁等 別: 四等考試類 科: 資訊處理
(20 分)
參考架構・破題
本題要用迴圈做字串遮罩:姓名留頭尾、中間換成 X;身分證字號偶數位置顯示、奇數位置換成 *。考的是 length()、charAt() 的用法與邊界條件(兩個字的名字)。
完整答題架構與關鍵字:到站內看全文
- 4
下列均為程式片段,請回答下列問題:
(一)請問下列 C++程式的目的為何?若輸入 21、235、71、64、129 五個數值,則輸出結果為何?(5 分)01 int main() 02 { 03 double num(0); 04 double *xarray; 05 xarray=new double[5]; 06 cout<<"請輸入 5 個數值,謝謝!"<<endl; 07 for(int i=0;i<=4;i++) 08 { 09 cin >>*(xarray+i); 10 if(*(xarray+i)>num) 11 num = *(xarray+i); 12 } 13 cout<<"結果:"<<num<<endl; 14 }
(二)請問下列 C++程式的目的為何?若輸入數值 659845,則輸出結果為何?(5 分)01 int main() 02 { 03 static int InputNum,DispNo,Result; 04 cout << "請輸入任一整數"; 05 cin >> InputNum; 06 while(InputNum > 0) 07 { 08 DispNo = InputNum % 10; 09 Result += DispNo; 10 InputNum /= 10; 11 } 12 cout << "結果:" << Result <<endl; 13 }
(三)請問下列 C 程式所依據的數學公式為何?(例如 ∑ in= 0 xi a n −i )若輸入數值為 5,則輸出結果為何?(10 分)01 int main() 02 { 03 int sum1=0,sum2=0,n,i,j; 04 printf("輸入一數字:\n"); 05 scanf("%d",&n); 06 for(i=0;i<=n;i++){ 07 for (j=0;j<=i;j++){ 08 sum2+=j; 09 } 10 if(i%2==0) 11 sum1-=sum2; 12 else 13 sum1+=sum2; 14 sum2=0; 15 } 16 printf("結果為:%d\n",sum1); 17 return 0; 18 }(請接第四頁)全四頁第四頁等 別: 四等考試類 科: 資訊處理
(20 分)
- 5
下列的 HTML 程式中,執行後自動顯示今天日期。使用者輸入生日(西元格式)後,按 submit 顯示民國生日格式與年齡。執行結果顯示生日的民國日期與年齡:年齡的算法為精確年齡計算方式,若今年生日已過,則為今年與生日年份相減,若今年生日未過,則為今年與生日年份相減再減 1。請依題意完成下列程式(需在 10 個灰色網底位置填入適當指令)。(每小題 2 分,共 20 分)01 <html> 02 <head> 03 <script language="javascript"> 04 function CurrentDate() 05 { 06 date= new Date(); 07 var d = n ; //Set day of date 08 var m= o ; //Set month of date 09 var y= p ; //Set year of date 11 document.getElementById('CurDate').value= y + '/' + m + '/' + d; 12 } 14 function display() 15 { 16 var birthday = q ; 17 var today = new Date(); 18 var age = r ; 19 var Ryears = birthday.getFullYear()-1911; 21 // Reset birthday to the current year. 22 s ; 24 // If the user's birthday has not occurred yet this year, subtract 1. 25 if ( t ) 26 { 27 u ; 28 } 30 document.write("你的生日:民國" + Ryears +" 年 " + (birthday.getMonth()+1) + " 月 " + birthday.getDate() + "日</br>"); 31 document.write("你目前年齡是: " + age + " 歲"); 32 } 34 </script> 35 </head> 36 <body onload= v > 37 <form name="Age" method="post"> 38 今天日期:<input type="text" name="CurDate" id="CurDate" readonly="readonly"> 39 你的生日:<input type="date" name="Birthday" id="Birthday"> 41 <input type="submit" name="submit" value="submit" onClick= w > 42 </form> 43 </body> 44 </html>
(20 分)
本題含圖表或公式,請對照原卷 PDF。
其他等別的「程式設計概要」
- 程式設計概要(普通考試)(62 題)
題目來源:考選部考畢試題查詢平臺(政府資訊公開資料);參考架構為本站自撰,僅供準備方向參考,非官方標準答案。最後更新:。