請回答下列的問題:
(1) 解釋什麼是強勢型態程式語言(strongly-typed programming language)
和弱勢型態程式語言(weakly-typed programming language)。
(2)列舉三個理由並舉例說明為何C 程式語言不是一個強勢型態程式語
言。
假設一個整數佔用四個位元組(4 bytes),考慮一個C 程式語言的整數
陣列(integer array)int A[4][8][16],此陣列的起始位址(starting address)
為0X22F760,以十六進位(hexadecimal)寫出下列四個printf 敘述句
(statements)的輸出值(請寫出計算過程)
(1) printf("%X\n", &A[0][1][2]);
(2) printf("%X\n", &A[0][1][2]+1);
(3) printf("%X\n", &A[0][1]+2);
(4) printf("%X\n", &A[0]+3);
下圖是一個執行時堆疊(run-time stack)中之啟動紀錄(activation record)
的示意圖:
(1) 說明如何使用啟動紀錄中的function parameters 實作下列兩種副程式
的參數傳遞(parameter passing)方法:call-by-value(或稱pass-by-value)
和call-by-address(或稱pass-by-address, call-by-reference)。(10 分)
(2) 考慮下列的C 程式語言的程式片段,說明當主程式main 呼叫副程式
foo 之後,副程式foo 的啟動紀錄之function parameters 內容為何?並
寫出主程式main 的輸出值。
(dangling else problem)。(10 分)
(2) 舉出兩個方法,解釋程式語言如何在設計、實作、或使用時解決「搖
擺else 問題」。
考慮C 程式語言的位元運算(bitwise operation),變數m 和陣列(array)
n 的宣告如下:
unsigned int m;
unsigned char n[4];
假設m 的二進位值(binary value)為:
b32b31b30b29b28b27b26b25b24b23b22b21b20b19b18b17b16b15b14b13b12b11b10b9b8b7b6b
5b4b3b2b1
寫一個C 語言的程式將陣列n 的元素(element)設定為:
n[0]: b31b32b29b30b27b28b25b26
n[1]: b23b24b21b22b19b20b17b18
n[2]: b15b16b13b14b11b12b9b10
n[3]: b7b8b5b6b3b4b1b2
即是將m 的二進位值,以每兩個位元一組,作位元調換(bit swap),再
切割成四個位元組。除了迴圈控制變數(loop control variable)外,程式
中不可使用+, -, *, /, %的算術運算(arithmetic operations)(可以宣告和使
用其他變數)。
可觀看題目詳解,並提供模擬測驗!(免費會員無法觀看研究所試題解答)