2016年計算機二級《C++》專項練習題及答案

來源:文萃谷 1.61W

  單項選擇題

2016年計算機二級《C++》專項練習題及答案

1關於在調用模板函數時模板實參的使用,下列表述中正確的是(  )。

A.對於虛擬類型參數所對應的模板實參,如果能從模板函數的實參中獲得相同的信息,則都可以省略

B.對於虛擬類型參數所對應的模板實參,如果它們是參數表中的最後的若干個參數,則都可以省略

C.對於虛擬類型參數所對應的模板實參,若能夠省略則必須省略

D.對於常規參數所對應的模板實參,任何情況下都不能省略

參考答案:D

參考解析:在調用一個模板函數時,編譯系統需要足夠的信息來判別每個虛擬類型參數所對應的實際類型,可以從兩個不同的渠道獲得這樣的信息:從模板實參表(用“<>”括起來的參數表)或從模板函數實參表(用“()”括起來的參數表)。如果從後者獲得的信息已經能夠判定其中部分或全部虛擬類型參數所對應的實際參數,而且它們又正好是參數表中最後的若干參數,則模板實參表中的那幾個參數可以省。如果模板實參表中的實參都被省了,則空表“<>”也可以不要,因此選項D錯誤。反之,對於某個模板實參,如果從模板函數的實參表中無法獲得同樣的信息,就不能省;或者雖然能夠獲得同樣的信息,但在它後面還有其他不能省的實參,則其自身還是不能省。

2有如下程序段:

int i=0,J=1;

int&r=i;//①

r=j;//②

int*P=&i;//⑧

*P=&r;//④

其中會產生編譯錯誤的語句是(  )。

A.④B.③C.②D.①

參考答案:A

參考解析:本題考查指針和引用。①為引用,使用正確;④中&r表示一一個地址,而* P已經是一個值了,不能將一個指針賦值給一個值,所以編譯錯誤。

3有如下程序:

#include

using namespace std;

class Obj{

static int i;

public:

Obj(){i++;}

一Obj(){i一一;}

static int getVal(){return i;}

};

int Obj::i=0:

void f(){Obj ob2;cout<

int main(){

Obj obl;

f();

Obj}ob3=new Obj;cout< p=""><>

delete ob3;cout<

return 0;

}

執行這個程序的輸出結果是(  )。

A.232B.231C.222D.221

參考答案:D

參考解析:本題考查構造函數和析構函數的調用順序,調用順序為先構造的後析構,後構造的先析構。本題中先定義了一個對象ob1,會執行構造函數,那麼i就變為了l;再執行函數f後,由於又定義了一個對象ob2,所以再次執行構造函數,i就變為了2,輸出了2。函數執行完後執行析構函數,i變為了1,然後又定義了對象指針,i變為了2。釋放ob3後,i變為了1,所以答案為D。

4有如下類定義:

class MyBase{

int k;

public:

MyBase(int n=O):k(n)}}

int value()eonst{return k;}

};

class MyDerived:MyBase{

intj;

public:

MyDerived(int i):j(i)}}

int getK()const{return k;}

int getJ()const{return j;}

};

編譯時發現有一處語法錯誤,對這個錯誤最準確的描述是(  )。

A.函數9etK試圖訪問基類的私有成員變量k

B.在類MyDerived的定義中,基類名MyBase前缺少關鍵字public、protected或private

C.類MyDerived缺少一個無參的構造函數

D.類MyDerived的構造函數沒有對基類數據成員k進行初始化

參考答案:A

參考解析:默認繼承方式為私有繼承,私有繼承將基類的公用成員和保護成員都變為r私有成員,基類的私有成員依然屬於基類私有,派生類不能訪問基類的私有成員。所以A選項正確。

5下列關於虛基類的描述,錯誤的是( )。

A.設置虛基類的目的是為了消除二義性

B.虛基類的構造函數在非虛基類之後調用

C.若同一層中包含多個虛基類,這些虛基類的構造函數按它們説明的次序調用

D.若虛基類由非虛基類派生而來,則仍然先調用基類構造函數,再調用派生類的構造函數

參考答案:B

參考解析:虛基類的引入就是為j-消除。二義性,其構造函數的調用仍然是按照繼承的順序進行的,對於多個虛基類則按它們説明的次序調用,虛基類的構造函數先於非虛基類的構造函數執行。

6在長度為n的有序線性表中進行二分查找,最壞情況下需要比較的次數是(  )。

A.O(n)B.O(n2)C.O(1092n)D.0(n1092n)

參考答案:C

參考解析:當有序線性表為順序存儲時才能用:二分法查找。可以證明的是對於長度為n的有序線性表,在最壞情況下,二分法查找只需要比較l092n次,而順序查找需要比較n次。

7在軟件開發中,需求分析階段可以使用的工具是(  )。

A.N—s圖圖圖D.程序流程

參考答案:B

參考解析:在需求分析階段可以使用的工具有數據流圖DFD圖,數據字典DD,判定樹與判定表,所以選擇B。

8有如下類聲明:

class Base{

protected:

int amount;

public:

Base(int n=0):amount(n){}

int getAmount()const{retum amount;}

};

class Derived:public Base{

protected:

int value;

public:

Derived(int m,int n):value(m),Base(n){}

int getData()const{return value+amount;}

}:

已知x是一個Derived對象,則下列表達式中正確的是( )。

e+mount()ata()一mount()ata()一e+nt

參考答案:B

參考解析:本題考查公有繼承中派生類對象對基類的訪問屬性。在公有繼承中,派生類對象只能訪問基類的公有成員,而不能}方問基類的保護成員和私有成員。題中x是派生類的對象,只能訪問基類中公有的Base()和getAmount()成員,而不能訪問保護類型的amount成員,故選項C、D錯誤。而類對象對類成員的訪問也存在類似的情況,即類對象只能訪問類的公有成員,而value是Derived的保護成員,所以A選項也錯誤。故答案為B。

9有三個關係R、S和T如下:

則由關係R和s得到關係T的操作是( )。

A.自然連接B.交C.除D.並

參考答案:C

參考解析:如果S=T/R,則S稱為T除以R的商在除運算中s的域由T中那些不出現在R中的'域所組成,對於s中的任一序組,由它與關係R中每個有序組所構成的有序組均出現在關係T中。所以本題選擇C。

10下面描述中,不屬於軟件危機表現的是( )。

A.軟件過程不規範B.軟件開發生產率低C.軟件質量難以控制D.軟件成本不斷提高

參考答案:A

參考解析:軟件危機主要表現在:軟件需求的增長得不到滿足;軟件開發成本和進度無法控制;軟件質撼難以保證;軟件不可維護或維護程度非常低;軟件的成本不斷提高;軟件開發生產率的提高趕不上硬件的發展和應用需求的增長。所以選擇A。

熱門標籤