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

下載本文檔

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

文檔簡介

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

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

33分。)

1、實現算法所需要的存儲單元的多少稱為()。

A、空間復雜度

B、可實現性

C、時間復雜度

D、困難度

標準答案:B

知識點解析:算法的空間復雜度一般是指:執行這個算法所需要的存儲空間,其中

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

所需要的額外空間。

2、下列關于線性鏈表的描述中正確的是()

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

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

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

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

標準答案:A

知識點解析:暫無解析

3、以下關于棧的描述中錯誤的是()。

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

B、棧只能順序存儲

C、棧具有記憶作用

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

標準答案:B

知識點解析:暫無解析

4、下面數據結構中,屬于非線性的是()

A、線性表

B、隊列

C、樹

D、棧

標準答案:C

知識點解析:暫無解析

5、下列數據結構中,能月二分法進行查找的是()。

A、順序存儲的有序線性表

B、線性鏈表

C、二又鏈表

D、有序線性鏈表

標準答案:A

知識點解析:暫無解析

6、樹是結點的集合,它的根結點的數目是()。

A、有且只有I個

B、1個或多于1個

C、0個或1個

D、至少有2個

標準答案:C

知識點解析?:樹具有明顯的層次關系,即樹是一種層次結構。在樹結構中,根結點

在第一層上。當樹為非空時,樹中有且只有一個根結點,當樹為空時,樹中根結點

的數目為0。

7、在軟件開發中,需求分析階段不可以使用的工具是()

A、數據字典

B、數據流圖

C、判斷樹

D、程序流程圖

標準答案:D

知識點解析:暫無解析

8、數據庫管理員(DBA)是數據庫系統的一個重要組成部分,有很多職責。以下選項

不屬于DBA職責的是()

A、定義數據的存儲結構和存取策略

B、定義數據庫的結構

C、定期對數據庫進行重組和重構

D、設計和編寫應用系統的程序模塊

標準答案:D

知識點解析:暫無解析

9、下面關于面向對象的程序設計方法中,正確的是()。

A、“多態性”是指對象的狀態根據運行的要求進行變化

B、“封裝性”是指將不同類型的數據結合在一起作為一個整體來處理

C、在面向對象的程序設計中,結構化程序設計方法仍有著重要作用

D、基類的私有成員在派生類的對象中不可訪問,也不占內存空間

標準答案:C

知識點解析:面向對象中的多態性是指當多種事物繼承自一種事物時,同一種操作

在它們之間表現出不同的行為;而封裝性是指將數據和算法捆綁成一個整體,這個

整體就是對象,描述對象的數據被封裝在其內部。C++是起源于C語言的一種面向

對象的程序設計語言,因此C++語言既保留了傳統的結構化程序設計方法,又支

持面向對象程序設計方法;派生類不可訪問基類中的私有成員,因此在派生類中直

接引用基類的私有變量成員是不允許的,但可以通過基類的公用成員函數來引用基

類的私有變量成員。

10、下列關于函數模板的定義中,合法的是()。

A、templateclass<1>1abs(lz){returnz<0?-z:z;}

B、template<typenameT>Tabs(Tz){returnz<0?-z:z;)

C^templateT<classT>abs(Tz){returnz<0?-z:z;|

D、templateTabs(Tz){returnz<0?z:z;}

標準答案:B

知識點解析?:聲明一個函數模板格式是:template〈模板形參表聲明〉〈函數聲明

>其中〈模板形參表聲明,是由一個或多個〈模板形參,組成(如果是多個需要用

逗號隔開)。其中,〈模板形參,可以換成class,函數的聲明部分和一般函數的聲

明部分類似,只有某些類型修飾符被虛擬類型參數替代。

11、下面函數的作用是以雙倍行距輸出文件:voidtest(ifstream&outf,ofstream&outC)

{charc;while(){;if(c==,\n,)outc.put(C);}}下劃線處缺失的代碼是

()。

A、outf.put(C)與outc.get(C)

B、outf.put(C)與outc.get(C)

C、outf.get(C)與outc.put?

D、outf.get(C)與outc.put?

標準答案:D

知識點解析:ifstream是文件輸入流類,只能用于輸入.它沒有提供任何用于輸出

的操作。ofstream是文件輸出流類,只能用于輸出,它沒有提供任何用于輸入的操

作。從文件中輸入字符耍用文件輸入流類引用outf.并調用其輸入字符的成員函數

get()o根據題目中的要求,可以看出當輸入文件中讀到換行符時,程序將在輸出文

件中兩次輸出換行符,即雙倍行距。output(。為輸出一個字符,因為

“if(c==,\n》outc.put(C);”此句,當c為間格字符(行距字符)時,再多輸出一次

outc.put(C)o

12、下面關于運算符重我中正確的是()

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

B、C++的所有運算符都可以重載

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

D、通過運算符重載可以定義C++中沒有的運算符

標準答案:C

知識點解析:運算符函數的返回類型可以聲明為基本數據類型,故選項A)錯誤。

”.、.*、->*、::、?”這五個運算符不可以重載,故選項B)錯誤。在重載類型轉換

符時,由于運算符本身已經表示出返回值類型,因此不需要返回值類型的聲明。運

算符重我是針對C++中已有的運算符進行的,不可能通過重載創造出新的運算

符,故選項D)錯誤。

13、已知:intn=l;在下面定義引用的語句中,正確的是()。

A、intx=&n;

B、int&x=n;

C、int&x;

D、int&x=&n;

標準答案:B

知識點解析:引用實際上就是別名,它與被引用變量擁有同一個地址空間。選項

A)中&m表示m的地址,而x是一個整型變量,在C++中不能從地址值隱式轉換

為整型值,故選項A)是錯的。選項B)中其操作實際上就是為m賦于一個別名

