lawpalyer logo

程式語言考古題|歷屆國考試題彙整

橫跨多種國家考試的程式語言歷屆試題(選擇題 + 申論題)

年份:

資訊處理 100 題

請詳述下列四種排序(sort)演算法的運作原理及其時間複雜度。(25 分) 泡沫排序(bubble sort) 插入排序(insertion sort) 合併排序(merge sort) 快速排序(quick sort)
二元樹(binary tree)是一種常見的資料結構。對二元樹的任一節點(node) 而言,其可能包含的子節點(children)數量為0、1 或2。舉例來說,對 於一個具有3 個節點的二元樹,其可能的結構有以下5 種: 請使用遞迴(recursion)的方式撰寫一個C 語言函數int nTrees(int n)來 計算具有n 個節點的二元樹,共有多少種不同的二元樹結構。(20 分) 在許多情況下,使用遞迴的方式所撰寫的程式不是最有效率的方法。 請問可以使用何種程式撰寫的方法來提高的程式的執行效率?(5 分)
若我們使用C 程式語言,定義了如下的結構(struct) typedef struct { char frst_name[20], last_name[20]; int score; char grade; } student_t; 並宣告兩個變數為此結構 student_t stu1, stu2; 請分別判斷下列8 個敘述是否有可能為有效(valid)的敘述或是一定為 無效(invalid)的敘述,並詳述其理由。(25 分) student_t A_list[30]; printf("%s", stu2); printf("%d %c", stu2.score, stu2.grade); stu1 = stu2; if (stu1.grade == stu2.grade) printf("Same Grade"); if (stu1 == stu2) printf("Same Structure"); stu1.last_name = "Donald"; student_func(&stu1);
請問下列C 語言程式執行後的輸出為何?(15 分) #include <stdio.h> int main(void) { int x = 0; do { switch (x) { case 0: printf("%d\n", x); case 1: x++; break; case 2: printf("3\n"); case 3: printf("%d\n", x * 3); case 4: x += 3; break; default: x = x * 2; printf("%d\n", x / 3); } } while(x < 10); return (0); }
(0)
請描述何謂白箱測試(white-box testing)和黑箱測試(black-box testing)。 (10 分)
請依據以下Python 程式碼回答以下問題:(25 分) ⑴請說明費氏數列函式fib 的輸入參數與回傳結果。 ⑵請說明第6 行輸出結果並加以說明。 ⑶請說明第7 行輸出結果並加以說明。 1
def fib(n): if(n==0): return 0 elif(n==1): return 1 else: return fib(n-1) + fib(n-2) print("fib(1) = ", fib(1)) print("fib(5) = ", fib(5)) 二、請說明下列氣泡排序法,並回答以下Python 程式碼之輸出結果。(25 分) 1 2 3 4 5 6 7
(1)
(1)
(5)
(5) 25 分
9 10 11 12 data = [36, 22, 57, 9, 31, 42, 7, 15] print('before sorting: ',data) def Sort(data): n = len(data) while n > 1: n-=1 for i in range(n): if data[i] > data[i+1]: data[i], data[i+1] = data[i+1], data[i] print('第',8-n,'輪排序: ',data) return data print('after sorting: ',Sort(data)) 三、請試述下列名詞之意涵:封裝(Encapsulation)、繼承(Inheritance)、 多型(Polymorphism)、SQL 隱碼攻擊(SQLInjection Attack)、預存程序 (Stored Procedure)。(25 分) 四、請依據以下C 程式碼回答問題,列出輸出結果並加以說明。(25 分) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> int main( ) { int i,arr[10]; int *Pointer; for(i = 0; i<= 9; i++) arr[i] = (i+1)*10-i; Pointer = arr; printf("%d\n", *Pointer); printf ("%d\n", *Pointer++); printf("%d\n", *++Pointer); printf ("%d\n", (*Pointer)++); printf ("%d\n", *--Pointer); return 0; }
請回答下列有關物件導向程式語言的問題: 物件導向程式語言的特性有那些?並分別說明之。(10 分) 以你學過的物件導向程式語言,撰寫你在所描述之各別特性所對應的 程式片段。(15 分)
請說明函式之間的呼叫方式,其實際參數(actual parameter)與形式參數 (formalparameter)的傳送有那幾種?並撰寫對應的程式片段加以說明。(25 分)
請解釋並舉例說明何謂多載函式(overloaded function)與樣版函式 (template function)?(25 分)
程式語言中變數要給予資料型態,其作用為何?同時請說明何謂靜態連 結(static binding)和動態連結(dynamic binding)的作用時機點及其優 缺點。(25 分)
語意分析(Semantics Analysis)對於程式語言的正確執行非常重要。 以下是Java 和C++程式,請說明程式編譯、執行結果與其原因,以及 程式指令之意義或影響。(18 分) ⑴Java 程式 static void test1(){ int n; int [] x = new int[n]; } ⑵Java 程式 static void test2(){ int n=0; int [] x = new int[n]; } ⑶Java 程式 static void test3(){ int n=0; int [] x = new int[n]; x[0]=0; } ⑷C++程式 void test4(){ int n; int x[n]; } ⑸C++程式 void test5(){ int n=0; int x[n]; x[0] =0; } ⑹C++程式 void test6(){ int n=0; int *x = new int[n]; x[0] =0; } 請說明Java 與C++語言在陣列宣告上的語意分析的方法,與其優缺 點。(7 分)
在程式語言中有所謂的早期繫結(early binding)和晚期繫結(late binding), 請詳述這兩個繫結的差異性和使用時機點,並以C++程式語言說明如何達 成晚期繫結的功能。(20 分)
第5 代行動通訊標準(5G)的網路架構包含終端設備、接取網路、邊緣 運算、核心網路、外部服務等,其系統程式的開發需要許多軟體安全開 發機制。 為強化5G 系統開發之安全性,可使用SSDLC 和DevSecOps 開發流 程;請說明DevSecOps 開發流程的要點。(15 分) 軟體安全開發機制,包含建立威脅模型與分析、設計威脅模型的緩解 措施。請說明若威脅模型中有會話劫持(Session hijacking)攻擊、機 敏資料洩漏、Cookie 操控(Manipulation),其緩解措施分別如何設計。 (10 分)
二元樹(Binary tree)可使用陣列(Array)和鏈結串列(Linked list)設計。 以二元樹表達算術運算式c *(d - e)+ f / g,並寫出此運算式的後置 表示法(Postfix Expression)。(10 分) 以一維陣列設計二元樹,節點循序編號,從陣列1 開始表達根節點, 節點編號規則為:左子樹是父節點編號乘以2,右子樹是父節點編號 乘以2 加1,-1 表示沒有子節點。請填寫以下陣列表達題算術運算 式之二元樹。(10 分) 索引 0 1 2
程式驗證的應用。 請說明「測試驅動發展方法(Test Driven Development, TDD)」的概念 及優點。(7 分) 有一MySort 類別的方法int[] binarySort(int data[]),將陣列data 內的 資料由小到大排序後回傳,請依據TDD 的概念設計測試案例。(10 分) 請以Java/JUnit 語言完成以下測試程式(I)~(II)。(8 分) @Test public void testBinarySort(MySort (I) ){ int[] source = {2, 3, 5, 9, 12, 7}; int[] target = obj.binarySort(source); for(int i=0; i<source.length-1; i++){ assertTrue(target[i] < (II) ); } }
函式之間的呼叫,其參數的傳送可分為那幾種?請詳述之;並以任何一種 程式語言撰寫兩個整數對調的情形,並加以說明最後處理的結果。需註明 使用的程式語言。(20 分)
建構股票交易資料庫(Stock),請寫出SQL 指令。 客戶表格(Customer) 客戶編號(cid) [整數、主鍵] [自動增加] 客戶姓名(cname) [少於10 字元可變字串] 客戶帳戶餘額 (balance) [整數、非空值] 客戶融資餘額 (margin) [整數、非空值] 證券交易表格(StockTrade) 交易編號 (id) [整數、主鍵] [自動增加] 證券編號 (sid) [整數、非空值] 證券每股購入價格 (price) [整數、非空值] 證券購入股數 (share) [整數、非空值] 客戶編號(cid) [整數、非空值] 造出Customer, StockTrade 表格。(10 分) CREATE TABLE Customer ( _____________________ ); CREATE TABLE StockTrade ( _____________________ ); 查詢客戶姓名是"Tom"所有購買股票編號與購入總股數。(5 分) 撰寫Store Procedure,造出一個暫時的資料表Report,含兩個整數資 料欄位(證券編號sid, 證券價格price);加入10 筆資料,再根據證券 價格由小到大排序,查詢列出此10 筆資料。(10 分) delimiter $$ CREATE PROCEDURE x() BEGIN DECLARE i INT DEFAULT 1; ____________________ END$$
程式語言中有一重要的主題是指標(pointer)。何謂指標?其功用為何? int a = 100;並詳述⑴int *ptr = &a;⑵int *fn(int a);⑶int(*fn)(int a); ⑷int *arr[3];⑸int(*arr)[3]。(30 分)
程式語言中有一重要的主題是指標和參考(reference),它們當用來撰寫 鏈結串列或樹狀結構的問題。我們將它用來處理鏈結串列,假設有一單向 鏈結串列(singly linked list)之節點中有三個項目,分別是id(整數型態)、 score(浮點數型態)以及next(指標或參考型態),如下圖所示: id score next 今有一節點名為ptr,試分別撰寫將此ptr 節點加入於已含有多個節點的單 向鏈結串列之尾端,以及刪除鏈結串列尾端節點的片段程式。可以任何程 式語言撰寫之,但請註明使用的程式語言。(30 分)
程式例外處理的設計對於資訊系統的可靠性非常重要。 請完成以下C++程式(I)~(V)指令,處理兩數相除的例外狀況,使 輸出為:(15 分) Exception:empty Exception:not a number Quotient:Exception:divided by zero Quotient:2.4 #include <iostream> #include <exception> #include <string.h> #define N 10 using namespace std; class EmptyException:public exception { public: virtual const char* what()const throw(){ (I) ; } }; class NotNumberException:public exception { public: virtual const char* what()const throw(){ (II) ; } }; class DividedByZeroException:public exception { public: virtual const char* what()const throw(){ (III) ; } }; int valid(const char x[N]){ int result=0; if(strlen(x)==0)throw EmptyException(); for(int i=0; i<strlen(x); i++){ if(!isdigit(x[i])) throw NotNumberException(); result = (IV) ; } return result; } double quotient(int n1, int n2){ if( (V) ) throw DividedByZeroException(); return static_cast<double>(n1/n2); } void test(const char x1[N], const char x2[N]){ int n1, n2; try { n1=valid(x1); n2=valid(x2); cout<<"Quotient:"<<quotient(n1, n2); } catch(EmptyException &e){ cout<<"Exception:"<< e.what(); } catch(NotNumberException &e){ cout<<"Exception:"<< e.what(); } catch(DividedByZeroException &e){ cout<<"Exception:"<< e.what(); } cout<<endl; } int main(){ test("",""); test("a","12"); test("10","0"); test("12","5"); return 0; } 請說明使用try-catch 與if-else,處理例外狀況的優缺點。(5 分) 請說明C++與Java 在try-catch 中finally 設計的異同與其理由。(5 分)
9 10 11 12 13 14 15 值 + * / 請根據右下圖完成下面C 程式實作(I)~(V)之鏈結串列的表示,其中 btree 為指向一個二元樹的指標變數。(5 分) (I) node { (II) ; (III) ; (IV) ; } treeNode_t; typedef (V) tree_t; tree_t btree; btree data left right data left right data left right 三、給定正整數二維陣列,起點為其中數值最大的點。從起點開始移動,求 經過點的數值之加總。移動規則:⑴從相鄰的點(上、下、左、右)選 擇一個最大的值移動;⑵走過的點不能重複。 請完成遞迴程式與非遞迴程式(I~XI)空格,使以下C 程式均能執行 出下列結果。(22 分) path= 88, 42, 31, 18, 23, 21, 68, 36, 55, 77, 66, 63, 28, 33, 52, sum=701 請比較遞迴與非遞迴程式記憶體空間使用狀況。(3 分) #include <stdio.h> #define maxN 30 const int NV = -1; int max(int x, int y){int r = x>y?(I) ; return r;} int findR(int m[maxN][maxN], int x, int y, int sum){ int mi = max(max(m[x+1][y],m[x-1][y]),max(m[x][y+1],m[x][y-1])); sum += m[x][y]; printf("%d, ", m[x][y]); m[x][y] = NV; if (mi == NV) return (II) ; if (m[x+1][y] == mi) return findR(m, (III) , sum); if (m[x-1][y] == mi) return findR(m, (IV) , sum); if (m[x][y+1] == mi) return findR(m, (V) , sum); if (m[x][y-1] == mi) return findR(m, (VI) , sum); } int findI(int m[maxN][maxN], int x, int y, int sum){ while(1){ int mi = max(max(m[x+1][y],m[x-1][y]),max(m[x][y+1],m[x][y-1])); sum += m[x][y]; printf("%d, ", m[x][y]); m[x][y] = NV; if (mi == NV) (VII) ; else if (m[x+1][y] == mi) (VIII) ; else if (m[x-1][y] == mi) (IX) ; else if (m[x][y+1] == mi) (X) ; else (XI) ; } return sum; } int main(){ int x=0, y=0, mi=NV, n=5, m=6; int map[maxN][maxN]={{NV, NV, NV, NV, NV, NV, NV}, {NV, 11, 15, 23, 18, 31, NV}, {NV, 31, 68, 21, 88, 42, NV}, {NV, 19, 36, 52, 33, 28, NV}, {NV, 12, 55, 77, 66, 63, NV}, {NV, NV, NV, NV, NV, NV, NV}}; // 邊界都是NV for (int i = 1 ; i <= n ; i++){ for (int j = 1 ; j <= m ; j++){ if (mi < map[i][j]){ mi = map[i][j]; x=i; y=j; } } } printf("path= "); printf("sum=%d\n",findR(map, x, y, 0)); return 0; } 四、敘述統計學上中位數和平均數均為數據資料的集中趨勢,中位數是將一 組數值資料由小到大排列,最中間的數值為中位數。若有奇數個資料, 則取最中間的數值為中位數,例如1, 2, 3, 3, 4, 6, 7, 7, 21 的中位數是4; 若有偶數個資料,則取最中間兩個數值的平均為中位數,例如1, 2, 3, 3, 4, 6, 7, 7, 8, 21 的中位數是(4+6)/2=5。算術平均數是將一組數值加總, 除以這組數值的個數,例如1, 2, 3, 3, 4, 6, 7, 7, 21 的算術平均數=54/9=6。 以下C++程式輸出:4, 6, 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 #include <iostream> #include <algorithm> using namespace std; class Compute{ public: void setData(int *, int); (I) =0; protected: int *data, d_size; }; class ComputeMedian: public Compute{ public: double getNum(); }; class ComputeMean: public Compute{ public: double getNum(); }; void Compute::setData(int *d, int s){ data = d; d_size = s; sort(data, data+d_size); } double ComputeMedian::getNum(){ if ( (II) ==1) return data[d_size/2]; else return (data[ (III) ]+data[1+d_size/2])/2.0; } double ComputeMean::getNum(){ double sum=0, avg=0; for (int i=0; i<d_size; i++) sum = sum + data[i]; return ( (IV) ); } class Report { public: Report(int *d, int s){ data = d; d_size = s; } void setCompute(Compute *c) { cp = c; } void report(){ cp-> (V) ; cout<<cp->getNum()<<", "; } private: int *data, d_size; Compute *cp; }; int main(){ int data[10] ={6, 7, 1, 21, 2, 3, 4, 3, 7}; Report r(data, 9); Compute *cp1 = new ComputeMedian(); Compute *cp2 = new ComputeMean(); r.setCompute(cp1); r.report(); r.setCompute(cp2); r.report(); return 0; } 請完成程式碼(I~V)使程式正常運作。(15 分) 請根據程式碼完成下面UML 類別圖的關係連線,並說明此設計對模 組耦合性(Coupling)的影響。(10 分) {abstract} Compute -data -d_size +setData() +getNum(){abstract} ComputeMean +getNum() ComputeMedian +getNum() Report -data -d_size +setCompute() +report()
(1) 15 分
在程式語言中,什麼是懸置else 的問題?(5 分) 近代高階程式語言怎麼解決懸置else 的問題?(5 分) 在C++語言中,寫程式可用什麼技巧避免懸置else 的問題?(5 分)
請將下面程式改寫為尾遞迴(tail recursion)的形式。(15分) int recsum(int x){ if (x == 1) return(x); return(x + recsum(x - 1)); } 請問尾遞迴形式的優點為何?(10分)
請比較compiler 與interpreter 的差別。(6 分) LISP,C,Python 三種語言,何者為compiler 所編譯?何者為interpreter 所執行?請說明。(9 分)
假設每個int變數占用4 bytes,每個指標變數也占用4 bytes。下面的C程式 印出的結果為何?(25分) typedef int T1[10][9]; int main(){ struct { T1 *a[10]; int (*b)[100]; } f[10][10][10]; printf("p1 = %d\n",(int)sizeof(f[1][5])); printf("p2 = %d\n",(int)sizeof(f[2][3][4].a)); printf("p3 = %d\n",(int)sizeof(f[3][2][6].b)); printf("p4 = %d\n",(int)(f - &f[5])); printf("p5 = %d\n",(int)(f[6][2] - f[3][3])); }
請比較concurrency 與Parallelism 方法的差別。(6 分) 什麼是thread safe 的問題?請說明。(4 分) 有三個方法可以創造多執行緒,分別是:Threading 、Fork 、 Multiprocessing,請比較這三種方法的差別。請從執行效率,memory sharing,thread safe 等方面來說明。(15 分) 請用Python 並利用multi-process 的方式,寫一段程式,同時下載兩 部videos,檔案名稱分別為A.avi 與B.avi,並顯示各自下載的時間。 (5 分)
下面的C程式印出的結果為何?(作答必須解釋計算過程,只寫答案而未 加解釋,只能得部分分數。)(25分) int foo1(int p){ if (p >= 90) return(foo1(foo1(p-11))); return(p+10); } int foo2(int p){ if (p < 91) return(foo2(p+11)); return(p); } int foo(int p){ return(foo1(foo2(p))); } int main(int argc, char **argv){ int q; q = 65; printf("foo(%d)= %d.\n", q, foo(q)); q = 83; printf("foo(%d)= %d.\n", q, foo(q)); q = 95; printf("foo(%d)= %d.\n", q, foo(q)); q = 100; printf("foo(%d)= %d.\n", q, foo(q)); q = 142; printf("foo(%d)= %d.\n", q, foo(q)); return(0); }
(0)
物件導向程式語言有繼承的觀念,請解釋單一繼承(single inheritance)與 多重繼承(multiple inheritance)的意義、差別及實作方法。(25分)
在程式語言中,有三種方式來定義字串的長度,分別為static,limited dynamic length 和dynamic with no maximum,請說明這三種方式的優 缺點。(12 分) 對下列四種程式語言:C++,COBOL,JAVA,PERL 它們對字串長度處理 的方式,各為那一種?(8 分)
請比較下列五種語言設計方式的差別Imperative Programming 、 Declarative Programming 、Procedural Programming 、Object-Oriented Programming、Functional Programming。(20 分)
有一函式如下,試問其平均時間複雜度為何?(25 分) Function A(n) { int a = 0; int b = 0; for (int i = 0; i < n; i++) { a++; } printf("Hello"); for (int j = 0; j < n; j++) { for (int k = 0; k < n; k++) { b++; } } printf("World"); }
請寫一個Python 語言函式(function),reverse_sentence(s),回傳所傳 送進去的字串,逐字翻轉(reverse)結果。例如reverse_sentence(“abc def”) 回傳“def abc”。(20 分)
閱讀以下Java 程式,列出數學式以說明變數e 在計算什麼?接著撰寫 遞迴(recursive)程式public static double etx(int accuracy, int x) 來計算前述變數e 的值,撰寫時必須使用etx 規定的參數與資料型 態。(25 分) import java.util.Scanner; public class EtoX { public static void main( String[] args ) { Scanner input = new Scanner( System.in ); int number = 1; int accuracy; int factorial = 1; int x; double e = 1.0; double exponent = 1.0; x = input.nextInt(); accuracy = input.nextInt(); while ( number < accuracy ) { exponent *= x; factorial *= number; e += exponent / factorial; number++; } // end while loop System.out.printf( "x: %d%ne: %f%n", x, e ); } // end main } // end class EtoX
請指出下列程式碼不合理之處。(25 分) #include<stdio.h> #include<stdlib.h> int main() { int s ,t; scanf("%d%d", &s,&t); while (s < 30) { if (s < 100 || s >50) { t++; } else if (s > 60 && s<-1) { t++; } else if (s > 10 && s < 100) { t--; } else t++; } system("pause"); return 0; }
下列為資料結構List 的Java 程式,而ListTest 為測試類別(class), 試回答以下問題:(35 分) ⑴ListTest 中”List<Integer> list = new List<>();”會先後呼叫那些 methods?傳送那些參數值?結果新物件list 的屬性值為何? ⑵執行ListTest.java 後會列印出什麼? ⑶撰寫public T removeFromBack() throws EmptyListException。 class ListNode<T> { T data; ListNode<T> nextNode; ListNode(T object) { this(object, null); } ListNode(T object, ListNode<T> node) { data = object; nextNode = node; } T getData() ListNode<T> getNext() } // end class ListNode<T> public class List<T> { private ListNode<T> firstNode; private ListNode<T> lastNode; private String name; public List() { this("list"); } public List(String listName) { name = listName; firstNode = lastNode = null; } public void insertAtFront(T insertItem) public void insertAtBack(T insertItem) public T removeFromFront() throws EmptyListException public T removeFromBack() throws EmptyListException public boolean isEmpty() public void print() { if (isEmpty()) { System.out.printf("Empty %s%n", name); return; } System.out.printf("The %s is: ", name); ListNode<T> current = firstNode; while (current != null) { System.out.printf("%s ", current.data); current = current.nextNode; } System.out.println(); } } // end class List<T> public class EmptyListException extends RuntimeException { public EmptyListException() { this("List"); } public EmptyListException(String name) { super(name + " is empty"); } } // end class EmptyListException public class ListTest { public static void main(String[] args) { List<Integer> list = new List<>(); try { list.insertAtFront(-1); list.insertAtFront(99); list.print(); int removedItem = list.removeFromFront(); removedItem = list.removeFromFront(); list.print(); removedItem = list.removeFromFront(); list.print(); } catch (EmptyListException emptyListException) { emptyListException.printStackTrace(); } } } // end class ListTest
(99)
根據下列之C 語言程式,回答下列問題。(每小題5 分,共15 分) 若參數的傳遞方式是傳值(pass by value),程式執行所輸出數字為何? 若參數的傳遞方式是傳參考(pass by reference),程式執行所輸出數字 為何? 若參數的傳遞方式是傳值與結果(pass by value-result),程式執行所輸 出數字為何? void add (int x, int y) { x += x; y += y; } void main() { int a[2] = {1, 3}; add (a[0], a[1]); printf (“%d %d\n”, a[0], a[1]); }
試問下列程式碼的輸出為何?(25 分) #include <iostream> using namespace std; class A { public: int testa; A() :testa(100) { } virtual void f() { cout << "apple" << endl; } void g() { cout << "banana" << endl; } }; class B : public A { public: B() :testb(300) {} void f() { cout << "cat" << endl; } void g() { cout << "dog" << endl; } int testb; }; int main() { B b; A *a = &b; a->g(); a->f(); cout << a->testa << endl; cout << b.testb << endl; system("pause"); return 0; }
(100)
(300)
下列程式Stack<T>繼承上題的List<T>。試撰寫Stack 中的建構子Stack (),以及兩個主要methods: push(…)與pop()。(25 分) public class Stack<T> extends List<T> { public Stack() public void push(T object) public T pop() throws EmptyListException } // end class StackInheritance
定義一個由以下符號所組成的運算式。 二元運算子: *, +, ->, <-> 一元運算子:~ 變數:X, Y, Z 括號:(, ) 運算子的優先順序(precedence)依序為~,{*, +}, {->, <->}, 運算都是由左至右(left-associative),括號必須左右對稱且先左後右。 合法的運算式有如:X, Y, ~Y+~X,(Y*X<->Z*X), ~~Y 或 (~(X))->(Z)。而不合法的運算式則如:X~, Z->YZY 或*X)Y+Z(。 請完成以下BNF grammar,用以產生所有合法的運算式,但不會產生 不合法的運算式。(15 分) <var> ::= X | Y | Z <factor> ::= ? | ? | ? <term> ::= ? | ? | ? <exp> ::= ? | ? | ? 請畫出Y*X->Z 的剖析樹(parse tree)。(5 分)
試問下列程式碼的輸出為何?(25 分) #include<stdio.h> #include<stdlib.h> int main() { int i, k1 = 0, k2 = 0, k3 = 0; char a[] = "aA123bd45YH*#*"; for (i = 0; a[i] != '\0'; i++) if ((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z')) k1++; else if ((a[i] >= '0') && (a[i] <= '9')) k2++; else k3++; printf("%d,%d,%d\n", k1, k2, k3); system("pause"); return 0; }
下列為資料庫中STAFF 資料表,包含ID, DEPT, EXAM1, EXAM2, LEVEL 等5 欄位,請依序寫出指定的SQL 指令。(每小題5 分,共20 分) ID DEPT EXAM1 EXAM2 LEVEL A3452 E_Car 45 72 3 A4152 A_Boat 45 54 2 A2451 E_Car 51 89 4 . . . 寫出「列出所有DEPT(不可重複)」的SQL 指令。 寫出「列出ID, DEPT, LEVEL,但要按照ID 字母順序排序」的SQL 指令。 寫出「列出EXAM1 成績由高至低人員的ID 及EXAM1 成績,同分時 EXAM2 成績較高者優先列出」的SQL 指令。 寫出「能依DEPT 順序,將該DEPT 所有人員的DEPT, ID, EXAM1, EXAM2 資料列出」的SQL 指令。
下列Python 程式的執行結果為何?(15 分) class Shape: def __init__(self, x, y): self.x = x self.y = y self.description = "unknown" def area(self): return self.x * self.y def perimeter(self): return 2 * self.x + 2 * self.y def describe(self, text): self.description = text class Square(Shape): def __init__(self, x): self.x = x self.y = x class DoubleSquare(Square): def __init__(self, y): self.x = 2 * y self.y = y def perimeter(self): return 2 * self.x + 3 * self.y rectangle = Shape(100, 45) print(rectangle.perimeter()) dictionary = {} dictionary["DoubleSquare"] = DoubleSquare(5) dictionary["Rectangle"] = Shape(600,45) dictionary["Square"] = Square(20) print(dictionary["Square"].area()) dictionary["DoubleSquare"].describe("Double square") print(dictionary["Rectangle"].description)
(5)
(20)
下列問題請用Scheme/Lisp 程式語言來回答。 請只用cons 函式來建出s-expression (A (B) C)。(5 分) 請只用list 函式來建出s-expression (A (B) C)。(5 分) 給定x 為變數且已執行(setf x ‘(A (B) C)),請只用car 及cdr 函式來 從x 中取得B。(5 分) 請寫一個遞迴函式sumall 用以加總一個串列(list)中所有數字。例如 (sumall nil)回傳0,(sumall ‘(100))回傳100,(sumall ‘(1 2 3 4 5)) 回傳15。(10 分)
(100) 10 分
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 分)
試解釋下列C 程式之敘述:(每小題5 分,共20 分)  int *ptr; char *str[3]; char (*str)[3]; int **ptr2;
一個小型程式語言的語法(grammar)定義如下: 這個語法描述的程式語言只有分配(assignment)這一種陳述式(statement)格式。 程式program 包含了特別字(special word)begin,緊接著的是很多行的陳述式用分 號分隔開來,最後使用特別字end 做結束。運算式(expression)可以是變數本身, 也可以是二個變數用+或−運算子(operator)分隔開來。這些變數用的名稱只有A、 B 和C,請把下列陳述式的演繹過程(derivation)寫下來:(20 分)
請宣告一個 Add class,內容包含以下特性:(25 分) A. Private member "A",型態為integer,並透過constructor 初始化為0。 B. Private member "B",型態為integer,並透過constructor 初始化為0。 C. Private method "print",將member "A"、"B"相加後顯示在console 中,且無回傳 值。 D. Public method "add(int A, int B)",須達成以下行為: i. 將參數A 的value 儲存到member "A"。 ii. 將參數B 的value 儲存到member "B"。 iii. 呼叫Private method "print",印出結果。 iv. 無回傳值。 public class Add { // code here }
試問下列C++程式碼執行後,其值為多少?(25 分) #include <iostream> using std::cout; using std::endl; int a(int i) { static int v=1; int t=v; v+=i; return t; } int b(int i) { int v=1; int t=v; v+=i; return t; } static int v; int c(int i) { int t=v; v+=i; return t; } int main() { int i; for (i=1; i<=10; i<<=1) { a(i); b(i); c(i); } cout<<"a="<<a(i)<<endl; cout<<"b="<<b(i)<<endl; cout<<"c="<<c(i)<<endl; return 0; } 106年特種考試地方政府公務人員考試試題 全一張 (背面) 等 別: 三等考試 類 科: 資訊處理 科 目: 程式語言
傳值呼叫(call by value)與傳址呼叫(call by address)的差異為何?試以兩數對調 的問題撰寫程式說明之。(20 分)
何謂靜態(static)變數、堆疊動態(stack-dynamic)變數、外顯堆積動態(explicit heap-dynamic)變數及內隱堆積動態(implicit heap-dynamic)變數?並分別說明其優 點和缺點。(20 分)
程式語言中,指標(Pointers)是一個非常強大有用的工具,但是也可能為程式帶來 Dangling Pointer 和Memory Leakage 問題。(25 分) 請使用下列的C 程式碼說明何謂Dangling Pointer 和Memory Leakage 問題,並解 釋其發生原因。 int *p1, *p2, *p3, *p4; p1 = (int*) malloc (sizeof(int)); p2 = p1; free p1; p3 = (int*) malloc (sizeof(int)); p4 = (int*) malloc (sizeof(int)); p3 = NULL; 請從Compiler 的角度,說明什麼方法可以解決這兩個問題? 106年公務人員高等考試三級考試試題 全一張 (背面) 類 科:資訊處理 科 目:程式語言
下表是一個名為company 的資料庫裡面user 的表格 username email password creat_time 請使用SQL 語法加入三筆資料,如下表。(25 分) username email password creat_time John [email protected] john 2017-01-01 03:26:30 Marry [email protected] marry 2017-10-10 20:15:56 Stephen [email protected] stephen 2017-12-25 23:59:59
試問下列程式碼執行後,其值為多少?(25 分) #include <stdio.h> #include <stdlib.h> int main(void) { int x = 5, y = 7; if(x=6){ printf("%d\n", x*y); } else { printf("%d\n", x+y); } if (x == 8) { printf("%d\n", x*(x+y)); } else { printf("%d\n", x - y); } printf("%d\n", x); printf("%d\n", y); system("pause"); return 0; }
有一C 的敘述如下: char *str2[4] = {"Taiwan", "Germany", "France", "Swedn"}; 試回答下列問題:(每小題5 分,共20 分) printf("%c\n", *(*(str2+3)+4)); printf("%c\n", *(str2[1]+3)); printf("%s\n", *(str2+2)+4); 如何印出 "Taiwan"字串中的 a 字元。
請比較函數式程式設計(functional programming)和指令式程式設計(imperative programming)的差別。(20 分)
下列是以C,Java,Javascript,C++,PHP 及JSP 六種語言撰寫存取陣列(array)的 程式片斷,請問此程式片斷執行後,會產生什麼結果?如果有結果錯誤,錯誤訊息 為何?各用什麼方法可避免錯誤?請寫出完整的程式來說明你的方法。(25 分) C: int a[] = {0, 1, 2, 3}; for(i=0; i<=sizeof(a); i++) printf("%d", a[i]); Java: int[] a = {0, 1, 2, 3}; for(i=0; i<=a.length; i++) System.out.print(a[i]); Javascript: var a = [0, 1, 2, 3]; for(i=0; i<=a.length; i++) document.write(a[i]); C++: int a[] = {0, 1, 2, 3}; for(i=0; i<=sizeof(a); i++) printf("%d", a[i]); PHP: $a = array(0,1,2,3); for($i=0; $i<=count($a); $i++) echo $a[$i]; JSP: int[] a = {0, 1, 2, 3}; for(i=0; i<=a.length; i++) out.print(a[i]);
寫出一BNF 文法,產生符合以下條件的數字N: N 為一個二進位數字。(25 分)
試回答下列C 程式的輸出結果:(20 分) #include <stdio.h> int main() { int arr[] = {10, 20, 30, 40, 50}; int *ptr = arr + 2; printf("%d\n", ptr[0]); printf("%d\n", *(ptr+1)); printf("%d\n", *arr+2); ptr++; printf("%d\n", ptr[0]); return 0; } 106年公務人員特種考試警察人員、一般警察 人員考試及106年特種考試交通事業鐵路 人員、退除役軍人轉任公務人員考試試題 全一張 (背面) 考試別: 鐵路人員考試 等 別: 高員三級考試 類科別: 資訊處理 科 目: 程式語言
一個簡單的分配陳述式(assignment statements)語法(grammar)如下: 上述的語法說明了分配陳述式的右邊是含有加法、乘法和小括弧的算數運算式(arithmetic expressions),請使用最左演繹(leftmost derivation)完成下列的陳述式:(20 分) A = B *(A + C)
下列為秀出4 x 3 表格的html 網頁,請以此網頁為基礎,用Javascript 程式完成所需 的兩個js 檔案:data.js 及function.js。其中function.js 只包括函式ShowTable(I,J)及 data.js 只包括所需的二維陣列宣告。一定要用Javascript 的for 迴圈完成函式 ShowTable(I,J)。(25 分) <HTML><HEAD><TITLE>4x3 Table Example</TITLE> <SCRIPT SRC=Data.js></SCRIPT> <SCRIPT SRC=Function.js></SCRIPT> </HEAD><BODY> <SCRIPT LANGUAGE=JavaScript> ShowTable(4,3); </Script> </BODY></HTML>
下列的C 程式將先請使用者輸入一整數,之後再從1 加到此數的總和。請修改下列 程式的錯誤之處。(20 分) #include <stdio.h> int main() { int i, num, total; printf("請輸入一整數: "); scanf("%d", num); for(i=1, i<=num, i++) total += i; printf("1 加到%d = %d\n", num); return 0; }
請說明下列參數傳遞方法:pass-by-value、pass-by-result、pass-by-value-result 和 pass-by-reference 的優點和缺點。(20 分) <assign> Æ <id> = <expr> <id> Æ A | B | C <expr> Æ <id> + <expr> | <id> * <expr> |(<expr>) | <id> begin A = B + C; B = C end <program> Æ begin <stmt_list> end <stmt_list> Æ <stmt> | <stmt> ; <stmt_list> <stmt> Æ <var> = <expression> <var> Æ A | B | C <expression> Æ <var> + <var> | <var> − <var> | <var>
請試述下列名詞之意涵:(每小題3 分,共9 分) Dead lock NP-Complete Problem Cookie
物件導向語言中有所謂overloading 的方法及建構子(constructor),請舉例並說明之。 (20 分)
請問下列Java 程式碼編譯後輸出結果為何?(20 分) class tree{ void message(){ System.out.println("1359"); } int tree(){ System.out.println("Tr"); return 3; } } class two extends tree{ void message(){ super.message(); System.out.println("4321"); } two(){ System.out.println("Tw"); } } public class one extends two{ void message(){ System.out.println("1234"); } one(){ System.out.println("On"); } public static void main(String[] args){ one Exam = new one(); Exam.message(); } }
AlphaGo 擊敗人類高段的職業圍棋棋士,主要是利用深度學習技巧,也讓深度學習已 成為臺灣未來科技重要產業,請回答下列問題:(每小題4 分,共20 分) 何謂神經網路? 何謂深度學習(deep learning)? 神經網路因為架構問題無法做到很多層,為何Deep learning 可以做到很多層? 何謂CNN(convolutional neural network)? 在深度學習裡,除了C 以外,另一種常用的語言為Python,請試述Python 跟C 有 何差別?
利用電腦語言設計系統中,有一名為MVC 的開發方式,請說明何為MVC?請以購物 網站的系統來說明,該購物網站的功能包括:會員資料處理(如:註冊、登入、……)、 訂單處理等。(15 分)利用MVC 設計資訊系統的優點為何?(5 分)
請觀察以下程式碼: 請問以下C++程式碼輸出答案為何?(5 分) 請問執行至return 0 時,是否回收原分配給物件p 之動態記憶體?(5 分) 請說明此方法為解決何種問題?且程式概念為何?(10 分) class Smart{ public: explicit Smart(int *p = NULL) { sp = p; } ~Smart() { delete(sp); } int& operator*() { return *sp; } private: int *sp; }; int main(void){ Smart p(new int()); *p = 2016; cout << *p << endl; return 0; } 105年公務人員高等考試三級考試試題 全一張 (背面) 類 科:資訊處理 科 目:程式語言
利用二分法搜尋(binary search),從100000 筆資料中,搜尋某一特定資料,最多會 比對幾次?(5 分)
請根據下面的資料表(PRODUCT)針對每一小題的查詢或處理,寫出對應的SQL 指令,資料表中的V_ID(廠商代碼)指的是供應該產品的廠商代碼,一個廠商可能 供應多個產品,但一個產品只有一個供應廠商。(每小題5 分,共20 分) PRODUCT 主鍵:P_CODE P_CODE (產品編號) P_PRICE (產品單價) V_ID (廠商代碼) 查詢“廠商代碼和該廠商供應的產品之平均單價”。 查詢“所有產品中單價最高的產品編號和其產品單價”。 刪除“PRODUCT 資料表中產品單價低於100 元的產品”。 刪除“PRODUCT 資料表”。 105年公務人員特種考試警察人員、一般警察人員 考試及105年特種考試交通事業鐵路人員考試試題 全一張 (背面) 考試別: 鐵路人員考試 等 別: 高員三級考試 類科別: 資訊處理 科 目: 程式語言
觀察以下C 語言之程式,試問輸出為何?(20 分) int main(){ int a = 1, b = 2, c = 3, d = 4; printf( "%d\n%d\n%d\n%d\n", a+b+c+d, (b *= a), (a += d), (d++)); }
試就Object Oriented language 與Functional language,回答下列問題: 比較兩種語言之不同與優缺點。(5 分) 續題,請對下列五種語言做歸類:C、Java、C++、Lisp、Prolog,並以下表作答 於試卷上(如果不屬於這兩類語言,請在None 打勾)。(10 分) 語言 Object Oriented language Functional language None C Java C++ Lisp Prolog
回答下列問題:(每小題8 分,共40 分) 請問下列C 程式片段的輸出為何? int number = 60; printf("%d\n", number << 1); printf("%d\n ", number << 2); printf("%d\n ", number << 3); 請問下列C 程式片段的輸出為何? int x = 6688; int *y = &x; printf("%d\n", x); x = 1357; *y=6688; printf("%d\n", x); 請問執行下列Java 程式片段後,someFunc(5)的值為何? public static int someFunc(int n) { return (n < 2) ? n : n * someFunc(n-1);} 請問下列Java 程式片段的輸出為何? int x = 2; int y = 3; int z = 0; if (x > 2) { if (y > 2) { z = x + y; System.out.println("z is " + z); } else System.out.println("x is " + x); } System.out.println("y is " + y); 請問下列Java 程式片段的輸出為何? int x = 1; int y = 5; int z = x-- + (++y); System.out.println("x = " + x + " y = " + y + " z = " +z);
(5)
請回答以下問題: 請描述C#程式語言中關鍵字const 之功用。(10 分) 請比較C#程式語言中關鍵字const 與readonly 差異。(10 分)
C 語言宣告一陣列如int *x[5]={“BENZ”, “AUDI”, “LEXUS”, “APPLE”, “BMW”};試 說明下列指標運算的結果為何?(每小題3 分,共9 分) *(x+1) *(x+1)+1 **(x+1) 105年特種考試地方政府公務人員考試試題 全一張 (背面) 等 別: 三等考試 類 科: 資訊處理 科 目: 程式語言
請問下列C 語言程式碼執行後輸出結果為何?(20 分) int main(){ double d[10][20][30][40]; printf("%d\n", (int) sizeof(d[1][5])); printf("%d\n", (int) sizeof(d[1][5][20])); printf("%d\n", (int) (d - &d[3])); printf("%d\n", (int) (d[3][4] - d[5][8])); }
在程式語言中變數可歸類成下列幾種:static variable、stack-dynamic variable、explicit heap-dynamic variable、implicit heap-dynamic variable。 請比較上述變數的差異。(12 分) 在C++語言裡,如果有變數定義如下 int *data; data=new int; delete data; 請問“data” 屬於那一種變數?試說明之。(3 分)
請回答下列問題:(每小題5 分,共10 分) 給定一個整數陣列S[n],請寫出一個副程式int SelectionK(int *S, int n),此函數可 以回傳(return)第K 大的數值。 給定一個陣列S[n],請寫出一個演算法,此演算法可以用平均時間複雜度為O(n) 的效率,回傳(return)第K 大的數值。
假設類別A、B、C、D 的繼承關係如下: class A; class B; class C: B; class D: C { A object;} main() {D objectD; },程式執行後, 請寫出解構函式的呼叫順序。(5 分) 九、考慮下列文法:S -> SS |(S)|()(每小題4 分,共12 分) 請指出此文法的terminal symbol、non-terminal symbol 及start symbol。 針對()()()字串,推導出left-most derivation sequence。 針對((( )))()字串,推導出right-most derivation sequence。
請就解譯方式(組譯、直譯、編譯)、程式結構(程序導向、物件導向)、標記文 字(是、否)等特性,分類說明程式語言C, CSS, C#, HTML, Java, PHP, Python, SQL 的特性。請繪製表格作答。(25 分)
電腦程式語言中,有一種名為context free language,請問其性質為何?並舉例說明。 (15 分)
請根據下列文法畫出輸入字串abbddeffccg 所有可能的文法樹(亦稱文法剖析樹、剖 析樹)。並請討論此文法的問題。(20 分) S → a X g X → b X X → b X c X → b X c c X → Y Y → d Y Y → d Y f Y → d Y f f Y → e
請解釋Java 語言中,類別與介面(interface)有那些不同,並請舉例加以說明。 (20 分)