國家二級(C++)筆試模擬試卷22_第1頁
國家二級(C++)筆試模擬試卷22_第2頁
國家二級(C++)筆試模擬試卷22_第3頁
國家二級(C++)筆試模擬試卷22_第4頁
國家二級(C++)筆試模擬試卷22_第5頁
已閱讀5頁,還剩89頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

眼家二級(C++)筆試模擬試卷第1套

一、公共基礎選擇題(本題共70題,每題7.0分,共

10分。)

1、線性表進行二分法檢索,其前提條件是()。

A、線性表以順序方式存儲,并按關鍵碼值排好序

B、線性表以順序方式存儲,并按關鍵碼的檢索頻率排好序

C、線性表以鏈式方式存儲,并按關鍵碼值排好序

D、線性表以鏈式方式存儲,并按關鍵碼的檢索頻率排好序

標準答案:A

知識點解析:對線性表進行二分法檢索,要求線性表是按順序方式存儲,并按關鍵

碼值的大小排好序,而不是按關鍵碼的檢索頻率排序。

F列支■名中.小法的《).

2、A)CHINAB)byte-sizeC)doubleD)A+a

A、

B、

C、

D、

標準答案:A

知識點解析:暫無解析

3、下面關于函數模板的表述中不正確的是()

A、類模板的成員函數都是模板函數

B、類模板本身在編譯過程中不會產生任何代碼

C、類模板只能有虛擬類型的參數

D、用類模板定義一個對象時,實參不能省略

標準答案:C

知識點解析:暫無解析

有如下程序:

#include<k>streain>

usingnamespacestd;

classBasc{

public:

virtualvoidfunclO{cout?"BaseI";}

voidfunc2(){a)ut?-Base2";}

};

classDcnved:publicBase{

public:

voidfunclO{cout?"Derived1";)

voidfunc2()(cout?'Derived2";)

h

mtmain()(

Base*p=newDerived;

p->funclOl

p->func20;

return0;

)

運行此程序,屏幕上將顯示,出?

A)Derived1Base2B)Base1Base2

.C)Derived1Derived2D)Base1Derived2

4、

A、

B、

C、

D、

標準答案:A

知識點解析:暫無解析

5、如下程序的輸出結果是#includcViostrcam>usingnamespacestd;class

Test{public:Test(){n+=2;)?Tesl(){n-=3;)staticintgetNum(){returnn;}

private:staticintn;};intTest::n=l;intmain()|Test*P=newTest:deleteP;

cout<<"n="<<Test::gctNum()<<cndl;return0;)

A、n=0

B、n=l

C、n=2

D、n=3

標準答案:A

知識點解析:靜態數據成員的初始值n=l,執行Test*p二newTest;,調用構造函數

后,n=3,delelep;調用析構函數,n-=3,所以最終n=0。

6、下列關于棧的描述中錯誤的是()。

A、棧是先進后出的線性表

B、棧只能順序存儲

C、棧具有記憶作用

D、對棧的插入與刪除操作中,不需要改變棧底指針

標準答案:2

知識點解析:暫無解析

7、下述內容中()不屬于軟件工程管理的范疇。

A、軟件管理學

13、軟件心理學

C、軟件工程經濟

D、軟件工程環境

標準答案:8

知識點解析:暫無解析

8、已知二義樹后序遍歷序列是dabec,中序遍歷序列是debac,它的前序遍歷序列

A、acbed

B、decab

C、deabc

D、cedba

標準答案:8

知識點解析:依據后序遍歷序列可確定根結點為c;再依據中序遍歷序列可知其左

子樹由deba構成,右子樹為空;又由左子樹的后序遍歷序列可知其根結點為e,

由中序遍歷序列可知其左子樹為d,右子樹由ba構成,如下圖所示

o求得該二叉樹的前序遍歷序列為選項D)。

9、下列敘述中正確的是()0

A、一個算法的空間復雜度大,則其時間復雜度必定大

B、一個算法的空間復雜度大,則其時間復雜度必定小

C、一個算法的時間復雜度大,則其空間復雜度必定小

D、上述三種說法都不對

標準答案:D

知識點盲析:算法的時間復雜度和算法的空間復雜度從不同的角度來衡量算法的執

行情況,它們之間沒有內在聯系。

10、在深度為7的滿二叉樹中,葉子結點的個數為

A、32

B、31

C、64

D、63

標準答案:C

知識點解析:在二叉樹的第k層上,最多有2k」(k21)個結點。對于滿二叉樹來說,

每一層上的結點數都達到最大值,即在滿二叉樹的第k層上有個結點。因此,

在深度為7的滿二叉樹中,所有葉子結點在第7層上,即其結點數為2匕匕27/=64

因此,本題的正確答案為C。

二、選擇題(本題共25題,每題1.0分,共25分。)

11、C++中運算符優先級由高到低排列正確的是

A、::+++||

B、<*||,

C、sizeof%+::

D、,&&newsizeof

標準答案:A

知識點解析:暫無解析

12、下面程序的運行結果是()。#includc<iostrcam.h>classbasc{protected:int

