糯米文學吧

位置:首頁 > IT認證 > 計算機等級

2016年計算機二級C++模擬試題及答案

計算機下半年有兩次考試,為幫助考生備考9月計算機等級考試,今天yjbys小編就給大家分享一些計算機二級考試的模擬試題,供大家參考:

2016年計算機二級C++模擬試題及答案

  一、選擇題

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

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

B.算法所處理的數據量

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

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

參考答案:A

參考解析:一個算法的空間複雜度,一般是指執行這個算法所需要的內存空間。

2每個C++程序中都必須有且僅有一個(  )。

A.類B.預處理命令C.主函數D.語句

參考答案:C

參考解析:每個C++程序中都要有且僅有一個主函數,該函數是程序的入口,而語句、預處理命令和函數及類在程序中都可以有多個。

3對長度為n的線性表排序,在最壞情況下,比較次數不是n(n-1)/2的排序方法是(  )。

A.快速排序B.冒泡排序C.直接插入排序D.堆排序

參考答案:D

參考解析:首先知道有哪些排序的方法及各種排序方法在最壞情況下需要比較的次數,冒泡排序n(n-1)/2、希爾排序0(n1.5)、簡單選擇排序n(n-1)/2、堆排序O(nl0g2n)。

4數據庫系統的三級模式不包括(  )。

A.概念模式B.內模式C.外模式D.數據模式

參考答案:D

參考解析:數據庫三級模式包括:概念模式、內模式、外模式。

5SQL語言又稱為(  )。

A.結構化定義語言

B.結構化控制語言

C.結構化查詢語苦

D.結構化操縱語言

參考答案:C

參考解析:SQL語言的全稱為StructuredQueryLanguage,它是一種介於關係代數與關係演算之間的結構化查詢語言,是一種面向數據庫的通用數據處理語言規範。它包含數據查詢語言、數據操縱語言、數據定義語言和數據控制語言四個部分。

6數據處理的最小單位是(  )。

A.數據B.數據元素C.數據項D.數據結構

參考答案:C

7假定MyClass為一個類,那麼下列的函數説明中,(  )為該類的析構函數。

~MyClass();B.~MyC|ass(intn);ass();D.~MyClass();

參考答案:D

參考解析:C++語言中析構函數為符號“~”加類名,且析構函數沒有返回值和參數,故前不加void關鍵字。所以正確的形式應該是~MyClass()。第7題 筆記記錄我的筆記(0) | 精選筆記(1)選擇筆記標籤:試題內容(1)答案解析(0)

8有以下結構體説明和變量的定義,且指針P指向變量a,指針q指向變量b。則不能把結點b連接到結點a之後的語句是(  )。

structnode

{chardata;

structnode*next;

}a,b,*p=&a,*q=&b;

=q;=&b;C.p->next=&b;D.(*p)=q;

參考答案:B

9若有表達式“(w)?(--x):(++y)”,則其中與w等價的表達式是(  )。

A.w==1B.w==0C.W!=1D.W!=0

參考答案:D

參考解析:本題考查三目運算等。條件表達式的格式為a?b;c。它的含義是,當a為真時,取b的值,否則取c的值。在C語言程序中“為真”即“不等於零”,“為假”即等於0。所以和w等價的表達式是w非零。

10有如下函數模板聲明:

template

TMax(Ta,Tb){return(a>b)?a:b;}

下列對函數模板Max(  )的調用中錯誤的是(  )。

(3.5,4.5)(3.5,4)(35,4.5)(3.5,4)

參考答案:B

參考解析:本題考查函數模板的引用。引用模板函數和引用一般函數在語法形式上基本相同。需要注意的是,説明一個函數模板後,當編譯系統發現有一個對應的函數調用時,將根據實參中的類型來確認是否調用函數模板中的對應形參。本題選項B中,編譯系統從第一個參數“3.5”獲得信息“double型數據”和從第二個參數獲得信息“int型數據”,兩者矛盾。

11C++語言中關於構造函數的説法正確的是(  )。

A.構造函數的函數名不必和類名相同

B.構造函數只能有一個

C.每個類必定有構造函數

D.構造函數必有返回值

參考答案:C

參考解析:本題考查構造函數的概念。構造函數可以被重載,函數名必須和類名相同;構造函數可以有一個,也可以有多個;構造函數沒有返回值。

