國家二級C++機試(選擇題)模擬試卷34_第1頁
國家二級C++機試(選擇題)模擬試卷34_第2頁
國家二級C++機試(選擇題)模擬試卷34_第3頁
國家二級C++機試(選擇題)模擬試卷34_第4頁
國家二級C++機試(選擇題)模擬試卷34_第5頁
已閱讀5頁,還剩41頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

國家二級C++機試(選擇題)模擬試卷

第1套

一、選擇題(本題共22題,每題1.0分,共22分。)

1、下列符號中,正確的C++標識符是()。

A、enum

B、lOObit

C、s-1

D、int

標準答案:D

知識點解析:此題考查的是C++語言中標識符的概念。標識符是由數字、字母以

及下劃線構成,其第一個字符必須是字母或下劃線,中間不能有空格;標識符的長

度是任意的,但由于編譯系統的限制一般不超過31個字符;標識符中的大小寫字

母是不同的:定義標識符時不能采用系統的保留字。

2、下列敘述中正確的是()。

A、在棧中,棧中元素隨棧底指針與棧頂指針的變化而動態變化

B、在棧中,棧頂指針不變,棧中元素隨棧底指針的變化而動態變化

C、在棧中,棧底指針不變,棧中元素隨棧頂指針的變化而動態變化

D、上述三種說法都不對

標準答案:C

知識點解析:在棧中,允許插入與刪除的一端稱為棧頂,而不允許插入與刪除的另

一端稱為棧底。棧跟隊列不同,元素只能在棧頂壓入或彈出,棧底指針不變,棧中

元素隨棧頂指針的變化而動態變化,遵循后進先出的規則。

3、下列選項中,正確的C++表達式是()。

A、counter+4-3

B、elements+

C、a+=b

D、'a'=b

標準答案:C

知識點解析:在C++中山一個或多個操作數與操作符連接而成的有效運算式稱為

表達式。選項C是C++的合法表達式。

4、下列敘述中正確的是()。

A、線性表的鏈式存儲結構與順序存儲結構所需要的存儲空間是相同的

B、線性表的鏈式存儲結構所需要的存儲空間一般要多于順序存儲結構

C、線性表的鏈式存儲結構所需要的存儲空間一般要少于順序存儲結構

D、上述三種說法都不對

標準答案:B

知識點解析:線性表的存儲分為順序存儲和鏈式存儲。在順序存儲中,所有元素所

占的存儲空間是連續的,各數據元素在存儲空間中是按邏輯順序依次存放的。所以

每個元素只存儲其值就可以了,而在鏈式存儲的方式中,將存儲空間的每一個存儲

結點分為兩部分,一部分用于存儲數據元素的值,稱為數據域;另一部分用于存儲

下一個元素的存儲序號,稱為指針域。所以線性表的鏈式存儲方式比順序存儲方式

的存儲空間要大一些。

5、對下列二叉樹進行前序遍歷的結果是()。

A、DYBEAFCZX

B、YDEBFZXCA

C、ABDYECFXZ

D、ABCDEFXYZ

標準答案:C

知識點解析:二叉樹前序遍歷的簡單描述:若二叉樹為空,則結束返回;否則:

①訪問根結點;②前序遍歷左子樹;③前序遍歷右子樹。可見,前序遍歷二叉樹

的過程是一個遞歸的過程。根據題目中給出的二叉樹的結構可知前序遍歷的結果是

ABDYECFXZo

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

A、0(n)

B、0(n2)

C^O(log2n)

D、O(nlog2n)

標準答案:C

知識點解析:對于長度為n的有序線性表,在最壞情況下,二分法查找只需比較

log2n次,而順序查找需要比較n次。

7、在面向對象方法中,實現信息隱蔽是依靠

A、對象的繼承

B、對象的多態

C、對象的封裝

D、對象的分類

標準答案:c

知識點露析:對象的封裝性是指從外部看只能看到對象的外部特征,即只需知道數

據的取值范圍和可以對該數據施加的操作,而不需要知道數據的具體結構以及實現

操作的算法。對象的內部,即處理能力的實行和內部狀態,對外是不可見的。從外

面不能直接使用對象的處理能力,也不能直接修改其內部狀態,對象的內部狀態只

能由其自身改變。

8、Sample是一個類,執行下面語句后,調用Sample類的構造函數的次數是(

*

Samplea[2],P=newSample;

A、0

B、1

C、2

D、3

標準答案:D

知識點解析:在C++中,聲明一個類對象時,編譯程序需要調用類的構造函數為

對象分配存儲空間,進行必須的初始化。在本題的這條語句中,聲明了一個

Sample類型的包含2個數組元素的數組a[2],一個指向類Sample對象的指針P,

所以Sample類的構造函數共調用了3次。

9、有如下類聲明:classMyBASE{intk:public:voidset(intn){k=n;)int

getOconst{returnk;));classMyDERIVED:protectedMyBASE{protected:

intj:public:voidset(intm,intn){MyBASE::set(m);j=n;)int

getoconst{returnMyBASE::getO+j;));則類MyDERIVED中保護的數據成員

和成員函數的個數是()c

A、4

B、3

C、2

D,1

標準答案:B

知識點解析:此題考查的是派生與繼承中的訪問權限。protected派生:private->不

可見:protectcd->priVate;publicprotected。

10、在下列橫線處應添加的語句是O。classBase)public:voidfun(){cout<<

"Base::fun"<<endl;));classDerived:publicBase{public:voidfun(){//

顯示調用基類的fun函數coutVV”Derivcd::fiinyVendl;}};

A、Derived::fun

B、Base::fun();

C>Pubic::fun

D、fun();

標準答案:B

f();Obj*ob3=newObj;coul<<ob3—>getVal();deleteob3;cout<<Obj::

getVal();return0;}程序的輸出結果是()。

A、232

B、231

C、222

D、221

標準答案:D

知識點解析:此題考查的是靜態成員。本題中,Obj類定義了一個靜態數據成員