a;public:base(){cout<<4k0,\)};ClassBasel:Virtualbase{public:

basel(){cout<<ur,;)(;Classbase2:virtualbase{public:base2(){cout<<

“2”;)

A、0123

B、3120

C、0312

D、3012

標準答案:A

知識點解析:本題考查的是含有虛基類的繼承中構造函數的調用順序,應該先調

用基類的構造函數,接著是按照派生類繼承列表的順序依次調用虛基類的構造函

數,最后調用派生類自己的構造函數。

13、對虛函數的調用(),

A、一定使用動態聯編

B、必須使用動態聯編

C、一定使用靜態聯編

D、不一定使用動態聯編

標準答案:D

知識點解析:虛函數在運行階段和類的對象綁定在一起,這樣成為動態聯編。虛函

數聲明只能出現在類聲明中虛函數原型中,而不能在成員的函數體實現的時候。必

須由成員函數來調用或者通過指針、引用來訪問虛函數。如果通過對象名來訪問虛

函數,則聯編在編譯過程中認為是靜態聯編。

14、若有如下定義和語句:ints[4][5],(*p)[5];p=S;則指針對s數組中第三個元素的

正確引用形式是()。

A、p[0][3]

B、p[l][2]

C、p|0](2]

D、p[l]⑶

標準答案:C

知識點解析:“p=s;”語句將指針p指向數組s。而數組為二維數組,下標標識由0

開始,所以第二個元素為下標為。行的2列,即p[0][2]。

15、執行完下列代碼段之后:boolx二true,y二false:z=false;x=x&&y||z;

y=x||y&&z;z=!(x!=y)||(y==z);則x=false,y=false,z=()0

A、true

B、假

C、不確定

D、異常

標準答案:A

知識點解析:其中“x=x&.&y||z”語句計算后x=fal$e,"y=x||y&&z;”語句計算后

y=false。那么“z=!(x!=y)||(y=z);”語句計算后“z=!(ture)||true"。所以答案為:true。

16、定義如下枚舉類型:

enum{Monday,Tuesday,Wednesday,Thrusday,Friday=2};,則下列語句正確的是

A、表達式Wednesday=Friday的值是true

B、Dayday;day=3

C、Dayday;day=Monday+3

D、Dayday:day=Tuesday+10

標準答案:A

知識點解析:enum<枚舉類型名〉{〈枚舉元素表〉}:其中:關鍵詞enum表示定義

的是枚舉類型,枚舉類型名由標識符組成,而枚舉元素表由枚舉元素或枚舉常量組

成。其中enum{Monday,Tuesday,Wednesday,Thrusday,Friday=2}的值由0開

始,即0,1,2,3oD中的本題中的枚舉類型中的數據值Wednesday為2,

而.Friday的值賦值為2,所以判斷Wednesday等于Friday的表達式值為真,卻

true。即選擇Ao

17、有如下程序:#includeusingnamespacestd:classAA{intn;public:AA(int

k):n(k){}intget(){returnn:(intget()eonst{returnn+1;}};intmain()(AAa(5);

constAAb(6);cout<

A、55

B、57

C、75

D、77

標準答案:B

知識點解析:語句AAa(5)調用的是AA(intk):n(k){},a.intget(){return

n;),結果會輸出5;而常對象constAAb(6),b.get()調用的是intget()const{return

n+1;),會輸出結果7。

18、已知類Myclass的定義如卜:classMyClass{public:MyClass(intD){data=d;)

-MyClass(){)private:intdata;};下列對Myclass類對象數組的定義和初始化語句

中,正確的是()。A)MyClassarrays[2J;B)MyClassarraysL2J={MyClass(5));C)

MyClassarrays[2]={MyClass(5),MyClass(6)};D)MyClass*arrays=newMyClass[2];

A、

B、

C、

D、

標準答案:C

知識點解析:暫無解析

19、關于new描述錯誤的是()c

A、使用運算符new創建對象數組時必須定義初始值

B、使用運算符new創建對象時,會調用類的構造函數。

C、運算符new可以用來動態創建對象和對象數組。

D、使用new運算符創建的對象可以使用運算符delete刪除。

標準答案:1

知識點解析:使用new創建對象數組或一般數組時,不能為該數組指定初始值,

其初始值為默認值。

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

A、預處理命令

B、函數

C、語句

D、主函數

標準答案:8

知識點解析:一個C++程序一般由預處理命令、輸入輸出、函數、語句、變量這

幾個基本部分組成。但是,每個C++程序都必須有且僅有一個主程序。

21、下列關于形參的說法,正確的是()。

A、函數的形參是必須的

B、函數的形參可以是表達式

C、函數在定義時,形參是不占用存儲空間的,只是在被調用時才會占,調用完畢

也就被釋放了

D、形參的名稱、類型、數量、順序必須與實參都相同,否則實參不會把信息正確

地傳遞給形參

標準答案:4

知識點解析:函數可以沒有形參。表達式是一個值,不是變量,不能接受信息。

22、類模板template<classT>classx{...},其中,友元函數f對特定類型T(如

int),使函數f(xVint>);成為xVint>模板類的友元,則其說明為()。

A、friendvoidf();

B、friendvoidf(x<T>);

C、friendvoidA二f()

D、friendvoidC<D::f(x<T>);

標準答案:2

知識點解析:暫無解析

23、下列有關虛基類的聲明中,語法格式正確的是。

A、classvirtualB:publicA

B、virtualclassB:publicA

C、classB:publicAvirtual

D、classB:virtualpublicA

標準答案:8

知識點解析:暫無解析

24、關于二進制文件說法錯誤的是o

A、文本文件中,每個字節單元的內容均為字符的ASCII碼。

B、二進制文件中,字符串仍然保存為每個字符的ASCII碼。

C、數10,在文本文件中表示為1和0二個字符的ASCH碼,而在二進制文件中表

示為二進制數“000010100”

D、文本文件中,文件內容在內存中的映像與在磁盤上的映像完全一樣。

標準答案:8

知識點解析:暫無解析

25、若變量已正確定義并賦值,以下符合C++語言語法的表達式是

A^a:=b+l

B、a=b=c+2

C、int18.5%3

D、a=a+7=c+b

標準答案:2

知識點解析:a=b=c+2實際上相當于a=(b=c+2),進而可分解為兩個表ik式:

5氣+2和@=1)。注意:選項A)中包含一個不合法的運算符“:=”;選項C)應改為

(inl)18.5%3;選項D)叫理解為兩個表達式:a+7=c-b和a=a+7,其中第一個是錯

的,因為C++語言規定賦值號的左邊只能是單個變量,不能是表達式或常量等。

注意:C++語言賦值語句的運用。

26、若運行時給變量x輸入12,則以卜.程序的運行結果是#includeViosiream.h>

voidmain(){intx,y;cin>>x;y=x>12?x+10:x-12;cout<<y;cout<<

endl;)

A、0

B、22

C、12

D、10

標準答案:1

知識點解析:三目運算符的表達式為(表達式1)?(表達式2):(表達式3),運算過程

是當(表達式1)的值為真時,求(表達式2)的值為整個表達式的值;如果(表達式1)

的值為假,則求(表達式3)的值為整個表達式的值。題中,表達式x>12的結果為

假,所以執行的語句是x-12,最終結果應該是0。注意:"?:”的優先級高于“=”運

算符的優先級。

27、下面類的定義,有()處錯誤。classMyClass{public:voidMyClass();

MyClass(intValue);private:inti=0;};

A、1

B、2

C、3

D、4

標準答案:4

知識點解析:上述類的定義共有3處錯誤。第一處:類的成員變量不能在定義時進

行初始化:第二處:類的構造函數不能有返回值(包括void類型);第三處:類的析

構函數不能有參數。

28、下列關于成員函數特征的描述中,錯誤的是(),

A、成員函數一定是內聯函數

B、成員函數可以重載

C、成員函數可以設置參數的默認值

D、成員函數可以是靜態的

標準答案:1

知識點解析:在C++中,成員函數可以是內聯函數,也可以是非內聯函數。在類

定義體內定義和實現的函數都是內聯函數。在類定義體外實現的函數可以通過在函

數說明和定義上分別加上inline來表示該函數是內法函數,否則就不是內聯函數。

29、已知類X成功地重載了--、=、+、和口這幾個運算符,則其中肯定屬于成員函

數的運算符是()。

A、+和=

B、口和后置-

C、二和口

D、前置--和[]

標準答案:4

知識點解析:暫無解析

30有以下程序#include<iostream.h>intf(ihtn){if(n==l)return

1:elsereturnf(n-l)+l;}voidmain(){ihti,j=0:for(i=l:i

<3;i++)j+=f(i);cout<<j;)程序運行后的輸出結果是

A、4

B、3

C、2

D、1

標準答案:2

知識點解析:在main函數中,對f(l)和f(2)的值進行了累加。過程如下:f

(1)=1f(2)=f(l)+1=2最后,j的值為1+2=3。注意:函數的遞歸調用需要

有一個結束的條件。

31、以下程序中,錯誤的行為①#include<iostream.h>②classA③]④

public:⑤intn=2;⑥A(intval){coutVVvalVVendl;}⑦?A(0{};⑧}:

