- 相關推薦
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圖B.DFD圖C.PAD圖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對象,則下列表達式中正確的是( )。
A.x.value+X.getAmount()B.x.getData()一x.getAmount()C.x.getData()一x.amountD.x.value+X.amount
參考答案: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。
11有如下程序:
#inClude using namespaCe std: Class CD{
publiC:
~CD(){Cout<<’C’:} private:
Char name[80]; };
int main(){
CD a,*b,d[2]; return 0;
執行這個程序的輸出結果是( )。
A.CCCCB.CCCC.CCD.C
參考答案:B
參考解析:本題考查類的析構函數.題目中定義了類的一個對象a,對象指針*b,對象數組d[2],當程序執行完后,析構函數執行了3次,輸出“CCC”,對象指針不會執行析構函數。所以本題答案為8。
12類的析構函數是在( )調用的。
A.類創建時B.創建對象時C.刪除對象時D.不自動調用
參考答案:C
參考解析:析構函數可以被函數調用,也可以被系統調用:函數體內的對象在函數結束時調用析構函數和使用delete釋放對象所占用的資源。
13下列關于多態性的描述,錯誤的是( )。
A.c++語言中的多態性分為編譯時的多態性和運行時的多態性
B.編譯時的多態性可通過函數重載實現
C.運行時的多態性可通過模板和虛函數實現
D.實現運行時多態性的機制稱為動態綁定
參考答案:C
參考解析:編譯時的多態性是通過函數重載和模板體實現的,運行時的多態性是通過虛函數體實現的。
14下列有關類成員的敘述中,正確的是( )。
A.友元函數是類的成員函數
B.類成員的默認訪問權限是私有的
C.類成員函數必須聲明為公有的
D.類的靜態數據成員不能是常成員
參考答案:B
參考解析:友元函數是指某些雖然不是類成員卻能訪問類的所有成員的函數,故友元函數不足類的成員函數。類成員的默認訪問權限是私有的,類的成員函數¨r以是3種權限中的一種,靜態數據成員可以為常成員。故本題答案為8。
15有如下程序:
#inClude
using namespaCe std; ClaSS A{
publiC:
A(int i){x=i;}
void dispa( ){Cout<
int x; };
Class B:publiC A{ publiC:
B(int i):A(i+10){x=i;}
vold dispb( ){dispa( );Cout<
int x; };
int main( )} B b(2); b.dispb( );
return 0; }
執行這個程序的輸出結果是( )。
A.10,2B.12,10C.12,2D.2,2
參考答案:C
參考解析:本題考查派生類的構造函數和基類的構造函數。本題中類B繼承類A,定義了·個類B的對象并初始化b(2),此時會執行類B的構造函數,執行的結果是繼承類A中的私有成員賦值了12,給類B自身的數據成員x賦值了2,執行b.dispb()后,輸出類A的私有成員x,輸出類B自身的數據成員,所以答案為C。
16執行下列語句段后,輸出字符“*”的個數是( )。
for(int i=50;i>1;i一=2) tout<<’*’:
A.24B.25C.26D.50
參考答案:B
參考解析:本題考查for循環語句,題目中每執行完循環體后,i都會減2,那么只有50到2之間的偶數才能輸出“*”,所以總共輸出25次。
17有如下類定義:
Class AA{ int a: PubliC: AA(int n=O):a(n){}
};
Class BB:publiC AA{ publiC:
BB(int n)
};
其中橫線處的缺失部分是( )。
A.:a(n){}B.:AA(n){}C.{a(n);}D.{a=n;}
參考答案:B
參考解析:本題考查公用繼承對基類成員的訪問屬性。公用繼承中,基類的公用成員和保護成員在派生類中保持原有訪問屬性,其私有成員仍為基類私有,本題中若要給派生類繼承下來基類的私有成員賦值,那么只能調用基類的成員函數來對它賦值,成員變量默認的訪問權限為私有,即a為私有變量。所以本題答案為B。
18判斷char型變量c是否為小寫字母的正確表達式是( )。
A.’a’<=c<=’z’B.(c>=A.&&(c<=z)C.(’a’>=C.||(’z’<=C.D.(c>=’a’)&&(c<=,z,)
參考答案:D
參考解析:字符型數據在計算機內部是以ASCII碼存儲的,英文大寫字母和小寫字母在ASCII碼表中都是連續的。大寫字母A~z是從65~90,小寫字母a~z是從97~122。所以只要變量c大于等于a并月小于等于z就能保證其為小寫字母。
19決定c++語言中函數的返回值類型的是( )。
A.return語句中的表達式類型
B.調用該函數時系統隨機產生的類型
C.調用該函數時的主調用函數類型
D.在定義該函數時所指定的數據類型
參考答案:D
參考解析:c++語言中,在定義該函數時所指定的數據類瓔決定函數的返回值類型。
20設int a=1,b=2;,則(a++)+b和a+++b這兩個表達式的值分別為( )。
A.3,3B.3,4C.4,3D.4,4
參考答案:A
參考解析:單目的++運算優先級高于雙目的+運算,不過++的結合性是自右向左的,而+是自左向右的,所以上面的兩個表達式都是先計算a+b的值之后,a再自加1。
【計算機二級《C++》專項練習題及答案】相關文章:
2016計算機二級《C++》練習題及答案08-14
2017計算機二級C++基礎練習題及答案08-07
2017計算機二級C++考前練習題及答案09-11
2016計算機二級考試C++練習題及答案07-15
C++備考計算機二級模擬練習題及答案11-21
2017計算機二級C++考前練習題及答案09-27