糯米文學吧

位置:首頁 > 計算機 > 計算機二級

全國計算機二級C++語言程序設計考試選擇題及答案

全國計算機二級的選擇題是一個大分模塊,很多很多考生在備考的時候,也是着重練習選擇題試題的,下面就是小編跟大家分享全國計算機二級C++語言程序設計考試選擇題及答,歡迎大家閲讀!

全國計算機二級C++語言程序設計考試選擇題及答案

1.下列數據結構中,屬於非線性結構的是(  )。

A.循環隊列

B.帶鏈隊列

C.二叉樹

D.帶鏈棧

2.下列數據結構中,能夠按照“先進後出”原則存取數據的是(  )。

A.循環隊列

B.棧

C.隊列

D.二叉樹

3.對於循環隊列,下列敍述中正確的是(  )。

A.隊頭指針是固定不變的

B.隊頭指針一定大於隊尾指針

C.隊頭指針一定小於隊尾指針

D.隊頭指針可以大於隊尾指針,也可以小於隊尾指針

4.算法的空間複雜度是指(  )。

A.算法在執行過程中所需要的計算機存儲空間

B.算法所處理的數據量

C.算法程序中的語句或指令條數

D.算法在執行過程中所需要的臨時工作單元數

5.軟件設計中劃分模塊的一個準則是(  )。

A.低內聚低耦合

B.高內聚低耦合

C.低內聚高耦合

D.高內聚高耦合

6.下列選項中不屬於結構化程序設計原則的是(  )。

A.可封裝

D.自頂向下

C.模塊化

D.逐步求精

7.軟件詳細設計產生的如下圖所示。該圖是(  )。

A.N—S圖

C.程序流程

D.E—R圖

8.數據庫管理系統是(  )。

A.操作系統的一部分

B.在操作系統支持下的系統軟件

C.一種編譯系統

D.一種操作系統

9.在E—R圖中,用來表示實體聯繫的圖形是(  )。

A.橢圓圖

B.矩形

C.菱形

D.三角形

10.有3個關係R、S和T如下表所示:

其中關係T由關係R和s通過某種操作得到,該操作為(  )。

A.選擇

B.投影

C.交

D.並

11.4種基本結構中,能簡化大量程序代碼行的是(  )。

A.順序結構

B.分支結構

C.選擇結構

D.重複結構

12.下列關於棧的描述正確的是(  )。

A.在棧中只能插入元素而不能刪除元素

B.在棧中只能刪除元素而不能插入元素

C.棧是特殊的線性表,只能在一端插入或刪除元素

D.棧是特殊的線性表,只能在一端插入元素,而在另一端刪除元素

13.下列有關數據庫的敍述,正確的是(  )。

A.數據處理是將信息轉化為數據的過程

B.數據的物理獨立性是指當數據的邏輯結構改變時,數據的存儲結構不變

C.關係中的每一列稱為元組,一個元組就是一個字段

D.如果一個關係中的屬性或屬性組並非該關係的關鍵字,但它是另一個關係的關鍵字,則稱其為本關係的外關鍵字

14.概要設計中要完成的事情是(  )。

A.系統結構和數據結構的設計

B.系統結構和過程的設計

C.過程和接口的設計

D.數據結構和過程的設計

15.下面排序算法中,平均排序速度最快的是(  )。

A.冒泡排序法

B.選擇排序法

C.交換排序法

D.堆排序法

16.已知函數FA調用函數FB,若要把這兩個函數定義在同一個文件中,則(  )。

必須定義在FB之前

必須定義在FA之前

C.若FA定義在FB之後,則FA的原型必須出現在FB的定義之前

D.若FB定義在FA之後,則FB的原型必須出現在FA的定義之前

17.有如下兩個類定義:

ClaSSAA{};

classBB{

AAv1,*v2;

BBv3;

int*v4;

};

其中有一個成員變量的定義是錯誤的,這個變量是(  )。

A.v1

B.v2

C.v3

D.v4

18.有如下類定義:

classXX{

intxdata;

public:

XX(intn=0):xdata(n){}

};

classYY:publicXX{

intydata;

public:

YY(intm=0,intn=O):XX(m),ydata(n){}

};

YY類的對象包含的數據成員的個數是(  )。

A.1

B.2

C.3

D.4

19.下列關於運算符函數的描述中,錯誤的是(  )。

A.運算符函數的名稱總是以0perator為前綴

B.運算符函數的參數可以是對象

C.運算符函數只能定義為類的成員函數

D.在表達式中使用重載的運算符相當於調用運算符重載函數

20.下列關於模板形參的描述中,錯誤的是(  )。

A.模板形參表必須在關鍵字template之後

B.模板形參表必須用括弧(  )括起來

C.可以用class修飾模板形參

D.可以用typename修飾模板形參