?voidmain(0@{(II)Aa(0);(12)

A、⑤

B、⑥

C、?

D、(11)

標準答案:1

知識點解析:C++語言中規定在類體中不允許對所定義的數據成員進行初始化。

32、有以下程序main(){inia=5,b=4,c=3,d=2;

if(a>b>c)cout<<d<<endl;elseif((c-l>=d)==l)

cout<<d+l<<endl;;elsecout<<d+2<<

endl;)執行后輸出結果是

A、2

B、3

C、4

D、編譯時有錯,無結果

標準答案:B

知識點解析:本題考查邏輯表達式的結合特性,即左結合性。對于表達式a>b>

c,首先判斷a>b為真,結果為1,然后判斷l>c,為假,故轉去判斷c-l>=d是

否成立,成立.結果為1,再判斷1二=1,結果為真,因此,執行d+1,答案為

Bo

33、假定a為一個整型數組名,則元素a[4]的字節地址為

A、a+4

B、a+8

C>a+16

D、a+32

標準答案:C

知識點解析:注意:VC編譯器分配給整數的內存是4字節。

34、有如下程序#include<iostream>#include<iomanip>

usingnamespacestd;intmain(){cout<<setprecision(3)

<<fixed<<setfill(,*,)<<setw(8);cout<<12.345<<<<

34.567;return0;}若程序的輸出是:

**12.345**34.567則程序中下劃線處遺漏的操作符是

A、setprccision(3)

B、fixed

C、setfillC*')

D、setw(8)

標準答案:D

知識點解析?:本題考查的是輸出的格式控制。木例中,操作符setprecision的作用

是設置浮點數的精度;操作符fixed的作用是讓浮點數按定點格式輸出;操作符

selfill的作用是設置填充字符;操作符selw的作用是設置輸入輸出的寬度。寬度設

置setw是所有格式設置中惟一的一次有效的設置,即設置的寬度只對其后的一次

輸入輸出操作有效,而其余操作符設置后會一直有效,直到再次設置時為止。囚

此,若下劃線處什么也不填,則輸出的結果應該為**12.34534.567。和要求的輸出

相比較,只缺少兩個填充字符由此可知,下劃線處應該填一個讓34.567的輸

出寬度為8的操作符,即setw(8)。故應該選擇D。

35、有如下程序:#include<iostream>usingnamespacestd;

classSample{public:Sample()

<)~Sample(){cout<<'**;}};int

main(){Sampletemp[2],*pTemp[2];

return0:)執行這個程序輸出星號(*)的個數為()n

A、1

B、2

C、3

D、4

標準答案:B

知識點解析:此題考查的是構造函數和析構函數。構造函數在對象被創建時由系統

自動調用,而析構函數在對象的生存期即將結束時由系統自動調用。此題中,主程

序在創建Sample類的對象temp⑵數組時,調用Sample類的默認構造函數,在主

函數退出時,調用析構函數清除對象temp[2],輸出字母*,因為對象是包含兩個元

素的數組,所以調用兩次析構函數,即輸出兩個*。

三、公共基礎填空題(本題共5題,每題7.0分,共5

分。)

36、在下面程序的橫線處填上適當的語句,使程序執行后的輸出結果為ABCD。

#include<iostream>usingnamespacestd;classA{public:A(){cout<<,A,;}};class

B:{public:B(){cout<<,B,;}};classC:{public:C(){coutVV'C';}};

classD:publicB,publicC{public:D(){cout<<,D*;}};voidmain(){Dobj;)

標準答案:virtualA或virtualpublicA或virtualprivateA或virtualprotectedA與

virtualA或virtualpublicA或virtualprivateA或virtualprotectedA

知識點解析:由于每執行一次A類的構造函數,都將輸出一個字符A,輸出結果

中只有一個A,且第一個輸出為A,D繼承B,可知必有B繼承A。由題中要求C

肯定繼承某個類,所以,這里的C只能是繼承于A,保證輸出中只有一個A,A必

須為虛基類,所以本題中的空都填virlualA。

37、樹中度為零的結點稱為o

標準答案:葉子結點

知識點解析:暫無解析

38、

operator是運集符重我時必須使用的關健字,它和被重載的運算符連在起,作為運算符函數的專用

函數名,務必把該函數說明為的?

標準答案:public

知識點解析:運算符可以重載為成員函數或友元函數,但是應該把函數說明為公有

的,以便各個量都能引用。

39、一個關系表的行稱為【】。

標準答案:記錄或元組

知識點解析:暫無解析

40、函數模板既可以與重載,也可以與重載。

標準答案:函數模板非函數模板

知識點解析;暫無解析

四、填空題(本題共10題,每題1.0分,共10分。)

41、有以下程序:#included<iostream>usingnamespacestd;classBase{public:

Base(){x=0;}intx;};classDerivedkvirtualpublicBase{public:Derived1()

{x=10;}};classDerived2:virtualpublicBase{public:Derived2(){x=20;)};class

Derived:publicDerived1,protectedDerived2{);intmain(){Derivedobj;coul<<obj.

x<<endl;return0;}該程序運行后的輸出結果是_____。

標準答案:20

知識點解析:本題考核虛基類。本題中,雖然Derived1和Derived2都是由共同的

基類x派生而來的,但由于引入虛基類,使得它們分別對應基類的不同副本。這時

數據成員x只存在一份拷貝,不論在類Derircd1中修改,還是在類Derived21tl修

改,都是直接對這唯一拷貝進行操作。本題程序執行語句“Derivedobj;"時,就會先

調用虛基類Base的構造函數,使得x=0,然后執行類Derived1的構造函數使得

x=10,再執行類Derived2的構造函數,使得x=20。最后輸出x的值為20。

42>有如下程序:#includeusingnamespacestd:classA{public:virtualvoid

fO{cout?'T';)};classB:publicA{public:B(){cout<<"2";)};classC:

publicB{public:virtualvoidf(){B::f();coutvV?';)};intmain(){Aaa,

*p;Bbb:Ccc:p=&cc;p->f():return0:}執行上面程序的輸出是

_____________________o

標準答案:2213

知識點解析:Bbb將定義一個B型對象bb,這時錯調用B的構造函數,在該構造

函數中,將輸出“2";Ccc將定義一個C型對象cc,這時需調用C的構造函數,而

該函數為缺省構造函數,其將調用父類B的構造函數,在該構造函數中,將輸出

“2”;由于p采用指針方式調用成員函數f,而f在基類中被聲明為虛擬函數,故函

數f的執行與指針p所指向對象的實際類型相一致,p指向一個C型對象cc,故執

行p->f()時,將執行C的f函數,在該函數中,首先直接調用了父類B的函數

f.而在B中直接繼承了A類的f函數,故先要執行A的f函數,輸出力”,然后再

輸出“3”。

43,已知一個函數模板定義為template<typenameT1.typenaineT2>T1FUN'(T2

n){rcturnn*5.0;}若要求以int型數據7為函數實參調用該模板函數,并返回一個

double型數據,則該調用應表示為o

標準答案:FUN〈double〉(7)

知識點解析:實參類型和返回值類型不匹配時,需要強制轉換參數類型,所以在函

數模板調用時要顯式地定義參數數據類型double,將整數7轉換為double型。

44、有如下程序:#include<iostream.h>voidmain(){intx=2,y=3,a,b,c,d;a=(x4-+>

=-y);b=(x==++y);c=(x-!=y);d=(++x>y-);Cout<<a<<b<<c<<d<<endl;)

則程序執行后變量a,b,c,d的值分別是【】。

標準答案:1100

知識點解析:暫無解析

45、設i,j,k均為int型變量,則執行完fbr(i=O,j=10;i<=j;i++>j一)k=i+j語

句后,k的值為【】。

標準答案:10

知識點解析:該for語句以i為0、j為10初始化,循環條件是i〈=j,每次循環后i

增1、j減1,循環體是洛i與j的和賦給匕這樣變量k將保存的是最后一次賦給

它的值。一次循環后i為1、j為9,二次循環后i為2、j為8,……,五次循環后i

為5、j為5,繼續第六次循環,將i與j的和10存于k后,i為6、j為4,結束循

環。所以循環執行后k為10。

46、operator是運算符重載時必須使用的關鍵字,它和被重載的運算符連在一起,

作為運算符函數的專用函數名,務必把該函數說明為的。

標準答案:public