i,并初始化為0.在主函數中,首先定義了1個該類對象。bl,所以構造函數被調

用1次,i加1;然后調用函數f(),該函數中又定義了一個對象0b2,此時i再次加

1變為2,然后通過函數getVal。輸出i的值2。f()函數結束,ob2變量被釋放,故析

構函數被調用了1次,i變成1;回到主函數中,又動態創建了1個對象并讓ob3

指向它,此后i變成2并輸出。最后釋放動態創建的對象i變為1,輸出1。故最終

的輸出結果是221。

15、有如卜程序:#include<iostream>usingnamespacestd;classBase{public:

voidfun(){cout<<"Base::fun"<<endl;}};classDerived:publicBase

(public:voidfun(){cout<<"Derived::fun"<<endl:}};int

main(){Derivedd;d.fun();return0;}己知其執行后的輸出結果為:Base::

funDerived::fun則程序中下劃線處應填入的語句是()。

A、Base.fun();

B、Base::fun();

C^Base->fun();

D、fun();

標準答案:B

知識點解析:此題考查的是繼承的使用。分析題目可知,橫線處應填入對基類成員

函數fun()的調用語句,此處只能使用作用域運算符“::”才能調用到基類的同名

函數,故選項B正確。

16^有如下程序:#includeusingnamespacestd;classCl{public:?

Cl(){cout?l;)):classC2:publicCl(public:^C2()(cout?2;)};int

main(){C2cb2;Cl*cbl:return0;}運行時的輸出結果是()。

A、121

B、21

C、211

D、12

標準答案:B

知識點解析:在主函數中定義C2類的對象,當程序結束時,首先調用C2類的析

構函數?C2,輸出2,再調用C1類的析構函數?C1,輸出1。所以程序運行的結

果就是21。

17、下列關于析構函數的描述中,錯誤的是()。

A、析構函數可以重載

B、析構函數由系統自動調用

C、每個對象的析構函數只被調用一次

D、每個類都有析構函數

標準答案:A

知識點解析:一般情況下,析構函數在對象的生存周期即將結束的時候由系統自動

調用。在調用完成之后,對象也就消失了,相應的內存空間也被釋放。析構函數沒

有參數,因此析構函數不能重載,一個類中只能定義一個析構函數。

18、有如下程序:#include<iostream>usingnamespacestd;classXA{ima;

public:staticintb:XA(intaa):a(aa){b++;}intgetA(){returna;}};intXA::

b=0;intmain(){XAdl(4),d2(5);cout<<dl.getA()+d2.getA()+XA::

b+dl.b<<endl;return0;}運行這個程序的輸出結果是()。

A、9

B、11

C、13

D、15

標準答案:C

知識點解析:在類XA的構造函數中,定義了用成員變星a的值初始化變量aa,同

時靜態成員變量b值加1。所以當在主main函數中定義類xA的對象dl(4)后,變

量b的等于1,定義對象d2(5)后,變量b的值等于2,所以表達式

dl.getA()+d2.getA()::b+dl.b等于4+5+1+2+1=13。

19、下列關于運算符重載的敘述中,正確的是()。

A、通過運算符重載機制可以為C++語言擴充新的運算符

B、運算符重載的作用是使已有的運算符作用于類的對象

C、重載運算符的操作數類型可以全部為基本類型

D、所有運算符都可以被重載

標準答案:B

知識點解析:運算符重載就是賦予己有的運算符多重含義。通過重新定義運算符,

使它能夠用于特定類的對象執行特定的功能,這便增強了C++語言的擴充能力。

運算符重載要注意以下3點:①不能重教的運算符包括②必

須重載為成員函數的運算符包括口,(),->,=;③在類成員函數中重載運算符是

不允許返回引用的,會出現“返回局部變量的地址”警告。

20、下面程序中對一維坐標點類Point進行運算符重載#include<ios【ream>using

