申論 1請回答下列的問題:㈠解釋什麼是強勢型態程式語言(strongly-typed programming language)和弱勢型態程式語言(weakly-typed programming language)。(10 分)㈡列舉三個理由並舉例說明為何C 程式語言不是一個強勢型態程式語言。(10 分)
本卷皆為申論題,點「看答案與解析」查看擬答。
弱點分析
未作答的題目不計分。看我的紀錄
申論 2假設一個整數佔用四個位元組(4 bytes),考慮一個C 程式語言的整數陣列(integerarray)int A[4][8][16],此陣列的起始位址(starting address)為0X22F760,以十六進位(hexadecimal)寫出下列四個printf 敘述句(statements)的輸出值(請寫出計算過程):(每小題5 分共20 分)㈠printf("%X\n", &A[0][1][2]);㈡printf("%X\n", &A[0][1][2]+1);㈢printf("%X\n", &A[0][1]+2);㈣printf("%X\n", &A[0]+3);
申論 3下圖是一個執行時堆疊(run-time stack)中之啟動紀錄(activation record)的示意圖:Returned valueLocal variablesFunction parametersDynamic linkStatic linkReturn address㈠說明如何使用啟動紀錄中的function parameters 實作下列兩種副程式的參數傳遞(parameter passing)方法:call-by-value(或稱pass-by-value)和call-by-address(或稱pass-by-address, call-by-reference)。(10 分)㈡考慮下列的C 程式語言的程式片段,說明當主程式main 呼叫副程式foo 之後,副程式foo 的啟動紀錄之function parameters 內容為何?並寫出主程式main 的輸出值。(10 分)int c=5; int main (void) {void foo(int x, int* y) { int a=10, b=20;int a=1, b=2; foo(b, &a);*y = a + b * x ; printf("%d, %d, %d\n", a, b, c);c = a + b + c; }}年公務人員高等考試三級考試試題 代號:35640類 科: 資訊處理科 目: 程式語言
申論 4考慮下列的BNF 法則:〈conditional statement〉 ::= if 〈condition〉 then 〈statement〉| if 〈condition〉 then 〈statement〉 else 〈statement〉〈statement〉 ::= 〈assignment statement〉 | 〈conditional statement〉㈠假設C1 和C2 是由〈condition〉展開的程式碼,S1 和S2 是由〈statement〉展開的程式碼,畫出〈conditional statement〉:if C1 then if C2 then S1 else S2的語法樹(或稱剖析樹,parse tree),並解釋何謂「搖擺else 問題」(danglingelse problem)。(10 分)㈡舉出兩個方法,解釋程式語言如何在設計、實作、或使用時解決「搖擺else 問題」。(10 分)
申論 5考慮C 程式語言的位元運算(bitwise operation),變數m 和陣列(array)n 的宣告如下:unsigned int m;unsigned char n[4];假設m 的二進位值(binary value)為:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb寫一個C 語言的程式將陣列n 的元素(element)設定為:n[0]: bbbbbbbbn[1]: bbbbbbbbn[2]: bbbbbbbbn[3]: bbbbbbbb即是將m 的二進位值,以每兩個位元一組,作位元調換(bit swap),再切割成四個位元組。除了迴圈控制變數(loop control variable)外,程式中不可使用+, -, *, /, %的算術運算(arithmetic operations)(可以宣告和使用其他變數)。(20 分)