知識點解析:暫無解析

47、頭文件中包含了執行內部格式化所需的信息。

標準答案:strstrea.h

知識點解析:暫無解析

48、下列程序的執行結果是_____o#include<iostream.h>#include<iomanip.h>

usingnamespacestd;voidmain(){cout<<setfill(,x,)<<selw(10);coul<<

"Hello'*<<endl;}

標準答案:xxxxxHcllo

知識點解析:此題考查的是I/O的格式化輸出。SetfillCx,)表示填充字符為V,并

且一直有效;setw(10)表示將輸入輸出的寬度設置為10,寬度設置的效果只對以此

次輸入或輸出有效,在完成一個數據的輸入或輸出后,寬度自動恢復為0;題目中

字符串“Hello”的寬度不夠10,所以其前面將有5個填充符V。

49、若要在程序文件中進行標準輸入輸出操作,則必須在開始的#include命令中

使用頭文件【】。

標準答案:ioslream.h

知識點解析:本頭文件和重要,包含了基本輸入輸出所需要的庫函數。

50、“圖形”類Shape中定義了純虛函數CalArca。,“三角形”類Triangle繼承了類

Sh叩e,請將Triangle類中的CalArea函數補充完整。classShape{public:virtual

intCalArea()=0;);classTriangle:publicShape{public:Triangle(ints,inth):

side(S),height(h){}[]{returnside*height/2;)private:intside;int

height;};

標準答案:intCalArea()

知識點解析:在基類中不能對虛函數給出有意義的實現,而把它說明為純虛函數,

它的實現留給該基類的派生類去做,這就是純虛函數的作用。所以本題應該填寫

intcalArea()。

國家二級(C++)筆試模擬試卷第2套

一、公共基礎選擇題(本題共70題,每題7.0分,共

70分。)

1、下列選項中,不屬于模塊間耦合的是

A、數據耦合

B、同構耦合

C、異構耦合

D、公用耦合

標準答案:C

知識點解析:暫無解析

2、有如下程序:#include<iostream>usingnamespaeestd;classPoint{public:

staticintnumber:Point()(number++;}~Point(){number-;||;int

Point::number=0;voidmain(){Point*ptr;PointA,B;Point*ptr_point=new

Point[3];ptr=ptr_point;PointC;cout<<Point::number<<endl:delete[]ptr;}

程序的輸出結果是A)3B)4c)6D)7

A、

B、

C、

D、

標準答案:C

知識點解析:只有在創建對象時才會調用類的構造函數,在定義指針時不會調用構

造函數,只有給指針new一個地址時會調用構造函數,所以本程序中一共生成了6

個Point對象(A,B,C,newPoint[3])onumber作為靜態數據成員,被同一類的不

同對象所共享,故結果為6。

3、下列敘述正確的是

A、算法的執行效率與數據的存儲結構無關

B、算法的空間復雜度是指算法程序中指令(或語句)的條數

C、算法的有窮性是指算法必須能在執行有限個步驟之后終止

D、以上3種描述都不對

標準答案:C

知識點解析:算法的執行效率與數據的存儲結構密切相關。算法的空間復雜度是

指算法執行過程中所需的存儲空間c

4^有如下程序:#include<iostrcam>usingnamespacestd;classPair{intm;int

n;public:Pair(inti,intj):m(i),n(j){)bootoperator>(pairP)const;〃需在類體

外給出定義};intmain(){Pairpl(3,4),p2(4,3).p3(4,5);cout<<(pl>p2)<

<(p2>pl)<<(p2>p3)<<(p3>p2);return0;)運算符函數operator〉的功能是

比較兩個Pair對象的大小,當左邊對象大時,返回irue,否則返回false。比較規

則是首先比較兩對象的m成員,m大者為大;當m相等時比較n,n大者為大。程

序輸出0101,下列對運算符重載函數的正確定義是

A、boolPair::operator>(PairP)eonst

boolPair::operator>(PairP){if(m!=P.m)returnm>p.In;returnn>p.n;}

{if(m!=P.m)returnm>p.m;returnn>p.n;}

C、boolPair::operator>(PairP)eonst

D、boolPair::operator>(PairP){if(m>p.m)returntrue:returnn>p.n;){if(UI>

p.m)retumtrue;returnn>p.n;}

標準答案:C

知識點解析:暫無解析

5、有如下程序:#include<iostream>usingnamespacestd;classBaselprotected:

Base(){cout<<,Base5;}Base(charc){cout<<c;));classDerived:public

Base{public:Derived(charc){cout<<c;}};intmainf){Derivedd(,Derived,);return

0;}執行這個程序屏幕上將顯示輸出()。

A、Derived

B、DerivedBase

C、BascDcrivcd

D、DerivedDerived

標準答案:C

知識點解析:派生類Derived由基類Base公有派生,在派生類構造函數聲明時系

統會自動調用基類的缺省構造函數。調用DeriveddCDerived)后,執行類

Derived構造函數的Derived(charc),系統自動調用基類的缺省構造函數Base。,輸

出字母Base;再執行派生類的構造函數Dcrivcd(charc),輸出字母Derived。

6、有3個結點的二叉極有()。

A、2種形態

B、4種形態

C、7種形態

D、5種形態

標準答案:D

知識點解析:暫無解析

7、語句ofstreamf(”SALARY.DAT”,ios_base::app)的功能是建立流對象f,并試

圖打開文件SALARY.DAT與f關聯,而且

A、若文件存在,則將其置為空文件;若文件不存在,則打開失敗

B、若文件存在,則將文件指針定位于文件尾;若文件不存在,則建立一個新文件

C、若文件存在,則將文件指針定位于文件首;若文件不存在,則打開失敗