x,因此選項B)是對的。選項C)中引用必須要用被引用的對象,即引用必須要初

始化:選項D)中x是一個整型引用,而其被引用的對象卻是m的地址,存在著與

選項A)類似的錯誤,因此選項D)也是錯的。

14、下面字符串中,不可以用作C++標識符的是()。

A、case

_test_c

C、Return

D、x_2008

標準答案:A

知識點解析:C++標識符是一個以字母或下劃線開頭的,由字母、數字、下劃線組

成的字符串。標識符不能與任何一個關鍵字同名,因此case不能作為標識符。

15、執行下列程序語句后,輸出結果為()。#inelude<iostream>usingnamespace

std;intm=5;intmain()(intm=3;m++;::m++;cout<<m<<endl;return0;)

A、3

B、4

C、5

D、6

標準答案:B

知識點解析:暫無解析

16、下面()不是構造函數的特征。

A、構造函數必須指定返回值類型說明

B、構造函數可以設置缺省參數

C、構造函數可以重載

D、構造函數的函數名與類名相同

標準答案:A

知識點解析:暫無解析

17、有如下類定義:classTest{intx_,y_;public:Test():a_(0),b_(0){)Test(inta,int

b=0):a_(a),b_(b){)};若執行語句Testx(2),y[3],*z[4];則Test類的構造函數被調用

的次數是()。

A2次

B3次

c4次

、

D5次

、

標準答案:C

知識點解析:定義對象x時執行一次構造函數(調用Test(inta,intb=0)),定義對象

數組y時,構造函數(注意,該構造函數必須是沒有任何參數的)的執行次數與數組

中對象的個數相等,即需要執行3次,最后定義一個指向Tesl對象的指針數組,

它并不會創建對象,從而也就不會去執行構造函數,故構造函數一共執行了4次。

18、下面關于繼承和派生的敘述中,正確的是()。

A、作為虛基類的類不能被實例化

B、派生類不能訪問基類中的保護成員

C、虛函數必須在派生類中重新實現

D、派生類向基類的構造函數傳遞參數

標準答案:A

知識點解析:暫無解析

19、下面for語句的循環次數為()。for(inti=0,n=0;!n&&i<=5;i++);

A、0

B、5

C、6

D、無窮次

標準答案:c

知識點解析:for語句的語法格式如下:fort(〈表達式D;〈表達式2〉;〈表達

式3))〈語句塊〉。其中〈表達式1〉是for循環的初始化部分:〈表達式2〉是

foi?循環的條件部分,用來判斷循環能否繼續進行的條件,”!n&&i<=5;”語句為判

斷循環是否繼續,其中的&&為邏輯運算符,只有當其兩邊的表達式都為真時它才

返回一個真值。所以循環次數為6。

20、下面有關this指針的敘述中,正確的是()。

A、類的成員函數都有this指針

B、任何與類相關的函數都有this指針

C、類的非靜態成員函數才有this指針

D、類的友元函數都有ihis指針

標準答案:C

知識點解析:暫無解析

21、有如下程序:#inckide<iostream>usingnamespacestd;classBase{public:virtual

voidfuncl(){cout<<"Base1";)voidrune2(){cout<<"Base2";}};class

Derived:publicBase{public:voidfunc1(){cout<<"DerivedI";}voidfunc2(){cout<

<"Derived2";)};intmain(){Base*p=newDerived;P->funcl();P->func2();return

0:}運行此程序,屏幕上將顯示輸出_____O

A、Derived1Base2

B、Base1Base2

C、Derived1Derived2

D、Base1Derived2

標準答案:A

知識點解析:派生類Derived由基類Base公有繼承而來。調用p->funcl();后,

執行派生類Derived的函數voidfunc1();調用p->rune2();后,執行基類的函數

voidfunc2(),因為虛擬函數是根據對象的實際類型調用,非虛擬函數是根據指針類

型調用。故通過指針p調用func2時將直接調用基類中的voidfunc2()。

22、下面關于友元的說法中錯誤的是()

A、若類A是類B的友元,那么類B也是類A的友元

B、友元關系不能被繼承

C、若函數fun被說明為類A的友元,那么在fun中可以訪問類A的私有成員

D、若類A是類B的友元,那么類A的所有成員函數都是類B的友元

標準答案:A

知識點解析:C++中有些對象或函數需要訪問其他對象的內部成員,這樣可以用

friend關鍵字將對應的類指定友元函數或友元類,但是這種關系不是相互的。如果

聲明一個類A為類B的友元類,則類A中的所有成元函數都可以訪問類B中的私

有成員。另外,友元關系不會被繼承。

23>運行以下的程序代碼,結果是()。#include<iostream>usingnamespacestd;

intmain(){intx=5;int*q=&x;int&y=x;y++;tout<<(*q)++<<end1;return0;j

A、5

B、6

C、7

D、8

標準答案:B

知識點解析:暫無解析

24、下面有關類模板的說法中不正確的是()。A)B)C)D)

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

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

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

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

標準答案:C

知識點解析:暫無解析

25>有以下程序:#include<iostream>usingnamespacestd;classTestClass{public:

TestClass(intn){number=n;}〃拷貝構造函數

TestClass(TestClass&other){number=other.number;}?TestClass。{}private:int

number;};TestClassfun(TestCIassP){TestClasstemp(p);returntemp;}intmain()

{TestClassobjl(10),obj2(0);TestClassobj3(objI);obj2=fun(obj3);return0:}程序執

行時,TestClass類的構造函數被調用的次數是()。

A、2

B、3

C、4

D、5

標準答案:C

知識點解析:objl(10)執行一次構造函數,obj2(0)也執行一次構造函數;

obj3(objl)t3t.objl作為參數執行一次構造函數;fun(obji3)中的temp(p)將執行一次

