第一篇:C++題
1、_____重載 ___不是面向對象系統所包含的要素。2、___構造函數_____的功能是對對象進行初始化。
3、在下列關鍵字中,用以說明類中私有成員的是_private___。
4、C++對C語言作了很多改進,(引進了類和對象的概念)使得C語言發生了質變,即從面向過程變成面向對象。
5、面向對象程序設計將數據與_對數據的操作_放在一起,作為一個相互依存、不可分割的整體來處理。6、已知f1(int)是類A 的公有成員函數,p 是指向成員函數f1()的指針,采用__ p=&A::f1___是正確的。
7、在說明:const char *ptr;中,ptr應該是___指向字符的常量指針_____。判斷:
1、空類就是沒有名字的類。錯
2、面向對象系統的封裝性是一種信息隱藏技術,目的在于將對象的使用者與設計者分開,使用者不必知道對象行為實現的細節,只需用設計者提供的協議命令對象去做即可。錯
3、引用類型和指針類型作為函數的形式參數時,對調用函數的實際參數的要求是一樣的,均是地址。
4、對象數組在創建時要求構造函數不能有任何參數。錯1.___靜態數據成員_____是一個類的多個對象共享的。
2.下列靜態數據成員的特性中,D)_靜態數據成員不是所有對象所共有的_是錯誤的.A)說明靜態數據成員時前邊要加關鍵字static來修飾 B)靜態數據成員在類體外進行初始化
C)引用靜態數據成員時,要在靜態數據成員名前加<類名>和作用域運算符 3.靜態成員的值對每個對象都是一樣的,它的值是可以更新的。()4.由于數據隱藏的需要,靜態數據成員通常被說明為(保護的)
5.下面對靜態數據成員的描述中,正確的是(靜態數據成員是類的所有對象共享的數據)1.允許訪問類的所有對象的私有成員,公有成員和保護成員的是(友元函數)2.類A是類B的友元,類B是類C的友元,則__D)__是正確的.A)類B是類A的友元B)類C是類A的友元C)類A是類C的友元D)以上都不對 3.一個類的友元函數能夠訪問該類的___所有成員___4.類模板的模板參數____D)______.A)只可作為數據成員的類型B)只可作為成員函數的返回類型 C)只可作為成員函數的參數類型D)以上三者皆可
5.一個(類模板)允許用戶為類定義一種模式,使得類中的某些數據成員、某些成員函數的參數和返回值可以取任意數據類型。
6.類模板的使用實際上是將類模板實例化成一個具體的___類_____。1 關于類和對象的說法不正確的是()C A類是對象的類,對象是類的對象
B系統不為類分配內存空間,而為對象分配內存空間 C如果把人看作動物,那么細菌也是動物
D類可以看作數據類型,對象也可以叫做對象的實體、實例等類是()的集合,分類的依據是()具有相同屬性和服務的一組對象抽象 1對象的封裝就是(可進可出,但是外界不能干涉內部的處理過程)C 2關于類的繼承不正確的是()C
A引入類的繼承目的就是為了代碼重用,提高編程效率B子女有父母的特征是類的繼承 C子繼父產業是類的繼承
D子類可以全部繼承父類的屬性和服務,也可部分繼承父類的屬性和服務 下列關于運算符重載的描述中 運算符重載不可以改變語法結構
友元重載運算符obj1〉obj2被C++編譯器解釋為(operator>(obj1,obj2))。下列運算符中,A)?:運算符在C++中不能重載。
繼承具有___傳遞性_,即當基類本身也是某一個類的派生類時,底層的派生類也會自動繼承間接基類的成員。派生類的對象對它的基類成員中___公有繼承的公有成員_____是可以訪問的。
在多繼承中,公有派生和私有派生對于基類成員在派生類中的可訪問性與單繼承的規則__部分相同,部分不同_。下列對派生類的描述中,__D)_____是錯誤的。
A)一個派生類可以作另一個派生類的基類B)派生類至少有一個基類 C)派生類的成員除了它自己的成員外,包含了它的基類的成員 D)派生類中繼承的基類成員的訪問權限到派生類保持不變對基類和派生類的關系描述中,____B)______是錯誤的。A)派生類是基類的具體化B)派生類是基類的子集 C)派生類是基類定義的延續 D)派生類是基類的組合派生類的構造函數的成員初始化列表中,不能包含__C)基類的子對象初始化____。A)基類的構造函數B)派生類中子對象的初始化
C)基類的子對象初始化D)派生類中一般數據成員的初始化
下列對派生類的描述中,錯誤的是(D.)
A. 派生類的缺省繼承方式是PRIVATEB. 派生類至少有一個基類
C. 一個派生類可以作為另一個派生類的基類D. 派生類只繼承了基類的公有成員和保密成員下列說法中錯誤的是(D.)
A. 公有繼承時基類中的public成員在派生類中是public的B. 公有繼承時基類中的private成員在派生類中是不可直接訪問的 C. 私有繼承時基類中的public成員在派生類中是private的 D. 私有繼承時基類中的public成員在派生類中是protected的若派生類的成員函數不能直接訪問基類中繼承來的某個成員,則該成員一定是基類中的私有成員)實現運行時的多態性要使用___虛函數__。
關于函數的描述中,A)派生類的虛函數與基類的虛函數具有不同的參數個數和類型__是正確的。關于動態聯編的下列敘述中,__A)__是錯誤的。
A)動態聯編是以虛函數為基礎的B)動態聯編調用虛函數操作是指向對象的指針或引用 C)動態聯編是在運行時確定所調用的函數代碼的D)動態聯編是在編譯時確定操作函數的用于類中虛成員函數說明的關鍵字()
A.virtualB.publicC.protectedD.private編譯時的多態性通常使用()獲得。
A.繼承B.虛函數C.重載函數D.析構函數
若要強制C++對虛函數的調用使用靜態聯編,則在調用中對該函數使用(指針)C++有(.2)種聯編。
虛函數必須是類的(成員函數)
不能說明為虛函數的是(構造函數)
不同的對象可以調用相同名稱的函數,并可導致完全不同的行為的現象稱為(.多態性)若析構函數是虛函數,則delete對析構函數的調用采用(重載函數)
若派生類中沒有對基類的虛函數進行重定義,則它繼承基類中的(成員函數)多態調用指(借助于指向對象的基類指針或引用調用一個純虛函數)動態聯編所支持的多態性稱為(運行時的多態性)下列描述中,()是抽象類的特性。
A)可以說明虛函數B)可以定義友元函數C)可以進行構造函數重載D)不能說明其對象(純虛函數)是一個在基類中說明的虛函數,它在該基類中沒有定義,但要求任何派生類中的可訪問性的規定是相同的。如果一個類至少有一個純虛函數,那么就稱該類為(抽象類)。下面哪個基類中的成員函數表示純虛函數(virtual void vf()=0)
關于純虛函數,下列表述正確的是(純虛函數是給出實現版本(即無函數體定義)的虛函數)下面哪個基類中的成員函數表示純虛函數()
A.virtual void vf(int)B.void vf(int)=0 C.virtual void vf()=0D.virtual void vf(int)||
關于純虛函數,下列表述正確的是(純虛函數是給出實現版本(即無函數體定義)的虛函數)1 下列關于對象的描述不正確的是(A)A對象只能描述有形的東西
B對象具有屬性和服務兩個主要因素
C現實世界中的一切事物都可以看作對象,但只有在具體的系統中加以論述才有實際的意義
D對象的屬性是對象的靜態特征,服務是動態特征,并且對象的屬性只能由本對象的服務來操作 2 構成對象的兩個主要因素是(屬性)和(服務),其中(服務)屬于動態屬性,(屬性)屬于靜態屬性,(屬性)只能由(服務)來操作。關于多繼承二義性的描述中,錯誤的是C A.一個派生類的基類中都有某個同名成員,在派生類中對這個成員的訪問可能出現二義性B.解決二義性的最常用的方法是對成員名的限度法C.基類和派生類同時出現的同名函數,也存在二義性問題D.一個派生類是從倆個基類派生出來的,而這倆個基類有又以個共同的基類,對該基類成員進行訪問時,可能出現二義性。設置虛基類的目的是 消除二義性 虛基類聲明 class B virtual public
帶有虛基類的多層派生類構造函數的成員初始化列表都要列出虛基類構造函數,這樣將對虛基類初始化 二次 子類型描述錯誤的是 A子類型關系是可逆的A子類型關系是可逆的 B公有派生類的對象可以初始化基類的引用 C只有在公有繼承下,派生類是基類的字類型D子類型是可傳遞的不符合復制兼容規則的是B基類的對象可以賦值給派生類的對象
A派生類的對象可以賦值給基類的對象B基類的對象可以賦值給派生類的對象C派生類的對象可以初始化給基類的對象D 派生類的對象的地址可以賦值給指向基類的指針
第二篇:二級c++筆試歷年真題
2010年3月考試真題(第31次)
1.數據流程圖(DFD圖)是______。
A、軟件概要設計的工具 B、軟件詳細設計的工具
C、結構化方法的需求分析工具 D、面向對象方法的需求分析工具
常見的需求分析方法有:結構化分析方法和面向對象的分析方法。結構化分析就是使用數據流圖(DFD)、數據字典(DD)、結構化英語、判定表和判定樹等工具,來建立一種新的、稱為結構化規格說明的目標文檔。故本題答案為C。
2.軟件(程序)調試的任務是______。
A、診斷和改正程序中的錯誤 B、盡可能多地發現程序中的錯誤 C、發現并改正程序中的所有錯誤 D、確定程序中錯誤的性質
程序調試的任務是診斷和改正程序中的錯誤。它與軟件測試不同,軟件測試是盡可能多地發現軟件中的錯誤。先要發現軟件的錯誤,然后借助于一定的調試工具去執行找出軟件錯誤的具體位置。軟件測試貫穿整個軟件生命期,調試主要在開發階段。故本題答案為A。
3.軟件按功能可以分為:應用軟件、系統軟件和支撐軟件(或工具軟件)。下面屬于系統軟件的是______。
A、編輯軟件 B、操作系統 C、教務管理系統 D、瀏覽器
軟件按功能可以分為:應用軟件、系統軟件、支撐軟件(或工具軟件)。應用軟件是為解決特定領域的應用而開發的軟件。例如,事務處理軟件,工程與科學計算軟件,實時處理軟件,嵌入式軟件,人工智能軟件等應用性質不同的各種軟件。系統軟件是計算機管理自身資源,提高計算機使用效率并為計算機用戶提供各種服務的軟件。如操作系統,編譯程序,匯編程序,網絡軟件,數據庫管理系統等,所以選項B屬于系統軟件。故本題答案為B。
4.軟件生命周期可分為定義階段,開發階段和維護階段。詳細設計屬于______。
A、定義階段 B、開發階段 C、維護階段 D、上述三個階段
軟件生命周期可分為軟件定義、軟件開發及軟件運行維護三個階段。軟件開發階段包括概要設計、詳細設計、實現和測試四個活動階段。故本題答案為B。5.下列敘述中正確的是______。
A、對長度為n的有序鏈表進行查找,最壞情況下需要的比較次數為n B、對長度為n的有序鏈表進行對分查找,最壞情況下需要的比較次數為(n/2)C、對長度為n的有序鏈表進行對分查找,最壞情況下需要的比較次數為D、對長度為n的有序鏈表進行對分查找,最壞情況下需要的比較次數為對于長度為n的有序線性表,在最壞情況下,二分查找只需要比較 故本題答案為A。6.有兩個關系R和T如下:
次,而順序查找需要比較n次。二分法查找只適用于順序存儲的有序表,如果采用鏈式存儲結構,也只能用順序查找,所以選項A是正確的。
則由關系R得到關系T的操作是______。A、選擇 B、投影 C、交 D、并
從關系中找出滿足給定條件的元組的操作稱為選擇。選擇是從行的角度進行的運算,即從水平方向抽取記錄。由圖可知關系R通過運算得到關系T,關系T與關系R相比,屬性的個數沒有發生變化,記錄的條數發生了變化。因此所使用的運算應該是選擇。故本題答案為A。7.算法的時間復雜度是指______。
A、算法的執行時間 B、算法所處理的數據量 C、算法程序中的語句或指令條數 D、算法在執行過程中所需要的基本運算次數
所謂算法的時間復雜度,是指執行算法所需要的計算工作量。為了能夠比較客觀地反映出一個算法的效率,在度量一個算法的工作量時,不僅應該與所使用的計算機、程序設計語言以及程序編制者無關,而且還應該與算法實現過程中的許多細節無關。為此,可以用算法在執行過程中所需基本運算的執行次數來度量算法的工作量。故本題答案為D。
8.數據庫設計中,用E-R圖來描述信息結構但不涉及信息在計算機中的表示,它屬于數據庫設計的______。
A、需求分析階段 B、邏輯設計階段 C、概念設計階段 D、物理設計階段
E-R圖是E-R模型的一種非常直觀的圖的形式表示,它描述信息結構但不涉及信息在計算機中的表示,它是數據庫概念設計階段的工具。故本題答案為C。
9.在學生管理的關系數據庫中,存取一個學生信息的數據單位是______。
A、文件 B、數據庫 C、字段 D、記錄
實體是概念世界中的基本單位,屬性附屬于實體,它本身并不構成獨立單位。屬性有屬性域,每個實體可取屬性域內的值。一個實體的所有屬性取值組成了一個值集叫元組(或稱記錄)。在概念世界中,可以用元組表示實體,也可用它區別不同的實體。所以在學生管理的關系數據庫中,存取一個學生信息的數據單位是元組(或記錄)。故本題答案為D。
10.數據庫管理系統中負責數據模式定義的語言是______。
A、數據定義語言 B、數據管理語言 C、數據操縱語言 D、數據控制語言
數據定義語言(DDL):該語言負責數據的模式定義與數據的物理存取構建。
數據操縱語言(DML):該語言負責數據的操縱,包括查詢及增、刪、改等操作。
數據控制語言(DCL):該語言負責數據完整性、安全性的定義與檢查以及并發控制、故障恢復等功能。
故本題答案為A。11.有如下兩個類定義 class XX{ private: double x1;protected: double x2;public: double x3;};class YY:protected XX{ private: double y1;protected: double y2;public: double y3;};在類YY中保護成員變量的個數是______。
A、1 B、2 C、3 D、4 本題主要考查了類的繼承與派生。
類的繼承方式有三種:公有(public)繼承、保護(protected)繼承和私有(private)繼承。當派生類從基類保護繼承時,基類的公有成員和保護成員在派生類中都為保護成員。本題派生類YY從基類XX保護繼承,因此基類XX的公有成員x3和保護成員x2都成為派生類YY的保護成員,再加上派生類YY自身的保護成員y2,因此類YY中有3個保護成員。故本題答案為C。12.在C++中,cin是一個______。
A、類 B、對象 C、模板 D、函數
本題主要考查了I/O流。
在C++中,數據的輸入與輸出是通過I/O流來實現,cin和cout是預定義的流類對象。
故本題答案為B。
13.若x和y是程序中的兩個整型變量,則下列if語句中正確的是______。
A、if(x==0)y=1;else y=2;B、if(x==0)then y=1 else y=2;C、if(x==0)y=1 else y=2;D、if x==0 y=1;else y=2;本題主要考查了if語句。if語句的語法形式為: if(表達式)語句1 else 語句2 在C++中,if語句中沒有then,語句最后必須有一個分號,因此選項A正確,選項B和選項C錯誤;在選項D中,表達式x==0應該用圓括號括起來,因此選項D錯誤。故本題答案為A。14.將運算符“+”重載為非成員函數,下列原型聲明中,錯誤的是______。
A、MyClock operator +(MyClock,long);B、MyClock operator +(MyClock,MyClock);C、MyClock operator +(long,long);D、MyClock operator +(long,MyClock);本題主要考查了運算符的重載。
運算符的重載是針對新類型數據的實際需要,對原有運算符進行適當的改造。一般來講,重載的功能應當與原有功能類似,不能改變原運算符的操作對象個數,同時至少要有一個操作對象是自定義類型。選項A、選項B和選項D的兩個參數中至少有一個參數是自定義類型,因此選項A、選項B和選項D正確。選項C中兩個參數都是基本數據類型,沒有自定義類型,因此選項C錯誤。故本題答案是C。15.要定義整型數組x,使之包括初值為0的三個元素,下列語句中錯誤的是______。
A、int x[3]={0,0,0};B、int x[]={0};C、static int x[3]={0};D、int x[]={0,0,0};本題主要考查了一維數組的定義與初始化。
一維數組的定義形式為:
數據類型 數組名[數組元素個數];數組的初始化就是在聲明數組時給部分或全部元素賦初值。選項A定義了有三個元素的整型數組x,并初始化三個元素的值為0,因此選項A正確;當聲明數組時沒有給出數組元素個數,但是有初始化列表,數組元素個數由列表中元素個數來確定,因此選項D正確;選項B沒有給出數組元素個數,并且在初始化列表中只給一個元素值,因此選項B定義了只有一個元素的整型數組,故選項B錯誤;對于數值類型數組,如果給定的數值不夠,則沒有指定數值的元素將初始化為0,因此選項C正確。故本題答案為B。16.下列控制格式輸入輸出的操作符中,能夠設置浮點數精度的是______。
A、setprecision B、setw C、setfill D、showpoint 本題主要考查了輸出流的格式控制。
setprecision(int n)用于控制輸出流顯示浮點數的精度,整數n代表顯示的浮點數數字的個數。因此選項A正確。setw(int n)用于預設輸入輸出寬度。setfill(char c)用于預設填充字符。
showpoint用于給浮點數顯示小數點和尾部的0。
因此選項B、選項C和選項D不正確。故本題答案為A。17.若MyTemp是一個只有一個虛擬類型參數的類模板,且有如下語句序列 MyTemp
A、1 B、2 C、3 D、0 本題主要考核類模板。
類模板聲明的語法形式為: template<模板參數表> class 類名 {類成員聲明} 使用類模板來建立對象時,應按如下形式聲明:
類名<模板實參表> 對象名1,…,對象名n;在定義對象的過程中,編譯系統會自動地根據需要生成相應的類定義,這種依據類模板生成類定義的過程稱為類模板的實例化。類模板實例化所生成的每一個類定義就是相應類模板的一個實例,因此類模板的實例個數由類型參數的種類決定。本題使用類模板MyTemp定義對象時指定了兩種類型參數:double和long,因此所生成的實例個數是2。故本題答案為B。18.下列代碼段聲明了3個類 class Person{};class Student:public Person{};class Undergraduate:Student{};下列關于這些類之間關系的描述中,錯誤的是______。
A、類Person是類Undergraduate的基類 B、類Undergraduate從類Student公有繼承 C、類Student是類Person的派生類 D、類Undergraduate是類Person的派生類
本題主要考查了類的繼承與派生。
在C++中,定義派生類的一般語法形式為:
class 派生類名:繼承方式 基類名1,繼承方式 基類名2,…,繼承方式 基類名n { 派生類成員聲明;};類的繼承方式有三種:公有(public)繼承、保護(protected)繼承和私有(private)繼承。如果不顯式地給出繼承方式,缺省的類繼承方式是私有(private)繼承。在聲明派生類Undergraduate時缺省繼承方式,因此類Undergraduate從類Student私有繼承,故選項B錯誤。故本題答案為B。19.將前綴運算符“--”重載為非成員函數,下列原型中,能正確用于類中說明的是______。
A、Decr& operator--(int);B、Decr operator--(Decr&,int);C、friend Decr& operator--(Decr&);D、friend Decr operator--(Decr&,int);本題主要考查了運算符的重載。
運算符--既可以是前綴運算符(前減1),又可以是后綴運算符(后減1)。為了區分這兩種情況,重載這兩個運算符時必須在格式上有所區別:重載后綴--時必須多一個虛擬參數:int。如果將前綴--和后綴--作為非成員函數重載,那個唯一的操作數必須作為第一參數提供。又因為要修改第一操作數,對應的參數必須聲明為引用。前綴--作為非成員函數重載的一般形式為: friend Decr& operator--(Decr&);后綴--作為非成員函數重載的一般形式為: friend Decr operator--(Decr&,int);當運算符重載為類的成員函數時,函數的參數個數比原來的參數個數少一個。
前綴--作為成員函數重載的一般形式為: Decr& operator--();后綴--作為成員函數重載的一般形式為: Decr operator--(int);因此選項C正確,選項D是后綴--作為非成員函數重載的形式。
故本題答案為C。20.有如下程序: #include A、2332 B、2323 C、3232 D、3223 本題主要考查了派生類的構造函數與析構函數。 構造函數在對象被創建的時候由系統自動調用,建立派生類對象時,構造函數的執行順序如下:(1)執行基類的構造函數,調用順序按照各個基類被繼承時聲明的順序(自左向右);(2)執行成員對象的構造函數,調用順序按照各個成員對象在類中聲明的順序(自上而下);(3)執行派生類的構造函數。 析構函數用來完成對象被刪除前的一些清理工作,在對象的生存期即將結束的時刻被系統自動調用。派生類的析構函數在執行過程中也要對基類和成員對象進行操作,但它的執行過程與構造函數嚴格相反,即:(1)對派生類新增普通成員進行清理。(2)調用成員對象析構函數,對派生類新增的成員對象進行清理。(3)調用基類析構函數,對基類進行清理。 main()函數中,第一條語句Derived objl2(2,3);創建派生類對象obj12時,先以第一個實參2初始化基類Base成員valB,執行基類Base的構造函數,輸出valB的值2;然后以第二個實參值3初始化派生類Derived成員valD,執行派生類Derived的構造函數,輸出valD的值3;在對象obj12的生存期即將結束時,先調用派生類Derived的析構函數,輸出valD的值3,然后調用基類析構函數,輸出valB的值2。因此本程序運行時的輸出結果是2332。故本題答案為A。21.有如下程序 #include A、P8-E4 B、P8-C16-C、P0-E4-D、P0-C16-本題主要考查了函數的重載、常對象和常成員函數。 使用const關鍵字修飾的對象稱為常對象,使用const關鍵字說明的成員函數稱為常成員函數,通過常對象只能調用它的常成員函數,而不能調用其他成員函數。兩個以上的函數,具有相同的函數名,但是形參的個數或類型不同,編譯器根據實參和形參的類型及個數的最佳匹配,自動確定調用哪一個函數,這就是函數的重載。const關鍵字可以用于對重載函數的區分。 在main()函數中,第一條語句定義類A的對象a1,系統自動調用類A的構造函數,以默認形參值0初始化對象a1的數據成員r1;第二條語句定義常對象a2,系統自動調用類A的構造函數,以實參值4初始化對象a2的數據成員r1;第三條語句通過對象a1調用帶一個整型形參的沒用const修飾的print()函數,表達式r1*r1*r1=0*0*0=0,因此輸出P0-,第四條語句常對象a2調用的是用const修飾的常成員函數print(),表達式r1*r1的值為:4*4=16,因此輸出C16-。故程序運行時的輸出結果是P0-C16-故本題答案為D。22.若MyClass是一個類名,且有如下語句序列 MyClass c1,*c2;MyClass *c3=new MyClass;MyClass &c4=c1;上面的語句序列所定義的類對象的個數是______。 A、1 B、2 C、3 D、4 本題主要考查了對象的定義。 第1條語句定義了MyClass類的對象c1和MyClass類的對象指針變量c2。因為定義對象指針只是得到了用于存儲對象地址的指針變量,不會創建對象,因此第1條語句只定義了一個類對象c1;第2條語句定義了對象指針變量c3。并初始化c3指向用new運算符動態創建的對象,因此第2條語句用new運算符動態定義了一個對象;第3條語句聲明了對象引用c4,并將其初始化為對象c1的一個別名。因為創建對象引用只是為已有對象創建別名,不會創建對象,因此第3條語句沒有創建類對象。因此這3條語句所定義的類對象的個數是2。 故本題答案為B。 23.下列關于類模板的描述中,錯誤的是______。 A、類模板的成員函數都是模板函數 B、可以為類模板參數設置默認值 C、類模板描述了一組類 D、類模板中只允許有一個類型參數 本題主要考查了類模板。 使用類模板可以為類聲明一種模式,使得類中的某些數據成員、某些成員函數的參數、某些成員函數的返回值能取任意類型。因此選項C正確;類模板聲明的語法形式為: template<模板參數表> class 類名 {類成員聲明} 其中“模板參數表”由用逗號分隔的若干類型標識符或常量表達式構成,因此選項D錯誤;可以為類模板中的類型參數和非類型參數提供默認值,如果某個類模板參數有默認值,該列表中的所有后續參數也都必須指定默認值。因此選項B正確。類模板的成員函數都是模板函數,因此選項A正確。故本題答案為D。24.有如下程序 #include A、無輸出 B、1 C、11 D、111 本題主要考查了拷貝構造函數。 拷貝構造函數是一種特殊的構造函數,具有一般構造函數的所有特性,其形參是本類的對象的引用。作用是使用一個已知的對象初始化一個正在創建的同類對象。拷貝構造函數在以下三種情況下都會被調用: 1)當用類的一個對象初始化該類的另一個對象時; 2)如果函數的形參是類的對象,調用函數時,進行形參和實參結合時; 3)如果函數的返回值是類的對象,函數執行完成返回調用者時。 函數fun的形參為類Test的對象的引用,main()函數中,第二條語句x=fun(y);調用函數fun()。使引用u為實參y的別名,然后執行函數fun()的第一條語句Test t=u;,即用Test類的對象u去初始化該類的另一個對象t,系統將自動調用拷貝構造函數,輸出1,然后執行函數fun()的第二條語句return t;,函數fun()的返回值為Test類的對象t,函數執行完成返回調用者時,系統將第二次自動調用拷貝構造函數,輸出1,程序執行結束。故運行這個程序的輸出結果是11。故本題答案為C。 25.要定義一個引用變量p,使用引用類MyClass的一個對象,正確的定義語句是______。 A、MyClass p=MyClass;B、MyClass p=new MyClass;C、MyClass &p=new MyClass;D、MyClass a, &p=a;本題主要考查了引用的聲明。 引用的聲明形式:類型標識符 &引用名=目標變量名;說明:(1)&在此不是求地址運算,而是起標識作用。 (2)類型標識符是指目標變量的類型。 (3)聲明引用時,必須同時對其進行初始化。 (5)聲明一個引用,不是新定義了一個變量,它只表示該引用名是目標變量名的一個別名,它本身不是一種數據類型,因此引用本身不占存儲單元,系統也不給引用分配存儲單元。 選項A和選項B在變量p的左邊沒有標識&,不符合引用聲明形式,因此選項A和選項B錯誤;選項C中,賦值號右邊不是已存在的變量名,不符合引用聲明的語法形式,因此選項C錯誤;選項D先聲名對象a,然后聲明引用為已聲明變量名a的別名,符合引用聲明形式,因此選項D正確。故本題答案為D。26.下列關于函數的描述中,錯誤的是______。 A、函數可以沒有返回值 B、函數可以沒有參數 C、函數可以是一個類的成員 D、函數不能被定義為模板 本題主要考查了函數。 函數定義的語法形式: 類型標識符 函數名(形式參數列表){ 語句序列 } 無返回值的函數其類型標識符為void。故選項A正確;函數可以沒有參數,當函數定義時沒有形參,則函數調用時,<實參表>亦為空,故選項B正確;函數可以是類的成員,故選項C正確;模板是C++支持參數化多態性的工具,函數模板實現了類型參數化,將函數處理的數據類型作為參數,提高了代碼的可重用性,故選項D錯誤。故本題答案為D。 27.下列程序段中包含4個函數,其中具有隱含this指針的是______。int fun1();class Test{ public: int fun2();friend int fun3();static int fun4();};A、fun1 B、fun2 C、fun3 D、fun4 本題主要考查了this指針。 this指針是一個隱含于每一個非靜態成員函數中的特殊指針。它是一個指向正在被該成員函數操作的對象,也就是要操作該成員函數的對象。因此類Test的非靜態成員函數fun2中具有隱含this指針,故選項B正確。函數fun1和函數fun3均不是成員函數,因此不具有隱含this指針,故選項A和選項C不正確;靜態成員不屬于類的任何一個對象,而是屬于整個類,因此靜態成員沒有this指針,故靜態成員函數fun4中沒有this指針,故選項D錯誤。故本題答案為B。28.下面是類Shape的定義: class Shape{ public: virtual void Draw()=0;};下列關于Shape類的描述中,正確的是______。 A、類Shape是虛基類 B、類Shape是抽象類 C、類Shape中的Draw函數聲明有誤 D、語句“Shape s;”能夠建立Shape的一個對象s 本題主要考查了純虛函數和抽象類。 聲明純虛函數的語法形式為: virtual 函數類型 函數名(參數表)=0;所以函數Draw()是純虛函數。帶有純虛函數的類是抽象類,所以類Shape是抽象類,因此選項B正確;抽象類不能實例化,即不能定義一個抽象類的對象,因此選項D錯誤。故本題答案是B。29.關于函數中的<返回類型>,下列表述中錯誤的是______。 A、<返回類型>中有可能包含關鍵字int B、<返回類型>中有可能包含自定義標識符 C、<返回類型>中有可能包含字符* D、<返回類型>中有可能包含[] 本題主要考查了函數的返回類型。 函數的定義形式為: 返回類型 函數名(形參列表){函數體} 返回類型又稱函數類型,表示一個函數所計算(或運行)的結果值的類型。因為函數的結果值可以為整型,因此返回類型可能包含關鍵字int,選項A正確;函數的返回類型可以為類,因此返回類型可能包含自定義標識符,選項B正確;函數的返回類型可以為指針,因此返回類型可能包含字符*,選項C正確;但返回類型不能為數組,因此返回類型中不可能包含[],因此選項D錯誤。 故本題答案為D。 30.打開文件時可單獨或組合使用下列文件打開模式 ①ios_base::app ②ios_base::binary ③ios_base::in ④ios_base::out 若要以二進制讀方式打開一個文件,需使用的文件打開模式為______。 A、①③ B、①④ C、②③ D、②④ 本題主要考查了I/O流。 打開一個與輸出流關聯的文件時,通常要指定文件模式。ios_base::app模式的功能:以寫方式打開文件,若文件不存在則創建文件,若文件已存在則向文件尾添加數據;ios_base::binary模式:以二進制模式打開文件(缺省為文本模式);ios_base::in模式:以讀方式打開文件;ios base::out模式:以寫方式打開文件,若文件不存在則創建,若文件已存在則清空原內容(ofstream默認的打開方式)。因此若要以二進制讀方式打開一個文件,需使用的文件打開模式為:ios_base::binary|ios base::in。 故本題答案為C。 31.下列關于繼承方式的描述中,錯誤的是______。 A、如果不顯式地指定繼承方式,缺省的繼承方式是私有(private)B、采用公有繼承方式時,基類中的公有成員在派生類中仍然是公有成員 C、采用保護繼承方式時,基類中的保護成員在派生類中仍然是保護成員 D、采用私有繼承方式時,基類中的私有成員在派生類中仍然是私有成員 本題主要考查了類的繼承與派生。 類的繼承方式有三種:公有(public)繼承、保護(protected)繼承和私有(private)繼承。如果不顯式地給出繼承方式,缺省的類繼承方式是私有(private)繼承。因此選項A正確;當派生類從基類公有繼承時,基類的公有成員和保護成員的訪問屬性在派生類中不變,仍作為派生類的公有成員和保護成員,因此選項B正確;當派生類從基類保護繼承時,基類的公有成員和保護成員在派生類中都為保護成員,因此選項C正確;當派生類從基類私有繼承時,基類的公有成員和保護成員在派生類中都改變為私有成員;無論哪種繼承方式,派生類中的成員都不能訪問基類中的私有成員,因此選項D錯誤。 故本題答案為D。 32.下列關于運算符重載的描述中,錯誤的是______。 A、可以通過運算符重載在C++中創建新的運算符 B、賦值運算符只能重載為成員函數 C、運算符函數重載為類的成員函數時,第一操作數是該類對象 D、重載類型轉換運算符時不需要聲明返回類型 本題主要考查了運算符重載。 “運算符重載”是針對C++中原有運算符進行的,不可能通過重載創造出新的運算符,因此選項A錯誤;在C++中,運算符的重載方式有兩種:(1)重載為成員函數;(2)重載為友元函數。“=”、“[]”、“()”、“->”以及所有的類型轉換運算符只能重載為成員函數,因此選項B正確;運算符重載為成員函數時,第一操作數就是對象本身,并不顯式地出現在參數表中,因此選項C正確;重載類型轉換運算符的格式為:operator 類型名(),其中“類型名”就代表了返回類型,因此重載類型轉換運算符時不需要聲明返回類型,因此選項D正確。 故本題答案為A。33.有以下程序: #include A、1_120 B、2_120 C、1_20 D、2_20 本題主要考查了派生類的構造函數、靜態成員函數以及虛函數。 建立派生類對象時,構造函數的執行順序如下:(1)執行基類的構造函數,調用順序按照各個基類被繼承時聲明的順序(自左向右);(2)執行成員對象的構造函數,調用順序按照各個成員對象在類中聲明的順序(自上而下);(3)執行派生類的構造函數。 用static關鍵字聲明的數據成員為靜態數據成員,靜態成員在每個類只有一個拷貝,由該類的所有對象共同維護和使用。 在成員函數聲明的前面加上virtual修飾,即把該函數聲明為虛函數。在C++中,一個基類指針(或引用)可以用于指向它的派生類對象,而且通過這樣的指針(或引用)調用虛函數時,被調用的是該指針(或引用)實際所指向的對象類的那個重定義版本。 本題中,函數show在基類B和派生類D中都聲明為虛函數。在基類B中把保護成員定義為靜態成員count,派生類D以公有繼承方式從基類B繼承了保護成員count。它被基類B和派生類D的所有對象所共享,但它不屬于類的任何一個對象。在main()函數中,第一條語句通過new運算符創建派生類D的對象,并把對象的首地址賦給基類指針ptr,即基類指針ptr指向派生類對象。在創建派生類對象時,先執行基類B的構造函數,count的值為1,然后執行派生類D的構造函數,count的值為2,y的值為120;main()函數的第二條語句通過基類指針ptr調用虛函數show(),被調用的是該指針實際所指向的派生類對象類的重定義版本,即輸出2_120。 故本題答案為B。 34.下列敘述中,錯誤的是______。 A、false是一個邏輯型常量 B、“b”是一個字符型常量 C、365是一個int常量 D、3.1415926是一個double常量 本題主要考查了常量。 在C++中,邏輯型常量有兩個:false(假)和true(真),因此選項A正確;字符型常量是單引號括起來的一個字符,字符串常量是雙引號括起來的字符序列,因此“b”是字符串,不是字符,故選項B錯誤;整型常量默認為int型,因此選項C正確;實型常量默認為double型,因此選項D正確。 故本題答案為B 35.在下列字符中,不允許作為C++標識符的是______。 A、b B、B C、_ D、2 本題主要考查了C++中的標識符命名規則。 標識符的組成要符合一定的規則: (1)標識符是一個以字母或下劃線開頭的,由字母、數字、下劃線組成的字符串; (2)標識符不能與任意一個關鍵字同名; (3)標識符中的字母區分大小寫; (4)標識符不宜過長。 在選項D中,標識符的第一個字符是數字,因此不是合法的標識符,不允許作為C++標識符。 故本題答案為D。 36.軟件是______、數據和文檔的集合。 標準答案為:程序 考生答案為:函數 計算機軟件是計算機系統中與硬件相互依存的另一部分,是包括程序、數據及相關文檔的完整集合。37.有一個學生選課的關系,其中學生的關系模式為:學生(學號,姓名,班級,年齡),課程的關系模式為:課程(課號,課程名,學時),其中兩個關系模式的鍵分別是學號和課號,則關系模式選課可定義為:選課(學號,______,成績)。 標準答案為:課號 考生答案為:課號 碼也稱為關鍵字,是表中若干屬性的屬性組,其值惟一標識表中的一個元組。在關系模式選課中能惟一標識一個元組的是學號,課號。 38.設某循環隊列的容量為50,如果頭指針front=45(指向隊頭元素的前一位置),尾指針rear=10(指向隊尾元素),則該循環隊列中共有______個元素。 標準答案為:15 或 十五 或 15 考生答案為:35 在循環隊列中,用隊尾指針rear指向隊列中的隊尾元素,用排頭指針front指向排頭元素的前一個位置,因此,從排頭指針front指向的后一個位置直至隊尾指針rear指向的位置之間所有的元素均為隊列中的元素。本題中隊列的容量為50,頭指針為45,那么從頭指針到50之間有46、47、48、49、50,共5個元素,尾指針為10,那么從1到10之間有10個元素,所以共有15個元素。39.設二叉樹如下: 對該二叉樹進行后序遍歷的結果為______。 標準答案為:EDBGHFCA 或 E、D、B、G、H、F、C、A 或 E,D,B,G,H,F,C,A 或 E,D,B,G,H,F,C,A 考生答案為:EDGHFCA 后序遍歷是指在訪問根結點、遍歷左子樹與遍歷右子樹這三者中,首先遍歷左子樹,然后遍歷右子樹,最后訪問根結點,并且,在遍歷左、右子樹時,仍然先遍歷左子樹,然后遍歷右子樹,最后訪問根結點。40.一個隊列的初始狀態為空。現將元素A,B,C,D,E,F,5,4,3,2,1依次入隊,然后再依次退隊,則元素退隊的順序為______。 標準答案為:A,B,C,D,E,F,5,4,3,2,1 或 A,B,C,D,E,F,5,4,3,2,1 或 A、B、C、D、E、F、5、4、3、2、1 或 ABCDEF54321 或 A,B,C,D,E,F,5,4,3,2,1 或 A,B,C,D,E,F,5,4,3,2,1 或 A,B,C,D,E,F,5,4,3,2,1 或 A,B,C,D,E,F,5,4,3,2,1 考生答案為:A,B,C,D,E,F,5,4,3,2,1 隊列是指允許在一端進行插入、而在另一端進行刪除的線性表。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。在隊列這種數據結構中,最先插入的元素將最先能夠被刪除,反之,最后插入的元素將最后才能被刪除。因此,隊列又稱為“先進先出”或“后進后出”的線性表。41.若x和y是兩個整型變量,在執行了語句序列 x=5;y=6;y+=x--;后,x+y的值為______。 標準答案為:15 或 15 考生答案為:15 本題主要考查了后置減1運算符。 后置減1運算符是先使用變量,然后變量再自減。因此語句y+=x--;的功能相當于y=y+x;x=x-1;兩條語句,因此執行語句序列x=5;y=6;y+=x--;后x的值為4,y的值為11,故x+y的值為15。42.有如下的函數定義: int Xfun(int x){ int y=x;{int x=10;y+=x;} return x+y;} 通過表達式Xfun(5)調用該函數,則得到的返回值為______。 標準答案為:20 或 20 考生答案為:20 本題主要考查了標識符的作用域與可見性。作用域是一個標識符在程序正文中有效的區域。程序運行到某一點,能夠引用到的標識符,就是該處可見的標識符,如果在兩個或多個具有包含關系的作用域中聲明了同名標識符,則外層標識符在內層不可見。函數調用表達式Xfun(5)把實參5傳遞給函數Xfun的形式參數x,形參x的作用域為整個函數體。Xfun函數體的第一條語句定義變量y并初始化y的值為5,第二個復合語句中的第一條語句定義同名變量x,并初始化x的值為10,在復合語句中外層變量x不可見,因此執行復合語句的第二條語句y+=x;后y的值為15,內層變量x的作用域結束。然后執行語句return x+y;得到函數的返回值5+15=20。43.下面的函數定義是某函數模板能夠生成的函數實例 int square(int n){ return n*n;} double square(double n){ return n*n;} 由此可知,該函數模板的定義是______。 標準答案為:template 函數模板是一系列相關函數的模型或樣板,這些函數的源代碼形式相同,只是所針對的數據類型不同。對于函數模板,數據類型本身成了它的參數,因而是一種參數化類型的函數。聲明一個函數模板的格式是: template<模板形參表聲明> 函數聲明 其中的模板形參表聲明是由一個或多個模板形參組成(如果是多個,需要用逗號隔開)。每個模板形參具有下面幾種形式: (1)typename 參數名(2)class 參數名(3)類型修飾 參數名 這里的參數名可以是任意的標識符。在這三種形式中,前兩種是等價的:在聲明模板參數時,關鍵字typename與class可以互換。 因此該題函數模板定義是template 44.在執行語句序列 int i=0;do i++;while(i*i<10);時,do后面的循環體語句i++被執行的次數為______。 標準答案為:4 或 4 或 四 考生答案為:4 本題主要考查了do-while循環語句。 第一次執行循環體后i的值為1,i*i<10成立,繼續執行循環體,第二次執行循環體后i的值為2,i*i<10成立,繼續執行循環體,第三次執行循環體后i的值為3,i*i<10成立,繼續執行循環體,第四次執行循環體后i的值為4,i*i<10不成立,結束循環。故循環語句被執行次數為4。 45.假設Xcs是一個類,該類中一個成員函數的原型為“Xcs* abc();”,則在類外定義時對應的函數頭為______。 標準答案為:Xcs* Xcs::abc()考生答案為:Xcs* Xcs::abc()本題主要考查了成員函數的類外定義。 在類外定義成員函數的語法形式為: 返回值類型 類名::成員函數名(參數表){ 函數體 } 因此在類Xcs之外定義原型為“Xcs* abc();”的成員函數對應的函數頭為Xcs* Xcs::abc()。46.請將下面的程序補充完整,使得程序輸出“飄是張娜的書”。#include 在成員函數聲明的前面加上virtual修飾,即把該函數聲明為虛函數。在派生類中可以重新定義從基類繼承下來的虛函數,從而提供該函數的適用于派生類的專門版本。本題在派生類MyBook中重定義了虛函數PrintInfo,因此第1個空應填virtual。 派生類的構造函數必須要以合適的初值作為參數,隱含調用基類和新增成員對象的構造函數,用以初始化它們各自的數據成員,然后再對新增的其他數據成員進行初始化。派生類構造函數的一般格式如下: <派生類名>::<派生類名>(<總參數表>):<基類名1>(參數表1),…… <基類名n>(<參數表n>), <成員對象名1>(<參數表n+1>),……, <成員對象名m>(<參數表n+m>){<派生類構造函數體>} 因此第二個空應填Book(s1),調用基類的構造函數以初始化其數據成員。47.有如下的函數定義: int Xfun(int *a,int n){ int x=*a;for(int* pa=a+1;pax)x=*pa;return x;} 若在執行了語句 int x[5]={23,46,78,55,16};后,通過表達式Xfun(x,5)調用該函數,則得到的返回值為______。 標準答案為:78 或 78 考生答案為: 本題主要考查了數組、指針和求最大值算法。 函數Xfun的功能是求首地址為a的n個數據的最大數,并把所求的最大數作為函數的返回值。函數調用表達式Xfun(x,5)把數組x的首地址傳遞給函數Xfun的第一個形式參數指針變量a,常數5傳遞給函數Xfun的第二個形式參數n,因此函數調用表達式Xfun(x,5)的返回值是數組x的5個元素的最大數78。48.請將下面的類Date的定義補充完整,使得由語句 Date FirstDay;定義的對象FirstDay的值為2010年1月1日。class Date{ public: Date(______):year(y),month(m),day(d){ } private: int year,month,day;//依次表示年、月、日 };標準答案為:int y=2010,int m=1,int d=1 考生答案為:int y,intm,int d 本題主要考查了構造函數。 構造函數的作用是在對象被創建時利用特定的值構造對象,將對象初始化為一種特定的狀態,無參數的構造函數稱為默認形式的構造函數,如果類中定義構造函數,編譯系統將不會再為其生成默認構造函數。構造函數在對象被創建的時候由系統自動調用。類Date中定義了一個構造函數,由類Date的構造函數的初始化列表可知構造函數的形參應是三個整型變量y,m和d,編譯系統將不會為類Date建立無參數的默認構造函數。建立類Date的對象FirstDay時沒有給出初始值,若要正確調用有形參的構造函數,使對象FirstDay的值為2010年1月1日,則構造函數應是帶默認形參值,且默認形參值為2010、1和1。故該題應填int y=2010,int m=1,int d=1。 49.在有理數類Rational中重載插入運算符<<,以便按a/q形式輸出。請將<<運算符函數的定義補充完整。class Rational{ public: Rational(int aa,int qq):a(aa),q(qq){} friend ______ operator<<(ostream& out,Rational& x){ return(out< 插入運算符只能重載為非類成員函數,一般重載為友元函數。聲明重載插入運算符為友元函數的函數原型為: friend ostream& operator<<(ostream& ,類名);因此該題應填ostream&。 2009年9月考試真題(第30次)1.下列數據結構中,屬于非線性結構的是______。 A、循環隊列 B、帶鏈隊列 C、二叉樹 D、帶鏈棧 2.對于循環隊列,下列敘述中正確的是______。 A、隊頭指針是固定不變的 B、隊頭指針一定大于隊尾指針 C、隊頭指針一定小于隊尾指針 D、隊頭指針可以大于隊尾指針,也可以小于隊尾指針 3.數據庫管理系統是______。 A、操作系統的一部分 B、在操作系統支持下的系統軟件 C、一種編譯系統 D、一種操作系統 4.下列選項中不屬于結構化程序設計原則的是______。 A、可封裝 B、自頂向下 C、模塊化 D、逐步求精 5.有三個關系R,S和T如下: 其中關系T由關系R和S通過某種操作得到,該操作為______。 A、選擇 B、投影 C、交 D、并 6.在E-R圖中,用來表示實體聯系的圖形是______。 A、橢圓形 B、矩形 C、菱形 D、三角形 7.算法的空間復雜度是指______。 A、算法在執行過程中所需要的計算機存儲空間 B、算法所處理的數據量 C、算法程序中的語句或指令條數 D、算法在執行過程中所需要的臨時工作單元數 8.軟件詳細設計產生的圖如下: 該圖是______。 A、N-S圖 B、PAD圖 C、程序流程圖 D、E-R圖 9.軟件設計中劃分模塊的一個準則是______。 A、低內聚低耦合 B、高內聚低耦合 C、低內聚高耦合 D、高內聚高耦合 10.下列數據結構中,能夠按照“先進后出”原則存取數據的是______。A、循環隊列 B、棧 C、隊列 D、二叉樹 11.有如下程序: #include A、運行時出錯 B、E2-C16-C、C4-C16-D12.有如下類定義: class XX{ int xdata;public: XX(int n=0):xdata(n){ } };class YY:public XX{ int ydata;public: YY(int m=0,int n=0):XX(m),ydata(n){ } };YY類的對象包含的數據成員的個數是______。 A、1 B、2 C、3 D、4 13.有如下程序段: int i=1;while(1){ i++;if(i==10)break;if(i%2==0)cout<<'*';}、E2-E4-執行這個程序段輸出字符*的個數是______。 A、10 B、3 C、4 D、5 14.有如下程序: #include A、121 B、21 C、211 D、12 15.有如下程序: #include A、1 B、2 C、3 D、運行時出錯 16.已知函數FA調用FB,若要把這兩個函數定義在同一個文件中,則______。 A、FA必須定義在FB之前 B、FB必須定義在FA之前 C、若FA定義在FB之后,則FA的原型必須出現在FB的定義之前 D、若FB定義在FA之后,則FB的原型必須出現在FA的定義之前 17.在下列枚舉符號中,用來表示“相對于當前位置”文件定位方式的是______。 A、ios_base::cur B、ios_base::beg C、ios_base::out D、ios_base::end 18.將運算符重載為類成員函數時,其參數表中沒有參數,說明該運算符是______。 A、不合法的運算符 B、一元運算符 C、無操作數的運算符 D、二元運算符 19.有如下程序: #include A、1312 B、132 C、32 D、1412 20.下列關于C++流的描述中,錯誤的是______。 A、cout>> 'A'表達式可輸出字符A B、eof()函數可以檢測是否到達文件尾 C、對磁盤文件進行流操作時,必須包含頭文件fstream D、以ios_base::out模式打開的文件不存在時,將自動建立一個新文件 21.下列關于虛基類的描述中,錯誤的是______。 A、使用虛基類可以消除由多繼承產生的二義性 B、構造派生類對象時,虛基類的構造函數只被調用一次 C、聲明“class B:virtual public A”說明類B為虛基類 D、建立派生類對象時,首先調用虛基類的構造函數 22.下列關于運算符函數的描述中,錯誤的是______。 A、運算符函數的名稱總是以operator為前綴 B、運算符函數的參數可以是對象 C、運算符函數只能定義為類的成員函數 D、在表達式中使用重載的運算符相當于調用運算符重載函數 23.有如下程序: #include A、123 234 B、***123 234 C、***123 ***234 D、***123 234*** 24.有如下模板聲明: template A、template int arr[5]={1,2,3,4,5};下列語句中輸出結果不是2的是______。 A、cout<<*arr+1< #include A、未知類型:未知名稱 B、未知類型:精彩人生 C、書:未知名稱 D、書:精彩人生 27.下列字符串中可以用作C++標識符的是______。 A、2009var B、goto C、test-2009 D、_123 28.計算斐波那契數列第n項的函數定義如下: int fib(int n){ if(n==0)return 1;else if(n==1)return 2;else return fib(n-1)+fib(n-2);} 若執行函數調用表達式fib(2),函數fib被調用的次數是______。 A、1 B、2 C、3 D、4 29.下列枚舉類型的定義中,包含枚舉值3的是______。A、enum test{RED,YELLOW,BLUE,BLACK};B、enum test{RED,YELLOW=4,BLUE,BLACK};C、enum test{RED=-1,YELLOW,BLUE,BLACK};D、enum test{RED,YELLOW=6,BLUE,BLACK};30.下列關于運算符重載的描述中,錯誤的是______。 A、::運算符不能重載 B、類型轉換運算只能作為成員函數重載 C、將運算符作為非成員函數重載時必須定義為友元 D、重載[]運算符應完成“下標訪問”操作 31.有如下程序: #include A、0 B、1 C、2 D、3 32.下列關于模板形參的描述中,錯誤的是______。 A、模板形參表必須在關鍵字template之后 B、模板形參表必須用括弧()括起來 C、可以用class修飾模板形參 D、可以用typename修飾模板形參 33.有如下類定義: class A{ char *a;public: A():a(0){} A(char *aa){ //把aa所指字符串拷貝到a所指向的存儲空間 a=______;strcpy(a,aa);} ~A(){delete []a;} };橫線處應填寫的表達式是______。 A、new char[strlen(aa)+1] B、char[strlen(aa)+1] C、char[strlen(aa)] D、new char[sizeof(aa)-1] 34.有如下兩個類定義: class AA{};class BB{ AA v1,*v2;BB v3;int *v4;};其中有一個成員變量的定義是錯誤的,這個變量是______。 A、v1 B、v2 C、v3 D、v4 35.Sample是一個類,執行下面語句后,調用Sample類的構造函數的次數是______。 Sample a[2], *p=new Sample;A、0 B、1 C、2 D、3 36.某二叉樹有5個度為2的結點以及3個度為1的結點,則該二叉樹中共有______個結點。 37.軟件開發過程主要分為需求分析、設計、編碼與測試四個階段,其中______階段產生”軟件需求規格說明書“。 38.程序流程圖中的菱形框表示的是______。 39.人員基本信息一般包括:身份證號,姓名,性別,年齡等。其中可以作為主關鍵字的是______。40.在數據庫技術中,實體集之間的聯系可以是一對一或一對多或多對多的,那么”學生“和”可選課程“的聯系為______。 41.下面是一個遞歸函數,其功能是使數組中的元素反序排列。請將函數補充完整。 void reverse(int *a,int size){ if(size<2)return;int k=a[0];a[0]=a[size-1];a[size-1]=k;reverse(a+1,______);} 42.利用表達式a[i]可以訪問int型數組a中下標為i的元素。在執行了語句int *p=a;后,利用指針p也可訪問該元素,相應的表達式是______。43.類Sample的構造函數將形參data賦值給數據成員data。請將類定義補充完整。 class Sample{ public: Sample(int data=0);private: int data;};Sample::Sample(int data){ ______ } 44.若表達式(x+(y-z)*(m/n))+3中的變量均為double型,則表達式值的類型為______。 45.如下程序定義了”單詞“類Word,類中重載了<運算符,用于比較”單詞“的大小,返回相應的邏輯值。程序的輸出結果為:After Sorting: Happy Welcome,請將程序補充完整。#include class Sample{ public: Sample();~Sample();private: static int data;};將靜態數據成員data初始化為0的語句是______。 48.請將下列模板類Data補充完整。 template for(int i=50;i>20;i-=2)cout< 50.有如下程序: #include 2009年3月考試真題(第29次)1.耦合性和內聚性是對模塊獨立性度量的兩個標準。下列敘述中正確的是______。 A、提高耦合性降低內聚性有利于提高模塊的獨立性B、降低耦合性提高內聚性有利于提高模塊的獨立性 C、耦合性是指一個模塊內部各個元素間彼此結合的緊密程度D、內聚性是指模塊間互相連接的緊密程度 2..數據庫應用系統中的核心問題是______。 A、數據庫設計 B、數據庫系統設計 C、數據庫維護 D、數據庫管理員培訓 3.下列敘述中正確的是______。 A、棧是”先進先出“的線性表 B、隊列是”先進后出“的線性表 C、循環隊列是非線性結構 D、有序線性表既可以采用順序存儲結構,也可以采用鏈式存儲結構 4.有兩個關系R,S如下: R S 由關系R通過運算得到關系S,則所使用的運算為______。 A、選擇 B、投影 C、插入 D、連接 5.將E-R圖轉換為關系模式時,實體和聯系都可以表示為______。 A、屬性 B、鍵 C、關系 D、域 6.支持子程序調用的數據結構是______。 A、棧 B、樹 C、隊列 D、二叉樹 7.下列排序方法中,最壞情況下比較次數最少的是______。 A、冒泡排序 B、簡單選擇排序 C、直接插入排序 D、堆排序 8.下面敘述中錯誤的是______。 A、軟件測試的目的是發現錯誤并改正錯誤 B、對被調試的程序進行”錯誤定位“是程序調試的必要步驟 C、程序調試通常也稱為Debug D、軟件測試應嚴格執行測試計劃,排除測試的隨意性 9.某二叉樹有5個度為2的結點,則該二叉樹中的葉子結點數是______。 A、10 B、8 C、6 D、4 10.件按功能可以分為:應用軟件、系統軟件和支撐軟件(或工具軟件)。下面屬于應用軟件的是______。 A、編譯程序 B、操作系統 C、教務管理系統 D、匯編程序 11.有如下類定義和變量定義 class A{ public: A(){data=0;} ~A(){} int GetData()const {return data;} void SetData(int n){data=n;} private: int data;};const A a;A b;下列函數調用中錯誤的是______。 A、a.GetData();B、a.SetData(10);C、b.GetData();D、b.SetData(10);12.運算符重載時不需要保持的性質是______。 A、操作數個數 B、操作數類型 C、優先級 D、結合性 13.已知有數組定義 char a[3][4];下列表達式中錯誤的是______。 A、a[2]=”WIN“ B、strcpy(a[2],”WIN“)C、a[2][3]='W' D、a[0][1]=a[0][1] 14.在定義一個類模板時,模板形參表是用一對括號括起來的,所采用的括號是______。 A、()B、[ ] C、< > D、{ } 15.要建立文件流并打開當前目錄下的文件file.dat用于輸入,下列語句中錯誤的是______。 A、ifstream fin=ifstream.open(”file.dat“);B、ifstream *fin=new ifstream(”file.dat“);C、ifstream fin;fin.open(”file.dat“);D、ifstream *fin=new ifstream();fin->open(”file.dat“);16.有如下類定義和變量定義: class Parents{ public: int publicData;private: int privateData;};class ChildA:public Parents{/*類體略*/};class ChildB:private Parents{/*類體略*/};ChildA a;ChildB b;下列語句中正確的是 ______。 A、cout< A、YY y1(0,0);B、YY y2(1);C、YY y3(0);D、YY y4;18.下列描述中,不屬于面向對象思想主要特征的是______。 A、封裝性 B、跨平臺性 C、繼承性 D、多態性 19.有如下程序: #include A、3 B、23 C、123 D、213 20.已知表達式++a中的”++“是作為成員函數重載的運算符,則與++a等效的運算符函數調用形式為______。 A、a.operator++(1)B、operator++(a)C、operator++(a,1)D、a.operator++()21.假設下列語句都是程序運行后首次執行的輸出語句,其中輸出結果與另外三條語句不同的語句是______。A、cout< A、12 B、16 C、14 D、11 23.當使用ifstream流類定義一個流對象并打開一個磁盤文件時,文件的默認打開方式為______。 A、ios_base::in B、ios_base::in│ios_base::out C、ios_base::out D、ios_base::in & ios_base::out 24.有如下程序: #include A、1215588 B、1218855 C、12185 D、128512 25.有如下程序段: int i=4;int j=1;int main(){ int i=8,j=i;cout< A、44 B、41 C、88 D、81 26.有如下程序: #include A、bool Pair::operator >(Pair p)const {if(m!=p.m)return m>p.m;return n>p.n;} B、bool Pair::operator >(Pair p){if(m!>p.m)return m>p.m;return n>p.n;} C、bool Pair::operator >(Pair p)const {if(m>p.m)return true;return n>p.n;} D、bool Pair::operator >(Pair p){if(m>p.m)return true;return n>p.n;} 27.已知函數fun的原型為 int fun(int,int,int);下列重載函數原型中錯誤的是______。 A、char fun(int,int);B、double fun(int,int,double);C、int fun(int,clar*);D、float fun(int,int,int);28.有如下程序: #include A、12 B、34 C、14 D、32 29.對C++編譯器區分重載函數無任何意義的信息是______。 A、參數類型 B、參數個數 C、返回值類型 D、常成員函數關鍵字const 30.通過派生類的對象可直接訪問其______。 A、公有繼承基類的公有成員 B、公有繼承基類的私有成員 C、私有繼承基類的公有成員 D、私有繼承基類的私有成員 31.建立一個類對象時,系統自動調用______。 A、析構函數 B、構造函數 C、靜態函數 D、友元函數 32.有如下程序: #include A、1 B、2 C、3 D、4 33.已知類MyClass聲明如下: class MyClass{ int n;public: MyClass(int k):n(k){} int getValue()const{return n;} };在下列數組定義中正確的是______。 A、MyClass x1[2];B、MyClass x2[2]={new MyClass(1),new MyClass(2)};C、MyClass *x3[2];D、MyClass *x4[2]={MyClass(1),MyClass(2)};34.有如下程序段: int i=5;while(int i=0){ cout<<'*';i--;} 運行時輸出”*“的個數是______。 A、0 B、1 C、5 D、無窮 35.下列關于函數模板的描述中,錯誤的是______。 A、從模板實參表和從模板函數實參表獲得信息矛盾時,以模板實參的信息為準 B、對于常規參數所對應的模板實參,任何情況下都不能省略 C、虛擬類型參數沒有出現在模板函數的形參表中時,不能省略模板實參 D、模板參數表不能為空 36.符合結構化原則的三種基本控制結構是:選擇結構、循環結構和______。 37.假設用一個長度為50的數組(數組元素的下標從0到49)作為棧的存儲空間,棧底指針bottom指向棧底元素,棧頂指針top指向棧頂元素,如果bottom=49,top=30(數組下標),則棧中具有______個元素。38.在E-R圖中,圖形包括矩形框、菱形框、橢圓框。其中表示實體聯系的是______框。39.軟件測試可分為白盒測試和黑盒測試。基本路徑測試屬于______測試。40.數據庫系統的核心是______。41.有如下程序段: char c[20]=”examination“;c[4]=0;cout< 42.下面的函數利用遞歸實現了求1+2+3…..+n的功能: int sum(int n){ if(n==0)return 0;else return n+sum(n-1);} 在執行sum(10)的過程中,遞歸調用sum函數的次數是______。43.有如下程序: #include class Xtwo{ //由兩個Type類型的數據成員構成的模板類 Type a;Type b;public: Xtwo(Type aa=0,Type bb=0):a(aa),b(bb){} int Compare(){ //比較a和b的大小 if(a>b)return 1;else if(a==b)return 0;else return-1;} Type Sum(){return a+b;} //返回a和b之和 Type Mult();//函數聲明,返回a和b之乘積 };template 2008年9月考試真題(第28次)1.一個棧的初始狀態為空。現將元素1、2、3、4、5、A、B、C、D、E依次入棧,然后再依次出棧,則元素出棧的順序是______。 A、12345ABCDE B、EDCBA54321 C、ABCDE12345 D、54321EDCBA 2.在面向對象方法中,不屬于”對象“基本特點的是______。 A、一致性 B、分類性 C、多態性 D、標識惟一性 3.在長度為n的有序線性表中進行二分查找,最壞情況下需要比較的次數是______。 A、O(n)B、C、D、4.在數據管理技術發展的三個階段中,數據共享最好的是______。 A、人工管理階段 B、文件系統階段 C、數據庫系統階段 D、三個階段相同 5.下列敘述中正確的是______。A、循環隊列中有隊頭和隊尾兩個指針,因此,循環隊列是非線性結構 B、在循環隊列中,只需要隊頭指針就能反映隊列中元素的動態變化情況 C、在循環隊列中,只需要隊尾指針就能反映隊列中元素的動態變化情況 D、循環隊列中元素的個數是由隊頭指針和隊尾指針共同決定 6.下列敘述中正確的是______。 A、順序存儲結構的存儲一定是連續的,鏈式存儲結構的存儲空間不一定是連續的 B、順序存儲結構只針對線性結構,鏈式存儲結構只針對非線性結構 C、順序存儲結構能存儲有序表,鏈式存儲結構不能存儲有序表 D、鏈式存儲結構比順序存儲結構節省存儲空間 7.一間宿舍可住多個學生,則實體宿舍和學生之間的聯系是______。 A、一對一 B、一對多 C、多對一 D、多對多 8.有三個關系R、S和T如下: 由關系R和S通過運算得到關系T,則所使用的運算為______。 A、笛卡爾積 B、交 C、并 D、自然連接 9.數據流圖中帶有箭頭的線段表示的是______。 A、控制流 B、事件驅動 C、模塊調用 D、數據流 10.在軟件開發中,需求分析階段可以使用的工具是______。 A、N-S圖 B、DFD圖 C、PAD圖 D、程序流程圖 11.下列選項中,與實現運行時多態性無關的是______。 A、重載函數 B、虛函數 C、指針 D、引用 12.在C++中,編譯系統自動為一個類生成缺省構造函數的條件是______。 A、該類沒有定義任何有參構造函數 B、該類沒有定義任何無參構造函數 C、該類沒有定義任何構造函數 D、該類沒有定義任何成員函數 13.要利用C++流進行文件操作,必須在程序中包含的頭文件是______。 A、iostream B、fstream C、strstream D、iomanip 14.對于通過公有繼承定義的派生類,若其成員函數可以直接訪問基類的某個成員,說明該基類成員的訪問權限是______。 A、公有或私有 B、私有 C、保護或私有 D、公有或保護 15.有如下程序: #include A、1 B、2 C、3 D、4 16.下列語句中,正確的是______。 A、char *myString=”Hello-World!“;B、char myString=”Hello-World!“;C、char myString[11]=”Hello-World!“;D、char myString[12]=”Hello-World!“;17.在語句”cout<<'A';“中,cout是______。 A、類名 B、對象名 C、函數名 D、C++的關鍵字 18.在一個派生類的成員函數中,試圖調用其基類的成員函數”Void f();“,但無法通過編譯。這說明______。 A、f()是基類的私有成員 B、f()是基類的保護成員 C、派生類的繼承方式為私有 D、派生類的繼承方式為保護 19.下列關于模板的敘述中,錯誤的是______。 A、調用模板函數時,在一定條件下可以省略模板實參 B、可以用int、double這樣的類型修飾符來聲明模板參數 C、模板聲明中的關鍵字class都可以用關鍵字typename替代 D、模板的形參表中可以有多個參數 20.下列字符串中不能作為C++標識符使用的是______。 A、WHILE B、user C、_1var D、9stars 21.有如下程序: #include A、語句1 B、語句2 C、語句3 D、語句4 22.在類聲明中,緊跟在”public:“后聲明的成員的訪問權限是______。 A、私有 B、公有 C、保護 D、默認 23.下列語句中錯誤的是______。A、const int a;B、const int a=10;C、const int *point=0;D、const int *point=new int(10);24.在下列原型所示的C++函數中,按”傳值“方式傳遞參數的是______。 A、Void f1(int x);B、Void f2(int *x);C、Void f3(const int *x);D、Void f4(int &x);25.建立一個有成員對象的派生類對象時,各構造函數體的執行次序為______。 A、派生類、成員對象類、基類 B、成員對象類、基類、派生類 C、基類、成員對象類、派生類 D、基類、派生類、成員對象類 26.下列模板聲明中,有語法錯誤的是______。 A、template A、有的運算符可以作為非成員函數重載 B、所有的運算符都可以通過重載而被賦予新的含義 C、不得為重載的運算符函數的參數設置默認值 D、有的運算符只能作為成員函數重載 28.下列運算符函數中,肯定不屬于類Value的成員函數的是______。 A、Value operator+(Value);B、Value operator-(Value,Value);C、Value operator*(int);D、Value operator/(Value);29.在一個抽象類中,一定包含有______。 A、虛函數 B、純虛函數 C、模板函數 D、重載函數 30.如果表達式a>=b中的”>=“是作為非成員函數重載的運算符,則可以等效地表示為______。 A、a.operator>=(b)B、b.operator>=(a)C、operator>=(a,b)D、operator>=(b,a)31.有如下程序: #include A、112444 B、11114444 C、121444 D、11314444 32.當使用ofstream流類定義一個流對象并打開一個磁盤文件時,文件的默認打開方式為______。 A、ios_base::in B、ios_base::binary C、ios_base::in | ios_base::out D、ios_base::out 33.有如下程序: #include A、3 B、10 C、12 D、15 34.定義派生類時,若不使用關鍵字顯式地規定采用何種繼承方式,則默認方式為______。 A、私有繼承 B、非私有繼承 C、保護繼承 D、公有繼承 35.若已經聲明了函數原型”void fun(int a,double b=0.0);“,則下列重載函數聲明中正確的是______。 A、void fun(int a=90,double b=0.0);B、int fun(int a,double B);C、void fun(double a,int B);D、bool fun(int a,double b=0.0); 36.數據庫設計包括概念設計、______和物理設計。 37.軟件工程三要素包括方法、工具和過程,其中,______支持軟件開發的各個環節的控制和管理。38.在二維表中,元組的______不能再分成更小的數據項。 39.按照軟件測試的一般步驟,集成測試應在______測試之后進行。40.對下列二叉樹進行中序遍歷的結果是______。 41.有如下程序: #include 42.有如下類定義,請將Sample類的拷貝構造函數補充完整。class Sample{ public: Sample(){} ~Sample(){if(p)delete p;} Sample(const Sample& s){ ______ } void SetData(int data){p=new int(data);} private: int *p;};43.請在下列程序中的空格處填寫正確的語句: class Sample{ public: Sample(){} ~Sample(){} void SetDate(int data){//將Sample類成員變量date設置成形參的值 ______ } private:int data;};44.有如下遞歸函數: int Fun(int n){ if(n<=1)return 1;______ } 請補充完整,使得函數Fun能夠正確計算形參n的階乘。45.有如下程序: #include double Wages::getPay()const{return base+bonus-tax;} Wages Wages::operator+(Wages w)const{ return Wages(base+w.base, bonus+w.bonus,tax+w.tax);} int main(){ Wages w1(2000,500,100),w2(5000,1000,300);cout<<(w1+w2).getPay()< 46.已知數組a中有n個元素,下列語句將數組a中從下標x1開始的k個元素移動到從下標x2開始的k個元素中,其中0<=x1 48.當使用關鍵字______作為函數返回類型時,該函數不返回任何值。49.有如下程序: #include class Dog: public Pet{ public: Dog(char *name):Pet(name){} void call()const{ cout<<”汪汪叫“;} }; class Cat:public Pet{ public: Cat(char *name):Pet(name){} void call()const{ cout<<”喵喵叫“;} }; int main(){ Pet *pet1=new Dog(”哈克“), *pet2=new Cat(”吉米“);cout< getName();pet1->call();cout< 2008年4月考試真題(第27次)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.對長度為n的線性表排序,在最壞情況下,比較次數不是n(n-1)/2的排序方法是______。 A、快速排序 B、冒泡排序 C、直接插入排序 D、堆排序 7.有三個關系R、S和T如下: 由關系R和S通過運算得到關系T,則所使用的運算為______。 A、并 B、自然連接 C、笛卡爾積 D、交 8.在軟件開發中,需求分析階段產生的主要文檔是______。 A、可行性分析報告 B、軟件需求規格說明書 C、概要設計說明書 D、集成測試計劃 9.設有表示學生選課的三張表,學生S(學號,姓名,性別,年齡,身份證號),課程C(課號,課名),選課SC(學號,課號,成績),則表SC的關鍵字(鍵或碼)為______。 A、課號,成績 B、學號,成績 C、學號,課號 D、學號,姓名,成績 10.在數據庫設計中,將E-R圖轉換成關系數據模型的過程屬于______。 A、需求分析階段 B、概念設計階段 C、邏輯設計階段 D、物理設計階段 11.已知Value是一個類,value是Value的一個對象。下列以非成員函數形式重載的運算符函數原型中,正確的是______。 A、Value operator+(Value v,int i);B、Value operator+(Value v=value,int i);C、Value operator+(Value v,int i=0);D、Value operator+(Value v=value,int i=0);12.有如下程序: #include A、375 B、357 C、0375 D、0357 13.下列有關運算符重載的敘述中,正確的是______。 A、運算符重載是多態性的一種表現 B、C++中可以通過運算符重載創造新的運算符 C、C++中所有運算符都可以作為非成員函數重載 D、重載運算符時可以改變其結合性 14.有如下4個語句: ① cout<<'A'< A、①和③ B、①和④ C、②和③ D、②和④ 15.下列有關類成員的敘述中,正確的是______。 A、友元函數是類的成員函數 B、類成員的默認訪問權限是私有的 C、類成員函數必須聲明為公有的 D、類的靜態數據成員不能是常成員 16.執行下列語句段后,輸出字符”*“的個數是______。for(int i=50;i>1;i-=2)cout<<'*';A、24 B、25 C、26 D、50 17.有如下類定義: class Point{ private: static int how_many;};______how_many=0;要初始化Point類的靜態成員how_many,下劃線處應填入的內容是______。 A、int B、static int C、int Point:: D、static int point:: 18.下面是一個模板聲明的開始部分: template A、這可能是一個函數模板的聲明 B、這可能是一個類模板的聲明 C、這既可能是一個函數模板的聲明,也可能是一個類模板的聲明 D、這肯定是一個錯誤的模板聲明 19.有如下類聲明: class Base{ protected: int amount;public: Base(int n=0):amount(n){} int getAmount()const{return amount;} };class Derived:public Base{ protected: int value;public: Derived(int m,int n):value(m),Base(n){} int getData()const{return value+amount;} };已知x是一個Derived對象,則下列表達式中正確的是______。A、x.value+x.getAmount()B、x.getData()-x.getAmount()C、x.getData()-x.amount D、x.value+x.amount 20.有如下程序: #include A、1111 B、1211 C、1112 D、1212 21.下列有關C++流的敘述中,錯誤的是______。 A、C++操作符setw設置的輸出寬度永久有效 B、C++操作符endl可以實現輸出的回車換行 C、處理文件I/O時,要包含頭文件fstream D、進行輸入操作時,eof()函數用于檢測是否到達文件尾 22.下列關鍵字中,不能用來表示繼承方式的是______。 A、private B、static C、public D、protected 23.下列語句分別是不同程序中的第一個輸入輸出語句。若去掉其中的”< A、cout< A、53 B、35 C、55 D、33 25.有如下定義: int a[5]={1,3,5,7,9},*p=a;下列表達式中不能得到數值5的是______。 A、a[2] B、a[3] C、*(p+2)D、*p+4 26.有如下類定義: class MyClass{ int value;public: MyClass(int n):value(n){} int getValue()const{return value;} };則類MyClass的構造函數的個數是______。 A、1個 B、2個 C、3個 D、4個 27.下列有關類繼承的敘述中,錯誤的是______。 A、繼承可以實現軟件復用 B、虛基類可以解決由多繼承產生的二義性問題 C、派生類構造函數要負責調用基類的構造函數 D、派生類沒有繼承基類的私有成員 28.有如下類和對象的定義: class Constants{ public: static double getPI(){return 3.1416;} };Constants constants;下列各組語句中,能輸出3.1416的是______。 A、cout< A、const B、2a C、_shape D、-count 30.已知函數f的原型是void f(int *a,long &b);,變量v1、v2的定義是: int v1;long v2;下列調用語句中正確的是______。 A、f(v1,&v2);B、f(v1,v2);C、f(&v1,&v2);D、f(&v1,v2);31.下列有關函數重載的敘述中,錯誤的是______。 A、函數重載就是用相同的函數名定義多個函數 B、重載函數的參數列表必須不同 C、重載函數的返回值類型必須不同 D、重載函數的參數可以帶有默認值 32.有如下程序: #include A、*this B、this C、&amount D、amount 33.下列有關抽象類和純虛函數的敘述中,錯誤的是______。 A、擁有純虛函數的類是抽象類,不能用來定義對象 B、抽象類的派生類若不實現純虛函數,它也是抽象類 C、純虛函數的聲明以”=0;“結束 D、純虛函數都不能有函數體 34.下列有關模板的敘述中,正確的是______。 A、函數模板不能含有常規形參 B、函數模板的一個實例就是一個函數定義 C、類模板的成員函數不能是模板函數 D、用類模板定義對象時,絕對不能省略模板實參 35.已知枚舉類型聲明語句為: enum COLOR{WHITE,YELLOW,GREEN=5,RED,BLACK=10};則下列說法中錯誤的是______。 A、枚舉常量YELLOW的值為1 B、枚舉常量RED的值為6 C、枚舉常量BLACK的值為10 D、枚舉常量WHITE的值為1 36.在關系數據庫中,用來表示實體之間聯系的是______。 37.設某循環隊列的容量為50,頭指針front=5(指向隊頭元素的前一位置),尾指針rear = 29(指向隊尾元素),則該循環隊列中共有______個元素。 38.在數據庫管理系統提供的數據定義語言、數據操縱語言和數據控制語言中,______負責數據的模式定義與數據的物理存取構建。 39.測試用例包括輸入值集和______值集。40.深度為5的滿二叉樹有______個葉子結點。 41.如下程序聲明了一個電話號碼類PhoneNumber,重載了流插入運算符<<,以便于電話號碼的輸出。請將程序補充完整。#include friend(ostream &output,const PhoneNumber &num){output< 49.在類中,______成員為類的所有對象所共享。 50.在面向對象的程序設計中,將數據和處理數據的操作封裝成一個整體就定義了一種事物的類型,稱作”類“。類是一種抽象的概念,屬于該類的一個實例叫做”______"。 一、單項選擇題(共20題,每題1分,共20分) 6、對重載函數形參的描述中,錯誤的是 D A.參數的個數可能不同 B.參數的類型可能不同 C.參數的順序可能不同 D.參數的個數、類型、順序都相同,只是函數的返回值類型不同 9、通常的拷貝構造函數的參數是 A. 某個對象名 B.某個對象成員名 C. 某個對象的引用 D.某個對象的指針名 10、關于構造函數特點的描述中,錯誤的是 A.定義構造函數必須指出類型 B.構造函數的名字與該類的類名相同 C.一個類中可定義0至多個構造函數 D.構造函數是一種成員函數 12、關于常成員的描述中,錯誤的是 A.常成員包含常數據成員和常成員函數兩種 B.常數據成員必須是公有的C.常數據成員要使用構造函數成員初始化列表進行初始化 D.常對象只能調用它的常成員函數,不能調用其它的成員函數 13、關于友元函數的描述中,錯誤的是 A.友元函數不是成員函數 B.友元函數只能訪問類中私有成員 C.友元函數破壞隱藏性,盡量少用 D.友元函數說明在類體內,使用關鍵字friend18、能夠釋放對象所占資源的是(析構函數) 二、填空題(共9題16空,每空1分,共16分) 1、函數重載時,編譯系統會根據_形參的類型或形參的個數 來區分。 3、若希望用一個已有對象來構造另一個同類型的對象,可以使用拷貝構造函數來實現。 4、靜態成員屬于類,而不屬于任何一個對象,它被同一個類的所有對象共享。 5、類的繼承方式有私有 繼承、公有 繼承和保護繼承。 6、重載運算符的含義必須清楚,不能有二義性。 7、按照聯編進行階段的不同,聯編方法可分為兩種: 動態聯編 和靜態聯編。 8、當基類中的某個成員函數被聲明為虛函數后,此虛函數就可以在一個或多個派生類中被重新定義,在派生類中重新定義時,其函數原型,包括返回類型、參數名、函數個數、參數類型以及參數的順序都必須與基類中的原型完全相同。 1.在類中必須聲明成員函數的原型,成員函數的實現部分可以寫在類外。 2.如果需要在被調函數運行期間,改變主調函數中實參變量的值,則函數的形參應該是引用類型或指針類型。 3.抽象類只能作為基類使用,而不能聲明它的對象。 4.進行函數重載時,被重載的同名函數如果都沒有用const修飾,則它們的形參個數或類型必須不同。 5.通過一個常對象只能調用它的常成員函數,不能調用其他成員函數。 6.函數的遞歸調用是指函數直接或間接地調用自身。 7.拷貝構造函數的形參必須是本類對象的引用。 上機實驗: 1、回文是指正讀,反讀均相同的字符序列,如“abba”和“abdba”均是回文,但是“good”不是回文,試用STACK類編寫該程序。 #include int top = 1;char *cMyStack =(char *)malloc((iLen/2+1)*sizeof(char));//定位對原始數組的檢測索引初始位置 cMyStack[0] = iLen/2;if(1 == iLen%2){ ++cMyStack[0];} //將原始數組的一半元素入棧 for(top=1;top<=iLen/2;top++){ cMyStack[top] = *(cScr+top-1);} //從棧頂開始依次匹配 while(*(cScr+cMyStack[0])== cMyStack[--top] && cMyStack[0]++ < iLen){} if(0 == top){//是回文數 free(cMyStack);return 1;} else {//不是回文數 free(cMyStack);return 0;} } 運行結果: 2.利用兩個棧類S1、S2模擬一個隊列時,編寫一程序利用棧的運算實現隊列的插入、刪除以及判斷隊列空的運算。 #include template assert(!mStack2.empty());mStack2.pop();} template sq.pushBack(1);printQueue(sq);sq.pushBack(2);printQueue(sq);sq.pushBack(3);printQueue(sq);sq.popFront();printQueue(sq);sq.popFront();printQueue(sq);sq.popFront();printQueue(sq);return 0;} 運行結果: 實驗2: 聲明復數的類Complex,使用友元函數add實現復數的加法。 #include < iostream > using namespace std; class Complex { private: double real, image;public : Complex(){} Complex(double a,double b) { real = a;image = b;} void setRI(double a, double b){ real = a;image = b;} double getReal(){ return real;} double getImage(){ return image;} void print(){ if(image>0) cout<<“復數:”<< real <<“ + ”<< image <<“i”<< endl;if(image<0) cout<<“復數:”<< real <<“-”<< image <<“i”<< endl;} friend Complex add(Complex ,Complex);//聲明友元函數 }; Complex add(Complex c1, Complex c2)//定義友元函數 { Complex c3; c3.real = c1.real + c2.real;//訪問Complex類中的私有成員 c3.image = c1.image + c2.image;return c3;} void main(){ Complex c1(29, 0.634), c2, c3;c2.setRI(85,106.012);c3 = add(c1, c2); cout<<“復數一:”;c1.print();cout<<“復數二:”;c2.print();cout<<“相加后:”;c3.print();} 結果: 實驗三: 7-5 定義一個基類Shape,在此基礎上派生出一個Rectangle和Circle,二者都有getArea()函數計算對象的面積。使用Rectangle類創建一個派生類Square.#include public: Shape(){} double GetArea() { return 0.1;} };class Rectangle: public Shape { public: Rectangle(double w,double h) { width=w;height=h;} double GetArea(){ return width*height;} private: double width,height;};class Circle:public Shape { private: double r; public: Circle(double rr){ r=rr;} double GetArea(){ return PI*r*r;} }; int main(){ Rectangle * rec=new Rectangle(5,6); Circle * cir=new Circle(5); cout<<“RecArea:”< cout<<“CirArea:”< return 1; } 運行結果: 7-10.定義一個Object類,有數據成員weight及相應的操作函數,由此派生出Box類,增加數據成員height和width及相應的操作函數,聲明一個Box對象,觀察構造函數和析構函數的調用順序。#include object(){ cout<<“構造object對象”< class box:public object { private: int Height,Width;public: box(){ cout<<“構造box對象”< 姓名:XX 學院:XXX 班級:XXX 學號:XXX i++; } while(i<=10);cout<<“sum=”< #include for(i;i<=10,i++) { sum+=i; } cout<<“sum=”< cout<<“不是合法的輸入”< 實驗 三、函數的應用(2學時) 1、實驗目的: 掌握函數的定義和調用方法。練習重載函數使用。練習函數模板的使用 練習使用系統函數。 在main()函數中提示輸入兩個整數x,y,使用cin語句得到x,y的值,調用pow(x,y)函數計算x的y次冪的結果,再顯示出來。程序名:lab3_4.cpp。 編寫遞歸函數int fib(int n),在主程序中輸入n的值,調用fib函數計算Fibonacci級數。公式為fib(n)=fib(n-1)+fib(n-2),n>2;fib(1)=fib(2)=1。使用if語句判斷函數的出口,在程序中用cout語句輸出提示信息。程序名:lab3_5.cpp。 7)調試操作步驟如下: 選擇菜單命令Build|Start Debug |Step In,系統進入單步執行狀態,程序開始運行,并出現一個DOS窗口,此時光標停在main()函數的入口處。 把光標移到語句answer=fib(n)前,從Debug菜單單擊Run To Cursor,在程序運行的DOS窗口中按提示輸入數字10,這時回到可視界面中,光標停在第11行,觀察一下n的值。 從Debug菜單中單擊Step Into,程序進入fib函數,觀察一下n的值,把光標移到語句return(fib(n-2)+fib(n-1))前,從Debug菜單單擊Run to Cursor,再單擊Step Into,程序遞歸調用fib函數,又進入fib函數,觀察n的值。 繼續執行程序,參照上述的方法,觀察程序的執行順序,加深對函數調用和遞歸調用的理解。 再試試Debug菜單欄中的別的菜單項,熟悉Debug的各種方法。 4、實驗原理 C++中函數的重載使得同樣的函數名下,只要參數類型、數目不同時,即可根據輸入的數據進行相應的函數調用,使用起來簡單方便。 5、思考與體會 C++中,函數的運用與之前學過的C語言既有相同之處,也有著不同的地方。相同的地方在于格式、用法等框架上的不變。但是C語言中對于同樣的函數名是只能夠申明一種函數的,倘若有相同的函數名出現系統即會報錯,所以用起來有時是極為不便 0第三篇:C++常用填空題
第四篇:C++實驗
第五篇:C++實驗報告