D、若文件存在,則打開失敗;若文件不存在,則建立一個新文件

標準答案:B

知識點解析:ios_basc::app所表示的文件打開方式為:如果文件存在則將文件有針

指向文件尾,否則就建立一個新文件。

8、當一個函數無返回值時,函數的類型應為()。

A、任意

B、void

C>int

D、char

標準答案:2

知識點解析:暫無解析

9、下列敘述中正確的是

A、線性表是線性結構

B、棧與隊列是非線性結構

C、線性鏈表是非線性結構

D、二叉樹是線性結構

標準答案:1

知識點解析:線性表是一種線性結構,數據元素在線性表中的位置只取決于它們自

己的序號,即數據元素之間的相對位置是線性的;棧、隊列、線性鏈表實際上也是

線性表,故也是線性結溝;樹是一?種簡單的非線性結構。

10、不定長文件是指()o

A、文件的長度不固定

B、記錄的長度不固定

C、字段的長度不固定

D、關鍵字項的長度不固定

標準答案:B

知識點解析:不定長文件是指記錄的長度不固定。

二、選擇題(本題共25題,每題1.0分,共25分。)

11、for(intx=0,y=0:!x&&y<=5;y++)語句執行循環的次數是

A、0

B、5

C、6

D、無數次

標準答案:C

知識點解析:本題考核for循環語句。題中x=0,則!x永遠為真,對于條件表達式

“以&&丫〈=5”只考慮"丫<=5”,由于每次循環y都增加1,而且y從。開始到5。所

以可知總共循環了6次,

12、設有以下語句,對a數組元素的引用中(其中0V=iV10)不正確的是int

a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;

A、a[p-a]

B、*(&a[i])

C>p[i]

D、*(*(a+i))

標準答案:D

知識點解析:本題考核數組與指針。A選項中,p為指針,數組名a代表數組的首

地址,所以p-a就是指針到數組首地址的偏移量。B選項中,&a[i]是取數組a中第

i個元素的地址,而對于由指針運算符*的運算規則可知,語句*(&a[i])

就是返回地址&a[i]空間中存放的值,也即a[i]。C)選項,由于指針p已指向數組

a,所以p[i]就等于a川小這是常用的一種數組元素引用方式。D)選項是以指針方

式對數組元素進行引用,由于a只是代表數組的首地址,并不是指針,所以表達式

*(*(a+i))是錯誤的,正確的引用應該為:*(*(p+i)).

13、關于虛函數的描述中正確的是

A、虛函數是一個鄢態成員函數

B、虛函數是一個非成員函數

C、虛函數既可以在函數說明時定義,也可以在函數實現時定義

D、派生類的虛函數與基類中對應的虛函數具有相同的參數個數和類型

標準答案:D

知識點解析:虛函數不能定義為靜態函數;虛函數的作用在于繼承,表現出動態

性。所以,在派生類中定義的虛函數必須和基類中對應的虛函數具有相同的參數個

數和類型。

14、若執行下面的程序時,從鍵盤上輸入5和2,則輸出結果是()。

include(iostream.h)voidmain(){inta,b,k;cin>>a>>b;k=a:if(a<B)k=

a%b;elsek=b%a;cout<<k<<endl;}

A、5

B、3

C、2

D、0

標準答案:C

知識點解析:本題考查簡單的if…else語句。先執行條件if(aVb),顯然不成立,

則執行else語句。

15、下列程序執行后的輸出結果是voidfuncl(inti);voidfunc2(inti);char

st[]="hello,friend!,1;voidfund(inti){cout<<st[i];if(i<3){i+=2;func2(i);})void

func2(inti){cout<<st(i];if(i<3){i+=2;funcl(i);}}main(){inti=0;fund(i);cout<<

endl;)

A、hello

B、hel

C、hlo

D、him

標準答案:C

知識點解析:本題考察潴歸調用。分析fund可知,當i=0時,首先輸出h,然后i

變為2,調用func(2),則輸出str[2],應為1。分析到此就可以排除選項A和B。

然后調用nmcl(4),此時輸出sir[4],為o,故正確答案為C。

16^下列程序執行結果是#inckide<iostream.h>classA{public:inta;

A():a(10){tout<<a<<endl;}};voidmain(){Aobj1;Aobj2(objl);cout<<"H<<

obj2.a<<endl;}

A、1010

B、編譯錯誤缺少拷貝構造函數

C、10隨機數

D、隨機數隨機數

標準答案:A

知識點解析:本題考察考貝構造函數的知識。如果類中沒有實現拷貝構造函數,則

編譯器會為其自動生成一個。對于本題這種簡單對象,默認生成的拷貝構造函數可

以完成數據成員的自動賦值,對于復雜對象,則可能需要顯式定義拷貝構造函數。

17、有以下程序:#include<iostream>usingnamespacestd;classMyClass

{public:MyClass(intn){numbcr=n;}〃拷貝構造函數MyClass(MyClass&othcr)

{number=other.number;)^MyClass(){)private:intnumber;);MyClass

fun(MyClassp)

A、5

B、4

C、3

D、2

標準答案:B

知識點解析:調用拷貝構造函數的情況為:一個新對象被另一個已存在的同類型

對象初始化,當一個對象作為實參傳遵給函數時為初始化形參,要調用拷貝構造函

數。在函數值返回時形參的生命期結束時它的析構函數被調用,在函數返回一個對

象時調用拷貝構造函數。符合以上條件的有:用對象objl來初始化obj3;obj3作為

實參被傳入,函數fun返回一個對象時,系統用返回值初始化一個匿名對象時調用

了拷貝構造函數。總共調用4次。

18、若有如下程序段:#includeusingnamespacestd;intmain()