構造函數,而fun本身是以按值傳遞參數,形參在fun函數內也要分配獨立的空

間,所以也要執行一次陶造函數,其返回結果也是TestClass類型的,同樣需要執

行一次構造函數,所以一共要執行4次。

26、語句ofslreamoutf("TEST.DAT\ios_base::app);的功能是建立流對象outf,并試圖

打開文件TEST.DAT與outf關聯,而且()。

A、如果文件存在,打開失敗:如果文件不存在,建立一個新文件

B、如果文件存在,將文件指針定位于文件首;如果文件不存在,打開失敗

C、如果文件存在,將文件指針定位于文件尾:如果文件不存在,建立一個新文件

D、如果文件存在,將其置為空文件;如果文件不存在,打開失敗

標準答案:C

知識點解析:暫無解析

27、下面的類定義中,如果要為其添加一個析構函數,對于析構函數定義正確的是

()oclassTlestClass{private:inta:public:TestClassfintgiva_a=0){a=give_a;))

A^~voidTestClass(){}

?TestClassvoid(){}

C、void^TestClass(){)

D^~TestClass(){}

標準答案:D

知識點解析:暫無解析

28、下面關于虛函數的表述中正確的是()。

A、虛函數不能聲明為另一個類的友元函數

B、派生類必須重新定義基類的虛函數

C、如果在重定義虛函數時使用了保留字virtual,那么該重定義函數仍是虛函數

D、虛函數不能夠聲明為靜態函數

標準答案:D

知識點解析:暫無解析

29、將下面類TeslClass中的函數「un()的對象成員n值修改為100的語句應該是

()oclassTcstClass{public:TestClass(intx){n=x;}voidSetNum(intnl){n=nl;}

private:intn;}intfun(){TestClass*ptr=newTestClass(45);;)

A^TestClass(lOO)

B、ptr->SetNum(100)

C>SeiNum(lOO)

D、ptr->n=l()O

標準答案:B

知識點解析:暫無解析

30、運算符重我是對已有的運算符賦予多重的含義所以()。

A、能夠對基本類型數據(如double),重新定義“+”運算符的含義

B、只能重載C++中己經有的運算符,不能重新定義新運算符

C、能夠改變一個已有運算符的優先級和操作數個數

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

標準答案:B

知識點解析:C++在重載運算符時,必須符合以下的條件:①不可以重載內置的

C++數據類型(如int,double等類型)運算符的含義;②不可以定義C++中沒有的

運算符;⑨不可以改變重載運算符的優先級與操作數的個數;④有些運算符不能

被重載,例如域運算符(::),條件運算符(?:)等,具體哪些運算符不能被重載與編譯

器有關。

31、TcstClass類定義如下:classTcstClass(private:intid;chargender;char*phone;

public:TestClass():id(0),gender,#'),phone(NULL){)TestQass(intno,charge=,#,,char

*ph=NULL){id=no;gender=ge;phone=ph;)};卜面夾對象定義語句中錯誤的是()。

A^TestClassmyObj(i);

B、TestClassmyObj(2,,,l1101111155");

C、TestClassmyObj(l,,m,);

D、TestClassmyObj;

標準答案:B

知識點解析:B)中由于有兩個參數,所以其調用了第二個構造函數,第二個構造

函數的兩個缺省參數,在調用時,實參會按從左到右的順序傳給形參,所以第二個

參數“11101111155”會傳遞給形參ge,而原型中的ge為字符型,實參為指向字符的

指針,所以在編譯時會出現錯誤。A)與C)都能夠壬確的實現參數的傳遞。對于

D),由于在創建TestClass的實例myObji時,沒有參數,所以其調用了第一個構

造函數。

32、使用輸入輸出操作符selw,能夠控制()。

A、填充字符

B、輸出寬度

C、對齊方式

D、輸出精度

標準答案:B

知識點解析:暫無解析

