C++ 作業系統 部分筆試選擇題總結
1.假如在一個函式中有一下程式碼()
void fun()
{
int * p = (int*)malloc(sizeof(int));
int * q = p;
}
A. p指向的空間在堆上,q指向的空間在棧上
B. p指向的空間在棧上,q指向的空間在堆上
C. p指向的空間在堆上,q指向的空間在堆上
D. p指向的空間在棧上,q指向的空間在棧上
答案:D
解析:因為p指向的空間是由malloc開闢出來的,而我們又知道malloc函式是在堆上開闢的空間,所以p指向的空間在堆上,A. p指向的空間在堆上,而q和p指向了同一塊兒空間,所以q指向的空間也在堆上.
2.給出下列程式的輸出結果()
char *p = "helloworld";
char q[ ] = "helloworld";
printf("%d %d %d %d",sizeof(p),strlen(p),sizeof(q),strlen(q));
A 4 10 4 10 B 4 10 10 10 C 4 11 10 10 D 4 10 11 10
答案:D
解析: 首先p是一個指標,在32位下指標是4個位元組,所以sizeof(p)是4,strlen求的是字串的有效長度,所以兩個都是10,求sizeof(q)就求的是陣列的位元組數要算上 斜 槓0,所以是11.
總結:
sizeof 和strlen的區別:
1.sizeof操作符的結果型別是size_t,該型別保證能容納實現所建立的最大物件的位元組大小。
2.sizeof是操作符,strlen是庫函式。
3.sizeof可以用型別做引數,strlen只能用char*做引數,且必須是以''\0''結尾的。
4.陣列做sizeof的引數不退化,傳遞給strlen就退化為指標了。
5..strlen的結果要在執行的時候才能計算出來,時用來計算字串的長度,不是型別佔記憶體的大小。
6. 當適用了於一個結構型別時或變數, sizeof 返回實際的大小,當適用一靜態地空間陣列, sizeof 歸還全部陣列的大小
3.對於int*p[5]的描述,下列選項正確的是()
A p是一個具有5個元素的指標陣列,每個元素是一個int型別的指標。
B p[5]表示某個陣列的第5個元素的值
C p是一個指向陣列的指標,所指向的陣列是5個int型別的元素
D p是一個指向某個陣列中第5個元素的指標,該元素是int型別的變數
答案;A
解析:int*p[ 5] ,[ ]的優先順序高於*,所以p先與[ ]結合成陣列,在與*結合成指標數。
總結:
指標陣列:首先它是一個數組,陣列的元素都是指標,陣列佔多少個位元組由陣列本身的大小決定,每一個元素都是一個指標,在32 位系統下任何型別的指標永遠是佔4 個位元組。
陣列指標:首先它是一個指標,它指向一個數組。在32 位系統下任何型別的指標永遠是佔4 個位元組,至於它指向的陣列佔多少位元組,不知道,具體要看陣列大小。
4.已知一個線性表(38,25,74,63,52,48),假定採用雜湊函式h(key) = key%7計算雜湊地址,並雜湊儲存在散列表A[0...6]中,若採用線性探測方法解決衝突,則在該散列表上進行等概率成功查詢的平均查詢長度為()
A 1.5 B 1.7 C 2.0 D 2.3
答案:C
解析:對線性表中的元素對7求模取餘,得到的值作為下標
5.下列關鍵碼序列哪些是一個堆()
A 90 31 53 23 16 48
B 90 48 31 53 16 23
C 16 53 23 90 31 48
D 16 31 23 90 53 48
答案:AD
解析:
堆有最大堆和最小堆,最大堆的堆頂元素是堆中最大的元素,並且最小堆的堆頂元素是堆中最小的元素。堆可用二叉樹的形式來表示,但在最大堆中根的值要大於左右子樹,在最小堆中,根的值要小於左右子樹的。
6.有三個程式J1,J2,J3.程式在單核CPU執行時,三個程式需要的資源如下所示,優先順序高的程式可以搶佔優先順序低的程式的CPU,但不能搶佔IO,問當所有任務執行完畢時,共消耗的的時間是()
A 170ms B 160ms C 120ms D 130ms
答案:D
解析:由題優先順序高的程式可以搶佔優先順序低的程式的CPU,但不能搶佔IO,所以J1先開始執行cpu,而J2是先IO的,所以J2的IO先執行,J2的IO執行時間為50ms,此時J1的CPU已經結束,於是可以開始J1的IO,對於J2來說,當J1的CPU結束之後,J2的IO還沒有結束,所以要等上10ms後,J2的CPU才開始執行。接著J3的CPU和IO在執行。
CPU時間共100ms ,IO時間為130ms