{char*p="abcdc龜h”,*r;r=p:cout?*r<

A、a

B、b

C、c

D、d

標準答案:A

知識點解析:字符指針p指向“abcdcfgh”字符串,語句“r=p;”是r指向p指向的字

符串,而*r則是指向字符串中的第一個字符。即a,

19^下面程序的運行結果是()。#include<iostream.h>intx=5:intfun(inta){int

c;C=X*a;returnc;|voidmain(){intx=3,a=4;x=x+fun(a);cout<<"x",,<<

X<<endl;}

A、x=15

B、x=17

C、x=23

D、x=25

標準答案:4

知識點解析:暫無解析

20、已知小寫字母/的ASCII碼為97,以下程序的結果是ochara=32,

b=68:cout<<(a|b);

A、b

B、98

C、d

D、100

標準答案:4

知識點解析:暫無解析

21、在一個類體的下列聲明中,正確的純虛函數聲明是。

A、virtualvoidvF()=0;

B、voidvf(int)=O;

C、virtualintvf(int);

D^virtualvoidvf(int)^

標準答案:1

知識點解析:虛函數聲明,語法定義;virtual返回類型函數名(參數表)=0

22、以下for語句中不是死循環的是

A、for(inti=0;i<1;++);

B、for(inti=0::++);

C^for(inti=l;i>0;++i):

D、for(;;);

標準答案:1

知識點解析:f。「循環的一般格式為for(初始化部分;終止條件判斷部分:迭代部

分){循環體;}說明如下:for循環開始時,首先執行初始化操作,然后判斷終止條

件是否滿足,如果滿足,則執行循環體中的語句,最后執行迭代部分。完成一次循

環后,重新判斷終止條件。注意:在for語句中,如果省略了終止條件判斷部分,

開且在語句中沒有break,或者是終止條件判斷部分始終沒有終止,都將出現死循

環。注意:for循環語句可由while循環語句來代替。

23、下列定義中p指向的地址可更改,但*p不能夠更改的是

A、constint*p;

B、int*constp;

C^constint*constp;

D、int*p;

標準答案:1

知識點解析:constint*p;是只能改變指針地址,im*constp;是只能改變*p的內

容,constint*constP;是指針的地址和*p的內容都不能改變,int*p;是兩者都能

改變。

24、#include<iostream.h>floatfun(intx,inty){return(x+y);)void

main(){inta=2,b=5,c=8;cout<<fun((int)fun(a+c,b),a-c);}程序運行后的輸

出結果是()。

A、編譯出錯

B、9

C、21

D、9

標準答案:2

知識點解析:暫無解析

25、C++語言對C語言做了很多改進,C++語言相對于C語言的最根本的變化是

A、增加了一些新的運算符

B、允許函數重載,并允許設置缺省參數

C、規定函數說明符必須用原型

D、引進了類和對象的概念

標準答案:8

知識點解析:C++語言最重要的特點是其為一種面向對象的程序設計語言,但是

C++語言也包含了全部的C語言的特征。

26、關于類模板,下列表述不正確的是

A、用類模板定義一個對象時,不能省略實參

B、類模板只能有虛擬類型參數

C、類模板本身在編譯中不會生成任何代碼

D、類模板的成員函數都是模板函數

標準答案:2

知識點解析:本題考核類模板的概念。類模板就是一系列相關類的模型或樣板,這

些類的成員組成相同,成員函數的源代碼形式相同,所不同的只是所針對的類型

(成員的類型以及成員函數的參數和返I川值的類型)0C柑中可以為類模板的參數設

也默認值,所以B)選項是不正確的,其他選項的表述都是正確的。

27、下列對變量的引用中,錯誤的是

A、inta;int&p=a;

B、chara;char&p=a;

C、ihta;int&p;p=a;

D、floata;float&p=a;

標準答案:4

知識點解析:本題考核引用的定義和初始化。引用具有如下特點:引用能夠使用任

何合法變量名:引用不是變量,所以必須在定義時初始化,而且一旦初始化之后,

就不能再成為其他變量的引用;引用不是值,不占存儲空間,說明引用時,目標

的存儲狀態不會改變。所以,引用只有說明,沒有定義;引用僅在說明時帶有

'&',以后就像普通變量一樣使用,不能再帶在C選項中,由于在定義引用

p后沒有進行初始化,所以此語句錯誤。

28、假定MyClass為一個類,那么下列的函數說明中,()為該類的析構函數。

A^void^MyCIass();

B、~MyClass(intn);

C、MyClass();

D、~MyClass();

標準答案:8

知識點解析:本題考核類的析構函數。在C++中,析構函數名為符號“?”加類名,

析構函數沒有參數和返回值。根據以上知識可知,MyClass類的正確析構函數的說

明為?MyClass。。

29、在C++語言中函數返回值的類型是由()決定的。

A、調用該函數時系統臨時

B、return語句中的表達式類型

C、定義該函數時所指定的函數類型

D、調用該函數時的主調函數類型

標準答案:4

知識點解析:本題考查對函數定義的掌握程度。函數類型決定了函數返回值的類

型。函數值返回類型可以由編譯器自動完成類型轉換。在函數有返回值的調用中,

編譯器將return后面的表達式的類型強制轉換為該函數定義時指定的返回值類型。

30、下面關于成員函數重載運算符和友元函數重載運算符相同的是

A、成員函數和友元函數可重載的運算符是不相同的

B、成員函數和友元函數再載運算符時都需要用到ihis指針

C、成員函數和友元函數重載運算符時都需要聲明為公有的

D、成員函數和友元函數重載運算符時的參數町能是相同的

標準答案:1

知識點解析:成員函數和友元函數可重載的運算符有些相同的,有些是不同的,友