33、有如下類定義:classFun{public:Fun(intv):value(v){)//(J)?Fun(){}〃②

private:Fun{},〃③intvalue=0;//(4));其中存在語法錯誤的行是()。

A①

、

B②

c③

、

D④

、

標準答案:D

知識點解析:暫無解析

二、公共基礎填空題(本題共15題,每題7.0分,共

15分。)

34、一個項目具有一個項目主管,一個項目主管只可管理一個項目,則實體”頁目

主管”與實體“項目”的聯系屬于的聯系。

標準答案:一對一或1:1

知識點解析:實體之間的對應關系稱為聯系,它反映現實世界事物之間的相互關

聯。兩個實體間的聯系可以歸結為三種類型:一對一聯系表現為某一實體與另一實

體一一對應相關聯;一對?多聯系表現為某一實體與相關多個實體相關聯;多對多聯

系表現為多個實體與相關多個實體相聯系。所以實體“項目主管”與實體“項目”的聯

系屬于一對一的聯系。

35、在最壞情況下,冒泡排序的時間復雜度為o

標準答案:n(n-l)/2

知識點解析:冒泡排序法是通過相鄰數據元素的交換逐步將線性表變成有序。假設

線性表的長度為n,則在最壞的情況下,冒泡排序需要經過n/2遍的從前往后的掃

描和n/2遍的從后往前的掃描,需要的比較次數為n(n-l)/2o

36、在結構化分析使用的數據流圖中,使用用解釋其中的圖形元素。

標準答案:數據字典

知識點解析:數據字典(DataDictionary,簡稱DD)的作用是對DFD中出現的被命

名的圖形元素進行確切解釋。通常數據字典包含的信息有名稱、別名、何處使用/

如何使用、內容描述、補充信息等。

37、二義樹的遍歷分為三種,它們是前序遍歷、遍歷和后序遍歷。

標準答案:中序

知識點解析:二叉樹的遍歷可以分為三種:前序遍歷、中序遍歷和后序遍歷。前

序遍歷是指在訪問根結點、遍歷左予樹與遍歷右子樹這三者中,首先訪問根結點,

然后遍歷左子樹,最后遍歷右子樹;并且遍歷左、右子樹時,仍然先訪問根結點,

然后遍歷左子樹,最后遍歷右子樹。中序遍歷指在訪問根結點、遍歷左子樹與遍

歷右子樹這三者中,首先遍歷左子樹,然后訪問根結點,最后遍歷右子樹;并且遍

歷左、右子樹時,仍然先遍歷左子樹,然后訪問根結點,最后遍歷右子樹。后序

遍歷指在訪問根結點、遍歷左子樹與遍歷右子樹這三者中,首先遍歷右子樹,然后

訪問根結點,最后遍歷左子樹;并且遍歷左、右子樹時,仍然先遍歷右子樹,然后

訪問根結點,最后遍歷左子樹。

38、數據流的類型有和事務型。

標準答案:變換型

知識點解析:典型的數據流類型有兩種:變換型和事務型。變換型:指信息沿輸入

通路進入系統,同時由外部形式變換為內部形式,進入系統的信息通過變換中心。

經加工處理以后冉沿輸出通路變換成外部形式離開軟件系統。事務型:在很多軟件

應用中,存在某種作業數據流,它可以引發個或多個處理,這些處理能夠完成該作

業要求的功能,這種數據流就叫做事務。

39、執行下列語句后,變量n的值是ointn=0:for(inti=l;i<=3;i++)for(int

j=l;j<<=i;j++)n++;

標準答案:6

知識點解析:當i=l時,內循環中的i的值為1,n目加一次,n=l;當i=2時,內

循環中的j的值為i和2,n自加兩次,n=3,當i=3時,內循環中的i的值為1、

2^3,n自加三次,n=6o

40、C++中通常和一個運算符連用,構成一個運算符函數名的C++關鍵字為

標準答案:operator

知識點解析:暫無解析

41、C++中每個類都有一個隱含的指針。

標準答案:this

知識點解析:暫無解析

42、C++中將兩個字符串連接起來組成一個字符串的函數是______o

標準答案:strcat

知識點解析;暫無解析

43、如果把類FriendClass定義為類TeslClass的友元類,則應該在類TestClass的定

義中加入語句o

標準答案:friendclassFiendClass

知識點解析:把一個類聲明為另外一個類的友元類,只要在另外一個類中添加如F

語句:friendclass類名:所以答案是"friendclassFriendClass^o

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

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

B:{public:B(){cout<<,B,;}};ciassC:{public:C(){cout<<,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必

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

45、設p是指向一個類動態對象的指針變量,則執行"deletep;”語句時,將自動調

用該類中的函數。

標準答案:析構

知識點解析:暫無解析

46、有如下程序:#include<iostream>usingnamespacestd;classA{public:virtual

voidf(){cout<<nr,;});classB:publicA(public:B(){cout<<"2";});classC:public

B{public:virtualvoidf(){B::f();cout<<"3H;)};intmain(){Aaa,*p;Bbb;Ccc;

p=&cc;p->f();return0;(執行上面程序的輸出是。

標準答案: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函數,輸出“1”,然后再輸

出“3”。

47、執行下列語句序列:imx=l,&y=x;coutVVxVV〈VVyVVendl;輸出結果

為o

標準答案:1-1

知識點解析:暫無解析

48、以下函數模板min的功能是返回數組a中最小元素的值。請將橫線處缺失部分

補充完整。template<typenameT>Tmin(Ta[],intn){Ttemp=a[0];for(inti=l,i<

n;i++)if(a|i]<temp);returntemp;)

標準答案:temp=a[i]或lemp=*(a+i)或temp=*(i+a)

知識點解析:暫無解析

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

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

10分。)

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

A、非空循環隊列的隊尾指針等于排頭指針時,也可以進行入隊運算

B、循環隊列為空時可以進行退隊運算

C、退隊運算后隊列長度減1

D、入隊運算就是將新元素插入到隊尾指針指向的位置

標準答案:4

知識點解析:非空循環隊列的隊尾指針等于排頭指針時,說明循環隊列已滿,不能

進行入隊運算,選項A是錯誤的。循環隊列為空時不可以進行退隊運算,否則產

生“下溢”,選項B是錯誤的。入隊運算首先將隊尾指針進1,然后將新元素插入到

隊尾指針指向的位置。

2、下列敘述不屬于線性鏈表較之線性表順序存儲結構的優點的是()。

A、線性鏈表存儲方式簡單

B、線性鏈表運算效率高

C、線性鏈表的存儲空間易于擴展

D、線性鏈表便于存儲空間的動態分配

標準答案:1

知識點解析:線性鏈表存儲方式要求每個數據節點由兩個部分組成,比線性表的順

序存儲結構復雜,選項A是錯誤的。在平均情況下,線性表的順序存儲結構插入

和刪除元素需要移動線性表中約一半的元素,效率低下。而線性鏈表只需改變有關

節點的指針,效率較高,選項B是正確的。線性表的順序存儲存儲空間必須是連

續的,不利于存儲空間于展;而線性鏈表不需要連續的存儲空間,存儲空間易于擴

展,選項C是正確的。為保證線性表的存儲空間連續且順序分配,會導致在對某

個線性表進行動態分配存儲空間時,必須.要移動其他線性表中的數據元素,不便

于存儲空間的動態分配,選項D是正確的。

A-----示)對此二叉樹中序遍歷的結果是()。

A、ABDGCEHIF

B、DGBAHEICF

C、GDBHIEFCA

D、ABCDEFGHI

標準答案:2

知識點。析:選項A、D中,根節點排在最前,因比可以斷定不是中序遍歷。選項

C中,根節點排在最后,因此也可以斷定不是中序遍歷。其中選項A、C分別為前

序遍歷和后序遍歷的結果。

4、若要求盡可能快地對實數數組進行穩定的排序,則應選()。

A、快速排序

B、堆排序

C、歸并排序

D、基數排序

標準答案:4

知識點解析:這里要用到的知識幾乎都是要記憶的。此類題目可以采用排除法,首

先,穩定的排序這里有兩個選項C和D,其飲,選項D不適用于實數的排序,因

此只可用C。

5、在所有排序方法中,關鍵字比較的次數與記錄的初始排列次序無關的是()。

A、希爾排序

B、冒泡排序

C、插入排序

D、選擇排序

標準答案:8

知識點解析:希爾排序和冒泡排序都屬于插入排序,它們通過數據元素的交換來逐

步消除線性表中的逆序,所以關鍵字比較的次數與記錄的初始排列次序有關。而選

擇排序是指掃描整個線性表,從中選出最小的元素,將它交換到表的前面。然后對

剩下的字表采用同樣的辦法,所以關鍵字比較的次數與記錄的初始排列次序無關。

6、函數重載是指()。

A、兩個或兩個以上的函數取相同的函數名,但形參的個數或類型不同。

B、兩個以上的函數取相同的名字和具有相同的參數個數,但形參的類型可以不

同。

C、兩個以上的函數名字不同,但形參的個數或類型相同。

D、兩個以上的函數取相同的函數名,并且函數的返回類型相同。

標準答案:1

知識點解析:函數重載指的是兩個或兩個以上的函數具有相同的函數名,但是形參

的個數或類型不同。程序中通過判斷主調函數傳過來的參數的個數和類型來決定選

擇調用哪個具體的函數。

7、下面關于對象的描述中正確的是()。

A、任何對象都必須具有繼承性

B、任何對象都必須具有多態性

C、操作是對象的靜態屬性

D、對象間的通信靠消息傳遞

標準答案:8

知識點解析:繼承性和多態性是對象支持的特性,并不是必須具備的條件。操作是

對象的動態性屬性。D選項的描述是正確的。

8、在關系代數中,對一個關系投影操作以后,新關系的元組個數跟原來關系的元

組個數相比()。

A、小于

B、小于或等于

C、等于

D、大于

標準答案:4

知識點解析:本題考核對投影運算的掌握。投影操作是從表中選出某些列而丟棄另

一些列。如果只對一個關系中的某些屬性感興趣,那么就需要在這些屬性上使用投

影操作投影該關系,而元組個數是指一個表中的行的數目.因此.對一個關系投影

操作以后,新關系的元組個數跟原來關系的元組個數相等。

9、關系數據庫的概念模型是()的集合。

A、關系模型

B、關系模式

C、關系子模式

D、存儲模式

標準答案:2

知識點漏析:本題考核關系數據庫的概念模型。數據庫的概念模型體現了數據之間

的關系,它是各種數據之間相互關系的集合。關系數據庫的概念模型是關系模式的

集合。關系子模式是指關系數據庫模式中用戶所見到的那部分數據模式描述。

10、如果對一個關系實施了一種關系運算后得到了一個新的關系,而且新的關系中

屬性個數少于原來關系中屬性個數,這說明所實施的運算關系是()。

A、選擇

B、投影

C、連接

D、并

標準答案:2

知識點解析:本題考核對幾種關系代數運算的掌握。其中選擇和投影的區別在于:

如果將一個關系看作一張表,那么選擇操作就是從這張表中選出一些行而丟棄另一

些行。而投影操作則是從這張表中選出某些列而丟棄另一些列。如果只對一個關系

中的某些屬性感興趣,那么就需要在這些屬性上使用投影操作投影該關系。并操作

的結果表示為Rus,它是一個關系,包括或者在R中、或者在S中、或者同時在R

和S中的所有元組,新的關系中屬性個數多于原來關系中屬性個數。連接操作用

于將兩個關系中的相關元組組合成單個元組。

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

11、要把高級語言編寫的源程序轉換為目標程序,需要使用()。

A、編輯程序

R、驅動程序

C、調試程序

D、編譯程序

標準答案:8

知識點解析:C++是以編譯方式實現的高級語言。C++程序的實現必須要使用某種

C++語言的編譯器進行編譯。編譯器的功能是將程序的源代碼(.cpp)轉換為機器代

碼的形式,稱為目標代碼(.obj):然后,再使用目標代碼進行鏈接,生成可執行文

件(.exe),等待下一步的執行過程。

12、以下選項中,合法的字符常量是()。

A、N

B、’\010'

C、68

D、D

標準答案:2

知識點解析:本題考核字符型常量的表示。選項A中是字符串的表示方法。選項

B所表示的是一個轉義字符,是特殊的字符常量。選項C中所表示的是整型常量。

選項D中不是常量的表示。

13、定義如下枚舉類型:enuin{Monday,Tuesday,Wednesday,Thursday,

Friday=2};則下列語句正確的是()。

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

B、Dayday;day=3;

C^Dayday;day=Monday+3;

D、Dayday;day=Tuesday+10;

標準答案:

知識之解析:1本題考查枚舉類型的定義和使用。枚舉類型定義了一些整型符號常量

的集合,使用枚舉類型時應該注意以卜.幾點;①枚舉類型的第一個常量默認值是

Oo②枚舉類型常量的值允許彼此相同。③雖然枚舉類型常量是整數類型,但是

不允許使用整數直接賦值給枚舉類型變量,也不允許與整數進行運算,只可以與整

數進行比較。根據以上知識,我仃何以得出選項B、C、D都不正確。

14、下列for循環執行的次數為()。for(inti=0,j=10;i=j=10;i++,j-)

A、0

B、11

C、10

D、無數次

標準答案:8

知識點解析:本題考核for循環。for語句的循環條件部分為"i=j=10",這是一個賦

值表達式,永遠為真,即for循環是死循環,將執行無數次。

15、下列關于gol。語句的描述中,正確的是()。

A、got。語句可在一個文件中隨意轉向

B、goto語句后面要跟一個它所轉向的語句

C、goto語句可以同時轉向多條語句

D、got。語句可以從一個循環體內轉到循環體外

標準答案:8

知識點解析:gol。語句也可以跳出循環和swilch語句,got。語句無條件地轉移程

序的執行控制。它總是與一標號相匹配,其形式為:got。標號;,標號是用戶自定

義的標識符,它可以處于got。語句的前面,也可以處于其后,但標號必須與got。

語句處于同一個函數中。定義標號時,由一個標識符后面跟一個冒號組成。

16、若有定義:int*p;則下列各選項中,不同于表達式“*p=*p+l;"的是()。

A、*p++;

B、++*p;

C^*p+=l;

D、++(*p);

標準答案:1

知識點解析:題目中的語句“*p=*p+l;”是將指針變量p所指向的存儲單元的佳加

1,然后再放入p所指向的存儲單元中。選項A中,語句“*p++;”,當把該表達式

賦給一整型變量k時,就會發現,原語句可變為“k=*p;p=p+l;即語句“*p++”

最后所執行的是p的值(即p中存放的地址)力口1,與題中語句“*p=*p+l;”的意思不

同。再來看選項B,C,D,選項B中的語句可表示為“*p=*p+l;選項C中的

語句可表示為“*p=*p+l;選項D中的語句也可表示為“*p=*p+l;

17、下列數組的定義中,會產生錯誤的是()。

A、inta[]={'0',T,'2',3,'4','5','6'};

B、inta[10]={0,1,2,3,4,5,6);

C、chara[5]="hello";

D、chara[5]={'h','e',T,T,'o'};

標準答案:4

知識點解析:本題考核數組的定義以及字符串數組方面的基礎知識。下面逐項進行

分析:選項A中,數組a的定義和初始化符合數組的定義和初始化語法,故正

確:選項B中,數組a初始化的值雖然沒有10個,但對于少的部分,系統會自動

補0,所以選項B中數組的定義也是正確;選項C中,數組a的長度為5,但字符

串“hello",的長度為5+1=6,字符串結束符,10,無法存儲在數組中,所以是錯誤

的;選項D中,數組a的定義是正確的。

18、在C++語言中,函數形參的默認存儲類型是()。

A、auto

register

CNstatic

D、extern

標準答案:1

知識點解析:在函數內部或復合語句內定義變星時,如果沒有指定的存儲類型或使

用了auio說明符,系統就認為所定義的變量具有自動類別。

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

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

A、1

B、2

C、3

D、4

標準答案:4

知識點解析:該類的定義共有3處錯誤。①類的成員變量不能在定義時進行初始

化:②類的構造函數不能有返回值(包括void類型):③類的析構函數不能有參

數。

20、下列關于多繼承.二義性的描述中,錯誤的是()。

A、一個派生類的兩個基類中都有某個同名成員,在派生類中對這個成員的訪司可

能出現二義性。

B、解決二義性的最常用的方法是對成員名的限定法

C、基類和派生類中同時出現的同名函數,也存在二義性問題

D、一個派生類是從兩個基類派生出來的,而這兩個基類又有一個共同的基類,對

該基類成員進行訪問時,可能出現二義性

標準答案:4

知識點解析:本題考核多繼承中出現的二義性問題。在多重繼承的情況下,派生類

具有兩個以上的直接基類,而這些直接基類的一部分或全部又是從另一個共同基類

派生而來時,這些直接基類中從上一級繼承來的成員就擁有相同的名稱。在派生類

的對象中,這些同名成員在內存中同時有多個復制件,所以派生對這些同名成員的

訪問存在二義性。所以選項A和D的說法是正確的。解決二義性的方法有兩種:

一是使用作用域分辨符來惟一標識并分別訪問它們:二是可以將共同基類設置為虛

基類。而第一種方法最常用。所以選項B的說法是正確的?;惡团缮愔型瑫r

出現同名函數,符合支配規則,不存在二義性問題。所以選項C的說法不正確。

21、以下程序的功能是:按順序讀入10名學生4門課程的成績,計算出每個學生

的平均分數并輸出,程序如下:#include<iostream>usingnamespacestd:int

main(){intn,k;floatscore,sum,ave;sum=0.0;tor(n=1;n<=10;n++)

{for(k=I;k<=4;k++){cin>>score;sum+=score;)ave=sum/4.0;cout<<

"NO.n<<n<<"ave:,*<<ave<<endl;)return0;}上述程序運行后結果不

正確,調式中發現有一條語句出現在程序中的位置不正確。這條語句是非曲直

()。

sum=0.0;

BNsum+=score;

C、ave=sum/4.0

D、cout<<"NO."<<n<<"ave:"<<ave<<end1;

標準答案:1

知識點解析:本題中sum用來保存每位學生的總成績,所以在計算不同學生的總

成績時,應將sum重新賦值初值0,即語句“sum=0.0;”應該包含在第1個for循環

體內,并在第2個for語句前執行。

22、有以下程序:#include<iostream>usingnamespacestd;char*x[]={"First",

"Second","Third");voidf(char*z[]){cout<<*z++<<end1;}intmain(){char

**y;y=x;f(y);return0;)

A、產生語法錯誤

B、First

C>Secpnd

D、Third

標準答案:2

知識點解析:程序首先定義全局指針數組x,并賦初值。在函數f()中,語句“cout

<<*z++<<endl;”是輸出*z指向的字符串,然后指向下一個指針。由于在主函

數中,指針y已初始化指向指針數組x,所以執行f(y)后,程序輸出指針數組x中

的第一個字符串“First”。

23、以卜.程序的輸出結果是()0#include<iostream>usingnamespacestd;intf(int

b[],intm,intn){inti,s=O;for(i=m;i<n;i+=2)s+=b[i];returns;}intmain(){intx

a[]={1,2,3,4,5,67,8,9);x=f(a,3,7);cout<<x<<endl;return0;}