21.在下列枚舉符號中,用來表示“相對於當前位置”文件定位方式的是(  )。

_base::cur

_base::beg

_base::0ut

_base::end

22.下列字符串中可以用作C++標識符的是(  )。

A.2009var

-2009

D.123

23.下列枚舉類型的定義中,包含枚舉值3的是(  )。

test{RED,YELLOW,BLUE,BLACK};

test{RED,YELLOW=4,BLUE,BLACK);

test{RED=-1,YELLOW,BLUE,BLACK};

test{RED,YELLOW=6,BLUE,BLACK);

24.有如下程序段:

inti=1:

while(1){

i++:

if(i==10)break:

if(i%2==0)cout<<’*’:

}

執行這個程序段輸出字符*的個數是(  )。

A.10

B.3

C.4

D.5

25.已知數組arr的定義如下:

intarr[5]={1,2,3,4,5};下列語句中輸出結果不是2的是(  )。

<<*arr+1

intfib(intn){

if(n==0)returnl;

elseif(n==l)return2:

elsereturnfib(n-1)+fib(n-2);

}

若執行函數調用表達式fib(2),函數fib被調用的次數是(  )。

A.1

B.2

C.3

D.4

le是一個類,執行下面語句後,調用Sample類的構造函數的次數是(  )。

Samplea[2],*p=newSample;

A.0

B.1

C.2

D.3

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

A.使用虛基類可以消除由多繼承產生的二義性

B.構造派生類對象時。虛基類的構造函數只被調用一次

C.聲明“classB:virtualpublicA”説明類B為虛基類

D.建立派生類對象時,首先調用虛基類的構造函數

29.將運算符重載為類成員函數時,其參數表中沒有參數,説明該運算符是(  )。

A.不合法的運算符

B.一元運算符

C.無操作數的運算符

D.二元運算符

30.有如下模板聲明:

templateclassA;

下列聲明中,與上述聲明不等價的是(  )。

lateclassA;

lateclassA;

lateclassA;

lateclassA;

31.下列關於C++流的描述中,錯誤的是(  )。

>>’A’表達式中輸出字符A

函數可以檢測是否到達文件尾

C.對磁盤文件進行流操作時,必須包含頭文件fstream

D.以ios_base::Out模式打開的文件不存在時,將自動建立一個新文件

32.有如下程序:

#include

usingnamespacestd;

classToy{

public:

Toy(char*_n){strcpy(name,_n);count++;)

~Toy(  ){count一一;)

char*GetName(  ){returnname;}

staticintgetCount(  ){returncount;)

private:

charname[10];

staticintcount;

};

intToy::count=0;

intmain(  ){

Toyt1("snoopy"),t2("Mickey"),t3("Barbie");

tout

)

運行時的輸出結果是(  )。

A.1

B.2

C.3

D.運行時出錯

33.有如下程序:

#include

usingnamespacestd;

