lawpalyer logo

資訊處理 107 年程式語言考古題

民國 107 年(2018)資訊處理「程式語言」考試題目,共 16 題 | 資料來源:考選部

0 題選擇題 + 16 題申論題

Java 與Python 是目前被廣泛使用的程式語言,試就下列特性比較它們之 間的不同,包括Typing、Coding(撰寫程式之難易)、執行環境、程式 執行效能、開發App 的難易度。(15 分)
Java 程式語言採用dynamic dispatching。請問下面的Java 程式輸出為何?並請略加解 釋dynamic dispatching。(20 分) import java.lang.*; class A1 { public void accept(B1 V, C1 W) { System.out.println("1.\n"); V.visit(W, this); } public void accept(B2 V, C2 W) { System.out.println("2.\n"); V.visit(W, this); } public void accept(B3 V, C3 W) { System.out.println("3.\n"); V.visit(W, this); } } class A2 extends A1 { public void accept(B1 V, C1 W) { System.out.println("4.\n"); V.visit(W, this); } public void accept(B2 V, C2 W) { System.out.println("5.\n"); V.visit(W, this); } public void accept(B3 V, C3 W) { System.out.println("6.\n"); V.visit(W, this); } } class A3 extends A2 { public void accept(B1 V, C1 W) { System.out.println("7.\n"); V.visit(W, this); } public void accept(B2 V, C2 W) { System.out.println("8.\n"); V.visit(W, this); } public void accept(B3 V, C3 W) { System.out.println("9.\n"); V.visit(W, this); } } class B1 { public void visit(C1 W, A1 U) { System.out.println("11.\n"); W.inspect(U, this); } public void visit(C2 W, A2 U) { System.out.println("12.\n"); W.inspect(U, this); } public void visit(C2 W, A3 U) { System.out.println("13.\n"); W.inspect(U, this); } public void visit(C3 W, A3 U) { System.out.println("14.\n"); W.inspect(U, this); } } (請接第二頁) 107年公務人員特種考試警察人員、一般警察人員考試及 107年特種考試交通事業鐵路人員考試試題 全四頁 第二頁 考試別: 鐵路人員考試 等 別: 高員三級考試 類科別: 資訊處理 科 目: 程式語言 class B2 extends B1 { public void visit(C1 W, A1 U) { System.out.println("15.\n"); W.inspect(U, this); } public void visit(C2 W, A2 U) { System.out.println("16.\n"); W.inspect(U, this); } public void visit(C2 W, A3 U) { System.out.println("17.\n"); W.inspect(U, this); } public void visit(C3 W, A3 U) { System.out.println("18.\n"); W.inspect(U, this); } } class B3 extends B2 { public void visit(C1 W, A1 U) { System.out.println("31.\n"); W.inspect(U, this); } public void visit(C2 W, A2 U) { System.out.println("32.\n"); W.inspect(U, this); } public void visit(C2 W, A3 U) { System.out.println("33.\n"); W.inspect(U, this); } public void visit(C3 W, A3 U) { System.out.println("34.\n"); W.inspect(U, this); } } class C1 { public void inspect(A1 U, B1 V) { System.out.println("41.\n"); } public void inspect(A2 U, B2 V) { System.out.println("42.\n"); } public void inspect(A3 U, B3 V) { System.out.println("43.\n"); } } class C2 extends C1 { public void inspect(A1 U, B1 V) { System.out.println("51.\n"); } public void inspect(A2 U, B2 V) { System.out.println("52.\n"); } public void inspect(A3 U, B3 V) { System.out.println("53.\n"); } } (請接第三頁) 107年公務人員特種考試警察人員、一般警察人員考試及 107年特種考試交通事業鐵路人員考試試題 全四頁 第三頁 考試別: 鐵路人員考試 等 別: 高員三級考試 類科別: 資訊處理 科 目: 程式語言 (請接背面) class C3 extends C2 { public void inspect(A1 U, B1 V) { System.out.println("61.\n"); } public void inspect(A2 U, B2 V) { System.out.println("62.\n"); } public void inspect(A3 U, B3 V) { System.out.println("63.\n"); } } class Demo { public static void main(String[] arg) { A2 a; B2 b; C2 c; a = new A3(); b = new B3(); c = new C3(); a.accept(b, c); } } // end of the Demo class
以下二小題是完整的C/C++程式碼,請回答執行的結果為何?(每小題10 分,共20 分)  #include <stdio.h> #include <stdlib.h> int recFun(int); int main(void) { printf("%d\n", recFun(12345)); return 0; } int recFun(int n) { if (n<10) return n; else return recFun(n/10) + n%10; } (請接第二頁) 107年公務人員高等考試三級考試試題 全四頁 第二頁 類 科: 資訊處理 科 目: 程式語言  #include <iostream> #include <cstdlib> #include <string> using namespace std; struct data { string name; int a, b; }; void fun1(struct data), fun2(struct data *), fun3(struct data); int main(void) { struct data man={"John", 11, 33}, lady={"Linda", 22, 44}; cout<< "After process..." <<endl; fun2(&man); fun3(lady); fun1(man); fun1(lady); return 0; } void fun1(struct data in) { cout<< "Name: " << in.name << endl; cout<< "a=" << in.a << ", "; cout<< "b=" << in.b <<endl; } void fun2(struct data *ptr) { int tmp; tmp = ptr->a; ptr->a = ptr->b; ptr->b = tmp; } void fun3(struct data in) { int tmp; tmp = in.a; in.a = in.b; in.b = tmp; } (請接第三頁) 107年公務人員高等考試三級考試試題 全四頁 第三頁 類 科: 資訊處理 科 目: 程式語言 (請接背面)
(12345)
諾姆·荷姆斯基(Noam Chomosky)定義了type-0、type-1、type-2、type-3 四種語法類型,請說明各類型可接受之語言(Language Accepted)是什 麼?相對應之自動機(Automaton)是什麼?(20 分)
請問下面的Scheme 程式執行結果為何?(10 分) (define x 0) (+ 5 (call/cc (lambda (cc) (set! x cc) 6) ) ) (* 8 (* 9 (+ 10 (x 35)))) 執行完上列程式之後,接著再執行下面的程式,結果又為何?(10 分) (+ 8 (- 9 (* 12 (x 31))))
以下是完整的Python 程式碼,請說明此程式的詳細功能為何?(10 分) import os.path file1 = input("Input a file name: ") file2 = input("Input the other file name: ") while not os.path.isfile(file1): print("The file does not exist!") file1 = input("Input a file name again: ") while os.path.isfile(file2): answer = input("The file existed, Overwrite it? y/n? ") if answer == 'n' or answer=='N': file2 = input("Input a file name again: ") else: break fileObject1 = open(file1, "r") fileObject2 = open(file2, "w") content = fileObject1.read() fileObject2.write(content) fileObject1.close() fileObject2.close()
請解釋程式語言中之變數動態範圍(Dynamic Scope)與語句參考環境 (Referencing Environment)。(6 分) 以下為一動態範圍之程式,請分別列出a, b, c 三點之參考環境。(9 分) void subprogram1( ) { int X, Y; . . . <----------------- a } /* end of subprogram1 void subprogram2( ) { int Y, Z; . . . <----------------- b } /* end of subprogram2 void main( ) { int W, Z; . . . <----------------- c } /* end of main
在Unix/Linux 的系統裡,libfoo.a 與libfoo.so 之類的程式庫(libraries)有何不同? 並依生成方式、使用方式、使用時機、對系統的影響等面向說明。(20 分) (請接第四頁) 107年公務人員特種考試警察人員、一般警察人員考試及 107年特種考試交通事業鐵路人員考試試題 全四頁 第四頁 考試別: 鐵路人員考試 等 別: 高員三級考試 類科別: 資訊處理 科 目: 程式語言
請撰寫一支密碼產生模組程式,此模組的密碼組成為一個五位數字,最後一碼(個 位數)為驗證碼。合法的密碼規則是除了驗證碼之外的所有數字相乘後取除以10 的 餘數當作驗證碼。例如:13575 即為合法的密碼,因為(1*3*5*7)%10=5。請撰寫一支 完整C/C++程式,包含main()與codeGen();codeGen()功能為輸入參數為密碼的前四 碼,輸出為產生驗證碼之後的五位數字密碼。程式讓使用者輸入密碼的前四碼後, 檢查使用者所輸入的數值是否為四位數,正確的話則呼叫codeGen()將傳回之五位數 字密碼從螢幕顯示出。main()需有迴圈功能詢問使用者是否要繼續輸入,直到使用者 按下不是’Y’或’y’鍵時結束程式。(20 分) (請接第四頁) 107年公務人員高等考試三級考試試題 全四頁 第四頁 類 科: 資訊處理 科 目: 程式語言
在一concurrent 環境下,有一共享變數X 其初始值為1,程序(process) A 必須加2 到X,程序B 必須將X 乘以4。A 與B 都要執行三個動作 1.讀取X;2.進行算數運算;3.將算好的值寫回X。試列出最後可能得到 的X 值。(20 分)
考慮下列與前後文無關的文法(context-free grammar)。請問它是LL(1)文法嗎?如果是, 請寫出它的LL(1)文法分析表(LL(1) parse table)。如果不是,請說明理由。(20 分) 1.S ::= ABC 2.A ::= dB 3.A ::= e 4.B ::= Af 5.B ::= g 6.C ::= h
(1)
(1)
(1) 20 分
請撰寫一支完整的C/C++程式,此程式包含一個一維陣列,陣列元素的個數由使用 者輸入,陣列元素值由時間亂數產生,數值範圍介於在1(含)至99(含)間。此 程式需包含下列函數: arrMean():將所傳入的一維陣列計算此陣列元素的平均值後傳回。(10 分) arrBubble():將所傳入的一維陣列利用氣泡排序法將陣列元素由小至大排序。(10 分) 撰寫main()以驗證arrMean()與arrBubble()的正確性。(5 分)
假設有一C++中的namespace,稱之為MyStack,該namespace 中有一變 數topPtr,試列出參考該變數的三種方式。(15 分)
請問下列C 程式執行的結果是什麼?(10 分) #include <stdio.h> int a, b; void main() { a = 4; b = 30; printf("Before the switch statement, a= %d.\n", a); switch (a) { case 1: a = a *10; break; case 2: a = a *10; break; case 3: a = a *10; while (a < b ) case 4: { a = a + 5; } break; case 5: a = a *10; break; default: b = a *10; break; } // end of switch printf("after the switch statement, a= %d.\n", a); } 請檢視下面的C++程式,請問執行該程式後的輸出為何?(10 分) #include <stdio.h> class A{ public: int X; A() { X = 1; printf("X = %d\n", X); } }; class B : public A { public: B() { X = 2; printf("X = %d\n", X); } }; main() { B * pB = new B; }
使用C++, Java 或Python 程式語言設計機車里程數計算程式: motor:機車類別 ¾ brand:機車品牌的私有字串資料項目 ¾ fuel:機車油量(公升)的私有數值資料項目 ¾ speed:機車速度(公里/小時)的私有數值資料項目 ¾ km:機車可行駛公里數的私有數值資料項目 ¾ 建構函數可將新建立物件之機車品牌、油量、速度作初始化 ¾ calKM()公有方法計算里程數,依標準機車計算,平均每公升可跑15 公里 ¾ show()公有方法從螢幕顯示出機車品牌、油量、速度、可行駛公里數資訊 electricMotor:電動機車類別 ¾ 繼承機車(motor)類別 ¾ seat:電動機車座位數私有數值資料項目 ¾ 建構函數可將新建立物件初始化 ¾ calKM()公有方法計算電動機車可行駛公里數,不受速度影響,電動機車平均每公 升可跑20 公里 ¾ show()公有方法從螢幕顯示出電動機車品牌、油量、速度、可行駛公里數資訊 raceMotor:競技機車類別 ¾ 繼承機車(motor)類別 ¾ type:競技機車型號之私有字串資料項目 ¾ 建構函數可將新建立物件初始化 ¾ calKM()公有方法計算競技機車可行駛公里數;競技機車若時速超過每小時60 公 里,則平均每公升可跑10 公里;沒超過的話則平均每公升可跑12 公里 ¾ show()公有方法從螢幕顯示出競技機車品牌、油量、速度、可行駛公里數資訊 此題不需讓使用者輸入相關數值,只需在程式內建立電動機車與競技機車物件時給 予相關的數值,但程式需執行show()方法以驗證程式的正確性。(25 分)
試說明SQL 與NoSQL,包括資料庫結構、資料庫可擴展性。並列舉它 們的優點各三項。(15 分)