A、10

B、18

C、8

D、15

標準答案:

知識之解析:1本題考查對數組以及數組作為函數參數的掌握程度。本題通過參數傳

遞將數組a傳給f()函數中的數組b,并由s傳遞返回值給主函數中的x。主函數

中,x=f(a,3,7),即把數組a傳給f()函數中的數組b,把3傳給m,把7傳給n。所

以函數f()中的for循環中,是從3開始循環,經過兩次循環后,實現a[3]和a[5]值

的累加,并存入s中,然后返回給主函數中的X。所以x的值為10。故本題答案

是Ao

24、有以下程序:#include<iostrcam>usingnamespacestd;classMyClass{intm;

public:staticintn;MyClass(){m=0;)voidsetvaluc(){m++;n++;}voidoutput()

{coutVV"m="VVmVV》,n=*'<<n<<endl;}};intMyClass::n=0;intmain()

{MyClassobjl,obj2;objl.setvalueO;objl.output();obj2.setvalue();obj2.output();return

0;}

A、m=1,n=1V換行>m=1,n=l

B、m=1,n=1<換行>m=l,n=2

C、m=l,n=lV換行>m=2,n=l

D、m=l,n=lV換行,m=2,n=2

標推答案:2

知識點解析:本題考核靜態數據成員的應用。類中的數據成員n為靜態變量,這種

類型變量采用靜態存儲分配。當函數執行完后,返回調用點,該變量并不撤銷,其

值將繼續保留。內部靜態變量有隱含初始值0,并且只在編譯時初始化一次。而類

中的數據成員m為auto變量,每次程序退出其作用域時將自動消失。所以其值不

能保留下來。

25、有以下程序:#include<iostream>usingnamespacestd;classPoint5{public:

voidSetPoint(intx,inty);voidMove(intxOff,intyOff);intGetX(){returnX;}int

GetY(){returnY;)private:intX,Y;};voidPoint::SetPoint(intx,inty){X=x;Y=y;}