12下列描述中,錯誤的是(  )。

A.公有繼承時基類中的公有成員在派生類中仍是公有成員

B.公有繼承時基類中的保護成員在派生類中仍是保護成員

C.保護繼承時基類中的公有成員在派生類中仍是公有成員

D.保護繼承時基類中的保護成員在派生類中仍是保護成員

參考答案:C

參考解析:保護繼承時,類成員的訪問級別只能降低為保護模式,因此即使是基類的公有成員也被縮小為保護模式。

13結構化程序所要求的基本結構不包括(  )。

A.順序結構跳轉C.選擇(分支)結構D.重複(循環)結構

參考答案:B

參考解析:結構化程序設計的三種結構是順序、分支和循環,不包括goto跳轉,它只是分支結構的一種,也是一個關鍵字。

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

A.橢圓圖B.矩形C.菱形D.三角形

參考答案:C

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

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

A.循環隊列B.帶鏈隊列C.二叉樹D.帶鏈棧

參考答案:C

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

16對長度為n的線性表進行順序查找,在最壞情況下所需要的比較次數為(  )。

2nB.n/.n+1

參考答案:C

參考解析:對線性表進行順序查找,最壞情況下,如果從表頭進行查找,要查找到表尾才能得出結果,因此需要比較n次。

17下面程序的運行結果為(  )。#include

voidswap(int&a,intb)

{

inttemp;

temp=a++;

a=b:

b=temp:

}

voidmain()

{

inta=2,b=3;

swap(a,b);

cout<

}

A.2,3B.3,2C.2,2D.3,3

參考答案:D

參考解析:本題考查引用調用,因為函數swap引用調用參數a,所以在swap函數中a的變化會改變主函數中a的值,即a自加1。但b的值並未改變。

18若有以下程序:

#include

usingnamespacestd;

classBase

{public:

Base()

{x=0;}

intx;};

classDerivedl:virtualpublicBase

{public:

Derivedl()

{x=10;}};

classDerived2:virtua11publicBase

{public:

Derived2()

{x=20;}};

classDerived:publicDerivedl,protectedDerived2{};intmain()

{Derivedobj;

cout<

return0;}

該程序運行後的輸出結果是(  )。

A.20B.30C.10D.0

參考答案:A

參考解析:本題考查虛基類的應用。雖然Derivedl和Derived2都是由共同的基類x派生而來的,但由於引入了虛基類,使得它們分別對應基類的不同副本。這時數據成員x只存在一份副本,不論在類Derivedl中修改,還是在Derived2中修改,都是直接對這唯一副本進行操作。本題程序執行語句“Derivedobj;”時.就會先調虛基類Base的構造函數,使得X=0,然後執行類Derivedl的構造函數使得x=10,再執行類Derived2的構造函數,使得x=20。最後輸出x的值為20。

19下列選項中不合法的標識符是(  )。

.&aD.-00

參考答案:C

參考解析:標識符的概念只能由數字、字母和下畫線組成,並且只能以字母和下畫線開頭,所以選項C不正確。

20考慮函數原型voidtest(inta,intb=7,charz='*'),下面的函數調用中,屬於不合法調用的是(  )。

(5);(5,8);(6,'#');(0,0,'*');

參考答案:C

參考解析:題中函數聲明帶有默認參數,那麼在C選項的調用中,將會把字符型實參#賦值給整型形參b,這不符合參數傳遞規則。

21當需要將一個函數boolisnunlber(charc)聲明為內聯函數時,此內聯函數的函數原型為(  )。

boolisnumber(charc);

neboolisnumber(charc);

neboolisnumber(charc);

mboolisnumber(charc);

參考答案:C

參考解析:本題考查內聯函數的相關知識點。函數原型應指出函數名、返回值類型以及在調用函數時提供的參數的個數和類型,因為要聲明為內聯函數,故應加inline關鍵字。

22有如下程序:

#include

usingnamespacestd;

intmain(  ){

inta[6]={23,l5,64,33,40,58};

ints1,s2;

s1=s2=a[0];

for(int*p=a+1;p

if(sl>*p)s1=*P;

if(s2<*p)s2=*p;

}

cout<

return0;

}

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

A.23B.58C.64D.79