namespacestd;classPoint{public:Point(intval){x=val,)Point&

operator++(){x++;return"this;}Pointoperator++(int){Pointold=*this;H(*this);retum

old;)IntGetX()const{returnx,}private:intX:);intmain(){Pointa(10);count<<

(++a).GetX();cout<<a++.GetX();retumO;[編譯和運行情況是()。

A、運行時輸出1011

B、運行時輸出1111

C、運行時輸出1112

D、編譯有錯

標準答案:B

知識點解析:此題考查的是重載增1運算符“++”。此題中,Point&operalor++()重我

的是前綴形式,而Poimoperator++(in【)重載的是后綴形式。所以主函數中第1條輸

出語句輸出11,此時a.x的值為11;第2條輸出語句,首先創建了一個Point對象

old保存自身,然后通過語句++(*lhis);調用前綴+的重載函數,因為返回值是改變

前保存的old對象,故仍輸出11。

21、模板對類型的參數叱提供了很好的支持,因此()。

A、類模板的主耍作用是生成抽象類

B、類模板實例化時,編譯器將根據給出的模板實參生成一個類

C、在類模板中的數據成員都具有同樣類型

D、類模板中的成員函數都沒有返回值

標準答案:B

知識點解析:此題考查了類模板的概念。在定義對象的過程中,系統會自動地根據

需要生成相應的類定義,這種依據類模板生成具體類的過程稱為類模板的實例化。

22,下列關于C++流的描述中,錯誤的是()。

A、cout>>,A,表達式可輸出字符A

B、eof()函數可以檢測是否到達文件尾

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

D、以iosbase::out模式打開的文件不存在時,將自動建立一個新文件

標準答案:A

知識點解析:cout是一個標準輸出流對象。>>稱之為提取運算符,它的功能是從

輸入流中提取數據賦值給一個變量。〈V為插入運算符,其功能是把表達式的值插

入到輸出流中。當系統執行coutVVx操作時,首先根據x值的類型調用相應的插

入運算符重載器函數,把x的值傳送給對應的形參,接著執行函數體,把x的值輸

出到顯示器屏幕上,在當前屏幕光標位置處顯示出來,然后返回。stream流,以便

繼續使用插入運算符輸出下一個表達式的值。對于本題來說,耍輸出字符,A,的值

應該寫成coutVV,A,因而選項A)是錯誤的。

國家二級C++機試(選擇題)模擬試卷

第2套

一、選擇題(本題共21題,每題1.0分,共21分。)

1、算法的空間復雜度是指

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

B、算法所處理的數據量

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

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

標準答案:A

知識點解析:算法的空間復雜度是指執行這個算法所需要的內存空間。這個內存空

間包括算法程序所占的空間,輸入的初始數據所占的存儲空間以及算法執行過程中

所需要的額外空間。

2、算法的有窮性是指

A、算法程序的運行時間是有限的

B、算法程序所處理的數據量是有限的

C、算法程序的長度是有限的

D、算法只能被有限的用戶使用

標準答案:A

知識點解析:算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算后即可

完成。有窮性是指算法程序的運行時間是有限的。

3、一個棧的初始狀態為空0現將元素1,2,3,A,B,C依次入棧,然后再依次

出棧,則元素出棧的順序是()。

A、1,2,3,A,B,C

B、C,B,A,1,2,3

C、C,B,A,3,2,1

D、1,2,3,C,B,A

標準答案:C

知識點解析:棧是按照“先進后出”或‘后進先出''的原則組織數據的。所以出棧順序

是CBA321。

4、在對函數進行原型聲明時,下列語法成分中,不需要的是()。

A、函數返回類型

B、函數參數列表

C、函數名

D、函數體

標準答案:D

知識點解析:在c十十中函數在使用之前要預先聲明,這種聲明在標準C++中稱為

函數原型。函數給出了函數名、返回類型以及在調用函數時必須指明參數個數和類

型。

5、下列有關運算符重載的敘述中,正確的是()。

A、運算符重載是多態性的一種表現

B、C++中可以通過運算符重載創造新的運算符

C、C++中所有運算符都可以作為非成員函數重載

D、重載運算符時可以改變其結合性

標準答案:A

知識點解析:重載運算符的規則如下:①C++不允許用戶自己定義新的運算符,只

能對已有的C++運算符進行重我;②C++不能重載的運算符只有5個;③重載不能

改變運算符運算對象的個數;④重載不能改變運算符的優先級和結合性;⑤重載

運算符的函數不能有默認的參數;⑥重載的運算符必須和用戶定義的自定義類型

的對象一起使用,至少應有一個是類對象,即不允許參數全部是C++的標準類

型。故本題答案為A。

6、關于運算符重載,下列表述中正確的是()。

A、C++已有的任何運算符都可以重載

B、運算符函數的返回類型不能聲明為基本數據類型

C、在類型轉換符函數的定義中不需要聲明返回類型

D、可以通過運算符重載來創建C++中原來沒有的運算符

標準答案:C

知識點解析:重載運算符的規則如下:①C++不允許用戶自己定義新的運算符,只

能對已有的C++運算符進行重我;②C++不能重我的運算符只有5個;③重載不能

改變運算符運算對象的個數:④重載不能改變運算符的優先級和結合性:⑤重載

運算符的函數不能有默認的參數;⑥重載的運算符必須和用戶定義的自定義類型

的對象一起使用,至少應有一個是類對象,即不允許參數全部是C++的標準類

型。故本題答案為c。

7、下列描述中正確的是

A、程序就是軟件

B、軟件開發不受計算機系統的限制

C、軟件既是邏輯實體,又是物理實體

D、軟件是程序、數據與相關文檔的集合

標準答案:D

知識點解析:計算機軟件與硬件是計算機系統中相互依存的兩部分。計算機軟件是

包括程序、數據及相關文檔的完整集合。軟件由兩部分組成:一部分是機器可執行

的程序和數據;二是機器不可執行的,與軟件開發、運行、維護、使用等有關的文

檔。軟件具有以下六個特點:①軟件是一種邏輯實體,而不是物理實體,具有抽

象性。②軟件的生產與硬件不同,它沒有明顯的制作過程。③軟件在運行、使用

期間不存在磨損、老化問題。④軟件的開發、運行對計算機系統具有依賴性,受

計算機系統的限制,這導致了軟件移值的問題。⑤軟件復雜性高,成本昂貴。⑥

軟件的開發涉及渚多社會因素。

8、在關系中凡能惟一標識元組的最小屬性集稱為該表的鍵或碼。二維表中可能有

若干個鍵,它們稱為該表的()。

A、連接碼

B、關系碼

C、外碼

D、候選碼

標準答案:D

知識點解析:在關系中凡能惟一標識元組的最小屬性集稱為該表的鍵或碼。二維表

中可能有若干個鍵,它們稱為該表的候選碼或候選鍵。從二維表的所有候選鍵中選

取一個作為用戶使用的鍵稱為主鍵或主碼。

9、建立一個有成員對象的派生類對象時,各構造函數體的執行次序為()。

A、派生類、成員對象類、基類

B、成員對象類、基類、派生類

C、基類、成員對象類、派生類

D、基類、派生類、成員對象類

標準答案:C

知識點解析:建立派生類對象的時候,構造函數的執行順序如下:執行基類的構造

函數,調用的順序按照基類被繼承時候的順序(白左陽右)。然后是執行成員對象的

構造函數,調用順序按照各個成員對象在類中的聲明順序(自上而下),最后是執行

派生類的構造函數。

10、有如下語句序列:charstr[10|;cin>>str;當從鍵盤輸入"Iloveihisgame"

時,str中的字符串是()。

A^Ilovethisgame

B、Ilovethi

C、Ilove

D、I

標準答案:D

知識點解析:由于字符\0作為字符串的結束標志,所以當從鍵盤上輸入“Ilovethis

game”時,只把字母I輸入字符串str。

II、有如卜程序:#include<iostream>usingnamespacestd;intmain(){inti,

s=0;for(i=l:s<20;i+=2)s+=i*i;cout<i<<endl:return0;)運行這個程序

的輸出結果是()。

A、3

B、5

C、7

D、9

標準答案:C

知識點解析:在這段程序中for循環共執行3次,每次循環變量i的值增2,在執

行第三次循環語句時,變量s的值等于25,大于20而退出循環,此時再執行循環

變量i加2運算,所以最后變量i的值等于7。

12>有如下類定義:ciassA{charpublic:A():a(0){}A(char*aa){||把aa所

指字符串拷貝到a所指向的存儲空間a二___;strcpy(a,aa);}~

A()(delete[]a;)};橫線處應填寫的表達式是()。

A、newchar|strlen(aa)+11

char[strlen(aa)+1]

C、char[strlen(aa)]一

D、newchar|sizeof(aa)一1)

