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

下載本文檔

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

文檔簡介

國家二級C++機試(選擇題)模擬試卷14(共9套)(共311題)國家二級C++機試(選擇題)模擬試卷第1套一、選擇題(本題共37題,每題1.0分,共37分。)1、下列關于棧敘述正確的是()。A、棧頂元素最先能被刪除B、棧頂元素最后才能被刪除C、棧底元素永遠不能被刪除D、棧底元素最先被刪除標準答案:A知識點解析:棧是先進后出的數據結構,所以棧頂元素最后入棧卻最先被刪除。棧底元素最先入棧卻最后被刪除。所以選擇A。2、下列敘述中正確的是()。A、在棧中,棧中元素隨棧底指針與棧頂指針的變化而動態變化B、在棧中,棧頂指針不變,棧中元素隨棧底指針的變化而動態變化C、在棧中,棧底指針不變,棧中元素隨棧頂指針的變化而動態變化D、以上說法均不正確標準答案:C知識點解析:棧是先進后出的數據結構,在整個過程中,棧底指針不變,入棧與出棧操作均由棧頂指針的變化來操作,所以選擇C。3、某二叉樹共有7個結點,其中葉子結點只有1個,則該二叉樹的深度為(假設根結點在第1層)()。A、3B、4C、6D、7標準答案:D知識點解析:根據二叉樹的基本性質3:在任意一棵二叉樹中,多為0的葉子結點總比度為2的結點多一個,所以本題中度為2的結點為1-1=0個,所以可以知道本題目中的二叉樹的每一個結點都有一個分支,所以共7個結點共7層,即度為7。4、結構化程序所要求的基本結構不包括()。A、順序結構B、GOTO跳轉C、選擇(分支)結構D、重復(循環)結構標準答案:B知識點解析:1966年Boehm和Jacopini證明了程序設計語言僅僅使用順序、選擇和重復三種基本控制結構就足以表達出各種其他形式結構的程序設計方法。5、下面描述中錯誤的是()。A、系統總體結構圖支持軟件系統的詳細設計B、軟件設計是將軟件需求轉換為軟件表示的過程C、數據結構與數據庫設計是軟件設計的任務之一D、PAD圖是軟件詳細設計的表示工具標準答案:A知識點解析:詳細設計的任務是為軟件結構圖中而非總體結構圖中的每一個模塊確定實現算法和局部數據結構,用某種選定的表達工具表示算法和數據結構的細節,所以A)錯誤。6、負責數據庫中查詢操作的數據庫語言是()。A、數據定義語言B、數據管理語言C、數據操縱語言D、數據控制語言標準答案:C知識點解析:數據定義語言:負責數據的模式定義與數據的物理存取構建;數據操縱語言:負責數據的操縱,包括查詢及增、刪、改等操作;數據控制語言:負責數據完整性、安全性的定義與檢查以及并發控制、故障恢復等功能。7、一個教師可講授多門課程,一門課程可由多個教師講授。則實體教師和課程間的聯系是()。A、1:1聯系B、1:m聯系C、m:1聯系D、m:n聯系標準答案:D知識點解析:因為一個教師可講授多門課程,而一門課程又能由多個老師講授所以他們之間是多對多的關系,可以表示為m:n。8、有三個關系R、S和T如下:則由關系R和S得到關系T的操作是()。A、自然連接B、并C、交D、差標準答案:D知識點解析:關系T中的元組是關系R中有而關系S中沒有的元組的集合,即從關系R中除去與關系S中相同元組后得到的關系T。所以做的是差運算。9、定義無符號整數類為UInt,下面可以作為類UInt實例化值的是()。A、-369B、369C、0.369D、整數集合{1,2,3,4,5}標準答案:B知識點解析:只有B)選項369可以用無符號整數來表示和存儲。A)選項-369有負號,選項C)0.369是小數都不能用無符號整數類存儲。選項D)是一個整數集合得用數組來存儲。10、下列字符串中可以用作C++標識符的是A、1481varB、test-1481C、trueD、_123標準答案:D知識點解析:用來表示變量、符號常量、函數、數組類型等實體名字的有效字符序列稱為標識符,標識符由字母、數字、和下劃線3種字符組成,且第一個字符必須為字母或者下劃線。C選項為C++的特定標識符,只有D選項正確。11、下列枚舉類型的定義中,包含枚舉值3的是A、enumtest{LEFT,UP,RIGHT,DOWN};B、enumtest{LEFT,UP=5,RIGHT,DOWN};C、enumtest{LEFT=-1,UP,RIGHT,DOWN};D、enumtest{LEFT,UP,RIGHT=6,DOWN};標準答案:A知識點解析:枚舉常量的定義enum枚舉類型名{常量1,常量2,常量3,.......};A選項包含的枚舉值為0、1、2、3,B選項包含的枚舉值為4、5、6、7,C選項包含的枚舉值為-1、0、1、2,D選項包含的枚舉值為4、5、6、7,所以A選項正確。12、有如下程序段:inti=1;while(1){i++;if(i==30)break;if(i%3==0)cout<<’*’;}執行這個程序段輸出字符*的個數是A、30B、8C、9D、10標準答案:C知識點解析:本題中while循環中當i為3的倍數時輸出*,而i為30時跳出循環,所以輸出9個*,答案為C。13、已知數組arr的定義如下:intarr[5]={1,2,3,4,5};下列語句中輸出結果不是3的是A、cout<<*arr+2<B、cout<<*(arr+2)<C、cout<<arr[2]<D、cout<<*arr<標準答案:D知識點解析:本題考查以為數組和指針,一維數組名可以作為一個指針,指向數組的第一個元素,題目中要求輸出3,那么就是指向了數組的第三個元素,*arr表示數組的第一個元素1,所以輸出不出來3,所以選擇D選項。14、下列敘述中,錯誤的是A、true是一個邏輯型常量B、x是一個字符型常量C、100是一個int常量D、2.71828是一個double常量標準答案:B知識點解析:考查常量定義,B選項中"x"為一個字符串,’x’才是字符常量,所以B選項錯誤。15、在C++中,用來取代C中的預處理宏函數的是A、重載函數B、友元函數C、遞歸函數D、內聯函數標準答案:D知識點解析:內聯函數具有一般函數的特性,它與一般函數所不同之處公在于函數調用的處理。一般函數進行調用時,要將程序執行權轉到被調用函數中,然后再返回到調用它的函數中;而內聯函數在調用時,是將調用表達式用內聯函數體來替換,內聯函數被發明出來就是為了取代C中的宏,所以答案為D。16、通過運算符重載,可以改變運算符原有的A、優先級B、結合性C、操作數類型D、操作數個數標準答案:C知識點解析:本題考查運算符重載,重載不能改變運算符運算對象的個數;不能改變運算符的優先級別;不能改變運算符的結合性;重載運算符的函數不能有默認值,否則就改變了運算符參數的個數;不能定義新的運算符,某些運算符不能重載。所以答案為C。17、在函數中,定義一個變量時,默認的存儲類型是A、externB、autoC、registerD、static標準答案:B知識點解析:extern可以置于變量或者函數前,以表示變量或者函數的定義在別的文件中,提示編譯器遇到此變量和函數時在其他模塊中尋找其定義。在C++語言中auto被解釋為一個自動存儲變量的關鍵字,也就是申明一塊臨時的變量內存。register修飾符暗示編譯程序相應的變量將被頻繁地使用,如果可能的話,應將其保存在CPU的寄存器中,以加快其存儲速度。在變量前,加上關鍵字static,該變量就被定義成為一個靜態變量,該變量在全局數據區分配內存,所以答案為B。18、下列運算符函數中肯定不屬于類Can的成員函數的是A、Canoperator-(Can);B、Canoperator-();C、Canoperator-(Can,Can);D、Canoperator-(int);標準答案:C知識點解析:答案C的形式是重載為友元函數,而友元函數不屬于類的成員函數。所以重載為友元函數需要兩個參數,通過參數傳遞的方式得到參加運算的兩個對象。其他的是重載為類的成員函數,由于對象本身代表了一個操作數,所以其參數只需要一個,其為參加運算的另一個操作數。19、關于函數聲明格式中的<返回類型>,下列敘述錯誤的是A、<返回類型>有可能包含關鍵字trueB、<返回類型>有可能包含自定義標識符C、<返回類型>有可能包含字符*D、<返回類型>有可能包含關鍵字float標準答案:A知識點解析:本題考查函數返回類型,函數返回類型可以是普通常量型的,可以返回指針以及自定義類型,但是不能包含關鍵字true,所以A選項錯誤。20、下列關于運算符重載的敘述中,錯誤的是A、不能通過運算符重載在C++中創建新的運算符B、賦值運算符只能重載為成員函數C、運算符函數重載為類的成員函數時,第一操作數是該類對象D、重載類型轉換運算符時,應聲明返回類型為void標準答案:D知識點解析:本題考查運算符重載,重載不能定義新的運算符,且賦值運算符只能重載為成員函數,重載類型轉換運算符時,聲明返回類型不一定是void,所以D選項錯誤。21、下列運算符中,不能被重載的是A、||B、+=C、.D、--標準答案:C知識點解析:本題考查運算符重載,不能重載的運算符只有5個:.、.*、::、sizeof、?:所以本題選擇C22、有如下兩個類定義:classAA{};classBB{AAv1,*v2;BBv3;int*v4;};其中有一個成員變量的定義是錯誤的,這個變量是A、v1B、v2C、v3D、v4標準答案:C知識點解析:本題考查類的定義,類定義中不能包含自己本身的對象,否則會引起像無限遞歸的問題,結果就是內存被消耗殆盡。所以C選項錯誤。23、Sample是一個類,且有如下語句:Samplea[2],*p=newSample;執行這個語句時調用Sample類的構造函數的次數是A、0B、1C、2D、3標準答案:D知識點解析:本題考查默認構造函數,題中定義了二維對象數組以及一個指針對象,那么構造函數就執行3次,答案為D。24、當一個類對象行將消亡時,系統自動調用A、析構函數B、構造函數C、靜態函數D、友元函數標準答案:A知識點解析:當對象脫離其作用域時(例如對象所在的函數已調用完畢),系統自動執行析構函數。析構函數往往用來做"清理善后"的工作。所以選擇A。25、下列關于派生類構造函數和析構函數的敘述中,錯誤的是A、如果基類中沒有缺省構造函數,那么派生類必須定義構造函數B、派生類的構造函數會隱含調用基類的構造函數C、在建立派生類對象時,先調用基類的構造函數,再調用派生類的構造函數D、在銷毀派生類對象時,先調用基類的析構函數,再調用派生類的析構函數標準答案:D知識點解析:本題考查派生類的構造函數和析構函數的調用順序,在銷毀派生類對象時,先調用派生類的析構函數,再調用基類的析構函數,所以D選項錯誤。26、派生類的成員函數不能訪問的基類的成員是A、公有成員和保護成員B、公有成員C、保護成員D、私有成員標準答案:D知識點解析:本題考查派生類對基類成員的訪問屬性,派生類無論何種繼承,派生類的成員函數都不能訪問基類的私有成員,所以D選項錯誤。27、有如下類定義:classAA{inta;public:AA(intn=0):a(n){}};classBB:publicAA{public:BB(intn)__________};其中橫線處缺失部分是A、:AA(n){}B、:a(n){}C、{a(n);}D、{a=n;}標準答案:A知識點解析:本題考查派生類的構造函數,其一般形式為:派生類構造函數名(總參數表列):基類構造函數名(參數表列)所以只有A選項正確。28、有如下類定義:classBox{public:doubleGetLength(){returnlength;}doubleGetWidth();doubleGetHeight();private:doublelength,width,height;};inlinedoubleBox::GetWidth(){returnwidth;}doubleBox::GetHeight(){returnheight;}在成員函數GetLenth、GetWidth和GetHeight中,內聯函數有A、3個B、2個C、1個D、0個標準答案:B知識點解析:在類體中定義的成員函數,C++系統會自動將它們作為內聯函數處理,而在類外定義的成員函數,系統并不把它們默認為內聯函數,使用inline也是內聯函數,所以共有2個內聯函數GetLength和GetWidth,B選項正確。29、已知TV是一個類,并有函數func定義如下:voidfunc(){TVli,*net[2],company[3];}則在調用func()后,TV類的析構函數被調用的次數是A、2次B、3次C、4次D、6次標準答案:C知識點解析:本題考查默認析構函數,題中定義了對象、包含三個元素的一維對象數組,所以析構函數執行4次,而對象指針數組并沒有實際占用空間,所以不執行析構函數。30、有如下程序:#include#includeusingnamespacestd;classMyBag{public:MyBag(stringbr="ABC"):brand(br){cout<A、MyBagarrays[2];B、MyBag*arrays=newMyBag[2];C、MyBagarrays[2]={MyBag("ABC")};D、MyBagarrays[2]={MyBag("CityLife"),MyBag("Micky")};標準答案:D知識點解析:本題考查構造函數的應用,題目中A、B、C、D,都定義了包含兩個元素的一維數組,A、B、C都執行題目中的構造函數,并且輸出"ABCABC",而D選項中由于構造函數參數不為ABC,所以輸出為"CityLifeMicky"。31、有如下程序:#includeusingnamespacestd;classTV{public:TV(ints=41):size(s){}voidPrint(){cout<<’/’<<’N’<A、/N41/S54B、/N41/C54C、/C41/S54D、/C41/C54標準答案:A知識點解析:本題考查構造函數相關知識,本題中定義一個對象room1,執行room1.Print時執行構造函數給size賦值為41,然后執行voidPrint(){cout<<’/’<<’N’<32、有如下類定義:classPerson{public:Person(strings):name(s){}protected:stringname;};classFather:virtualpublicPerson{public:Father(strings):Person(s){}};classMother:virtualpublicPerson{public:Mother(strings):Person(s){}};classChild:publicFather,publicMother,virtualpublicPerson{public:Child(strings1,strings2,strings3):Mother(s1),Father(s2),Person(s3){}};在建立派生類Child的對象時,其基類Father、Mother和Person的構造函數的調用順序為A、Father,Mother,PersonB、Mother,Father,PersonC、Person,Father,MotherD、Father,Person,Mother,Person,Person標準答案:C知識點解析:執行派生類構造函數的順序是:1、調用基類構造函數,2、調用子對象構造函數,3、再執行派生類構造函數,所以本題中先調用基類person構造函數,然后執行father構造函數,最后執行mother構造函數。33、有如下程序:#includeusingnamespacestd;classPoint{public:Point(intxx=0,intyy=0):x(xx),y(yy){}protected:voidSetXY(intxx,intyy){x=xx;y=yy;}private:intx,y;};classCircle:publicPoint{public:Circle(intr):radius(r){}voidSet(intr,intx,inty){radius=r;SetXY(x,y);}//①voidPrint()const{cout<A、①B、②C、③D、④標準答案:B知識點解析:本題考查對象成員的引用,派生類公用繼承基類,但是不能繼承基類的私有成員,所以執行voidPrint()const{cout<34、有如下程序:#include#includeusingnamespacestd;classInstrument{public:Instrument(stringt="樂器",stringn="無名"):type(t),name(n){}virtualstringGetType()const{return"樂器";}stringGetName()const{return"無名";}protected:stringtype,name;};classPiano:publicInstrument{public:Piano(stringn,stringt="鋼琴"):Instrument(t,n){}stringGetType()const{return"鋼琴";}stringGetName()const{returnname;}};intmain(){Instrument*pi=newPiano("星空");cout<GetType()<<’-’<GetName();deletepi;return0;}運行時的輸出結果是A、樂器-星空B、樂器-無名C、鋼琴-星空D、鋼琴-無名標準答案:D知識點解析:本題考查虛函數的運用,本題中基類Instrument,派生類Piano,其中虛函數為GetType,當定義Instrument*pi=newPiano("星空")時,調用派生類的GetType函數,得到type為鋼琴,執行GetName時只能執行基類的這個函數,輸出無名,所以輸出鋼琴-無名。選項D正確。35、下列關于模板形參的敘述中,錯誤的是A、模板形參表必須在關鍵字template之后B、模板形參表必須用括弧()括起來C、可以用class修飾模板形參D、可以用typename修飾模板形參標準答案:B知識點解析:本題考查模板的定義,使用的括號為<>,所以B選項錯誤。36、有如下模板聲明:templateclassA;下列聲明中,與上述聲明不等價的是A、templateclassA;B、templateclassA;C、templateclassA;D、template<typenameT1,T2>classA;標準答案:D知識點解析:本題考查模板的定義,A、B、C選項中兩個參數都為typename或class,而D選項中第二個參數不是typename或class,所以與題目中不等價,D選項錯誤。37、有如下程序#include#includeusingnamespacestd;intmain(){cout<A、setprecision(3)B、fixedC、setfill(’*’)D、setw(8)標準答案:D知識點解析:本題考查輸入輸出格式的控制,可以看出**12.345和**34.567字段寬度都為8,所以遺漏處為setw(8),D選項正確。國家二級C++機試(選擇題)模擬試卷第2套一、選擇題(本題共39題,每題1.0分,共39分。)1、下列關于算法復雜度敘述正確的是A、最壞情況下的時間復雜度一定高于平均情況的時間復雜度B、時間復雜度與所用的計算工具無關C、對同一個問題,采用不同的算法,則它們的時間復雜度是相同的D、時間復雜度與采用的算法描述語言有關標準答案:B知識點解析:算法的時間復雜度是指執行算法所需要的計算工作量,它與使用的計算機、程序設計語言以及算法實現過程中的許多細節無關,B選項正確,D選項錯誤。最壞情況下的時間復雜度可以與平均情況的時間復雜度相同,A選項錯誤。不同的算法時間復雜度一般不相同,C選項錯誤。2、設有棧S和隊列Q,初始狀態均為空。首先依次將A,B,C,D,E,F入棧,然后從棧中退出三個元素依次入隊,再將X,Y,Z入棧后,將棧中所有元素退出并依次入隊,最后將隊列中所有元素退出,則退隊元素的順序為A、DEFXYZABCB、DEFXYZABCC、FEDXYZCBAD、DEFZYXABC標準答案:B知識點解析:棧是一種特殊的線性表,它所有的插入與刪除都限定在表的同一端進行。隊列是指允許在一端進行插入,而在另一端進行刪除的線性表。將A,B,C,D,E,F入棧后,棧中元素為ABCDEF,退出三個元素入隊,隊列元素為FED,將X,Y,Z入棧后棧中元素為ABCXYZ,全部入隊后,隊列元素為FEDZYXCBA,故B選項正確。3、下列敘述中正確的是A、有兩個指針域的鏈表稱為二叉鏈表B、循環鏈表是循環隊列的鏈式存儲結構C、帶鏈的棧有棧頂指針和棧底指針,因此又稱為雙重鏈表D、結點中具有多個指針域的鏈表稱為多重鏈表標準答案:D知識點解析:雙向鏈表與二叉鏈表均是有兩個指針域的鏈表,A選項錯誤。在單鏈表的第一個結點前增加一個表頭結點,隊頭指針指向表頭結點,最后一個結點的指針域的值由NULL改為指向表頭結點,這樣的鏈表稱為循環鏈表。循環隊列是隊列的一種順序存儲結構。循環鏈表與循環隊列是兩種存儲結構,B選項錯誤。雙向鏈表結點有兩個指針域,指向前一個結點的指針和指向后一個結點的指針,而帶鏈的棧是單鏈表形式,C選項錯誤。故正確答案為D選項。4、某二叉樹共有845個結點,其中葉子結點有45個,則度為1的結點數為A、400B、754C、756D、不確定標準答案:C知識點解析:在樹結構中,一個結點所擁有的后件個數稱為該結點的度,所有結點中最大的度稱為樹的度。對任何一棵二叉樹,度為0的結點(即葉子結點)總是比度為2的結點多一個。二叉樹共有845個結點,度為0的結點有45個,度為1的結點數為n1,度為2的結點數為n2,則845=45+n1+n2,且45=n2+1,則n1=756,C選項正確。5、軟件需求分析階段的主要任務是A、確定軟件開發方法B、確定軟件開發工具C、確定軟件開發計劃D、確定軟件系統的功能標準答案:D知識點解析:需求分析階段的工作可以分為4個方面:需求獲取、需求分析、編寫需求規格說明書和需求評審,包括確定軟件系統的功能,D選項正確。A、B、C選項均為開發階段工作。6、下面對軟件測試描述錯誤的是A、嚴格執行測試計劃,排除測試的隨意性B、隨機地選取測試數據C、隨機地選取測試數據D、軟件測試是保證軟件質量的重要手段標準答案:B知識點解析:在測試之前制定測試計劃,并嚴格執行,測試用例的選擇不可隨意,應選擇有代表性的,盡可能發現迄今為止尚未發現的錯誤,A選項敘述正確,B選項敘述錯誤。測試根本目的是盡可能多地發現并排除軟件中隱藏的錯誤,C選項敘述正確。軟件測試是保證軟件質量、可靠性的關鍵步驟,D選項敘述正確。故正確答案為B選項。7、結構化程序的三種基本控制結構是A、順序、選擇和重復(循環)B、過程、子程序和分程序C、順序、選擇和調用D、調用、返回和轉移標準答案:A知識點解析:結構化程序的三種基本控制結構:順序、選擇和重復,故A選項正確。8、數據庫中對概念模式內容進行說明的語言是A、數據定義語言B、數據操縱語言C、數據控制語言D、數據宿主型語言標準答案:A知識點解析:數據庫管理系統為完成主要功能提供了相應的數據語言,它們是:數據定義語言,該語言負責數據的模式定義與數據的物理存取構建;數據操縱語言,該語言負責數據的操縱,包括查詢與增、刪、改等操作;數據控制語言,該語言負責數據完整性、安全性的定義與檢查以及并發控制、故障恢復等功能。故A選項正確。9、某個工廠有若干個倉庫,每個倉庫存放有不同的零件,相同零件可能放在不同的倉庫中。則實體倉庫和零件間的聯系是A、多對多B、一對多C、多對一D、一對一標準答案:A知識點解析:一般來說,實體集之間必須通過聯系來建立聯接關系,分為三類:一對一聯系(1:1)、一對多聯系(1:m)、多對多聯系(m:n)。每個倉庫存放有不同的零件,相同零件可能放在不同的倉庫中,故實體倉庫和零件間的聯系是多對多,A選項正確。10、有三個關系R、S和T如下:則由關系R和S得到關系T的操作是A、交B、差C、并D、選擇標準答案:A知識點解析:用于查詢的3個操作無法用傳統的集合運算表示,引入的運算為投影運算、選擇運算、笛卡爾積。常用的擴充運算有交、除、連接及自然連接等。選擇,從關系中找出滿足給定條件的元組的操作稱為選擇,題目中無給定條件,故D選項錯誤。差:R-S結果是屬于R但不屬于S的記錄組成的集合,T中元組"c32"同時屬于R和S,B選項錯誤。并:R∪S是將S中的記錄追加到R后面,T中元組少于R,故C選項錯誤。交:R∩S結果是既屬于R又屬于S的記錄組成的集合,與題目中結果相符,故A選項正確。11、下列選項中,正確的C++標識符是A、a^3B、a-3C、a’3D、a_3標準答案:D知識點解析:C++的標識符由字母、數字和下劃線組成,其中必須以字母或下劃線開頭。A、B、C錯誤,答案為D。12、下列選項中,正確的C++表達式是A、a1+B、b++2C、3=cD、-d4標準答案:D知識點解析:選項A中,"+"運算符作為一元運算符,應該放在操作數之前,返回操作數本身;作為二元運算符,必須作用于兩個操作數;選項B中,"++"運算符是一元運算符,只能作用于一個操作數;選項C中,3是常量,不能用作賦值操作符的左值;選項D正確,"-"操作符作為一元運算符,放在操作數之前,對其操作數取負;答案為D。13、要定義整型數組x,使之包括初值為1的三個元素,下列語句正確的是A、staticintx[3]={1};B、intx[3];x[1]=x[2]=x[3]=1;C、intx[3]={1,1,1};D、intx={1,1,1};標準答案:C知識點解析:選項A中,數組x的后兩個元素初值默認為0;選項B中,數組下標從0開始,x[0]未賦初值,x[3]訪問越界;選項D中,x是整型變量,不是整型數組,賦值語法錯誤;只有C正確,定義整型數組x,并對三個元素賦初值為1;答案為C。14、常量4.2,4.2f,4L的數據類型分別是A、float、float、doubleB、double、float、longC、double、double、floatD、float、float、long標準答案:B知識點解析:常量4.2是浮點型常量,一般按雙精度處理,是double型;4.2f按單精度處理,是float型;4L是long型。答案為B。15、設變量x和y為整型變量,若有函數調用為"fun(&x,&y)",則下列選項中,能夠作為函數fun原型聲明的是A、voidfun(int&a,int&b);B、voidfun(int&a,int*b);C、voidfun(int*a,int&b);D、voidfun(int*a,int*b)標準答案:D知識點解析:fun(&x,&y),函數調用參數列表中傳遞的是變量x,y的地址,所以函數原型聲明的形參列表中參數應該是兩個整型變量地址,A、B、C選項中都包含引用傳遞,不正確;答案為D。16、下列關于函數參數的敘述中,錯誤的是A、函數的實參與形參應該一一匹配B、定義函數時必須給出函數的實參C、函數形參可以看做函數的局部變量D、C++中可以為形參指定默認值標準答案:B知識點解析:函數定義時,形參列表若不為空,需要給出函數的形參;調用函數時,參數列表若不為空,必須給出函數的實參;選項A、C、D正確,選項B錯誤;答案為B。17、下列選項中,不是重載函數調用時選擇依據的是A、參數個數B、參數類型C、參數名稱D、函數名稱標準答案:C知識點解析:重載函數調用時首先要從函數名稱相同的候選函數中選擇可行函數,可行函數必須滿足兩個條件:1、函數的形參個數與該調用的實參個數相同;2、每個實參的類型必須與對應形參的類型匹配,或者可被隱式轉換為對應的形參類型。參數名稱可以不相同,答案選C。18、若為類MyClass重載運算符"+",下列聲明中,錯誤的是A、friendMyClassoperator+(double,double);B、friendMyClassoperator+(double,MyClass);C、friendMyClassoperator+(MyClass,double);D、friendMyClassoperator+(MyClass,MyClass);標準答案:A知識點解析:重載運算符必須具有一個類類型的操作數,這條規則強制重載運算符不能重新定義用于內置類型對象的運算符。選項B、C、D正確,A錯誤,答案為A。19、有如下程序:#includeusingnamespacestd;voidfun(int&x,int&y){y=y+x;x=y/4;x++;}intmain(){intx=4,y=5;fun(x,y);cout<A、4,5B、3,5C、3,9D、2,5標準答案:C知識點解析:函數fun兩個形參x,y都是引用類型,函數功能是通過形參的引用類型修改實參值,首先修改y值為x、y之和;然后將修改后的y值除以4,結果賦給x,再將x自增1;main函數中定義x=4,y=5,通過fun函數的調用,修改y的值為4+5=9,x的值為9/4+1=3,最終輸出結果為3,9,答案為C。20、有如下類定義:classMyClass{public:MyClass(doubled=0.0):val(d){}______________//運算符函數-的聲明private:doubleval;};若要使語句序列MyClassy(4.6),z;z=6.7-y;能夠正常運行,橫線處的聲明語句應為A、friendMyClassoperator-(MyClass&,MyClass&);B、friendMyClassoperator-(double,MyClass);C、friendMyClassoperator-(MyClass&,double);D、friendMyClassoperator-(double&,MyClass&);標準答案:B知識點解析:由調用函數6.7-y可知,double類型在運算符"-"的左邊,應該作為運算符函數"-"的第一形參,選項A、C錯誤;由于運算符"-"函數并不改變操作數的狀態,所以形參應該聲明為const對象的引用,或者按值傳遞,參數按引用類型傳遞可能會改變操作數的狀態,選項D錯誤;答案為B。21、有如下兩個類定義:classAA{};classBB{AAv1,*v2;BBv3,*v4;};其中定義錯誤的成員變量是A、v1B、v2,v4C、v3D、v3,v4標準答案:C知識點解析:只有類定義或者聲明在當前定義類前面出現過,數據成員才能被指定為該類類型,類AA已經完成定義,v1,v2正確;類不能具有自身類型的數據成員,只要類名出現就可以認為該類已經聲明,類的數據成員就可以是指向自身類型的指針或引用,類BB在聲明之后,定義之前是一個不完全類型,其數據成員只能是指向BB類型的指針或引用,v4正確,v3錯誤;答案為C。22、有如下類定義:classBase{public:voidfun(){cout<<"Base::fun"<A、Base.fun();B、Base->fun();C、Base::fun();D、fun();標準答案:C知識點解析:基類Base和派生類Derived中使用同一名字的成員函數fun,所以在派生類Derived的作用域中,派生類Derived中的fun函數會屏蔽基類Base中的fun函數,即Base的fun函數對Derived不可見,這是因為編譯器在查找名字fun時,首先在Derived中找到,這樣編譯器就不再繼續查找,所以若想在Derived中調用Base的fun函數,必須顯式的說明fun函數屬于Base,這里使用作用域運算符訪問被屏蔽的fun,調用語句為:Base::fun();答案為C。23、如果派生類以protected方式繼承基類,則基類中的保護成員在派生類中的訪問屬性是A、publicB、protectedC、privateD、protected或public標準答案:B知識點解析:protected方式繼承中,基類的public和protected成員在派生類中為protected成員,答案為B。24、有如下兩個類定義:classXX{private:doublex1;protected:doublex2;public:doublex3;};classYY:protectedXX{private:doubley1;protected:doubley2;public:doubley3;};在派生類YY中的保護成員的個數是A、1B、2C、3D、4標準答案:C知識點解析:類YY以protected方式繼承類XX,所以類XX中的public成員和protected成員在YY中為protected成員,所以YY中的protected成員有:x2,x3,y2,答案為C。25、有如下類聲明:classWhat{intn;public:doubled;private:charc;};類What的公有數據成員和私有數據成員的數量分別是A、1和1B、1和2C、2和1D、2和2標準答案:B知識點解析:class關鍵字定義的類,成員默認的訪問級別是私有的,所以類What中公有成員有d,私有成員有n,c;答案為B。26、除了顯式定義的構造函數外,類中還有可能包含編譯器自動生成的構造函數,因此一個類所擁有的構造函數的至少有A、1個B、2個C、3個D、4個標準答案:A知識點解析:一個類,如果沒有顯示定義的構造函數,那么編譯器自動生成一個構造函數;一個類,如果顯示定義了構造函數,無論個數多少,編譯器也不會再生成任何構造函數,所以一個類所擁有的構造函數至少有1個,答案為A。27、有如下類聲明:classHow{intk;public:How():k(99){}};則類How所擁有的構造函數的數量是A、1B、2C、3D、4標準答案:B知識點解析:首先類How定義了一個默認構造函數How(),因而編譯器不會自動生成默認構造函數;其次How中需要一個復制構造函數,這由編譯器自動生成,所以How有兩個構造函數,答案為B。28、在下面的類聲明中,錯誤的是A、classAA{BBb;};classBB{AAa;};B、classAA{AA*a;};classBB{BB&b;};C、classBB;classAA{BB*b;};classBB{AAa;};D、classAA;classBB{AA&a;};classAA{BBb;};標準答案:A知識點解析:在創建類的對象之前,必須完整的定義該類,在一個類的聲明之后,定義之前,這個類是一個不完全類型,對于不完全類型,只能用于定義指向該類型的指針及引用,或者用于聲明(不是定義)使用該類型作為形參類型或返回類型的函數;選項A中,類A中的BB還未定義(也未聲明),無法創建BB類對象,錯誤;選項B中,聲明之后定義的是指針或引用,正確;選項C中,聲明BB之后定義BB類的指針,定義AA之后創建AA類的對象,正確;選項D中,聲明AA之后定義AA類的引用,定義BB之后創建BB類的對象,正確;答案為A。29、有如下類聲明和函數聲明:classBase{intm;public:intn;protected:intp;};classDerived:publicBase{intk;};voidf(Derivedd);則允許函數f訪問的參數d的數據成員的個數是A、1B、2C、3D、4標準答案:A知識點解析:C++中,以class關鍵字定義的類默認的訪問級別為private,另外對于公有繼承,基類成員保持自己的訪問級別(private成員除外),即基類的public成員為派生類的public成員,基類的protected成員為派生類的protected成員;本題中,Derived類以public方式繼承Base,所以Derived中public成員有:n,protected成員有:p,private成員有:k,不可見的成員有:m;這些成員中,對Derived類對象可見的只有public成員n,答案為A。30、有如下類聲明:classHow{intk;public:~How(){cout<<"Bye";}};則類How所擁有的構造函數的數量是A、1B、2C、3D、4標準答案:B知識點解析:在類How定義中沒有定義任何構造函數,所以編譯器會自動生成一個默認構造函數,同時還生成復制構造函數,所以類How擁有兩個構造函數,答案為B。31、有如下程序:#includeusingnamespacestd;classBase1{public:Base1(){}~Base1(){cout<<"b1";}};classBase2{public:Base2(){}~Base2(){cout<<"b2";}};classDerived:publicBase2,publicBase1{public:Derived(){}~Derived(){cout<<’d’;}};intmain(){Derivedobj;return0;}運行這個程序的輸出是A、b1b2dB、b2b1dC、db1b2D、db2b1標準答案:C知識點解析:派生類構造函數都是先調用基類構造函數,再根據聲明次序定義數據成員,另外對于多繼承,派生類的構造函數初始化列表中,基類構造函數是按照基類在派生類的派生列表中出現的次序調用的;由于Derived類的派生列表中,Base2在前,所以應該先調用Base2的構造函數,再調用Base1的構造函數;銷毀派生類對象時,總是按照構造函數運行次序的相反順序調用析構函數,首先運行派生類析構函數,然后按繼承層次依次向上調用各基類函數;所以Derived對象銷毀時,首先調用Derived的析構函數,接著調用Base1的析構函數,最后調用Base2的析構函數;輸出結果為:"db1b2",答案為C。32、若Pay是一個類名,則執行語句Payp1,p2[2],*p3;時Pay的構造函數被調用的次數是A、1B、2C、3D、4標準答案:C知識點解析:程序定義了Pay對象p1,Pay對象數組p2和Pay對象指針p3,編譯器自動生成默認構造函數初始化p1對象和p2的兩個對象元素;p3沒有初始化,沒有調用構造函數,答案為C。33、有如下類聲明和函數聲明classBase{intm;public:intn;protected:intp;};classDerived:protectedBase{public:intk;};voidf(Derivedd);則在函數f中通過d可訪問的數據成員的個數是A、1B、2C、3D、4標準答案:A知識點解析:保護繼承中,基類的public和protected成員在派生類中都是protected成員,所以類Derived中,public成員為:k,protected成員為:n、p,沒有private成員,m對Derived不可見;Derived對象d可訪問的只有public成員,即k;答案為A。34、有如下類定義:classPet{charname[30];public:Pet(char*n){strcpy(name,n);}voidbark(){cout<<"Woof!";}};且有如下變量定義:Petmy_dog("Weiwei"),&p=my_dog;則下列訪問成員函數bark的表達式中,錯誤的是A、p.bark()B、my_dog.bark()C、p->bark()D、(&p)->bark()標準答案:C知識點解析:p為Pet類的引用類型,引用的對象是my_dog,p->bark()用法是錯誤的,至于選項D,&p是p的地址,通過地址使用箭頭訪問運算符訪問bark(),正確;答案為C。35、有如下程序#includeusingnamespacestd;classAA{charc;public:AA():c(’X’){}AA(charch):c(ch){}AA(AA&aa):c(aa.c){}~AA(){cout<<3;}charvalue()const{returnc;}};voidf1(AAa){cout<A、X3Y3B、XY33C、Y3X3D、YX33標準答案:C知識點解析:main函數中,調用f1函數,創建局部對象AA(’Y’),此時形參a就是AA(’Y’)對象,輸出a.value(),即"Y",f1函數執行完之后,需要銷毀AA(’Y’)對象,調用AA類的析構函數~AA(),輸出"3";接著程序調用f2函數,f2函數創建局部對象的引用a并初始化指向AA(),此時引用a所指對象的成員c值為"X",輸出為"X",f2函數執行完之后,需要銷毀a所指對象AA(),調用AA類的析構函數~AA(),輸出"3",程序結束;運行結果為:"Y3X3",答案為C。36、在下列枚舉符號中,用來定位文件開始位置的方式是A、ios_base::curB、ios_base::begC、ios_base::outD、ios_base::end標準答案:B知識點解析:ios_base::cur是指文件的當前位置;ios_base::end指向文件尾部;ios_base::beg指向文件開始;ios_base::out文件操作的文件模式;答案為B。37、若MyTemp是一個只有一個虛擬類型參數的類模板,且有如下語句序列MyTempp1;MyTempp2;MyTempp3[4];編譯系統在處理上面的語句序列時,所生成的模板MyTemp的實例的個數是A、1B、2C、3D、6標準答案:C知識點解析:題目中使用MyTemp類模板定義了三種類型的類對象,所以生成的模板MyTemp實例有3個,答案為C。38、下列關于模板的表述中,正確的是A、如果一個類中存在純虛函數,這個類就是類模板B、函數模板不能帶有形式參數表C、類模板帶有模板形參表D、類模板中不能包含構造函數標準答案:C知識點解析:存在純虛函數的類是抽象基類,選項A錯誤;函數模板的形參表不能為空,不然定義函數模板也沒有意義,選項B錯誤;類模板中是可以包含構造函數的,選項D錯誤。答案為C。39、下列關于基類和派生類關系的敘述中,正確的是A、派生類中的成員可以訪問基類中的任何成員B、每個類最多只能有一個直接基類C、對基類構造函數的調用不能出現在派生類構造函數的初始化列表中D、派生類除了繼承基類的成員,還可以定義新的成員標準答案:D知識點解析:派生類對基類成員的訪問權限由基類成員的訪問標識和類派生列表中的訪問標識共同決定的,選項A錯誤;多重繼承的派生類可以有多個直接基類,選項B錯誤;派生類構造函數可以隱式調用基類的默認構造函數初始化對象的基類部分,也可以在派生類構造函數初始化列表中顯示調用基類構造函數,選項C錯誤;答案為D。國家二級C++機試(選擇題)模擬試卷第3套一、選擇題(本題共40題,每題1.0分,共40分。)1、下列數據結構中,屬于非線性結構的是()。A、循環隊列B、帶鏈隊列C、二叉樹D、帶鏈棧標準答案:C知識點解析:樹是簡單的非線性結構,所以二叉樹作為樹的一種也是一種非線性結構。2、下列數據結構中,能夠按照"先進后出"原則存取數據的是()。A、循環隊列B、棧C、隊列D、二叉樹標準答案:B知識點解析:棧是按先進后出的原則組織數據的。隊列是先進先出的原則組織數據。3、對于循環隊列,下列敘述中正確的是()。A、隊頭指針是固定不變的B、隊頭指針一定大于隊尾指針C、隊頭指針一定小于隊尾指針D、隊頭指針可以大于隊尾指針,也可以小于隊尾指針標準答案:D知識點解析:循環隊列的隊頭指針與隊尾指針都不是固定的,隨著入隊與出隊操作要進行變化。因為是循環利用的隊列結構所以對頭指針有時可能大于隊尾指針有時也可能小于隊尾指針。4、算法的空間復雜度是指()。A、算法在執行過程中所需要的計算機存儲空間B、算法所處理的數據量C、算法程序中的語句或指令條數D、算法在執行過程中所需要的臨時工作單元數標準答案:A知識點解析:算法的空間復雜度是指算法在執行過程中所需要的內存空間。所以選擇A。5、軟件設計中劃分模塊的一個準則是()。A、低內聚低耦合B、高內聚低耦合C、低內聚高耦合D、高內聚高耦合標準答案:B知識點解析:一般較優秀的軟件設計,應盡量做到高內聚,低耦合,即減弱模塊之間的耦合性和提高模塊內的內聚性,有利于提高模塊的獨立性。6、下列選項中不屬于結構化程序設計原則的是()。A、可封裝B、自頂向下C、模塊化D、逐步求精標準答案:A知識點解析:結構化程序設計的思想包括:自頂向下、逐步求精、模塊化、限制使用goto語句,所以選擇A。7、軟件詳細設計生產的圖如下:[70*]該圖是()A、N-S圖B、PAD圖C、程序流程圖D、E-R圖標準答案:C知識點解析:N-S圖提出了用方框圖來代替傳統的程序流程圖,所以A)不對。PAD圖是問題分析圖,它是繼承程序流程圖和方框圖之后提出的又一種主要用于描述軟件詳細設計的圖形表示工具,所以B)不對。E-R圖是數據庫中的用于表示E-R模型的圖示工具,所以D)不對。根據圖中所示表示方法是進行軟件詳細設計時使用的程序流程圖。8、數據庫管理系統是()。A、操作系統的一部分B、在操作系統支持下的系統軟件C、一種編譯系統D、一種操作系統標準答案:B知識點解析:數據庫管理系統是數據庫的機構,它是一種系統軟件,負責數據庫中數據組織、數據操縱、數據維護、控制及保護和數據服務等。是一種在操作系統之上的系統軟件。9、在E-R圖中,用來表示實體聯系的圖形是()。A、橢圓形B、矩形C、菱形D、三角形標準答案:C知識點解析:在E-R圖中實體集用矩形,屬性用橢圓,聯系用菱形。10、有三個關系R、S和T如下:則關系T是由關系R和S通過某種操作得到,該操作為()。A、選擇B、投影C、交D、并標準答案:D知識點解析:在關系T中包含了關系R與S中的所有元組,所以進行的是并的運算。11、下列符號中可以用做C++標識符的是()。A、_radiusB、foo~barC、elseD、3room標準答案:A知識點解析:本題考查C++標識符的命名規則,其規則有如下幾點:①所有標識符必須由字母、數字或下畫線組成,且必須由字母或下畫線開頭;②所有標識符不能使用C++已有的關鍵字;③大、小寫字母表示不同意義,即代表不同的標識符。選項B包含了字符"~",選項C是關鍵字,選項D不能以數字開頭。故答案為A。12、下列各組類型聲明符中,含義相同的一組是()。A、unsignedlongint和longB、signedshortint和shortC、unsignedshort和shortD、shortint和int標準答案:B知識點解析:本題考查整型變量的類型,A、C選項中前者為無符號的,后者為有符號的,D選項中shortint為2個字節,int為4個字節。13、必須用一對大括號括起來的程序段是()。A、switch語句中的case標號語句B、if語句的分支C、循環語句的循環體D、函數的函數體標準答案:D知識點解析:本題考查C++基本控制結構,A、B、C三個選項中的大括號不是必須的,而D選項中的函數體必須使用大括號。14、語句int*p=&k;定義了指針p,與這個語句等效的語句序列是()。A、int*p;p=&k;B、int*p;p=k;C、int*p;*p=&k;D、int*p;*p=k;標準答案:A知識點解析:本題考查指針和地址,題目中定義了一個指向變量k的一個指針p,那么與題目中等效的表達式A選項,即先定義一個指向整型的指針,然后指向k的地址。15、執行下列語句段后,輸出字符"*"的個數是()。for(inti=50;i>1;i-=2)cout<<′*′;A、24B、25C、26D、50標準答案:B知識點解析:本題考查for循環語句,題目中每執行完循環體后,i都會減2,那么只有50到2之間的偶數才能輸出"*",所以總共輸出25次。16、下列關于運算符重載的敘述中,錯誤的是()。A、有的運算符可以作為非成員函數重載B、所有的運算符都可以通過重載而被賦予新的含義C、不得為重載的運算符函數的參數設置默認值D、有的運算符只能作為成員函數重載標準答案:B知識點解析:重載運算符的規則如下:①C++不允許用戶自己定義新的運算符,只能對已有的C++運算符進行重載;②C++不能重載的運算符只有5個;③重載不能改變運算符運算對象的個數;④重載不能改變運算符的優先級和結合性;⑤重載運算符的函數不能有默認的參數;⑥重載的運算符必須和用戶定義的自定義類型的對象一起使用,至少應有一個是類對象,即不允許參數全部是C++的標準類型。所以答案為B。17、對C++編譯器區分重載函數無任何意義的信息是()。A、參數類型B、參數個數C、返回值類型D、常成員函數關鍵字const標準答案:C知識點解析:所謂函數重載是指同一個函數名可以對應多個函數的實現。每種實現對應一個函數體,這些函數的名字相同,其參數類型或個數不同,但不能出現函數返回值類型不同而參數類型和個數完全相同的重載。所以本題答案為C。18、運算符重載時不需要保持的性質是()。A、操作數個數B、操作數類型C、優先級D、結合性標準答案:B知識點解析:重載運算符的規則如下:①C++不允許用戶自己定義新的運算符,只能對已有的C++運算符進行重載;②C++不能重載的運算符只有5個;③重載不能改變運算符運算對象的個數;④重載不能改變運算符的優先級和結合性;⑤重載運算符的函數不能有默認的參數;⑥重載的運算符必須和用戶定義的自定義類型的對象一起使用,至少應有一個是類對象,即不允許參數全部是C++的標準類型。所以答案為B。19、下列關于函數的描述中,錯誤的是()。A、函數可以沒有返回值B、函數可以沒有參數C、函數可以是一個類的成員D、函數不能被定義為模板標準答案:D知識點解析:本題考查函數的基礎知識,函數可以沒有返回值,沒有參數,也可以是一個類的成員,函數可以定義為模板,即模板函數。20、關于函數重載,下列敘述中錯誤的是()。A、重載函數的函數名必須相同B、重載函數必須在參數個數或類型上有所不同C、重載函數的返回值類型必須相同D、重載函數的函數體可以有所不同標準答案:C知識點解析:所謂函數重載是指同一個函數名可以對應多個函數的實現。每種實現對應一個函數體,這些函數的名字相同,其參數類型或個數不同,但不能出現函數返回值類型不同而參數類型和個數完全相同的重載。所以本題答案為C。21、下列關于運算符重載的描述中,正確的是()。A、運算符重載為成員函數時,若參數表中無參數,重載的是一元運算符B、一元運算符只能作為成員函數重載C、二元運算符重載為非成員函數時,參數表中有一個參數D、C++中可以重載所有的運算符標準答案:A知識點解析:運算符重載為成員函數時,會省略一個參數,如果無參數,表明是一元運算符。一元運算符既可以作為成員函數重載,也可以作為非成員函數重載。二元運算符如果作為非成員函數,則參數表中必須有兩個參數。C++有5個運算符不能重載,它們是:.(成員訪問運算符)、.*(成員指針訪問運算符)、::(域運算符)、sizeof(長度運算符)和?:(條件運算符)。故本題答案為A。22、有如下函數定義:voidfunc(inta,int&b){a++;b++;}若執行代碼段:intx=0,y=1;func(x,y);則變量x和y的值分別是()。A、0和1B、1和1C、0和2D、1和2標準答案:C知識點解析:函數參數的3種傳遞方式:①將變量名作為形參和實參,即傳值方式;②傳遞變量指針;③引用形參。本題中實參x為傳值方式,所以x的值不會改變;y為引用形參,所以會改變。故本題答案為C。23、對于一個類定義,下列敘述中錯誤的是()。A、如果沒有定義拷貝構造函數,編譯器將生成一個拷貝構造函數B、如果沒有定義缺省的構造函數,編譯器一定將生成一個缺省的構造函數C、如果沒有定義構造函數,編譯器將生成一個缺省的構造函數和一個拷貝構造函數D、如果已經定義了構造函數和拷貝構造函數,編譯器不會生成任何構造函數標準答案:B知識點解析:本題考查構造函數和復制構造函數,如果沒有定義構造函數,編譯器將生成一個缺省的構造函數和一個拷貝構造函數,如果已經定義了構造函數和拷貝構造函數,編譯器不會生成任何構造函數。如果沒有定義拷貝構造函數,編譯器將生成一個拷貝構造函數。24、有如下頭文件:intf1();staticintf2();classMA{public:intf3();staticintf4();};在所描述的函數中,具有隱含的this指針的是()。A、f1B、f2C、f3D、f4標準答案:C知識點解析:只有類的非靜態成員函數才隱含this指針,其作用域是類內部,當類的非靜態成員函數中訪問類的非靜態成員時,編譯器會自動將對象本身的地址作為一個隱含參數傳遞給函數,而不必一定寫上this。所以本題答案為C。25、下列關于類定義的說法中,正確的是()。A、類定義中包括數據成員和函數成員的聲明B、類成員的缺省訪問權限是保護的C、數據成員必須被聲明為私有的D、成員函數只能在類體外進行定義標準答案:A知識點解析:類的成員的缺省訪問權限是私有的,數據成員可以是私有,可以是公用的,也可以是受保護的。類的成員函數可以在類內定義。26、如果派生類以protected方式繼承基類,則原基類的protected成員和public成員在派生類中的訪問屬性分別是()。A、public和publicB、public和protectedC、protected和publicD、protected和protected標準答案:D知識點解析:本題考查保護繼承中派生類對基類的訪問屬性,在受保護繼承中,基類的公用成員和保護成員在派生類中成了保護成員,其私有成員仍為基類私有,所以本題答案為D。27、下列有關繼承和派生的敘述中,正確的是()。A、派生類不能訪問基類的保護成員B、作為虛基類的類不能被實例化C、派生類應當向基類的構造函數傳遞參數D、虛函數必須在派生類中重新實現標準答案:C知識點解析:派生類可以訪問基類的保護成員,而不能訪問基類的私有成員。作為虛基類的類可以被實例化。虛函數如果沒有派生類中重新實現,那么仍然使用基類的成員函數。28、有如下類定義: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知識點解析:本題考查公用繼承對基類成員的訪問屬性。公用繼承中,基類的公用成員和保護成員在派生類中保持原有訪問屬性,其私有成員仍為基類私有,本題中若要給派生類繼承下來基類的私有成員賦值,那么只能調用基類的成員函數來對它賦值,所以本題答案為B。29、有如下程序:#includeusingnamespacestd;classCD{public:~CD(){cout<<′C′;}private:charname[80];};intmain(){CDa,*b,d[2];return0;}執行這個程序的輸出結果是()。A、CCCCB、CCCC、CCD、C標準答案:B知識點解析:本題考查類的析構函數,題目中定義了類的一個對象a,對象指針*b,對象數組d[2],當程序執行完后,析構函數執行了3次,輸出"CCC",對象指針不會執行析構函數。所以本題答案為B。30、有如下程序:#includeusingnamespacestd;classMyClass{public:MyClass(){++count;}~MyClass(){--count;}staticintgetCount(){returncount;}private:staticintcount;};intMyClass::count=0;intmain(){MyClassobj;cout<A、121B、232C、221D、122標準答案:A知識點解析:本題考查靜態數據成員。靜態數據成員在內存中只占一份空間,靜態數據成員屬于類,即使不定義對象,也會給靜態數據成員分配空間,可以被引用。本題中先是定義了一個對象obj,執行構造函數使得靜態數據成員count變為了1,然后又定義了指針對象,執行構造函數后,count變為了2,釋放指針后,執行析構函數,使得count變為了1。所以本題答案為A。31、有如下程序:#includeusingnamespacestd;classMyClass{public:MyClass(intx):val(x){}voidPrint()const{cout<<"const:val="<標記報錯收藏查看答案標準答案:B知識點解析:本題考查帶參數的構造函數。本題中定義了一個對象obj,那么執行其構造函數,初始化p1,p2的順序是由聲明這兩個成員的順序決定的,而不是由參數化列表順序決定,所以本題中,會先執行p1,輸出2,然后執行p2輸出1,然后輸出3,最后一次輸出312。所以本題答案為B。33、有如下程序:#includeusingnamespacestd;classBase{public:Base(intx=0){cout<A、0B、1C、01D、001標準答案:D知識點解析:本題考查派生類的構造函數和析構函數,在定義一個派生類的對象時,先調用基類的構造函數,然后再執行派生類的構造函數,對象釋放時,先執行派生類的析構函數,再執行基類的析構函數。所以本題中定義了一個對象d,先執行基類的構造函數輸出0,因為派生類中的私有數據成員為Base,所以還會執行一次基類的構造函數輸出0,最后執行派生類的構造函數輸出1,所以本題答案為D。34、下列代碼段中聲明了3個類:classPerson{};classStudent:publicPerson{};classUndergraduate:Student{};下列關于這些類之間關系的描述中,錯誤的是()。A、類Person是類Undergraduate的基類B、類Undergraduate從類Student公有繼承C、類Student是類Person的派生類D、類Undergraduate是類Person的派生類標準答案:B知識點解析:本題考查基類和派生類的邏輯關系,屬于基礎知識,如果沒有指明哪種繼承方式,那么默認為私有繼承,所以B選項錯誤。35、有如下程序:#includeusingnamespacestd;classBase{public:voidoutput(){cout<<1;}virtualvoidPrint(){cout<<′B′;}};classDerived:publicBase{public:voidoutput(){cout<<2;}voidPrint(){cout<<′D′;}};intmain(){Base*ptr=newDerived;ptr->output();ptr->Print();deleteptr;return0;}執行這個程序的輸出結果是()。A、1BB、1DC、2BD、2D標準答案:B知識點解析:在某基類中聲明為virtual并在一個或多個派生類中被重新定義的成員函數,本題中定義了一個指向派生類對象的基類指針ptr,執行ptr->output后,會執行基類的output函數,輸出1,由于Print是虛函數,所以ptr->Print()會執行派生類的Print,即輸出D,所以本題答案為B。36、有如下程序:#includeusingnamespacestd;classB{public:virtualvoidshow(){cout<<"B";}};classD:publicB{public:voidshow(){cout<<"D";}};voidfun1(B*ptr){ptr->show();}voidfun2(B&ref){ref.show();}voidfun3(Bb){b.show();}intmain(){Bb,*p=newD;Dd;fun1(p);fun2(b);fun3(d);deletep;return0;}執行這個程序的輸出結果是()。A、BBBB、BBDC、DBBD、DBD標準答案:C知識點解析:在某基類中聲明為virtual并在一個或多個派生類中被重新定義的成員函數,本題中定義類B的對象b、對象指針*p=newD以及類D的對象d;執行fun1會調用派生類的show函數,因為show函數為虛函數,而調用fun2、fun3仍然為基類的show函數,所以本題答案為C。37、C++中的模板包括()。A、對象模板和函數模板B、對象模板和類模板C、函數模板和類模板D、變量模板和對象模板標準答案:C知識點解析:本題考查函數模板和類模板,所以答案為C。38、下列關于類模板的模板參數的敘述中,錯誤的是()。A、模板參數可以作為數據成員的類型B、模板參數可以作為成員函數的返回類型C、模板參數可以作為成員函數的參數類型D、模板參數不能作為成員函數的局部變量的類型標準答案:D知識點解析:本題考查類模板的概念和定義,模板參數可以作為成員函數的局部變量的類型。39、下列關于C++預定義流對象的敘述中,正確的是()。A、cin是C++預定義的標準輸入流對象B、cin是C++預定義的標準輸入流類C、cout是C++預定義的標準輸入流對象D、cout是C++預定義的標準輸入流類標準答案:A知識點解析:cin是C++預定義的標準輸入流對象,cout是C++預定義的標準輸出流對象。40、有如下語句序列:charstr[10];cin>>str;當從鍵盤輸入"Ilovethisgame"時,str中的字符串是()。A、IlovethisgameB、IlovethiC、IloveD、I標準答案:D知識點解析:cin是C++預定義的標準輸入流對象,cin用來接收字符串時,遇"空格"、"TAB"、"回車

溫馨提示

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

評論

0/150

提交評論