voidPoint::Move(intxOff,iniyOff)X+=xOff;Y+=yOff;}inimain()(Pointpl;

pl.SetPoint(l,2);pl.Move(5,6);cout<<uPointlis(w<<pLGetX()<<;<<

pl.GetY()<<H)"<<endl;return0;)執行后的輸出結果是()。

A、Point1is(6,8)

B、Point!is(1,2)

C、Point1is(5,6)

D、Point1is(4,4)

標準答案:1

知識點解析:本題考核對象的定義與使用。程序中定義了一個類Point,在主函數

中定義了一個Point類的對象pl,然后通過對象pl調用其成員函數SctPoint()?0

Move。實現移位的操作。

26、為使下列程序的正確輸出結果為:Nowis2004-7-612:12:12那么應該在程序

劃線處填入的語句是(卜#includc<iostrcam>usingnamespacestd;classTIME;

classDATE{public:DATE(inty=2004,intm=Lintd=l){ycar=y;month=m;day=d;}

voidDateTimc(TIME&t);private:intyeanmonth,day;};classTIME{public:

TIME(inth=0,intm=0,ints=0){hour=h;minute=m;second=s;};〃將

類DATE中成員函數DateTime聲明為類TIME的友元函數private:inthour,minute,

second;);voidDATE::DateTime(TIME&t){cout<<"Nowis"<<year<<,-,<<

month<<,-><<day<<'5<<t.hour<<u:n<<l,minute<<\,<<t.seoond<

<,.,<<endl;)intmain(){DATEd(2004,7,6);TIMEt(12,12,12);d.DateTime(t);

return0;)

A、friendvoidDateTime(TIME&t);

friendvoidDATE::DateTime(TIME&0;

C、voidDatelime(llME&t);

D、friendvoidDateTime(TIME&t);

標準答案:2

知識點解析:根據要求可知,在橫線處是將類DATE中成員函數DateTime聲明為

類TIME的友元函數。由于函數DaleTime是類DATE的成員函數,因此對

DateTime函數的使用要加上,DATE::”修飾。其他各聲明的組成部分可參照函數

DateTime在類體外的定義實現。

27、設有如下程序:#include<iostream>usingnamespacesid;classA{public:int

i;display(){cout<<"classA\nu;));classB{public:inti;display(){cout<<"class

B\n";));classC:publicA,publicB{intj;public:inti;show(){j=i*i;

displayO;));intmain(){Cdemo;demo.show();returnO;}則主程序運行時將(),

A、因為變量i的重復定義而報錯

B、因為對象demo間接調用display。函數時產生二義性而報錯

C、因為類定義的語法錯誤而不能運行

D、沒有語法錯誤,能夠正常輸出結果

標準答案:2

知識點解析:本題主要考察C++中多繼承的工作方式和二義性的解決辦法。在

C++中,允許一個派生類從多個基類派生,這種繼承方式稱為多繼承。多繼承的定

義格式如下:classV派生類名〉:V繼承方式><基類名1>,〈繼承方式2>V

基類名2》,…{〈派生類類體>};但是,如果一個派生類的兩個或多個基類中

有某個同名成員,在派生類中對這個成員的訪問就可能出現二義性;同時,如果一

個派生類是由兩個或多個基類派生出來的,而這幾個基類又有一個共同的基類,對

該基類進行訪問時,也可能會出現二義性。本題程序中,類C是由類A和類B多

繼承得到的派生類,但其自身函數show。中調用了display。函數,而這個函數是同

時出現在類C的兩個基類中的,因此程序會出現二義性,編譯器將無法確定調用

哪一個display。函數來執行操作,因此報錯。解決二義性的通常辦法是通過作用

域運算符"進行限定。

28、有如下程序:#includc<iostrcam>usingnamespacestd;classbase{public:

virtualvoidfl(){cout<<"FlBase11;)virtualvoidf2(){cout<<"F2Base";));class

derive:publicbase{voidfl(){cout<<"F1Derive";)voidf2(intx){cout<<"F2

Derive'1;});intmain(){baseobjl,*p;deriveobj2;p=&obj2;p->fl();p->f2();

return0;)執行后的輸出結果是()。

A、FlDeriveF2Base

B>FlDeriveF2Derive

C、FlBaseF2Base

D^FlBaseF2Dcrive

標準答案:I

知識點解析:本題主要考察C++中虛函數機制及其繼承過程中的要點。虛函數在

基類中加關鍵詞virtual聲明,在派生類中重新定義。如果派生類沒有覆蓋虛函

數,則程序執行中將會執行基類的虛函數版本。本題程序中,建立了基類base,

其內函數voidfl()和voidf2()均被聲明為虛函數,并在調用時會顯式地發出聲明。

派生類derive利用public方式繼承基類base,并覆蓋其基類base中的虛函數fl()。

對于base中的虛函數f2(),由于派生類derive中的同名函數f2()中帶有參數in(x,

因此被編譯器認為是函數重載,而不作虛函數覆蓋處理,所以實際上派生類derive

中包含兩個&()函數,一個不帶參數,調用時執行基類base中的f2()函數版本,

個帶參數intx,調用時執行重載后的版本。本題主函數中,定義了基類對象。

objl和基類指針*p,同時定義了派生類對象。obj20p指向obj2時,“p->n()”函數

調用執行派生類覆蓋后的版本,輸出FlDerive;行(1由于不帶參數,因此執

行未經派生類覆蓋的函數版本,即基類base中的fl()函數版本。

29>有如下程序:#include<iostream.h>classx{protected:inta;public:x()

{a=l;});classxl:virtualpublicx{public:xl(){a+=l;cout<<a;});classx2:

virtualpublicx{public:x2(){a+=2;cout<<a;));classy:publicxl,publicx2

{public:y(){cout<<a<<endl;}};intmain(){yobj;returnO;}該程序運行后的

輸出結果是()。

A、1

B、123

C、242

D、244

標準答案:8

知識點解析:本題程序中引入了虛基類。在主函數main中,執行語句“yobj;"

時,先執行虛基類x的構造函數,使a=l;然后執行類xl的構造函數,使a=2,并

輸出值2;再執行類x2的構造函數,使a=4,并輸出值4;最后執行類y的構造函

數,輸出值4。

30、下列關于getline。函數的描述中,不正確的是()。

A、getlineO函數是用來從鍵盤上讀取字符串的

B、getlineO函數讀取字符串長度是受限制的

C、getline。函數讀取字符串時,遇到終止符時就停止

D、getline。函數中所使用的終止符只能是換行符

標準答案:8

知識點解析:本題主要考察C++中輸入流成員函數的使用。輸入流的成員函數主

要包括open。、get。、getline()>read()^seekg。、teHg()和close。等函數。其中,

getline。函數從輸入流中讀取多個字符,并且允許指定輸入終止符,其原形為:

getline(char*line,intsize,char=、rf)。其中:函數的第1個參數是字符數組,用于

放置讀取的文本:第2個參數是本次讀取的最大字符個數,通過改變該參數可以設

置讀入的最大字節數即字符串長度:第3個參數是分隔字符,作為讀取一行結束的

標志,默認為換行符通過改變該參數,可以自定義輸入形式和結束標志。因

此可以判斷,題目選項D的敘述是錯誤的,可以通過改變參數修改getline。函數中

所使用的終止符。

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

分。)

31、對于長度為n的線性表,若進行順序查找,則時間復雜度為【】。

標準答案:0(n)

知識點解析:語句的頻度指的是該語句重復執行的次數。一個算法中所有語句的頻

度之和構成了該算法的運行時間。長度為n的線性表順序查找的平均次數為n/2,

則它的時間復雜度是O(n)。

32、已知某序列為{49,38,65,97,76,13,27),試采用該序列的第一個元素為

樞軸進行快速排序,則經過一趟快速排序之后所得到的序列為:【】。

標準答案:27133849659776

知識點解析:快速排序的思想是:從線性表中選取一元素,如本題中的49,將線

性表后面小于49的元素移到前邊,而前面大于49的元素移到后邊。本題中49是

第1個元素,因此只需將線性表后面小于49的元素移到前邊。

33、在選擇運算所得到的結果關系中,所含的元組數不合【】原關系中的元組

數。

標編答案:大于

知識點解析:選擇操作用于從關系中選出滿足選擇條件的元組的子集。因此,實施

選擇運算后新關系的元組數不大于原關系中的元組數。

34當輸入10,11,12時,下面程序運行結果是【】。#include<iostream>

usingnamespacestd;intmain(){inta,b,c,max;cin>>a>>b>>c;max=a;if(max<

B)max=b;if(max<C)max=c;cout<<max<<endI;return0;}

標準答案:12

知識點解析:此題考核if語句的基本使用。程序的功能是輸入3個整數,利用if

語句,找出其中最大的一個整數并輸出。

四、填空題(本題共9題,每題L0分,共9分。)

35、求

溫馨提示

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

最新文檔

評論

0/150

提交評論