1. 程式人生 > >C++ 作業系統 部分筆試選擇題總結

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