參考答案:D

參考解析:根據題意,找出數組a中最大值sl和最小值s2並計算二者的和。

23以下程序中調用cin函數給變量a輸入數值的方法是錯誤的,其錯誤的原因是(  )。

#include(iostream.h)

voidmain(  )

{int*P,*q,a,b;

p=&a;

cout<<"inputa:";

cin>>P;

}

A.*P表示的是指針變量P的地址

B.P表示的是變量a的地址,而不是變量a的值

C.*P表示的是指針變量p的值

D.*P只能用來説明P是一個指針變量

參考答案:B

參考解析:p表示的是變量a的地址,定義後*P表示的是變量a的值。

24有以下程序:

classDate

{

public:

Date(inty,intm,intd);

{

year=Y:

month=m;

day=d;

}

Date(inty=2000)

{

year=y;

month=10;

day=1;

}

Date(Date&d)

{

year=;

month=h;

day=;

}

voidprint(  )

{

cout<

}

private:

intyear,month,day;

};

Datefun(Dated)

{

Datetemp;

temp=d;

returntemp;

}

intmain(  )

{

Datedatel(2000,1,1),date2(0,0,0);

Datedate3(datel);

date2=fun(date3);

return0;

}

程序執行時,Date類的拷貝構造函數被調用的次數是(  )。

A.2B.3C.4D.5

參考答案:B

參考解析:本題考核拷貝構造函數。上述程序中,拷貝構造函數一共被調用了3次:第1次是在執行語句Datedate3(date1)時,用已經建立的對象date1對正在建立的對象date3進行初始化;第2次是在調用fun函數時,由於是傳值調用,因此實參對象date3要對形參對象d進行初始化;第3次是在執行fun函數中的返回語句returntemp;時,系統初始化一個匿名對象時使用了拷貝構造函數。

25下面程序的輸出結果是(  )。

#include

Usingnamespacestd;

ClassBase{

public:

Base(intx=O){count<

}

};

ClassDerived:publicBase{

public:Derved(intx=0{count<

}

private;

Baseval;

};

intmina(){

Derivedd(1);

retrun0;

}

A.0B.1C.01D.001

參考答案:D

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

A.低內聚低耦合B.高內聚低耦合C.低內聚高耦合D.高內聚高耦合

參考答案:B

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

27下列程序的運行結果是(  )。

#include

intx=5;

intfun(inta)

{

intc:

c=X*a:

returnC;

}

voidmain()

{

intx=3,a=4;

x=x+fun(a);

cout<<"x="<

}

A.x=15B.x=17C.x=23D.x=25

參考答案:C

參考解析:由主函數main入手,首先x被賦值為3,a被賦值為4,然後調用fun函數,參數為4,所以在fun函數中的a=4。而主程序中的x作用域是由它定義開始到cout輸出,在fun函數中無效。而在fun函數定義前的變量X作用域是整個程序,所以fun函數中的x值為5,這樣C的值就為20。在主函數中的x+fun(a)中的x為靠近這條語句的x定義,即3,所以最後x的值為20+3=23。第27題 筆記記錄我的筆記(0) | 精選筆記(0)選擇筆記標籤:試題內容(0)答案解析(0)

28數據庫DB、數據庫系統DBS、數據庫管理系統DBMS之間的關係是(  )。

包含DBS和包含DB和包含DB和DBMSD.沒有任何關係

參考答案:C

參考解析:數據庫系統(DBS)是指在計算機系統中引入數據庫後的系統,一般有數據庫(DB)、數據庫管理系統(DBMS)、應用系統、數據庫管理員和用户構成。

29在軟件開發中,需求分析階段產生的主要文檔是(  )。

A.軟件集成測試計劃B.軟件詳細設計説明書C.用户手冊D.軟件需求規格説明書

參考答案:D

參考解析:需求分析階段只能產生需求分析規格説明書,A測試説明書是軟件測試階段生成的,B軟件詳細設計説明數是設計階段生產,C用户手冊是軟件發佈時隨軟件一同交付給用户的。

30有如下程序:

#include

usingnamespacestd;

classXA{

inta;

public:

staticintb;

XA(intaa):a(aa){b++;}

~XA(  ){}

intget(  ){returna;}

};

intXA::b=0

intmain(  ){

XAd1(1),d2(3);

cout<

return0;

}

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

A.5B.6C.7D.8

參考答案:C

參考解析:每調用一次get函數時,對新的類A對象進行一次實例化,調用一次構造函數,類A的靜態成員變量b便加1。

31是(  )。

A.2*a*b/c/dB.a*b/c/d*2C.a/c/d*b*2D.2*a*b/c*d

參考答案:D

參考解析:本題考查運算符的優先級書寫及運算。*、/運算優先級相同,據此判斷,選項D表示的是2abd/c,而不是2ab/(cd)。

32對於模板定義關鍵字class和typename説法不正確的是(  )。

A.程序中的class並不能都替換為typename

s和typename都可互相替換

C.程序中的typename都能替換為class

D.程序中的部分class可以替換為typename

參考答案:B

參考解析:在C++程序中的typename是都可以替換為class的,但class不能都替換為typename。

33下面程序的運行結果為(  )。

#include

ClassA

{

public:A(  ){cout<<"1";}

~A(  ){cout<<"2";}

};

ClassB:public:A

{

public:

B(  ){cout<<"3";}

~B(  ){cout<<"4";}

};

Voidmain(  )

{

Bb;

}

A.1234B.1324C.1342D.3142

參考答案:C

參考解析:本題考查在繼承中構造函數和析構函數的調用順序,應該是先調用基類的構造函數,再調用派生類的構造函數,調用析構函數時的順序是先調用派生類的析構函數,後調用基類的析構函數。

34有如下程序:

#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<

endl;

}