標準答案:A

知識點解析:函數strlen(aa)返回字符串aa中字符的個數,不包括末尾的空字

符。所以在內存空間創建字符數組a時,需要字符數組的長度是sirlen(aa)+1。

13、若一個函數的原型為int&y,charz);",則該函數的返回值

類型為()。

A、int*

B、int

C、int&

D、char

標準答案:A

知識點解析:由“int*Xfunl(intx,int&y,charz);”的定義可知,其返回值為指

向int指針的函數。

14、下列函數原型聲明中,錯誤的是()“

A^intfunction(intm,intn);

intfunction(int,int):

C、intfunction(intm=3,intn):

D^intfunction(int&m,int&n);

標準答案:c

知識點謁析:在C++中,函數在使用之前要預先聲明。這種聲明在標準C++中稱

為函數原型,函數原型給出了函數名、返回類型以及在調用函數時必須提供的參數

個數和類型。其語法為:〈返回類型X函數名>(<形參列表〉);使用函數原型說明

有兩種形式:①直接使用函數定義的頭部,并在后而加上一個分號:②在函數原

型說明中省略參數列表中的形參變量名,僅給出函數名、函數類型、參數個數及次

序。在選項C中,給出了形參變量m的初值。

15、若MyClass是一個類名,且有如下語句序列MyClasscl,*c2;MyClass

*c3=ncvvMyClass;MyClass&c4=c1;上面的語句序列所定義的類對象的個數是

()。

A、1

B、2

C、3

D、4

標準答案:C

知識點解析:Cl、*C2、C3是3個MyClass對象,C4是MyClass對象的引用,它

是對象C1的別名。

16、有如下類定義:classSample)public;Samplefintx):ref(x){)//①

private:Sample():ref(O){}//②staticintval=5;//(3)constintref;//

④};①上述程序段中,錯誤的語句是()。

A、②

B、③

C、0

D、

標準答案:C

知識點解析:靜態整型數據不能定義為類的數據成員。

17、已知函數f的原型是“voidf(int*x,int&y);",變量vl、v2的定義是“intvl,

v2;”,下列調用語句中,正確的是()。

A、f(vl,v2);

B、f(vl,&V2);

C、f(&vl,v2);

D、f(&vl,&v2);

標準答案:c

知識點。析:在函數f的形參表達式中第一個形參為整型指針變量,第二個為整型

引用變量,所以用實參vl的指針初始化笫一個形參,用實參v2初始化笫二形參。

18、有如下程序:#include<iostream>usingnamespacestd;classSample{friend

longfun(Samp1es);public:Samp1e(longa)(x=a;}private:longx;);longfun

(Samples){if(s.x<2)rcturn1:returns.x*fun(Sample(s.x—1)):}intmain()

