資訊處理 104 年程式語言考古題(共 8 題) 資料來源:考選部歷屆試題|法律人 LawPlayer 整理 https://lawplayer.com/exam/information-processing/104-programming-languages 第 1 題 請解釋Java 語言中,類別與介面(interface)有那些不同,並請舉例加以說明。 (20 分) 第 2 題 網頁應用程式常見的安全漏洞有跨站請求偽造(cross-site request forgery),請說明 造成此安全漏洞的原因,以及如何避免此問題之措施。(20 分) 第 3 題 為何尾遞迴(tail recursion)通常比一般性的遞迴執行上更有效率?請說明之。請以 熟悉的程式語言寫出一段使用尾遞迴技巧的程式碼例子。(20 分) 第 4 題 考慮下列文法,大寫字母代表非終結符(non-terminal ),其餘皆為終結符 (terminal),E 為開始變數。 E → E + T | E − T | T T → T * F | T / F | F F → ( E ) | identifier | number ㈠使用最右推導(rightmost derivation),推導出1 *(2 + 3)一句。(6 分) ㈡使用最左推導(leftmost derivation),推導出1 *(2 + 3)一句。(6 分) ㈢繪製(2 + 3) * 4 一句的剖析樹(parse tree)。(8 分) 第 5 題 例外處理程序(exception handlers)處理的例外有那幾類?請分別舉例說明。Java 的例外處理程序如何處理例外?(20 分) 第 6 題 給定下列的文法(Grammar): Æ = =A|B|C Æ+ | * | () | 請畫出右列字串:A = ((A*B)+C*A),所對應right-most derivation sequence 與對應的 分析樹(parse tree)。(5 分) 第 7 題 請計算下列式子最後的y 值:(每小題3 分,共15 分) ㈠int x=3, y=2; y *= ++x + 3; ㈡int x=3, y=2; y /= x++; ㈢int x=10, y=1; y = x++ + --y; ㈣int x=10, y=1; y /= ++x + y--; ㈤int y=0; for(int k=0; k < 10; y+=k) { if(++k == 6) continue; k++;} 第 8 題 若採取二種不同參數傳遞的方法:pass by reference、pass by value result,執行下列 程式,則x 與y 的值各為多少?(8 分) int x=1, y=3; void fun(int a, int b); void main() { int x=2; fun(x, y); printf("x=%d, y=%d", x, y); } void fun(int a, int b) {a=b+x; b=a+y;} 九、㈠如果有兩個整數x, y,請寫出相對應的副程式碼,使得這兩數可以做交換。(5 分) ㈡T c[10]; int m=3, n=2;(T 為某種type,可能為int、float、double 等),請寫出相對 應的副程式碼swap,當呼叫形式為swap(c, m, n),可讓c[m]跟c[n]的值做交換, 即使T 的型態不同,此程式一樣可以正確處理。(5 分) 十、利用template 的概念,寫出一個函數power(x, n)可以計算xn,不管x 為實數、整數或 自然數,但假設n 為整數。(10 分) 題目為考試當年公告版本,實務標準請以現行規範為準。