intmain(  ){

Bookbook(”精彩人生”);

showPublication(book);

return0;

}

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

A.未知類型:未知名稱

B.未知類型:精彩人生

C.書:未知名稱

D.書:精彩人生

參考答案:D

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

35若有以下程序:

#include

usillgnamespacestd;

classA

{private:

inta;

public:

A(inti)

{a=i;}

voiddisp()

{cout<

classB

{private:

intb;

public:

B(intj)

{b=j;}

voiddisp()

{COUt<

classC:publicB,publicA

{private:

intC;

public:

C(intk):A(k-2),B(k+2)

(c=k;)

voiddisp()

{A::disp();

B::disp();

cout<

intmain()

{Cobj(10);

();

return0;}

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

A.10,10,10B.10,12,14C.8,10,12D.8,12,10

參考答案:D

參考解析:本題考查派生類構造函數的使用。派生類C具有多重繼承關係,所以在派生類C的構造函數中應該包含基類A和B的成員初始化列表。

36若AA為一個類,a為該類的非靜態數據成員,在該類的一個成員函數定義中訪問a時,其書寫格式為(  )。

.a{}::a{}

參考答案:A

參考解析:a是類AA的非靜態數據成員,在類AA的成員函數中可以直接訪問。B是訪問靜態數據成員的方式,C和D都是訪問函數的方式。

37靜態成員函數沒有(  )。

A.返回值指針C.指針參數D.返回類型

參考答案:B

參考解析:this指針是系統隱含的用於指向當前對象的指針。由於靜態函數是同類中所有對象都共享的函數,在內存中只存在一份,不屬於某個對象所有,所以靜態函數沒有this指針。

38下列程序的運行結果是(  )。

#include

intx=5:

intfun(inta)

{

intC;

C=X*a:

returnC;

}

voidmain(  )

{

intx=3,a=4;

x=x+fun(a);

cout<<"x="<

}

A.x=15B.x=17C.x=23D.x=25

參考答案:C

參考解析:由主函數main入手,首先X被賦值為3,a被賦值為4,然後調用fun函數,參數為4,所以在fun函數中的a=4。而主程序中的X作用域是由它定義開始到cout輸出,在fun函數中無效。而在fun函數定義前的變量X作用域是整個程序,所以fun函數中的x值為5,這樣c的值就為20。在主函數中的x+fun(a)中的X為靠近這條語句的x定義,即3,所以最後x的值為20+3=23。

39面向對象的沒計方法與傳統的面向過程的方法有本質不同,它的基本原理是(  )。

A.模擬現實世界中不同事物之間的聯繫

B.強調模擬現實世界中的算法而不強調概念

C.使用現實世界的概念抽象地思考問題從而自然地解決問題

D.鼓勵開發者在軟件開發的絕大部分中都用實際領域的概念去思考

參考答案:C

參考解析:面向對象設計通過對人類認識客觀世界及事物發展過程的抽象,建立了規範化的分析設計方法,由此帶來軟件模塊化特色突出、可讀性好、易維護等一系列優點。

40負責數據庫中查詢操作的數據庫語言是(  )。

A.數據定義語言B.數據管理語言C.數據操縱語言D.數據控制語言

參考答案:C

參考解析:數據庫操縱語言專門負責查詢、增加、刪除等數據操作。

  二、程序改錯題

41使用VC++6.0打開考生文件夾下的源程序文件,該程序運行時有錯。請改正程序中的錯誤,使程序輸出的結果為

100

37

32

注意:錯誤的語句在//******error******的下面,修改該語句即可。

試題程序:

#include

//******error******

voidmain

{

//******error******

intm=0142:

//******error******

intn=0X27:

intq=32;

cout<

cout<

cout<

return;

}

參考解析:

(1)“voidmain()”。

(2)“intm=0144;”。

(3)“intn=OX25;”或“intn===0x25;”。

【解析】本題主要考查了主函數定義及冪同進制之間的轉換,包括十進制到八進制,十進制到十六進制。主函數定義的定義形式為“main()”,函數名之後必須是一對括號,因此第1處應改為“voidmain()”。cout輸出默認是以十進制方式輸出的,根據題目要求輸出的結果可發現變量的初值不正確,十進制的100對應八進制的144,卡進制的37對應十六進制的25,因此2和3應分別改成“intm=0144;”,“intn=0×25;”或“intn=0×25;”。

  三、簡單應用題

42使用VC++6.0打開考生文件夾下的源程序文件。請完成函數fun(intn),使其實現以下功能:當i等於3時,則打印如下內容。

A

AA

AAA

注意:不能修改程序的其他部分,只能修改fun函數。

試題程序:

#include

voidfun(intn)

{

}

voidmain()

{

intn;

cout<<"請輸入打印的行數:"<

cin>>n;

if(n<1)

{

cout<<"輸入的行數必須大於0"<

return;

}

fun(n);

return;

}

參考解析:

inti;

for(i=0;i

{

intj;

for(j=0;j(n-i-1;j++)//循環打印空格

{

cout<<'';

}

for(;j

{

cout<<"A":

}

cout<

}

【解析】本題利用外層循環打印每一行。內層循環分為

打印空格和打印A。打印空格由第一個位置到第n-i-1。打印A,是由打印完空格開始一直到行結束。在外循環中打印每一行的結束符。

四、綜合應用題

43使用VC++6.0打開考生文件夾下的源程序文件。請完成以下部分,實現在屏幕上輸出為

C3

C2

這個程序需要修改的部分,請按照以下部分實現。

(1)類C0不能被實例化,請定義一個純虛函數print,在註釋1後添加適當的語句。

(2)類C1私有虛繼承類C0,請在註釋2後添加適當的語句。

(3)類C2公有繼承於C0,請在註釋3後添加適當的語句。

(4)類c3公有繼承於C2與C1,請在註釋4後添加適當的語句。

注意:增加代碼或者修改代碼的位置已經用符號表示出來。請不要修改其他的程序代碼。

試題程序:

#include(iostream.h)

classCO

{

//********1********

};

//********2********

classC1:

{

public:

voidprint()

{

cout<"”C1"<

}

};

//********3********

classC2:

{

public:

voidprint()

{

cout<<"C2"<

}

};

//********4***x****

classC3:

{

public:

voidprint()

{

cout<<"C3"<

}

};

voidmain()

{

C30bj3;

C20bj2;

t();

t();

return;

}

參考解析:

(1)應添加“virtualvoidprint()=0,”。

(2)“classC1:”應改為“classC1:virtualprivateC0”。

(3)“classC2:”應改為“classC2:publicC0”。

(4)“classC3:”應改為“classC3:publicC2,publicC1”。

【解析】本題考查了類的繼承。根據題意,第1處應該添加“virtualvoidprint()=0;”。第2處根據題意,在冒號後面應添加“virtualprivateCO”。第3處根據題意,冒號後應添加“publicCO”。第4處根據題意,冒號後應添加“publicC2,publicC1”。