{intsum=0;fbr(int1=0;1<6;I++){sum+=fun(SampIe(i));}coul<<sum,return

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

A、120

B、16

C、154

D、34

標準答案:C

知識點解析:此題考查的是友元函數和遞歸函數。因為fun函數是Sample類的友

元函數,所以fun函數可以直接訪問Sample類對象的私有成員X。主函數調用fun

函數,構造參數為0~5。當n小于2時,fun函數返回1,其余返回值為n*fun(n—

l)on取0—5的值時fun(n)依次為1,1,2,6,24,120,累加結果為154。

19、下列有關繼承和派生的敘述中,正確的是()。

A、如果一個派生類私有繼承其基類,則該派生類對象不能訪問基類的保護成員

B、派生類的成員函數可以訪問基類的所有成員

C、基類對象可以賦值給派生類對象

D、如果派生類沒有實現基類的一個純虛函數,則該派生類是一個抽象類

標準答案:D

知識點解析:此題考查的是繼承和派生。無論是哪種繼承方式,派生類都能夠訪問

基類的公有和保護成員,而不能訪問基類的私有成員,故選項A和B錯誤;公有

繼承時,基類的對象不可作為派生類的對象處理,即基類對象不可賦值給派生類對

象,所以選項C錯誤。

20、為了提高函數調用的實際運行速度,可以將較簡單的函數定義為()。

A、內聯函數

B、重載函數

C、遞歸函數

D、函數模板

標準答案:A

知識點解析:C++引入內聯函數的原因是用它來取代C中盼預處理宏函數。兩者的

區別在于,宏函數是由預處理器對宏進行替換,而內聯函數是通過編譯器來實現

的。內聯函數在調用時像宏函數一樣展開,所以它沒有一般函數的參數壓棧和退棧

操作,減少了調用開銷,因此,內聯函數比普通函數有更高的執行效率。

21、下列關于運算符重載的描述中,正確的是()。

A、運算符重載為成員函數時,若參數表中無參數,重載的是一元運算符

B、一元運算符只能作為成員函數重載

C、二元運算符重載為非成員函數時,參數表中有一個參數

D、C++中可以重載所有的運算符

標準答案:A

知識點解析:此題考查的是運算符的重載。運算符重載為成員函數時,形參個數?

般為運算符元數減1;直載為非成員函數時,形參個數一般和運算符元數相等,所

以二元運算符重載為非成員函數時,參數表中應有兩個參數,C選項錯誤:運算符

重載為成員函數,若參數表中無參數,重載的是一元運算符,選項A正確:一元

運算符中,”(取負)、"+十”、等均可重載為成員函數:C++語言中,

*,,、,,一>*,,、,,,,,,、"?:"五個運算符不能重載“

國家二級C++機試(選擇題)模擬試卷

第3套

一、選擇題(本題共"題,每題1.0分,共19分。)

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

A、循環隊列

B、帶鏈隊列

C、二叉樹

D、帶鏈棧

標準答案:C

知識點解析:根據數據結構中各數據元素之間的前后件關系的復雜程度,一般將數

據結構分為兩大類:線性結構和非線性結構。循環隊列、帶鏈隊列和帶鏈棧都是線

性結構,而二叉樹是非線性結構。

2、一個棧的初始狀態為空。現將元素I、2、3、4、5、A、B、C、D、E依次入

棧,然后再依次出棧,則元素出棧的順序是()。

A、12345ABCDE

13、EDCBA54321

C、ABCDE12345

D、54321EDCBA

標準答案:B

知識點解析:棧是按照“先進后出”或“后進先出”的原則組織數據的。所以出棧順序

是EDCBA54321。

3、下列對于線性鏈表的描述中正確的是

A、存儲空間不一定連續,且各元素的存儲順序是任意的

B、存儲空間不一定連續,且前件元素一定存儲在后件元素的前面

C、存儲空間必須連續,且前件元素一定存儲在后件元素的前面

D、存儲空間必須連續,且各元素的存儲順序是任意的

標準答案:A

知識點解析:一般來說,在線性表的鏈式存儲結構中,各數據結點的存儲序號是不

連續的,并且各結點在存儲空間中的位置關系與邏輯關系也不一致。在線性鏈表

中,各數據元素之間的前后件關系是由各結點的指針域來指示的,指向線性表中第

一個結點的指針head稱為頭指針,當head=NULL(或0)時稱為空表。

4、通過運算符重載,瓦以改變運算符原有的()。

A、操作數類型

B、操作數個數

C、優先級

D、結合性

標準答案:A

知識點解析:重載運算符的規則如下:①C++不允許用戶自己定義新的運算符,只

能對已有的C++運算符進行重載;②C++不能重載的運算符只有5個;③重載不能

改變運算符運算對象的個數;④重載不能改變運算符的優先級和結合性;⑤重載

運算符的函數不能有默認的參數;⑥重載的運算符必須和用戶定義的自定義類型

的對象一起使用,至少應有一個是類對象,即不允許參數全部是C++的標準類型。

故本題答案為A。

5、已知函數f的原型是voidlong&b);,變量vl、v2的定義是:intvl;

loongv2;下列調用語句中正確的是()。

A、f(vl,&v2);

B、f(vl,v2);

C、f(&vl,&v2);

D、f(&vl,v2);

標準答案:D

知識點解析:此題考查的是函數的調用。因為變量的定義是imvl;longv2,而函

數f()的第一個參數是指針,第二個參數是引用,所以選項D為正確引用。

6、下面不屬于需求分析階段任務的是()。

A、確定軟件系統的功能需求

B、確定軟件系統的性能需求

C、需求規格說明書評審

D、制定軟件集成測試計劃

標準答案:D

知識點解析:需求分析階段的工作可分為4個階段:需求獲取、需求分析、編寫需

求規格說明書、需求評審。

7、若實體A和B是一對多的聯系,實體B和C是一對一的聯系,則實體A和C

的聯系是()。

A、一對一

B、一對多

C、多對一

D、多對多

標準答案:B

知識點解析:由于B和C有一一對應的聯系,而A和B只間有一對多的聯系,則

通過關系之間的傳遞,則A和C之間也是一對多的聯系。

8、有如下類聲明:classMyBASE{inik;public:voidset(intn){k=n;)int

get()const{returnk;});classMyDERIVED:protectedMyBASE{protected:int

j;public:voidsct(intm,intn){MyBASE::set(m);j=n;)intget()const{return

MyBASE::get()+j;}};則類MyDERIVED中保護的數據成員和成員函數的個

數是()。

A、4

B、3

C、2

D、1

標準答案:B

知識點解析:因為在保于繼承的情況下,基類中的公有成員voidset(intn)和int

gct()const在派生類中是保護成員,再加上派生類自身的保護成員i,一共是三個保

護成員。

9、在一個派生類的成員函數中,試圖調用其基類的成員函數“voidf();”,但無法

通過編譯。這說明()。

A、f()是基類的私有成員

B、f()是基類的保護成員

C、派生類的繼承方式為私有

D、派生類的繼承方式為保護

標準答案:A

知識點解析:在派生類對基類的三種繼承形式中,都無法對基類的私有成員訪問A

正確。在B中,三種繼承方式都能訪問基類的保護成員,故B不正確。C選項的

情況在f()是基類私有成員情況下是對的,但是還有別的可能,并不一定正確。同

樣D也不一定正確。

10、下列各組類型聲明符中,含義相同的一組是(),

A、unsignedlongint和long

B、signedshortint和short

C、unsignedshort和short

D、shortint和int

標準答案:B

知識點解析:此題考查的是基本類型和派生型。C十十語言中,基本類型的字長及其

取值范圍可以放大和縮小,改變后的類型就叫做基本類型和派生類型。本題A選

項中,unsignedlongint的省略形式為unsignedlong:選項B中,signedshortint的

省略形式是short;選項C中,unsignedshort的省略形式是unsignedshort:選項D

中,shortint的省略形式是shorto

11、在一棵二叉樹上,第5層的結點數最多是()。

A、8

B、9

C、15

D、16

標準答案:D

知識點解析:根據二叉樹的性質:二叉樹第i(i三)層上至多有2M個結點。得到第

5層的結點數最多是16個。

12、下列關于派生類和基類的描述中,正確的是(),

A、派生類成員函數只能訪問基類的公有成員

B、派生類成員函數只能訪問基類的公有和保護成員

C、派生類成員函數可以訪問基類的所有成員

D、派生類對基類的默認繼承方式是公有繼承

標準答案:B

知識點解析:派生類不論是采用那種繼承方式繼承基類,它的成員函數只能訪問基

類的公有成員和保護成員。

13、有如下兩個類定義:classAA{);classBB{AAvl,*v2;BBv3:

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

A、vl

B、v2

C、v3

D、v4

標準答案:c

知識點解析:在定義類的數據成員時,類中的數據成員可以是任意類型,包括整

型、浮點型、字符符型、數組、指針和引用等,也可以是對象。但是要注意,只有

另外一個類的對象,才可以作為該類的成員,即作為類的成員對象存在。自身類的

對象是不可以作為自身類的成員存在,但自身類的指針可以。對于本題,在定義類

BB時,不能包括其對象v3。

14、if語句的語法格式可描述為:格式1:if(〈條件〉)V語句〉或格式2:if(V

條件〉)V語句l>elseV語句2>關于上面的語法格式,下列表述中錯誤的是()。

A、V條件>部分可以是一個if語句,例如if(if(a=O-)…)…

B、V語句,部分可以是一個if語句,例如if(…)if<…)…

C、如果在V條件〉前加上邏輯非運算符!并交換V語句1>和V語句2>的位置,

語句功能不變

D、V語句〉部分可以是一個循環語句,例如if(…)while(…).…

標準答案:A

知識點解析:此題考查的是if語句。If語句的條件部分是一個表達式而不是語句,

因此選項A敘述錯誤。

15、有如下程序:#include<iostream>#include<cstfing>usingoamespacestd;

classXCF{inta;public:XCF(intaa=0):a(aa){coutVV'T';}

,,,,

XCF(XCF&x){a=x.a;cout<<2;)-XCF(){coui<<a;}int

Geta(){returns:)):infmain(){XCFdi(5),d2(d1):XCF*pd=newXCF(X):emit

<<pd->GctaO;deletepd;return0;}運行時的輸出結果是()。

A、1215588

B、1218855

C、12185

D、128512

標準答案:B

知識點解析:在這個程序中在建立對象dl(5)時,調用構造函數XCF(imaa=0):

a(aa){tout<<,'l";),輸出1;在建立d2(dl)時,調用拷貝構造函數

XCF(XCF&x)(a=x.a;cout<<"2";),輸出2;在建立newXCF(8)對象時,調用

構造函數XCF(intaa=0):a(aa){cout<<nr';},輸出1;語句couiVVpd->Geia()

的功能是輸出8;語句deleiepd;調用析構函數?XCF(),輸出8;當退出程序時,

分別釋放對象d2、dl,輸出55。

16^有如下程序:#includeusingnamespacestd;classAA{public:

AA(){cout?x1x;)};classBB:publicAA{intk:public:BB():

k(0){cout?’2';)BB(intn):k(n){cout?’3';}};intmain(){BBb(4),c;

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

A、1312

B、132

C、32

D、1412

標準答案:A

知識點解析:在基類AA的默認構造函數中,輸出字符“二在繼承類BB的默認構

造函數中,輸出字符,2、在帶有參數n的構造函數中,輸出字符,3,在主函數

中,在創建BB的對象b(4)時,會首先調用基類AA的構造函數輸出字符”、再調

用類BB帶參數的構造函數輸出字符,3、在創建BB的對象c時,會首先調用基類

AA的構造函數輸出字符”"再調用類BB默認的構造函數輸出字符2,所以程序

輸出的結果為1312o

17、若要對類BigNumber中重載的類型轉換運算符long進行聲明,下列選項中正

確的是()。

A、operatorlong()const;

B、operatorlong(bigNumber);

C、longoperatorlong()const:

D、longoperatorlong(BigNumber);

標準答案:A

知識點解析:在重載類型轉換符時,由于運算符本身已經表示出返回值類型,因此

不需要返回值類型的聲明。

18、要利用C++流實現輸入輸出的各種格式控制,必須在程序中包含的頭文件是

()。

A、fstream

B、istreara

C、ostream

D、iomanip

標準答案:D

知識點解析:要使用seiw、fixed等操作符,須包含iomanip這個文件。

19、有如下程序:#include<iostream>#include<iomanip>usingnamespace

std:intmain(){cout<<setfill(,#,)<<setw(4)<<'OK"<<123<<endl;return

0;}運行這個程序的輸出結果是()。

A、##OKI23

B、##OK#123

C>OK##123

D、OK##123#

標準答案:A

知識點解析:setfill是設置填充字符,setw設置輸出的寬度,它們的作用表現在緊

接著輸出的字符串上。這個寬度是填充后的寬度。所以coutVVsetfill(,#,)<<

setw,(4)VV“OK”VV123中,selfill和seiw只作用在“0K“,表示在“0K”前面

填充2個存撐。

國家二級C++機試(選擇題)模擬試卷

第4套

一、選擇題(本題共23題,每題1.0分,共23分。)

1、字面常量42、4.2、42L的數據類型分別是()。

A、long,double,int

B、long,float,int

C、int,double,long

D、int,float,long

標準答案:C

知識點解析?:此題考查的知識點是字面常量。對于整型字面常量,要沒有超過

C++中整數所能表示的范圍,C+十將自動按整數來存儲此數,也可以通過在整型

字面常量后添加u或1來指定無符號整數或長整數來存儲;對于實型字面常量,

C++將自動按照雙精度數來存儲,也可以通過在實型字而常量后添加f來指定按單

精度數存儲。

t,

2、有如下程序段:inli=5;while(inti=0){cout<<*;i-;)運行時輸出“*”的個

數是()。

A、0

B、1

C、5

D、無窮

標準答案:A

知識點解析:岡為while循環中,岡為i的值等于0,所以while循環體一次也不執

行。岡而運行時輸出“”的個數是0。

3、下列選項中不屬于結構化程序設計方法的是()。

A、自頂向下

B、逐步求精

C、模塊化

D、可復用

標準答案:D

知識點解析:結構化程序設計方法的主要原則可以概括為:自項向下,逐步求精,

模塊化,限制使用got。語句。自頂向下是指程序設計時應先考慮總體,后考慮細

節;先考慮全局目標,后考慮局部目標。逐步求精是指對復雜問題應設計一些子目

標過渡,逐步細化。模塊化是把程序要解決的總目標先分解成分目標,再進一步分

解成具體的小目標,把每個小目標稱為一個模塊。可復用性是指軟件元素不加修改

成稍加修改便可在不同的軟件開發過程中重復使用的性質。軟件可復用性是軟件工

程追求的目標之一,是提高軟件生產效率的最主要力法,不屬于結構化程序設計方

法。

4、軟件按功能可以分為:應用軟件、系統軟件和支撐軟件(或工具軟件)。下面屬

于系統軟件的是()。

A、編輯軟件

B、操作系統

C、教務管理系統

D、瀏覽器

標準答案:B

知識點解析?:軟件根據應用目標的不同,是多種多樣的。軟件按功能可以分為:應

用軟件、系統軟件、支撐軟件(或工具軟件)。應用軟件是為解決特定領域的應用而

開發的軟件。系統軟件是計算機管理自身資源,提高計算機使用效率并為計算機用

戶提供各種服務的軟件。支撐軟件是介于系統軟件和應用軟件之間,協助用戶開發

軟件的工具性軟件,包括輔助和支持開發和維護應用軟件的工具軟件,還包括輔助

管理人員控制開發進程和項目管理的工具軟件。

5、下面不能作為結構化方法軟件需求分析工具的是()。

A、系統結構圖

B、數據字典(D)

C、數據流程圖(DFD圖)

D、判定表

標準答案:A

知識點解析:按照DeMarco的定義,“結構化分析就是使用數據流圖(DFD圖)、數

據字典(DD)、結構化英語、判定表和判定樹等工具,來建立一種新的、稱為結構

化規格說明的目標文檔。”系統結構圖不能作為結構化方法軟件需求分析工具。

6、有如下程序:#includeusingnamespacestd;classBase{public:Base(int

x=0){cout<<x;));classDerived:publicBase{public:Derived(intx=0){cout<

<x;)private:Baseval:);intmain(){Derivedd(l);return0:}程序的輸出結

果是()。

A、0

B、1

C>01

D、001

標準答案:D

知識點解析:此題考查的是類的構造。建立類的對象時,構造函數的執行順序如

下:執行基類的構造函數,調用順序按照各個基類被繼承時聲明的順序(自左向

右).>執行成員對象的構造函數,調用順序按照各個成員對象在類中聲明的順

序.>執行自身的構造函數。本題中,首先會構造基類Base,調用Base類的構造

函數,輸出0;然后還定義了一個Base類的對象,再次調用Base類的默認構造函

數輸出0;最后構造自身,因主函數中傳入了構造參數I,所以輸出1。故最后輸

出結果是:001。

7、一個工作人員可使用多臺計算機,而一臺計算機被多個人使用,則實體工作人

員與實體計算機之間的聯系是()。

A、一對一

B、一對多

C、多對多

D、多對一

標準答案:c

知識點解析:如果一個工作人員只能使用一臺計算機且一臺計算機只能被一個工作

人員使用,則關系為一對一;如果一個工作人員可以使用多臺計算機,但是一臺計

算機只能被一個工作人員使用,則關系為一對多;如果一個工作人員可以使用多臺

計算機,一臺計算機也可以被多個工作人員使用,則關系為多對多。

8、由于常對象不能被更新,因此()。

A、通過常對象只能調用它的常成員函數

B、通過常對象只能調用靜態成員函數

C、常對象的成員都是常成員

D、通過常對象可以調用任何不改變對象值的成員函數

標準答案:A

知識點解析:此題考查的是常對象與常成員函數的概念「使用const關鍵字修飾的

對象稱為常對象,它不能被更新,所以常對象只能調用常成員函數而不能調用其它

成員函數;使用consl關鍵字聲明的成員函數是常成員函數,它也不能被更新,常

成員函數只能調用常成員函數而不能調用其它函數。

9、有如下類定義和變量定義:classA{public:AO{data=O;}~A(){)int

GetDataOconst{returndata;)voidSetData(intn){data=n;)private:intdata;);

constAa:Ab;下列函數調用中錯誤的是()。

A、a.GetDataO;

B、a.SetData(lO);

C^b.GetDataO:

D、b.SetData(10);

標準答案:B

知識點解析:由題意可知a為常對象,因為常對象不能被更新,所以通過這個常對

象只能調用它的常成員函數GetData。,而不能調壓其他成員函數SetData(lO),因

而選項B為本題的正確答案。

10、在下面的類定義中,錯誤的語句是()。classSample{public:

Sample(intval);||①?Sample。;||②private:inta=2.5:||③Sample。;II④};

A、①②③④

B、@

C、③

D、①②③

標準答案:c

知識點3析:③是錯誤的,因為在類體內,不允許對所定義的數據成員進行初始

化;其他語句構造和析溝函數的定義都是正確的。

11、有如下程序:#includeusingnamespacestd;classAA{public:

AA0{coutv〈T;)};classBB:publicAA{intk:public:BB():

k(0){tout?t2,;}BB(intn):k(n){cout?43\));intmain(){BBb(4),c;return

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

A、1312

B、132

C、32

D、1412

標準答案:A

知識點解析:在基類AA的默認構造函數中,輸出字符,V,在繼承類BB的默認構

造函數中,輸出字符'2二在帶有參數n的構造函數中,輸出字符,3、在主函數

中,在創建BB的對象b(4)時,會首先調用基類AA的構造函數輸出字符T,再調

用類BB帶參數的構造函數輸出字符,3、在創建BB的對象c時,會首先調用基類

AA的構造函數輸出字符再調用類RR默認的構造函數輸出字符,2)所以程序

輸出的結果為1312。

12、已知函數f的原型是“voidflint*x,int&y);",變量vl、v2的定義是“intvl,

v2:",下列調用語句中,正確的是()。

A、f(vl,v2);

B、f(vl,&v2);

C、f(&vl,v2);

D、f(&vl,&v2);

標準答案:C

知識點解析:在函數f的形參表達式中第一個形參為整型指針變量,第二個為整型

引用變量,所以用實參vl的指針初始化第一個形參,用實參v2初始化第二形參。

13、已知函數fun的原型為intfun(int,ini,int);下列重載函數原型中錯誤的是

()o

A、charfun(int,int);

doublefun(int,int,double);

C、intfun(int.char*);

D、floatfun(int,int,int);

標準答案:D

知識點解析:重載函數至少要在參數個數或參數類型上不同。而選項D中的函數

與原函數只是函數類型不同,而其他完全相同(參數個數及類型),則不能作為重載

函數來使用。

14、下列關于模板的敘述中,正確的是()。

A、如果一個類中存在純虛函數,這個類就是類模板

B、函數模板不能有形式參數表

C、類模板是一種參數化類型的類,是類的生成器

D、類模板中不能包含構造函數

標準答案:C

知識點解析:對于函數模板,數據類型本身成了它的參數,是一種參數化類型的函

數。對于類模板,數據類型本身成了它的參數,因而是一種參數化類型的類,是類

的生成器。

15、有如下類定義:ciassA{char*a;public:A():a(0){)A(char*aa){//}Eaa

所指字符串拷貝到a所指向的存儲空間a二;strcpy(a,aa);}~

A()(delete[]a;}}:橫線處應填寫的表達式是()。

A、newchar[strlcn(aa)+l]

B、char[strlen(aa)+l]

C>char[strlen(aa)]

D、newchar[sizeof(aa)-l]

標準答案:A

知識點解析:函數strlen(aa)返|川字符串aa中字符的個數,不包括末尾的空字符.

所以在內存空間創建字符數組a時,需要字符數組的長度是strlen(aa)+lo

16、有如下類和對象的定義:classConstants{public;staticdoublegetPl(){return

3.1416:|):Constantsconstants;下列各組語句中,能輸出3.1416的是()。

A、cout<<constants->getPI();和coutV〈Constants::gerPl();

B、cout<<constants.getPI();和cout<<Constant.getPI();

C^cout<<constants->getal();和coutVVConstants->getPI():

D、cout<<constants.getPI();和coutVVConstanls::getPI();

標準答案:D

知識點解析:此題考查的是靜態成員函數的引用。wetPIO是類Constants的靜態成

員函數。引用靜態成員函數可以有兩種形式:一是通過類名直接進行調用,例如類

名::靜態成員函數名;另一種是用類的任何對象名進行調用其作用僅是通過對象

名間接的指出類名,例如constants.getPI。選項D卻是這種調用方式。

17、有如下類定義:classAA{inta:public:AA(intn=0):a(n){)};classBB:

publicAA{public:BB(intn));其中橫線處缺失部分是()。

A、:a(n){)

B、:AA(n){)

C>{a(n);}

D、{a=n;}

標準答案:B

知識點解析:根據派生類構造函數的一般格式:〈派生類名>(<總參數表〉):〈基類

名1>(〈參數表1>),…〈基類名n>(v參數表n>),〈成員對象名1>(V參數表

n+l>),…〈成員對象名m>(v參數表n+m>)〈派生類構造函數體在派生類BB的

構造函數總參數表后面應該接上基類名AA和其參數。

18、有如下程序:#include<iostrcam>usingnamespacestd;classBasel{public:

Basel(intd){cout<<d;}~Basel(){}};classBase2{public:Base2(intd){cout<

<d;}~Base2(){}};classDerived:publicBasel.Base2{public:Derived(int

a,intb,intc,intd);Base1(b),Base2(a)>bl(d)?b2(c){}Private:intbl;int

b2;);intmain(){Derivedd(1,2,3,4);return0:}運行時的輸出結果是()。

A、1234

B、2134

C、12

D、21

標準答案:D

知識點解析:程序在創建派生類對象d時,分別調用基類Basel和Basel的構造函

數。

19、下面是類shape的定義:classShape)public:VirtualvoidDraw(尸0;);下