classA{

public:

A(inti):rl(i){)

voidprint(  ){cout<<’E’

intr1:

};

intmain(  ){

Aal(2);constAa2(4);,

t(  );t(  );

return0;

}

運行時的輸出結果是(  )。

A.運行時出錯

B.E2一C16一

C.C4一Cl6一

D.E2一E4—

34.有如下程序:

#include

usingnamespacestd;

className{

charname[20];

public:

Name(  ){

strcpy(name,"");cout<<’?’;

}

Name(char*fname){

strcpy(name,fname);cout<<’?’;

}

};

intmain(  ){

Namenames[3]={Name(”張三”),Name(”李四”));

return0;

}

運行此程序輸出符號?的個數是(  )。

A.O

B.1

C.2

D.3

35.有如下程序:

#include

usingnamespacestd;

classAA{

public;

AA(  ){cOUt<<’1’;)

};

classBB:publicAA{

intk;

public:

BB(  ):k(0){tout<<’12’;}

BB(intn):k(n)(cout<<’3’;)

};

intmain(  ){

BBb(4),c;

return0;

}

運行時的輸出結果是(  ).

A.1312

B.132

C.32

D.1412

36.有如下程序:

#include

usingnamespacestd;

classC1{

public:

~C1(  ){cout<<1;)

};

classC2:publicC1{

public:

~C2(  ){cout<<2;)

};

intmain(  ){

C2cb2;

C1*cb1:

return0;

}

運行時的輸出結果是(  )。

A.121

B.21

C.211

D.12

37.有如下程序:

#include

usingnamespacestd;

classPublication{//出版物類

charname[30];

public:

Publication(char*name=”未知名稱”){

~strcpy(this一>name,name);

}

constchar*getName(  )const{returnname;}

virtualconstchar*getType(  )const{return”未知類型”;}

};

classBook:publicPublication{//書類

public:

Book(char*name):Publication(name){}

virtualconstchar*getType(  )const{return"書";}

};

voidshowPublication(Publication&p){

cout

}

intmain(  ){

Bookbook(”精彩人生”);

showPublication(book);

return0;

}

運行時的輸出結果是(  )。

A.未知類型:未知名稱

B.未知類型:精彩人生

C.書:未知名稱

D.書:精彩人生

38.下列關於運算符重載的描述中,錯誤的是(  )。

A.::運算符不能重載

B.類型轉換運算符只能作為成員函數重載

C.將運算符作為非成員函數重載時必須定義為友元

D.重載口運算符應完成“下標訪問”操作

39.有如下程序:

#include

#includediomanip>

usingnamespacestd;

intmain(  ){

ints[]={123,234);

cout

}

運行時的輸出結果是(  )。

A.123

B.***123

234234

C.***123

D.***123

***234234***

40.有如下類定義:

classA{

char*a;

public:

A(  ):a(O){}

A(char*aa){//把aa所指字符串拷貝到a所指向的存儲空間

a=__;

strcpy(a,aa);

}

~A(  ){[]a;}

};

橫線處應填寫的表達式是(  )。

har[strlen(aa)+1]

[strlen(aa)+1]

[strlen(aa)]

har[sizeof(aa)-1]

1.C。【解析】隊列是一種允許在一端進行插入,而在另一端進行刪除的線性表。棧也是一種特殊的線性表,其插入與刪除只能在線性表的一端進行。

2.B。【解析】在棧中,允許插入與刪除的一端稱為棧頂,而不允許插入與刪除的另一端稱為棧底。棧頂元素總是最後被 插入的元素,從而也是最先能被刪除的元素;棧底元素總是最先被 插入的元素,從而也是最後才能被刪除的元素。即棧是按照“先進後出”或“後進先出”的原則組織數據的。

3.D。【解析】所謂循環隊列,就是將隊列存儲空間的最後一個位置繞到第一個位置,形成邏輯上的環狀空間,供隊列循環使用。在循環隊列結構中,當存儲空間的最後一個位置已被使用而再要進行入隊運算時,只要存儲空間的第一個位置空閒,可將元素加入到第一個位置,即將存儲空閒的第一個位置作為隊尾。

4.A。【解析】一個算法的空間複雜度,一般是指執行這個算法所需要的內存空間。

5.B。【解析】耦合性與內聚性是模塊獨立性的兩個定性標準,耦合與內聚是相互關聯的。在程序結構中,各個模塊的內聚性越強,則耦合性越弱。一般較優秀的軟件設計,應儘量做到高內聚、低耦合,即減弱模塊之間的耦合性和提高模塊內的內聚性,有利於提高模塊的獨立性。

6.A。【解析】結構化程序設計方法的主要原則可以概括為自頂向下、逐步求精、模塊化、限制使用goto語句等。

7.C。【解析】N—S圖是由若干基本框圖構成的流程圖,其特點是沒有流程線;PAD圖即問題分析圖(ProblemAnalysisDiagram),它是一種由左往右展開的二維樹型結構;程序流程圖用於描述問題解決的過程和步驟,其中方框表示處理步驟、菱形框表示邏輯判斷、箭頭表示控制流向;E—R圖即實體一聯繫圖(EntityRelationshipDiagram),用來描述現實世界的概念模型,構成元素有實體、屬性和聯繫,分別用矩形、橢圓形和菱形表示。本題答案為C。

8.B。【解析】數據庫管理系統是數據庫的機構,它是一種系統軟件,負責數據庫中的數據組織、數據操縱、數據維護、控制及保護和數據服務等。

9.C。【解析】E—R圖中用矩形表示實體(等同於表),用橢圓形表示實體的屬性(等同於表中字段),用菱形表示實體關係(等同於外鍵)。

10.D。【解析】兩個相同結構關係的並是由屬於這兩個關係的元組組成的集合。

11.D。【解析】重複結構又稱為循環結構,它根據給定的條件,判斷是否需要重複執行某一相同或類似的程序段,利用重複結構可以簡化大量的程序行。

12.C。【解析】根據數據結構對棧的定義及其特點可知:棧是限定只在表尾進行插入或刪除操作的線性表,因此棧是先進後出的線性表,對棧的`插入與刪除操作,不需要改變棧底元素。

13.D。【解析】數據處理是指將數據轉換成信息的過程,故選項A敍述錯誤;數據的物理獨立性是指數據的物理結構的改變不會影響數據庫的邏輯結構,故選項B敍述錯誤;關係中的行稱為元組,對應存儲文件中的記錄,關係中的列稱為屬性,對應存儲文件中的字段,故選項c敍述錯誤。

14.A。【解析】軟件概要設計的基本任務是:設計軟件系統結構、數據結構及數據庫設計、編寫概要設計文檔、概要設計文檔評審。

15.D。【解析】在各種排序方法中,快速排序法和堆排序法的平均速度是最快的,因為它們的時間複雜度都是O(nlog2n),其他的排序算法的時間複雜度大都是O(n2)。

16.D。【解析】主要考查函數調用時,是否設置函數原型。在C++中若被調用的函數放在主調函數之後,需將被調用函數原型放在主調函數之前,否則不需要。

17.C。【解析】本題主要考查類對象的定義,類的對象一般放在類結構體外或在主函數中定義,而不能放在類定義的結構體中,但自身類的指針可以,本題BBv3不能被定義於類體內。

18.B。【解析】本題主要考查派生類的繼承方式。該題為公有繼承,它包含基類中全部數據成員和除了構造、析構函數之外的全部成員函數,本題數據成員的個數即為2。

19.C。【解析】該題主要考查運算符函數的定義及運算符重載時應注意事項,運算符重載是函數重載的一種特殊情況。

20.B。【解析】主要考查函數模板的定義。聲明一個函數模板的格式為“template<<模板形參表聲明>><函數聲明>”,其中<模板形參>具有typename<參數名>、class<參數名>、<類型修飾><參數名>三種形式,形參用“<>”括起來。

21.A。【解析】主要考查文件流的定位問題。冀中iosbase::beg表示相對於文件首,ios_base::cur表示相對於當前位置(負數表示當前位置之前),ios_base::end表示相對於文件尾,ios_base::out表示在文件流的建立中為文件的輸出而打開。

22.D。【解析】標識符主要由數字、字母、下畫線組成,且首位必為字母或下畫線,同時標識符不能是關鍵字。

23.A。【解析】本題主要考查枚舉類型的定義,其中幾個枚舉值全部未賦常量值時,它們自左至右分別與整數0,1,…,n-1對應。由此可判斷本題答案。

24.C。【解析】本題主要考查while的作用。只有i為偶數時才輸出“*”,而本題只有2,4,6,8時才滿足條件,而當i為10時程序結束,即只有4個“*”被輸出。

25.D。【解析】本題主要考查指針的特殊含義。例*px+1指取px所指對象內容加1,*(px+1)指px指針加1,並取結果指針內容而*px則指px的首元素。

26.C。【解析】針對遞歸調用的含義。當n為2時有fib(o),fib(1),fib(2)被調用,且fib(O),fib(1)時調用結束,即共3次。

27,D。【解析】構造函數在對象被創建時由系統自動調用,本題共創建了3個對象。

28.C。【解析】本題針對虛基類的定義及特點考查。虛基類的聲明為“class<類名>:virtual<繼承方式><基類名>”,即本題的A為虛基類。

29.B。【解析】一元或二元運算符函數作為成員函數時,第一操作數就是對象本身,並不出現在參數表中,即第一操作數僅以this指針的形式隱會於參數表中,因此對於一元運算符參數表是空的;而對於二元運算符參數表中只有一個參數,它代表第二操作數。

30.D。【解析】模板形參有typename<參數名>、class<參數名>、<類型修飾><參數名>3種形式,即typename與class通用。

31.A。【解析】在C++中輸入用“cin>>”,輸出用“<32.C。【解析】析構函數主要用於最後函數的釋放空間。本題在已輸出ount()後才調用即不影響所輸結果。

33.B。【解析】const關鍵字可以用於參與對重載函數的區分。重載的原則是常對象調用常成員函數,一般對象調用一般成員函數。

34.D。【解析】對有參與無參構造函數的調用。當names[2]為空時調無參構造函數,而names[0],names[1]調用有參構造函數,即輸出3個“?”。

35.A。【解析】當基類的構造函數默認或無參時,派生類可省略對基類構造函數的顯示調用,但系統會自動調用該類的缺省構造函數,且先調用基類的構造函數後調用派生類的構造函數。

36.B。【解析】在基類與派生類中,析構函數在派生類先調用,而本題有兩個不同類對象,對於cb2需先調c2的析構函數,再調c1的析構函數。而對於*cb1由於沒有指針性析構函數,它將不參加傳遞數據。

37.D。【解析】因為getType是虛函數,所以ype()執行繼承類的getType函數,輸出“書”;ame()執行基類的getName函數,輸出“精彩人生”。總共輸出“書:精彩人生”,故選D。

38.C。【解析】除了·、*、→*、::、?:這五個運算符外,其他運算符都可以重載。=、[]、()、→以及所有的類型轉換運算符只能作為成員函數重載。口作為成員函數重載時,應完成“下標訪問”操作,使得向指定下標處的元素賦值或取值成為可能。

39.B。【解析】setw()為填充字符控制,僅對緊接着它的字符起作用,當輸出的字符寬度小於setw()預留的字符數時,需用setw()設置的字符給予填充。

40.A。【解析】對動態分配存儲空間的考查,在C++中,回車鍵需計一字符,即總的長度為strlen(aa)+1。