元函數沒有thi*指針,二者重載相同運算符時的參數肯定是不同的,成員函數重載

運算符時都必須聲明為公有的。注意:友元函數的聲明關健字是friend。

31、若有語句int*poini,a=4;和point=&a;下面均代表地址的一組選項是

a,point,*&a

B、&*a,&a,*point

C、*&point,*point,&a

D^&a,&*point,point

標準答案:8

知識點解析:是求址運算符,是指針變量的說明符,說明該變量只能存放

所定義類型變量的地址。木題中選項D)中的第一和第三項所表達的是同樣的意

思。注意:選項A)中a是一個整型變量。選項B)中&*a等價于a,*point是指針

變量所指的內容。選項C)中也是同理。注意:在指針運算中,&和*的作用相互

抵消。

32、關于靜態數據成員的描述中正確的是

A、類的靜態數據成員不是類的所有對象共享的數據

B、類的靜態數據成員不能被類的成員函數調用

C、類的靜態數據成員不能被類的構造函數調用

D、類的靜態數據成員必須進行初始化

標準答案:8

知識點解析:C++類中的靜態成員變量是該類中所有對象所共有的,它能夠被類中

的任何函數調用,所以選項A,選項B,選項C是錯誤的。而類的靜態數據成員

是必須要進行初始化才能使用的。

33、有以卜程序main(intargc,chara*argv[]){intn,i=O;

while(argv[l][i]!='\0'){n=fun();i++;}cout<<n*argc<<

endl;)intfun(){staticints=0;s+=l;

returns;}假設程序經編譯、連接后生成可執行文件exam.exe,

若鍵入以下命令行exam123V回車〉則運行結果為

A、6

B、8

C、3

D、4

標準答案:A

知識點解析:本題考察靜態變量的使用規則。考生需要注意的是s為靜態變量,每

次進入fun函數時s還俁留使用原來的值,因此while循環將最終返回的是各位數

之和,而argc表示參數的個數,此處為1,因此正確答案為A。

34、已知類A有公用數據成員a,并重載了=運算符,且有Aobj2;constA*

ptr=newA;則下列語句錯誤的是

A、ptr->a=100;

R、ptr=&obj2;

C、ptr++;

D、obj2=*ptr;

標準答案:A

知識點解析:本題考察const修飾符的作用。注意;const位置不同,其修飾的部分

也是不同的。本題中consl修飾的是ptr所指的對象本身,所以,ptr是可以重新指

向新的對象,而ptr->a則無法被更新。

35、在ios中提供的格式控制標志位中,()是轉換八進制的。

A、hex

dec

C、oct

D、bin

標準答案:A

知識點解析:ocl八進制。

三、公共基礎填空題(本題共5題,每題1.0分,共5

分。)

36有如下程序:#include<iostream>usingnamespacestd;classA{public:A(){cout

<<"A";J);classB:privateA{public:B(){cout<<,B,;}};intmain(){Aa;Bb;return

0;}這個程序的輸出結果是o

標準答案:AAB

知識點解析:暫無解析

37、數據的邏輯結構在計算機存儲器內的表示,稱為數據的【】。

標準答案:存儲結構

知識點解析:數據的邏輯結構在計算機存儲器內的表示,稱為數據的存儲結構。

38、派生類中的成員不能直接訪問基類中的成員。

標準答案:私有

知識點解析:派生類成員在私有繼承方式下不能訪問基類的所有成員,在保護繼承

方式下不能訪問基類的私有成員,在公有繼承方式下不能訪問基類的私有成員。

39、在最壞情況下,堆排序需要比較的次數為【】。

標準答案:O(nlog2n)

知識點解析:在最壞情況下,冒泡排序所需要的比較次數為n(n-l)/2;簡單插入排

序所需要的比較次數為n(n-1)/2;希爾排序所需要的比較次數為O(nl.5);堆排序所

需要的比較次數為O(nlog2n)。

40、設一棵完全二叉樹共有700個結點,則在該二叉樹中有【】個葉子結點。

標準答案:350

知識點解析:在任意一棵二叉樹中,度為0的結點〔即葉子結點)總是比度為2的結

點多一個。根據完全二叉樹的定義,在一棵完全二叉樹中,最多有1個度為1的結

點。因此,設一棵完全二叉樹具有n個結點,若n為偶數,則在該二叉樹中有n/2

個葉子結點以及n/2-l個度為2的結點,還有1個是度為1的結點;若n為奇數,

則在該二叉樹中有[n⑵+1個葉子結點以及[n/2]個度為2的結點,沒有度為1的結

點。本題中,完全二叉樹共有700個結點,700是偶數,所以,在該二叉樹中有

350個葉子結點以及349個度為2的結點,還有1個是度為I的結點。本題的正確

答案為350。

四、填空題(本題共70題,每題1.0分,共10分。)

41、下列程序的輸出結果是o#include<ioslream.h>classbase{intx,y;

public:base(inti,intj){x=i;y=j;}virtualintadd(){returnx+y;}};classlhree:publicbase

{intz;public:ihree(inti,intj,intk):base(i,j){z=k;)intadd(){return(base::add()+z);|);

voidmain(){three*q=newthrce(10,20,30);cout<<q->add()<<cndl;)

標準答案:60

知識點解析:本題考察繼承中子類對父類的繼承方式,注意子類的add成員函數,

它直接使用了父類的成員函數進行運算。

42、在下面程序的橫線處填上適當的語句,使程序執行后的輸出結果為ABCD。

#includeusingnamespacestd;classA{public:A(){cout?4A\));class

B=(public:B(){cout?<B,;}};classC:{public:

C(){cout?tC,;));classD:publicB,publicC{public:D(){ctout?tD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論