列關于Shape類的描述中,正確的是()。

A、類Shape是虛基類

B、類Shape是抽象類

C、類Shape中的Draw函數聲明有誤

D、語句“Shapes:”能夠建立Shape的一個對象s

標準答案:B

知識點解析:因為類Shape中包含純虛函數Draw。,所以類Shape是抽象類。

20、有如下類定義:classB{public:voidfunl(){}private:voidfun2()()

protected:voidfun3(){}};classD:publicB{protected:voidfun4(){)};若obj是

類D的對象,則下列語句中不違反訪問控制權限的是()。

A、pbj.funl();

B、obj.fun2();

C、obj.fun3();

D、obj.fun4();

標準答案:A

知識點解析:派生類D公有繼承父類B,所以。bj可以訪問基類B的公有,不能訪

問其它成員。

21、在類中重載賦值運算符時,應將其聲明為類的()。

A、靜態函數

B、友元函數

C、成員函數

D、構造函數

標準答案:C

知識點解析:賦值運算符只能作為類的成員函數重載。

22、有如下模板聲明:template<typenameT1,typenameT2>ClaSSA;下列聲

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

A、template<classTI,classT2>classA;

B、template<classTl,typenameT2>classA;

C、template<typenameT1,classT2>classA;

D、template<typenameTI,T2>classA;

標準答案:D

知識點解析:在類模板中,數據類型木身成了它的參數,因而是一種參數化類型的

類,是類的生成器。聲明一個類模板的格式是:templateVV模板形參表聲明>>

〈類聲明〉,〈模板形參表聲明,是由一個或多個模板形參組成。對于本題來說,

模板形參表中包括類型T1和T2兩個類型參數,而在選項D)中T1說明其

溫馨提示

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

評論

0/150

提交評論