lawpalyer logo

程式設計概要考古題|歷屆國考試題彙整

橫跨多種國家考試的程式設計概要歷屆試題(選擇題 + 申論題)

年份:

資訊處理 100 題

給定n x m(n 行m 列)影像的各像素灰度值,灰度值為0 至255 之間 的整數(包含0 和255),像素的相鄰性是指當前像素與周邊像素的鄰接 性質,八鄰域(eight neighbors)包括對應當前像素位置的上、下、左、 右、左上、右上、左下、右下像素位置,換言之,為原像素及其上下左 右與對角線相鄰八個像素位置,如下圖所示: 當對此影像進行降低雜訊的模糊化處理時: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 分) P
請問以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 ; } }
若以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); } }
(30) 20 分
給定下列程式,其中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; }
單鏈結串列(Singly Linked List)特點是鏈結串列的連結方向為單向,對 單鏈結串列的訪問要通過從頭部開始,依序往下讀取,每個節點(node) 包含兩部分:存儲數據的資料(data)和指向下一個節點的指標(pointer), 節點定義如下: struct Node{ int data; struct Node *next; } 單鏈結串列中的所有節點通過指標串聯,最後一個節點的指標指向空值 (null),表示單鏈結串列結尾。請使用Java 或C++實作一完整程式,通 過從頭部(head)開始,依序往下讀取,訪問一單鏈結串列操作,輸出 單鏈結串列中節點個數,若單鏈結串列中不存在任何節點,為一個空鏈 結串列,則輸出-1。(20 分)
請使用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
(31)
(127)
請針對C++, Java 及Python 三種程式語言,以列表方式比較四種特 性:執行方式(編譯或直譯)、物件導向繼承機制、性能(執行速 度)、應用場景領域。(15 分) 請用C, C#, C++, Java 或Python 程式語言撰寫一個程式,定義一個 100 元素的陣列,每一個元素可以儲存的資料包含10 個字元長度 的字串,用以儲存姓名,一個整數用以儲存薪資,及一個浮點數用 以儲存年資,提供使用者一筆一筆輸入這些資料。(15 分)
如下的Python 程式,請說明執行後,如果輸入"guava"顯示的結果為何? 又如果輸入"kiwi"顯示的結果又為何?如無法正確執行,請說明原因,及 應如何修正?(25 分) 假設createLL方法會正確地建立單向連結的linked list。
請將下列C++語言的迴圈程式以for 迴圈方式改寫,並寫出此程式 片段輸出的結果。(5 分) int i=1; while (i <= 10) { if (i < 5 && i !=2) std::cout << 'X'; i ++; } 下列C++程式有一行錯誤,使得編譯無法通過。請列出那一行錯 誤,並寫出正確程式碼。修正後執行此程式,使用者輸入153 後輸 出為何?(5 分) 61230 1 2
請就如下的Java 程式,說明程式中各方法(包括建構子)執行的順序, 及最後顯示的結果。註:執行程序說明,如class LinkedList 建構子 (head, tail)→ ……(30 分)
請撰寫HTML 程式,執行後可以呈現如下的頁面,其中"Year"是最多四 位數的整數值,Submit 按鈕後,以POST 形式傳送表單的資料到後端 "addMovie.php"處理。(20 分)
9 10 11 12 13 14 15 16 17 #include <iostream> using namespace std; int main() { int number, originalNumber, remainder, result = 0; cout <<"請輸入三位數: "; cin >> number; originalNumber = number; while (originalNumber != 0) { remainder = originalNumber%10; result += remainder*remainder*remainder originalNumber /= 10; } cout << "輸出為:"<< result; return 0; } 執行下列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 分) 61230 三、下列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; } 61230 若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 分) 61230 四、請說明下列二個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 分)
根據以下C程式碼,回答下列問題: 1
試回答下列有關程式設計領域的問題:(每小題5 分,共20 分) 撰寫程式時皆要取變數名稱(variable name)與其資料型態(data type), 試問這兩項的用意為何? 程式敘述有時會以陣列(array)或串列(list)來表示,試問其功用為何? 物件導向程式設計中的多型(polymorphism)的功用為何? 何謂多載函式(overloading function)?
下列是C 程式語言所撰寫的兩數對調,它使用傳址呼叫來完成,試修正下 列程式錯誤的地方。程式在main()函式中先輸入兩個整數,並印出對調前 的兩數,再呼叫swap()對調函式,最後印出對調後的兩數。輸出結果如下: (24 分) Enter two numbers:100 200 a = 100, b = 200 a = 200, b = 100 /* 兩數對調程式 */ #include <stdio.h> void swap(int , int); int main() { int a, b; printf("enter two numbers:"); scanf("%d %d", a, b); printf("a = %d, b = %d\n", a, b); swap(a, b); printf("a = %d, b = %d\n", a, b); return 0; } void swap(int x, int y) { int temp; temp = x; x = y; y = temp; }
下列是以Python 程式語言撰寫的片段程式,試回答每一小題的輸出結 果。每一小題是獨立運作的。注意,若迴圈無法停止,則以無窮迴圈作 答。(每小題3 分,共30 分) total = 0 for i in range(1, 100): total += i print('total =', total) total = 0 i = 1 while i<=100: total += i i += 1 print('total =', total) total = 0 i = 1 while i<=100: i += 1 total += i print('total =', total) total = 0 for i in range(2, 100, 2): total += i print('total =', total) total = 0 i = 1 while i<=100: total += 1 i += 1 print('total =', total) total = 0 i = 1 while i<=100: total += i i += 2 print('total =', total) total = 0 for i in range(100, 1, -1): total += i print('total =', total) total = 0 i = 100 while i>0: total += i i -= 1 print('total =', total) 下列的程式,若依序輸入的數值是1、2、3、4、5、6 total = 0 i = 1 while i <= 5: num = eval(input('Enter a number: ')) if num % 5 == 0: break else: total += num i += 1 print('total =', total) 下列的程式,若依序輸入的數值是1、2、3、4、5、6 total = 0 i = 1 while i <= 5: num = eval(input('Enter a number: ')) if num % 5 == 0: continue else: total += num i += 1 print('total =', total)
利用Python、C、C++、Java、C#五種程式語言的任一種程式語言,撰寫 一程式用以模擬大樂透的電腦選號(6 個介於1 到49 之間不同的號碼)。 輸出時要由小至大排列。(26 分)
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <stdio.h> void g(int *x, int *y) { *x = *y - 1; *y = *y - 2; printf("*x = %d, *y = %d\n", *x, *y); } void f(int *z, int *w) { int n = 13; g(w, &n); printf("*z = %d, *w = %d, n = %d\n", *z, *w, n); } int main() { int i = 21; int j = 5; int n = 137; f(&i, &j); printf("print 1: i = %d, j = %d, n = %d\n", i, j, n); g(&n, &n); printf("print 2: i = %d, j = %d, n = %d\n", i, j, n); return 0; } 請說明程式碼第8行至第12行中,每一行之運算子符號「*」及「&」操 作所代表的意義。(10分) 請問該程式碼執行後輸出的結果為何?(15分) 二、根據以下C程式碼,回答下列問題: 1 2 3 4 5 6 7 8 9 10 11 12 #include <stdio.h> int f(int a, int b){ if (b==1) return a; else { int value = a + f(a, b-1); return value; } } int main() { printf("%d\n", f(5, 3)); printf("%d\n", f(0, 0)); } 請問那一行是此遞迴程式的中止條件?(5分) 請說明第10行的輸出,以及其運作邏輯。(6分) 請說明第11行的輸出,以及其運作邏輯。(7分) 請說明函式f的主要功能,包含輸入參數與輸出結果的關係。(7分) 三、關於搜尋法程式: 說明循序(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 } 四、請依據以下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 } 11 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分)
有關C++物件導向程式設計,請回答下列問題: 基底類別的成員中,何者可以在基底類別和衍生類別中定義,使基底類 別和衍生類別的朋友可以存取?請試舉二者。(6 分) 請解釋運算符號<< 的多重含義。(6 分) 那個運算子可以用於安全地向下轉換(downcast)基底類別指標?(3 分) 當類別成員指定為何者時,只能由類別的成員函數和類別的朋友來存 取?(3 分) 運算子中,何者用於動態分配記憶體和建構物件,且此運算子可回傳一 個指向物件的指標?(3 分)
以下是完整的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; }
有關Java 程式設計,請回答下列問題: 說明下列class Test2_B 程式之功能。(8 分) 說明funcA 程式的功能。(5 分) 說明funcB 程式的功能。(5 分) 說明funcC 程式的功能。(5 分) 說明main 程式的功能。(5 分)
目前以瀏覽器為主的應用程式大多以JavaScript 進行前端程式的設計, 請閱讀以下各小題程式碼,並回答問題。(每小題10 分,共20 分) 使用jquery 套件的JavaScript,請回答每一列程式碼的意義。 1 2
有關C 程式設計,請回答下列問題: 說明下列程式之功能。(6 分) 說明funcA 程式的功能。(5 分) 說明funcB 程式的功能。(5 分) 說明funcC 程式的功能。(5 分) 說明main 程式的功能。(5 分)
有關Python 程式設計,請回答下列問題: 下列程式執行結果為何?(7 分) 下列程式執行結果為何?(4 分) 請寫一個python 程式,它可以隨機產生500 個0 到9 之間的整數,並 能顯示每個數字出現的次數。(10 分) 下列程式執行結果為何?(4 分)
9 10 11 12 13 let iconList = []; for (const extId of fs.ls("/extension")) { let extension = fs.read(`/extension/${extId}/extension.js`); ext = eval(extension); iconList.push(fs.read(`/extension/${extId}/${ext.icon}`)); } for (const [index, element] of Object.entries($("span .treeIcon"))) { if (typeof element === "object") { $(element).append(`<img src="${iconList[index]}" >`); } } 以下程式碼請依執行先後說明執行的結果。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <button onclick="dialog()">Confirm</button> <p id="result"></p> <script> window.addEventListener('load', function () { alert('Hello!'); }) function dialog() { var message; if (confirm("Press a button!")) { message = "You pressed OK!"; } else { message = "You pressed Cancel!"; } document.getElementById("result").innerHTML = message; } </script> 三、請使用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 四、問卷常被使用來進行服務滿意度調查,以下數據是某單位資訊中心新系 統使用的滿意度調查結果,數值為人次。請以Python 程式製作一張圓餅 圖,圖上須顯示出百分比及標籤。(20 分) 非常滿意 :65 滿意 :97 普通 :103 不滿意 :45 非常不滿意 :51 五、以下二小題是完整的物件導向程式碼,請回答以下各小題。 (每小題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; } }
令一雜湊函式f(p) = p mod 13,且該函式以線性探測(Linear Probing)處 理碰撞,若依序輸入下列資料47、11、26、62、50、25、39、76,請問該 筆資料中最大搜尋次數為何?(25 分)
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 分) #include <stdio.h> #include <stdlib.h> int function(int num); int main(){ int var1=1; int sum=0; for(var1=1;var1<=9;var1++){ sum+=function(var1); if(var1==3) printf("output1:%d\n",function(var1)); } printf("output2:%d",sum); return 0; } int function(int input){ if(input==9) return 1; return 2*function(input+1); }
程式語言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 分)
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(); } }
(10)
(10) 10 分
請參考下列程式碼,若輸入字串helloworld,輸出之結果為何?(25 分) #include<stdio.h> #define MAX 100 char* My_Function(char str1[]){ static int i=0; static char Array1[MAX]; if(*str1){ My_Function(str1+1); Array1[i++] = *str1; } return Array1; } int main(){ char array2[MAX],*p1; printf("Input any string:"); scanf("%s",array2); p1 = My_Function(array2); printf("The output is:%s\n\n",p1); return 0; }
程式語言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 分)
請仔細觀察下列程式碼,請問function 之功能為何?(25 分) #include <stdio.h> #include <stdlib.h> void function(int* p, int input1, int input2){ int* p1; int* p2 = p; for(p1 = p + input1 - 1;p1 > p - 1;p1--){ *(p1 + input2) = *p1; } for(p1 = p + input1;p2 < p + input2;p1++){ *p2++ = *p1; } } int main(){ int array[5] = {103,45,99,38,76}; int* p1 = array; int var1 = 0; int var2 = 5; int var3 = 2; for(p1 = array;p1 < array + var2;){ printf("%d,",*p1++); } function(array,var2,var3); printf("\n"); for(p1 = array;p1 < array + var2;){ printf("%d,",*p1++); } return 0; }
智慧型新社區內,住戶都擁有電動車,街道上有許多電動車停車格,停車 格編號代表距離該街道起始點的整數距離(公尺),因此多個停車格可以 有相同的編號。為了避免浪費,社區內要擴大其中一個停車格用來設立共 用快速充電站。經過投票,充電站要設在最「中央」的位置,也就是離所 有停車格平均距離最短的位置。 若輸入資料為15 個停車格,編號分別為5, 5, 5, 12, 18, 18, 25, 25, 31, 31, 40, 45, 45, 45, 45,請計算並說明該以那個編號的停車格來擴大改建為快 速充電站?(5 分) 下列流程圖可用以計算充電站該設立的位置。請問三個空白框(總距離 = …, 最短距離=…, 中央位置=…)正確的運算式為何?(15 分) 請將該流程圖以有效率的C/C++語言撰寫出來。(10 分)
下面的遞迴程式執行後,印出的信息為何?(作答必須解釋計算過程,只 寫答案而未加解釋,只能得部分分數。)(25分) 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); }
(0)
請說明下列程式設計重要名詞的差異。(25 分) 執行期錯誤(Runtime Error),語意錯誤(Semantic Error),語法錯誤 (Syntax Error) 動態記憶體配置(Dynamic memory allocation),靜態記憶體配置(Static memory allocation)
請參考以下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); } }
下列用Python 所寫的遞迴程式,會產生一系列的指令,用以把下圖在A 柱子上的5 個圓盤全部移到C 柱子上,且移動過程中能確保不會有圓盤 疊在更小的圓盤上。 請說明MoveDisk 函式總共會被呼叫幾次?(5 分) 請說明總共會輸出幾個移動圓盤的指令?(10 分) 請說明第三大的圓盤(也是第三小的圓盤)總共會移動幾次?(10 分) def MoveDisk (n , from_pole, to_pole, aux_pole): if n == 1: print ("Move top disk from pole ",from_pole,"to pole",to_pole) return MoveDisk (n-1, from_pole, aux_pole, to_pole) Print ("Move top disk from pole ",from_pole,"to pole",to_pole) MoveDisk (n-1, aux_pole, to_pole, from_pole) MoveDisk(5, 'A', 'C', 'B')
請問下列程式執行後,印出結果為何?(作答必須解釋計算過程,只寫答 案而未加解釋,只能得部分分數。)(25分) (define return #f) (+ 1 (call/cc [lambda(cont) (set! return cont) 1] )) (return 22)
請說明下列常見html tag 的用途為何並顯示結果?(20 分) <u> This is difficult. </u> <strike> This test is easy. </strike> <ol> <li>What</li> <li>is</li> <li>this?</li> </ol> <form method=post action="/cgibin/example.cgi"> Select an option:<br> <input type="radio" name="option"> A <input type="radio" name="option" checked> B <input type="radio" name="option"> C C B A
請問下列程式執行後,印出結果為何?(作答必須解釋計算過程,只寫答 案而未加解釋,只能得部分分數。)(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; }
請使用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
以下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(); } } }
Java 程式PreStars 會印出什麼結果?維持巢狀for 迴圈架構,小修 PreStars,讓它印出以下的星星構圖。(25 分) 1 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 } ********** ********* ******** ******* ****** ***** **** *** ** *
質數(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.
下列為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 { 6 7 } 8 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
請以遞迴(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
(6) 20 分
(0)
(0)
(1)
(1)
(2)
(2)
(10)
(10)
(15)
(15)
(0)
(1)
(2)
(10)
(15)
下列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)
請寫出以下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))
數學中複數是實數的延伸,複數通常表示為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; 6 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); 8 9 System.out.printf("x = %s%n", x.toString()); 10 System.out.printf("y = %s%n", y); 11 } 12 } // end class ComplexTest
下列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
假設已經將變數int nMonth 的值設定成介於1~12 間的整數,用來代表2018 年的某一 月份,亦即nMonth 為1 時,代表一月、nMonth 為2 時,代表二月…依此類推。請依 下列各子題要求分別撰寫出程式片段,在變數int nDays 中計算出nMonth 月的天數。 例如nMonth 是1 時,nDays 應該是31;nMonth 是2 時,nDays 應該是28。作答時可 以使用C/C++、Java 或C#其中任何一種語言作答,但必須註明所採用語言。 使用if…else if…else…。(10 分) 使用陣列(array),且不使用if…else if…else…或switch。(15 分)
請回答以下對C/C++程式語言的敘述正確與否?如果敘述是錯誤的,需說明正確敘 述為何。(每小題3 分,共30 分) 程式執行的結果與預期的不同,這種錯誤稱為執行期錯誤(Runtime Error)。 屬自由格式(Free-Form)、隱含型別宣告(Implicit Type Declaration)程式語言。 switch 選擇結構中,default 敘述為選擇性,故可省略。 陣列(Array)無法存放一連串資料型別不同的相關資料。 當&&運算子中的只要有一個運算元為真時,則該運算式的結果為真。 可使用結構(Structure)陣列變數的名稱指向該陣列中的任一個資料。 程式在編譯階段即配置完成其所需記憶體的方式稱為動態記憶體配置(Dynamic Memory Allocation)。 當不同的物件收到相同的訊息時,會以各自的方法作處理的特點稱為多載 (Overloading)。 子類別將繼承自父類別的方法重新定義,而且不會影響到父類別的方法,這個特 點稱為多載(Overloading)。 子類別可多重繼承自父類別內所有的資料成員與成員函數。
請依據下列C++程式碼執行後,試問輸出結果為何?(25 分) #include <stdio.h> #include <stdlib.h> int ABC(int n) { if (n <= 1) return 1; else return n * ABC(n - 1); } int main() { int i, sum = 0; for (i = 0; i < 8; i = i + 1) { sum += ABC(i); printf("%d\n", sum); } system("pause"); return 0; }
如果A, B 都是大小為M×N 的二維陣列,其元素資料型態均為double,且假設陣列A 已經有完整的資料。今欲依據A 求得B,使得B[i][j]成為在陣列A 中以A [i][j]為中心 的3×3 個數的平均值(當B[i][j]位於邊界時,仍是以A[i][j]為中心的3×3 個數的平均 值,惟超出陣列的部分皆以0 取代,即B[0][0], B[0][N - 1], B[M - 1][0], B[M - 1][N - 1] 是2×2 個數的平均值;B[0][j], B[M - 1][j]是2×3 個數的平均值, 0 < j < N – 1;B[i][0], B[i][N - 1]是3×2 個數的平均值, 0 < i < M – 1)。無論採用C/C++或Java 撰寫程式,都 可以用下列程式片段達成任務。請為每一空白處填入一運算式(Expression)完成該 程式片段。作答時須完整寫出此程式片段,並於填空處加底線標示,且不能更改此 程式片段。(25 分) B[0][0] = ; B[0][N - 1] = ; B[M - 1][0] = ; B[M - 1][N - 1] = ; for (int j = 1; ; j++) { B[0][j] = ; B[M - 1][j] = ; } for (int i = 1; ; i++) { B[i][0] = ; B[i][N - 1] = ; } for (int i = 1; ; i++) for (int j = 1; ; j++) B[i][j] = ; 107年公務人員特種考試關務人員、 身心障礙人員考試及107年國軍上校 以上軍官轉任公務人員考試試題 全一張 (背面) 考試別: 身心障礙人員考試 等 別: 四等考試 類 科: 資訊處理 科 目: 程式設計概要
請問以下程式輸出的結果為何?(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; } (請接第二頁) 107年公務人員普通考試試題 全三頁 第二頁 類 科: 資訊處理 科 目: 程式設計概要
請依據下列C++程式碼執行後,試問輸出結果為何?(25 分) #include <stdio.h> #include <stdlib.h> void F(int* p, int n) { int i; for (i = 0; i < n - 1; i = i + 1) { int tmp = *(p + i + 1); *(p + i + 1) = *(p + i); *(p + i) = tmp; } } int main() { int a[5] = { 7,3,6,9,5 }; F(a, 5); for(int i=0;i<=4;i++){ printf("%d\n", a[i]); } system("pause"); return 0; } 107年公務人員特種考試警察人員、一般警察人員考試及 107年特種考試交通事業鐵路人員考試試題 全一張 (背面) 考試別: 鐵路人員考試 等 別: 員級考試 類科別: 資訊處理 科 目: 程式設計概要
在資料庫中,有一個名叫Sale_Information 的表格,今天主管David 想要依照營業額 (Money)由高往低依序排列顯示,且算出所有地方營業額的平均值,請問工程師 Bob 要輸入那兩個mysql 指令才能達成主管的要求呢?(25 分) Sale_Information 表格: Place Money Date Japan 3500 05-Dec-2017 Taiwan 2000 06-Dec-2017 China 2500 12-Dec-2017 Los Angeles 1200 26-Dec-2017
假設已經將某位考生的單一科目分數輸入到變數int nScore 中,並確定其值介於 0~100 之間。請依下列各子題要求分別撰寫出程式片段,將該分數轉換為等級char Grade,使得Grade 與nScore 之對應為:’A’:90~100、’B’:80~89、’C’:70~79、’D’: 60~69、’E’:0~59。作答時可以使用C/C++、Java 或C#其中任何一種語言作答,但 必須註明所採用語言。 使用if…else if…else if…。(10 分) 使用switch,且case 標籤(label)須盡量精簡。(15 分)
請問以下程式輸出的結果為何?(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; }
請試述下列名詞之意涵:(每小題5 分,共25 分) object code preprocessor command data hiding local variable Overloading
假設已經將一個班級50 位同學的程式設計概要成績記錄在有50 個元素的int 陣列 nScores 中,且確定每個元素的值均介於0~100 之間。當要找出全班最高分(儲存於 nMax)及其在陣列的註標(index)(儲存於iMax),全班最低分(儲存於nMin)及 其在陣列的註標(儲存於iMin)(有多個最高分或最低分時,找出第一個即可);並 計算全班的總平均於Avg 時,無論使用C/C++、Java 或C#撰寫程式,都可以用下列 程式片段達成任務。請為每一空白處填入一運算式(Expression)完成該程式片段。 作答時須完整寫出此程式片段,並於填空處加底線標示,且不能更改此程式片段。(25 分) int nMax = ; int iMax = ; int nMin = ; int iMin = ; int nSum = ; double Avg; for (int i = 0; ; i++) { if ( ) { nMax = ; iMax = ; } if ( ) { nMin = ; iMin = ; } nSum += ; } Avg = ;
以下是一個完整的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() (請接第三頁) 107年公務人員普通考試試題 全三頁 第三頁 類 科: 資訊處理 科 目: 程式設計概要 (請接背面) name 代表姓名 quiz 代表小考 midterm 代表 final 代表期末 建構函數可將 設計calScore() Grade()公有方法計算成績等第(grade)的私有字元資料項目 設計printReport() 計算公式與成績等第標準同第五題 讓使用者輸入資料以驗證程式的正確性,直到使用者輸入’n’或’N’時 程式。
撰寫一個完整的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
撰寫一個完整的C/C++、Java 或Python 程式,以物件導向方式設計一個名為transcript 的類別,此類別包括以下屬性與方法:(20 分) ¾ 的私有(private)字串資料項目 ¾ 成績的私有數值資料項目 ¾ 期中考成績的私有數值資料項目 ¾ 考成績的私有數值資料項目 ¾ 新建立物件之姓名作初始化 ¾ 公有方法計算學期成績(score)的私有數值資料項目 ¾ 設計cal ¾ 方法從螢幕顯示出學生姓名、學期成績與成績等第結果 ¾ 學期成績 程式需設計迴圈 結束
試問以下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; }
用C 語言撰寫一個函式void bit_pattern(unsigned num),它能將一個32-bit 整數數值0 與1 的bit pattern 列印出來。例如數值是444 所列印出來的bit pattern 應 該是00000000 00000000 00000001 10111100?(15 分)
就下列Java 程式片斷中加入一個for 迴圈,使其印出右側結果。(15 分) public class AllNumbers number square cube 0 0 0 1 1 1
試問下列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; } 106年特種考試地方政府公務人員考試試題 全一張 (背面) 等 別: 四等考試 類 科: 資訊處理 科 目: 程式設計概要
用C 語言撰寫一個函式,能反轉一單向鍊結串列(singly linked list): struct node* reverse(struct node *h)。 單向鍊結串列範例如圖一。(25 分) 函式內請勿複製結點,其中節點的資料結構為 struct node { int d; struct node *next; } 圖一、單向鍊結串列範例
4 8
下列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"); }
用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。
(6)
(7)
9 27
試問下列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]); }
在物件導向語言(JAVA or C++),宣告變數為public, private, protected,其差異性為 何?(10 分) 3
16 64
8 h h 反轉 8 5 3 106年公務人員普通考試試題 全一張 (背面) 類 科:資訊處理 科 目:程式設計概要 五、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 範例程式執行結果
(0)
25 125
36 216
49 343
64 512 9 81 729 10 100 1000 { public static void main( String[] args ) { // print a header for the table System.out.printf( "%s\t%s\t%s\n", "number", "square", "cube" ); // 加入一個for 迴圈 // // } // end main } 二、承題一,試於for 迴圈內加入if 判斷敘述,以顯示下列結果:(10 分) number square cube 3 9 27 6 36 216 9 81 729 三、下列程式能將輸入的字串input=”abcdef”,反向列印為”fedcba”。試以遞迴的方式撰 寫副程式stringReverseHelper,且其參數宣告必須與stringReverse 方法內的呼叫一 致。(25 分) public class Reverse { public static void stringReverse( char[] array ) { stringReverseHelper( array, 0 ); System.out.println(); } //stringReverseHelper 副程式的放置處 public static void main( String args[] ) { String input = "abcdef"; stringReverse( input.toCharArray() ); } // end main } // end class Reverse 106年公務人員特種考試警察人員、一般警察 人員考試及106年特種考試交通事業鐵路 人員、退除役軍人轉任公務人員考試試題 全五頁 第二頁 考試別: 鐵路人員考試 等 別: 員級考試 類科別: 資訊處理 科 目: 程式設計概要 四、下列網頁按button 鍵前、後瀏覽器顯示的結果為何?(10 分) <!DOCTYPE html> <html> <body> <h2>What Can JavaScript Do?</h2> <p id="demo">JavaScript can change HTML content.</p> <button type="button" onclick='document.getElementById("demo").innerHTML="Hello JavaScript!" '>Click Me!</button> </body> </html> 五、根據下列程式回答問題: Employee, HourlyEmployee, SalariedEmployee 三個類別的關係為何?(5 分) 試指出一個建構子,並說明它的作用。(5 分) 試說明SalariedEmployee 中super(n)的作用。(5 分) 試指出多型(polymorphism)出現的地方。(5 分) 執行PayrollSystemTest 後印出的結果為何?(10 分) public abstract class Employee { private String name; public Employee( String n ) { name = n; } public void setName( String str ) { name = str; } public String getName() { return name; } @Override public String toString() { return String. format( "%s", getName() ); } public abstract double earnings(); } (請接第三頁) 106年公務人員特種考試警察人員、一般警察 人員考試及106年特種考試交通事業鐵路 人員、退除役軍人轉任公務人員考試試題 全五頁 第三頁 考試別: 鐵路人員考試 等 別: 員級考試 類科別: 資訊處理 科 目: 程式設計概要 (請接第三頁) public class HourlyEmployee extends Employee { private double wage; // wage per hour private double hours; // hours worked for week public HourlyEmployee( String n, double hourlyWage, double hoursWorked ) { super( n ); setWage( hourlyWage ); setHours( hoursWorked ); } public void setWage( double hourlyWage ) { if ( hourlyWage >= 0.0 ) wage = hourlyWage; else throw new IllegalArgumentException("Hourly wage must be >= 0.0" ); } public double getWage() { return wage; } public void setHours( double hoursWorked ) { if ( ( hoursWorked >= 0.0 ) && ( hoursWorked <= 168.0 ) ) hours = hoursWorked; else throw new IllegalArgumentException("Hours worked must be >= 0.0 and <= 168.0" ); } public double getHours() { return hours; } @Override public double earnings() { if ( getHours() <= 40 ) // no overtime return getWage() * getHours(); else return 40 * getWage() + ( getHours() - 40 ) * getWage() * 1.5; } @Override public String toString() { return String. format( "hourly employee: %s\n%s: $%,.2f; %s: %, .2f", super.toString(), "hourly wage", getWage(),"hours worked", getHours() ); } } (請接第四頁) 106年公務人員特種考試警察人員、一般警察 人員考試及106年特種考試交通事業鐵路 人員、退除役軍人轉任公務人員考試試題 全五頁 第四頁 考試別: 鐵路人員考試 等 別: 員級考試 類科別: 資訊處理 科 目: 程式設計概要 public class SalariedEmployee extends Employee { p rivate double weeklySalary; public SalariedEmployee( String n, double salary ) { super( n ); setWeeklySalary( salary ); } public void setWeeklySalary( double salary ) { if ( salary >= 0.0 ) weeklySalary = salary; else throw new IllegalArgumentException( "Weekly salary must be >= 0.0" ); } public double getWeeklySalary() { return weeklySalary; } @Override public double earnings() { return getWeeklySalary(); } // end method earnings @Override public String toString() { return String. format( "salaried employee: %s\n%s: $%,.2f", super.toString(), "weekly salary", getWeeklySalary() ); } // end method toString } // end class SalariedEmployee public class PayrollSystemTest { public static void main( String[] args ) { // create subclass objects SalariedEmployee salariedEmployee = new SalariedEmployee( "Smith", 800.00 ); HourlyEmployee hourlyEmployee = new HourlyEmployee( "Price", 16.75, 40 ); System.out.println( "Employees processed individually:\n" ); System.out.printf( "%s\n%s: $%,.2f\n\n", salariedEmployee, "earned", salariedEmployee.earnings() ); System.out.printf( "%s\n%s: $%,.2f\n\n",hourlyEmployee, "earned", hourlyEmployee.earnings() ); Employee[] employees = new Employee[ 2 ]; employees[ 0 ] = salariedEmployee; employees[ 1 ] = hourlyEmployee; for ( Employee currentEmployee : employees ) { S ystem.out.println( currentEmployee ); System.out.printf( "earned $%, .2f\n\n", currentEmployee.earnings() ); } // end for } // end main } // end class PayrollSystemTest (請接第五頁) 106年公務人員特種考試警察人員、一般警察 人員考試及106年特種考試交通事業鐵路 人員、退除役軍人轉任公務人員考試試題 全五頁 第五頁 考試別: 鐵路人員考試 等 別: 員級考試 類科別: 資訊處理 科 目: 程式設計概要 (請接第五頁) 六、說明瀏覽器開啟下列網頁後顯示的訊息與可能的互動。(10 分) <!DOCTYPE html> <html> <body> <p>Creating a JavaScript Object.</p> <p id="demo"></p> <p>Show something.</p> <script> var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"}; window.alert( person.firstName + " is " + person.age + " years old."); </script> </body> </html>
請寫一個由兩個函式構成的C 語言程式,舉例說明何謂區域變數與全域變數。(20 分)
依據下方C 語言程式碼,請完成ㄧ布林(Bool)型態之函式Triangle( ),並填寫呼 叫此一函式之程式碼。此一函式參數包含整數型態陣列Edge,Edge 陣列內含有三個 代表三角形邊長之數值。請撰寫判斷此三個邊長是否可構築成為一個三角形之函式, 函式運算後,依回傳結果分別顯示true 或false 値,分別代表能否構成三角形。(25 分) bool Triangle (/*請填寫函式參數*/){ /*請填寫函式程式碼*/ } int main(){ int Give[3]={6,7,8}; printf("%s\n",/*請填寫主程式程式碼*/?"true":"false" ); }
請寫出下列程式的輸出:(10 分) #include <stdio.h> #include <stdlib.h> struct POINT { int x; int y; }; struct POINT compute(struct POINT A, struct POINT B); int main() { struct POINT X = {4, 10}; struct POINT Y = {-1, 4}; struct POINT Z; Z = compute(X, Y); printf("Z.x = %d\n", Z.x); printf("Z.y = %d\n", Z.y); return 0; } struct POINT compute(struct POINT A, struct POINT B) { struct POINT C; C.x = (A.x + B.x) / 2; C.y = (A.y + B.y) / 2; return C; } 105年公務人員特種考試關務人員考試、 105年公務人員特種考試身心障礙人員考試及 105年國軍上校以上軍官轉任公務人員考試試題 全一張 (背面) 考試別: 身心障礙人員考試 等 別: 四等考試 類 科: 資訊處理 科 目: 程式設計概要
根據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); }
C 語言函式原型 int search(int A[], int n, int x); 的第一個參數為整數陣列A[],第二個參數為整數n 代表搜尋範圍為索引從0 到n - 1。 若存在一個不為負而且小於n 的整數i,滿足A[i]等於第三個參數整數x,則函式回 傳值為i,否則函式回傳值等於-1。假如有多個i 值滿足條件,則函式回傳值為最大 的i。(每小題20 分,共40 分) 請以遞迴的(recursive)循序搜尋(sequential search)法撰寫這個函式。 請以疊代的(iterative)循序搜尋(sequential search)法撰寫這個函式。
觀察以下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 分) 105年公務人員普通考試試題 全一張 (背面) 類 科:資訊處理 科 目:程式設計概要
請寫出下列C 語言算式:(每小題15 分,共30 分) 假設month 為整數變數。請利用三元運算子寫一個C 語言算式(expression)。假 如month 的值為一個31 天的月份則算式值等於31,假如month 的值為一個30 天 的月份則算式值等於30,假如month 的值等於2,則算式值等於28,假如month 的值小於1 或是大於12,算式值等於-1。 假設year 為整數變數。根據西元曆法,小於4000 的西元年,若可以為400 整除或 是可以被4 整除但不被100 整除的西元年份者為閏年。請寫一個C 語言算式 (expression),算式值為真表示year 年為小於4000 的閏年,反之則否。
觀察以下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; }
請將下列中置式(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 )
請寫出副程式factor(int N),對正整數N,做因數分解,例如N=10,輸出1, 2, 5, 10。 (8 分)
在微軟的注音輸入法裡頭,會根據前後字的關係,幫你選字,但常常會發生最常用 的字出現在最後。(每小題4 分,共8 分) 請問這是什麼問題造成的? 如何改變這投票機制(voting scheme),解決上述的問題?
下列變數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”; 九、請將下列式子最後的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); 十、在32 位元的作業系統下,試回答下列問題: int a; 請問a 的範圍?(4 分) 計時系統都是以正整數範圍(負整數範圍不計)來計算秒數,假如開始計時時間 為:1 January, 1970 at 12:00:00 a.m.(午夜12 點,非中午12 點),請問在西元何年 何月何日何時,這樣的計時系統會出現問題?(8 分)
參考GradeBook.java, GradeBookTest.java 檔案,試問GradeBook 的建構子(Constructor) 在那裡?作用為何?(10 分)
請舉例說明⑴輸入方式限制⑵數值資料檢查⑶執行時期例外處理⑷資料存取權限控 制等四種程式設計技巧,如何防止使用者輸入的資料,或程式執行過程產生的資料, 發生資料值錯誤、不合理現象、執行錯誤程式中斷、或未符合資料限制等狀況。 (20 分)
如下程式,使用堆疊(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 (請接第二頁) 104年公務人員普通考試試題 全三頁 第二頁
參考GradeBook.java, GradeBookTest.java 檔案,試問執行GradeBookTest 後的輸出 結果?(20 分)
如下程式碼所構成的方法/ 函數(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
參考GradeBook.java, GradeBookTest.java 檔案,試撰寫“GradeBook”class 內編號 39 行的成績分布列印功能 public void outputBarChart() { int[] frequency=new int[11]; … } 其中frequency 變數的宣告不得改變,且不得使用任何Java 類別程式庫。假如 取消編號29 行”outputBarChart()”的註解(亦即processGrades()最後一行會呼叫 outputBarChart()),再次執行GradeBookTest,則outputBarChart()必須印出如下結果。 (20 分) Grade distribution: 00-09: 10-19: 20-29: 30-39: 40-49: 50-59: 60-69: * 70-79: ** 80-89: **** 90-99: ** 100: * 104年公務人員特種考試關務人員考試、 104年公務人員特種考試身心障礙人員考試及 104年國軍上校以上軍官轉任公務人員考試試題 全三頁 第三頁 考 試 別: 身心障礙人員考試