國家二級(C++)機(jī)試模擬試卷40(共376題)_第1頁
國家二級(C++)機(jī)試模擬試卷40(共376題)_第2頁
國家二級(C++)機(jī)試模擬試卷40(共376題)_第3頁
國家二級(C++)機(jī)試模擬試卷40(共376題)_第4頁
國家二級(C++)機(jī)試模擬試卷40(共376題)_第5頁
已閱讀5頁,還剩111頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

國家二級(C++)機(jī)試模擬試卷40(共9套)(共376題)國家二級(C++)機(jī)試模擬試卷第1套一、選擇題(本題共40題,每題1.0分,共40分。)1、下列語句中,錯誤的是()。A、constintbuffer=256;B、constinttemp;C、constdouble*point;D、constdouble*rt=newdouble(5.5);標(biāo)準(zhǔn)答案:B知識點解析:const是一個C++語言的關(guān)鍵字,它限定一個變量不允許被改變。使用const在一定程度上可以提高程序的安全性和可靠性。限定符聲明變量只能被讀,必須初始化。B選項中沒有初始化,c選項為指向常量的指針,定義時初始化與否均可,如果是const*doublepoint形式,則為常指針,必須在定義時進(jìn)行初始化,A、C、D都正確。2、有如下程序:#include<iostream>usingnamespacestd;voidfun(int&x,inty){intt=x;x=y;y=t;}intmain(){inta[2]={1,2};fun(a[1],a[0]);std::cout<<a[0]<<’,’’<<a[1]<<std::endl;return0;}執(zhí)行后的輸出結(jié)果是()。A、2,2B、1,1C、1,2D、2,1標(biāo)準(zhǔn)答案:B知識點解析:程序中的fun函數(shù)的功能是實現(xiàn)函數(shù)中兩個參數(shù)的交換。主函數(shù)中fun的調(diào)用中第一個參數(shù)為數(shù)組第二個值即2,第二個參數(shù)為第一個值即1。在fun的定義中第一個形參引用類型,其改變會改變主函數(shù)中實參的值;而第二個形參不是引用類型,其改變不會改變第二個實參,所以2,1的交換結(jié)果為1,1,即B。3、以下程序的執(zhí)行結(jié)果是()。#includeintfun(intb[],intn){inti,r=1;for(i=0;iA、5B、6C、7D、8標(biāo)準(zhǔn)答案:B知識點解析:由程序的main函數(shù)入手,調(diào)用fun函數(shù),其中參數(shù)為數(shù)組a和3。fun函數(shù)的功能是for循環(huán)中由第一個數(shù)組元素開始到第三個元素進(jìn)行累積。4、有如下類聲明:classSAMPLE{intn;public:SAMPLE(inti=0):n(i){}voidsetValue(intn0);};下列關(guān)于getValue成員函數(shù)的定義中,正確的是()。A、SAMPLE::setValue(intn0){n=n0;}B、voidSAMPLE::setValue(intn0){n:n0;}C、voidsetValue(intn0){n=n0;}D、setValue(intn0){n=n0;}標(biāo)準(zhǔn)答案:B知識點解析:本題考查在類外定義類的成員函數(shù),需要使用作用域限定符“::”,屬于基礎(chǔ)知識,本題答案為B。5、有如下程序:#include<iostream>usingnamespacestd;classBase{pfivme:voidfunl()const{cout<<”funl”;}protected:voidfun2()const{cout<<”fun2”;}public:voidfun3()coast{cout<<”fun3”;}};classDerived:protectedBase{public:voidfun4()const{cout<<”fun4”;}};intmain(){Derivedobj;obj.funl();//①obj.fun2();//②0bj.fun3();//③obj.fun4();//④return0;}其中有語法錯誤的語句是()。A、①②③④B、①②③C、②③④D、①④標(biāo)準(zhǔn)答案:B知識點解析:本題考查保護(hù)繼承中派生類對基類的訪問屬性,受保護(hù)繼承中,基類的公用成員和保護(hù)成員在派生類中成了保護(hù)成員,其私有成員仍為基類私有,保護(hù)基類的所有成員在派生類中都被保護(hù)起來,在類外不能訪問,所以①②③錯誤。6、下列不屬于軟件工程3個要素的是()。A、工具B、過程C、方法D、環(huán)境標(biāo)準(zhǔn)答案:D知識點解析:軟件工程包括3個要素,即方法、工具和過程。方法是完成軟件工程項目的技術(shù)手段;工具支持軟件的開發(fā)、管理、文檔生成;過程支持軟件開發(fā)的各個環(huán)節(jié)的控制、管理。7、要使程序執(zhí)行后的輸出結(jié)果為ABCD,應(yīng)在橫線處添加語句()。#includeusingnamespacestd;classA{public:A(){cout<<’A’;));classB:_________{public:B(){cout<<’B’;)};classC:virtualpublicA{public:C(){cout<<’C’;}};classD:publicB,publicC{public:D(){cout<<’D’;}};voidmain(){Dobj;)A、publicAB、privateAC、protectedAD、virtualpublicA標(biāo)準(zhǔn)答案:D知識點解析:由主函數(shù)main入手,定義了類D對象obj。其中D為類B和C的公有繼承,A是C的虛基類。題目中要求的輸出結(jié)果為“ABCD”,依次為類A,類B,類C,類D中構(gòu)造函數(shù)的輸出語句。為了保證基類通過多條路徑被派生類繼承時,即保證A只被繼承一次,輸出一個A,所以不但需要聲明A為C的虛基類,同樣也要聲明A為B的虛基類。8、有如下程序:#includeusingnamespacestd;classTestClass{intn:public:TestClass(intk):n(k){}intget(){returnn;}intget()const{returnn+1;}};intmain(){TestClassp(5);constTestClassq(6);cout<A、55B、57C、75D、77標(biāo)準(zhǔn)答案:B知識點解析:C++中對常對象的成員函數(shù)調(diào)用,將自動調(diào)用其常成員函數(shù),程序中調(diào)用原型為"intget()const;"的函數(shù),對于非常對象將調(diào)用原型為"intget();"的函數(shù)。因為首先用5對對象p進(jìn)行了初始化,所以執(zhí)行p.get()時直接返回5,而對于常對象則以6對q進(jìn)行初始化,在調(diào)用q.get()時,將調(diào)用原型為"intgetq()const;"的函數(shù),該函數(shù)將返回n+1,第二個輸出應(yīng)為7,所以本題答案為57。9、有如下程序:#includeusingnamespaeestd;classBase{proteeted:Base(){eout<<’A’;}Base(charc){eout<A、BB、BAC、ABD、BB標(biāo)準(zhǔn)答案:C知識點解析:本題考查派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù),在定義一個派生類的對象時,先調(diào)用基類的構(gòu)造函數(shù),然后再執(zhí)行派生類的構(gòu)造函數(shù);對象釋放時,先執(zhí)行派生類的析構(gòu)函數(shù),再執(zhí)行基類的析構(gòu)函數(shù)。本題中定義了一個派生類對象d1,首先執(zhí)行基類的構(gòu)造函數(shù),輸出A;然后執(zhí)行派生類的構(gòu)造函數(shù),輸出B。所以答案為C。10、假定TestClass為一個類,則該類的拷貝構(gòu)造函數(shù)的聲明語句為()。A、TestClass(TestClassX)B、TestClass&(TestClassx)C、TestClass(TestClass木x)D、TestClass(TestClass&x)標(biāo)準(zhǔn)答案:D知識點解析:C++中的拷貝構(gòu)造函數(shù)是用一個已知的對象初始化一個正在創(chuàng)建的同類對緣。拷叭構(gòu)造函數(shù)的一般格式如下:(類名)::(類名)(const,(類名)&<引用對象名));其中const可以省略。11、下列關(guān)于C++流的描述中,錯誤的是()。A、cout>>’A’表達(dá)式可輸出字符AB、eof()函數(shù)可以檢測是否到達(dá)文件尾C、對磁盤文件進(jìn)行流操作時,必須包含頭文件:fstreamD、以ios_base::out模式打開的文件不存在時,將自動建立一個新文件標(biāo)準(zhǔn)答案:A知識點解析:本題考查C++流,想要輸出字符“A”,則應(yīng)該是cout<<“A”,所以本題答案為A。12、將前綴運(yùn)算符“--”重載為非成員函數(shù),下列原型中能正確用于類中說明的是()。A、Decr&operator--(int);B、Decroperator--(Deer&,int);C、friendDeer&operator--(Decr&);D、friendDecroperator--(Decr&,int);標(biāo)準(zhǔn)答案:D知識點解析:非成員函數(shù)重載用友元函數(shù)的形式實現(xiàn),“--”運(yùn)算符重載分為前置和后置兩種重載方式。用友元函數(shù)來實現(xiàn)“--”運(yùn)算符的重載時,前置“--”運(yùn)算符的重載的一般格式為:friend<type>operator--(ClassName&);后置++運(yùn)算符的重載的一般格式為:friend<type>operator--(ClassName&,int)。所以答案為D。13、有如下程序:#includeusingnamespacestd;classA{public:staticinta;voidinit(){a=1;}A(inta=2){init();a++;}};imA::a=0;Aobj;intmain(){cout<A、0B、1C、2D、3標(biāo)準(zhǔn)答案:B知識點解析:本題考查構(gòu)造函數(shù),本題中對類中的a數(shù)據(jù)成員先是賦值為0,當(dāng)定義了對象obj時,執(zhí)行構(gòu)造函數(shù),將a的值變?yōu)榱?,所以輸出1。14、執(zhí)行下列語句段后,輸出字符“*”的個數(shù)是()。for(inti=50;i>1;i-=2)cout<<’*’;A、24B、25C、26D、50標(biāo)準(zhǔn)答案:B知識點解析:本題考查for循環(huán)語句,題目中每執(zhí)行完循環(huán)體后,i都會減2,那么只有50到2之間的偶數(shù)才能輸出“*”,所以總共輸出25次。15、下列關(guān)于類模板的模板參數(shù)的敘述中,錯誤的是()。A、模板參數(shù)可以作為數(shù)據(jù)成員的類型B、模板參數(shù)可以作為成員函數(shù)的返回類型C、模板參數(shù)可以作為成員函數(shù)的參數(shù)類型D、模板參數(shù)不能作為成員函數(shù)的局部變量的類型標(biāo)準(zhǔn)答案:D知識點解析:本題考查類模板的概念和定義,模板參數(shù)可以作為成員函數(shù)的局部變量的類型。16、有如下函數(shù)模板定義:templateT1sum(T1a1){return(al+a2+a3);)則以下調(diào)用中正確的是()。A、sum(5);B、sum<4,3>(5);C、sum(5);D、sum(5);標(biāo)準(zhǔn)答案:A知識點解析:本題考查的函數(shù)模板的使用,有時不能根據(jù)用戶傳進(jìn)來的參數(shù)決定所有模板函數(shù)的值類型,如函數(shù)的返回值,還有用戶希望自己指定參數(shù)類型,這時就需要顯式地指出參數(shù)模板的類型,顯示指定模板的類型格式為:返回值類型函數(shù)模板<參數(shù)類型表>(參數(shù)表)。17、有如下程序:#includeusingnamespacestd;classTestClass{public:TestClass(){cout<<"BB";fun();}voidfun0{cout<<"Bf";)};classTestClass1:publicTestClass{public:TestClass1(){cout<<"DD";}voidfun0{cout<<"Df";}};intmain(){TestClass1d;return0;}執(zhí)行上面的程序?qū)⑤敵?)。A、BBBfDDB、BBDfDDDfC、DDD、DDBBBf標(biāo)準(zhǔn)答案:A知識點解析:TestClass是TestClass1的基類。由主函數(shù)main入手,定義TestClass1的對象d,調(diào)用基類TestClass構(gòu)造函數(shù)輸出:BB,調(diào)用基類成員函數(shù)fun輸出Bf,然后調(diào)用派生類的構(gòu)造函數(shù),輸出DD。18、下列關(guān)于基類和派生類關(guān)系的敘述中,正確的是()。A、派生類中的成員可以訪問基類中的任何成員B、每個類最多只能有一個直接基類C、基類的構(gòu)造函數(shù)必須在派生類的構(gòu)造函數(shù)體中調(diào)用D、派生類除了繼承基類的成員,還可以定義新的成員標(biāo)準(zhǔn)答案:D知識點解析:本題考查繼承與派生,派生類中的成員訪問基類中的成員是由派生方式?jīng)Q定的,A選項錯誤;一個類可以有多個直接基類,B選項錯誤;如果基類中定義了缺省構(gòu)造函數(shù)或根本沒有定義任何一個構(gòu)造函數(shù)(此時,由編譯器自動生成缺省構(gòu)造函數(shù))時,在派生類構(gòu)造函數(shù)的定義中可以省略對基類構(gòu)造函數(shù)的調(diào)用,即省略“<基類名>(<參數(shù)表>)”,C選項錯誤。派生類除了繼承基類的成員,還可以定義新的成員,因此本題選D。19、有如下類聲明:classFoo{intbar;};則Foo類的成員bar是()。A、公有數(shù)據(jù)成員B、公有成員函數(shù)C、私有數(shù)據(jù)成員D、私有成員函數(shù)標(biāo)準(zhǔn)答案:C知識點解析:此題考查的是類的定義。在定義類的成員變量時,如果沒有使用關(guān)鍵字,所有成員默認(rèn)定義為private私有權(quán)限。20、有如下函數(shù)模板:templateTsquare(Tx){returnx*x;}其中的參數(shù)T是()。A、函數(shù)形參B、函數(shù)實參C、模板實參D、模板形參標(biāo)準(zhǔn)答案:D知識點解析:本題x為函數(shù)形參,選項A錯誤;函數(shù)實參和模板實參只有在函數(shù)模板被調(diào)用并實例化的時候才可知,選項B、C錯誤;T是模板形參,選項D正確。答案為D選項。21、醫(yī)院里有不同的科室,每名醫(yī)生分屬不同科室,則實體科室與實體醫(yī)生間的聯(lián)系是()。A、一對一B、一對多C、多對一D、多對多標(biāo)準(zhǔn)答案:B知識點解析:實體集之間通過聯(lián)系來建立聯(lián)接關(guān)系分為3類:一對一聯(lián)系(1:1)、一對多聯(lián)系(1:m)、多對多聯(lián)系(m:n)。每個科室有多名醫(yī)生,但每個醫(yī)生只能在一個科室里,故實體科室和實體醫(yī)生之間的聯(lián)系是一對多,因此B選項正確。22、有如下程序:#includeusingnamespacestd;classPoint{public:Point(intxx=0,intyy=0):x(xx),y(yy){}voidSetXY(intxx,intyy){x=xx;y=yy;}protected:intx,y;};classCircle:Point{public:Circle(intr):radius(r){}voidSet(intr,intx,inty){radius=r;SetXY(x,y);}//①voidPrint()const{cout<A、①B、②C、③D、④標(biāo)準(zhǔn)答案:C知識點解析:C選項中SetXY為基類的成員函數(shù),派生類也繼承下來,但是SetXY的參數(shù)為兩個,而③調(diào)用時是3個參數(shù),所以錯誤。23、下列關(guān)于棧的敘述正確的是()。A、棧按"先進(jìn)先出"組織數(shù)據(jù)B、棧按"先進(jìn)后出"組織數(shù)據(jù)C、只能在棧底插入數(shù)據(jù)D、不能刪除數(shù)據(jù)標(biāo)準(zhǔn)答案:B知識點解析:棧是按"先進(jìn)后出"的原則組織數(shù)據(jù)的,數(shù)據(jù)的插入和刪除都在棧頂進(jìn)行操作。24、當(dāng)一個派生類對象結(jié)束其生命周期時,自動做的事情是A、先調(diào)用派生類的析構(gòu)函數(shù)后調(diào)用基類的析構(gòu)函數(shù)B、先調(diào)用基類的析構(gòu)函數(shù)后調(diào)用派生類的析構(gòu)函數(shù)C、如果派生類沒有定義析構(gòu)函數(shù),則只調(diào)用基類的析構(gòu)函數(shù)D、如果基類沒有定義析構(gòu)函數(shù),則只調(diào)用派生類的析構(gòu)函數(shù)標(biāo)準(zhǔn)答案:A知識點解析:執(zhí)行派生類析構(gòu)函數(shù)的順序是:先執(zhí)行派生類析構(gòu)函數(shù),再執(zhí)行基類的析構(gòu)函數(shù),所以A選項正確。25、下列關(guān)于基類和派生類關(guān)系的敘述中,正確的是()。A、每個類最多只能有一個直接基類B、派生類中的成員可以訪問基類中的任何成員C、基類的構(gòu)造函數(shù)必須在派生類的構(gòu)造函數(shù)體中調(diào)用D、派生類除了繼承基類的成員,還可以定義新的成員標(biāo)準(zhǔn)答案:D知識點解析:派生類可以定義自己的成員,包括成員變量和成員函數(shù),派生類有自己的屬性,而這個屬性是基類不具備的,因此可以定義自己的新成員。26、下列選項中,與實現(xiàn)運(yùn)行時多態(tài)性無關(guān)的概念是A、重載函數(shù)B、虛函數(shù)C、引用D、指針標(biāo)準(zhǔn)答案:A知識點解析:C++中,實現(xiàn)運(yùn)行時多態(tài)性必須滿足兩個條件:1、被調(diào)用的成員函數(shù)為虛函數(shù);2、調(diào)用必須通過基類類型的引用或指針。選項B、C、D正確;多態(tài)性是虛函數(shù)在運(yùn)行時期綁定,而重載的函數(shù)是在編譯期綁定,重載主要是為了C++的代碼復(fù)用,與多態(tài)性沒有關(guān)系;答案為A。27、下列敘述中正確的是A、所謂有序表是指在順序存儲空間內(nèi)連續(xù)存放的元素序列B、有序表只能順序存儲在連續(xù)的存儲空間內(nèi)C、有序表可以用鏈接存儲方式存儲在不連續(xù)的存儲空間內(nèi)D、任何存儲方式的有序表均能采用二分法進(jìn)行查找標(biāo)準(zhǔn)答案:C知識點解析:有序是特指元素按非遞減排列,即從小到大排列,但允許相鄰元素相等,A選項錯誤。有序表可以順序存儲也可以鏈?zhǔn)酱鎯Γ珺選項錯。能使用二分法查找的線性表必須滿足兩個條件:用順序存儲結(jié)構(gòu);線性表是有序表,D選項錯誤。故C選項正確。28、有三個關(guān)系R、S和T如下:則由關(guān)系R和S得到關(guān)系T的操作是()。A、自然連接B、并C、交D、差標(biāo)準(zhǔn)答案:D知識點解析:關(guān)系T中的元組是關(guān)系R中有而關(guān)系S中沒有的元組的集合,即從關(guān)系R中除去與關(guān)系S中相同元組后得到的關(guān)系T。所以做的是差運(yùn)算。29、下列敘述中,錯誤的是A、true是一個邏輯型常量B、x是一個字符型常量C、100是一個int常量D、2.71828是一個double常量標(biāo)準(zhǔn)答案:B知識點解析:考查常量定義,B選項中"x"為一個字符串,’x’才是字符常量,所以B選項錯誤。30、下列運(yùn)算符中,不能被重載的是()。A、&&B、!=C、.D、++標(biāo)準(zhǔn)答案:C知識點解析:C++不能重載的運(yùn)算符只有5個,即"."、".*"、"::"、"?:"、"sizeof",故本題答案為C。31、有如下程序:#includeusingnamespacestd;classA{public:A(inti){x=i;}voiddispa(){cout<<x<<′,′;}private:intx;};classB:publicA{public:B(inti):A(i+10){x=i;}voiddispb(){dispa();cout<<x<<endl;}private:intx;};intmain(){Bb(2);b.dispb();return0;}執(zhí)行這個程序的輸出結(jié)果是()。A、10,2B、12,10C、12,2D、2,2標(biāo)準(zhǔn)答案:C知識點解析:本題考查派生類的構(gòu)造函數(shù)和基類的構(gòu)造函數(shù)。本題中類B繼承類A,定義了一個類B的對象并初始化b(2),此時會執(zhí)行類B的構(gòu)造函數(shù),執(zhí)行的結(jié)果是繼承類A中的私有成員賦值了12,給類B自身的數(shù)據(jù)成員x賦值了2,執(zhí)行b.dispb()后,輸出類A的私有成員x,輸出類B自身的數(shù)據(jù)成員,所以答案為C。32、對長度為n的線性表排序,在最壞情況下,比較次數(shù)不是n(n-1)/2的排序方法是()。A、快速排序B、冒泡排序C、直接插入排序D、堆排序標(biāo)準(zhǔn)答案:D知識點解析:除了堆排序算法的比較次數(shù)是O(nlog2n),其他的都是n(n-1)/2。33、有如下程序段:inti=1;while(1){i++;if(i==100)break;if(i%2==0)cout<<’*’;}執(zhí)行這個程序段輸出字符*的個數(shù)是A、100B、48C、49D、50標(biāo)準(zhǔn)答案:C知識點解析:本題中while循環(huán)中當(dāng)i為偶數(shù)時輸出*,而i為100時跳出循環(huán),所以輸出49個*,答案為C。34、下列語句或語句序列中有語法錯誤的是A、inti,j;for(i=0,j=0;i<5;i++,j--)cout<<"HelloWorld!";B、for(10)cout<<"HelloWorld!";C、inti;for(i=0;i<5;i+=2)cout<<"HelloWorld!";D、inti=0;for(;i<5;i++)cout<<"HelloWorld!";標(biāo)準(zhǔn)答案:B知識點解析:本題考查for循環(huán)和while循環(huán),其中B選項while里的判斷語句10為真,會陷入死循環(huán),所以B選項錯誤。35、有如下頭文件:intf1();staticintf2();classMA{public:intf3();staticintf4();};在所描述的函數(shù)中,具有隱含的this指針的是()。A、f1B、f2C、f3D、f4標(biāo)準(zhǔn)答案:C知識點解析:只有類的非靜態(tài)成員函數(shù)才隱含this指針,其作用域是類內(nèi)部,當(dāng)類的非靜態(tài)成員函數(shù)中訪問類的非靜態(tài)成員時,編譯器會自動將對象本身的地址作為一個隱含參數(shù)傳遞給函數(shù),而不必一定寫上this。所以本題答案為C。36、下列有關(guān)運(yùn)算符重載的敘述中,正確的是()。A、運(yùn)算符重載是多態(tài)性的一種表現(xiàn)B、C++中可以通過運(yùn)算符重載創(chuàng)造新的運(yùn)算符C、C++中所有運(yùn)算符都可以作為非成員函數(shù)重載D、重載運(yùn)算符時可以改變其結(jié)合性標(biāo)準(zhǔn)答案:A知識點解析:重載運(yùn)算符的規(guī)則如下:①C++不允許用戶自己定義新的運(yùn)算符,只能對已有的C++運(yùn)算符進(jìn)行重載;②C++不能重載的運(yùn)算符只有5個;③重載不能改變運(yùn)算符運(yùn)算對象的個數(shù);④重載不能改變運(yùn)算符的優(yōu)先級和結(jié)合性;⑤重載運(yùn)算符的函數(shù)不能有默認(rèn)的參數(shù);⑥重載的運(yùn)算符必須和用戶定義的自定義類型的對象一起使用,至少應(yīng)有一個是類對象,即不允許參數(shù)全部是C++的標(biāo)準(zhǔn)類型。故本題答案為A。37、如果派生類以protected方式繼承基類,則原基類的protected成員和public成員在派生類中的訪問屬性分別是()。A、public和publicB、public和protectedC、protected和publicD、protected和protected標(biāo)準(zhǔn)答案:D知識點解析:本題考查保護(hù)繼承中派生類對基類的訪問屬性,在受保護(hù)繼承中,基類的公用成員和保護(hù)成員在派生類中成了保護(hù)成員,其私有成員仍為基類私有,所以本題答案為D。38、有如下程序:#includeusingnamespacestd;intmain(){intsum;for(inti=0;i<3;i+=1){sum=i;for(intj=i;j<9;j++)sum+=j;}cout<<sum<A、39B、17C、110D、37標(biāo)準(zhǔn)答案:D知識點解析:考查for循環(huán)語句,本題中兩層for循環(huán),每次i循環(huán),sum都被重新賦值,所以當(dāng)i=2時,執(zhí)行完for循環(huán)后sum為37。所以答案為D。39、在公有繼承的情況下,允許派生類直接訪問的基類成員包括()。A、公有成員B、公有成員和保護(hù)成員C、公有成員、保護(hù)成員和私有成員D、保護(hù)成員標(biāo)準(zhǔn)答案:B知識點解析:本題考查公用繼承對基類成員的訪問屬性。在公用繼承中,基類的公用成員和保護(hù)成員在派生類中保持原有的訪問屬性,其私有成員仍為基類私有。所以本題答案為B。40、下面敘述中錯誤的是()。A、軟件測試的目的是發(fā)現(xiàn)錯誤并改正錯誤B、對被調(diào)試的程序進(jìn)行“錯誤定位”是程序調(diào)試的必要步驟C、程序調(diào)試通常也稱為DebugD、軟件測試應(yīng)嚴(yán)格執(zhí)行測試計劃,排除測試的隨意性標(biāo)準(zhǔn)答案:A知識點解析:軟件測試的目的是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程,并不涉及改正錯誤,所以選項A錯誤。程序調(diào)試的基本步驟有:錯誤定位、修改設(shè)計和代碼,以排除錯誤、進(jìn)行回歸測試,防止引進(jìn)新的錯誤。程序調(diào)試通常稱為Debug,即排錯。軟件測試的基本準(zhǔn)則有:所有測試都應(yīng)追溯到需求、嚴(yán)格執(zhí)行測試計劃,排除測試的隨意性、充分注意測試中的群集現(xiàn)象、程序員應(yīng)避免檢查自己的程序、窮舉測試不可能、妥善保存測試計劃等文件。二、基本操作題(本題共1題,每題1.0分,共1分。)41、使用VC6打開考生文件夾proj1下的工程proj1,其中定義了一個CD類。程序中位于每個//ERROR**********found**********下的語句行有錯誤,請加以更正,不得修改程序的其他部分。更正后程序的輸出應(yīng)該是:歌唱祖國30義勇軍進(jìn)行曲95注意:只能修改每個//ERROR**********found**********下的那一行,不要改動程序中的其他內(nèi)容。#include<iostream>#include<cstring>usingnamespaeestd;classCD{charname[20];intnumber;public:voidinit(char*aa,intbb){//ERROR**********found**********name=aa:number=bb;}char*getName(){//ERROR**********found**********return*name:}intgetNumber(){returnnumber;}voidoutput(){//ERROR**********found**********cout<<name[20]<<’’<<number<<end1:}};voidmain(){CDdx,dy;dx.init("歌唱祖國",30);dy.init("義勇軍進(jìn)行曲",3*dx.getNumber()+5);dx.output();dy.output();}標(biāo)準(zhǔn)答案:(1)strcpy(name,aa):(2)returnname;(3)cout<<name<<’’<<number<<en1;知識點解析:程序定義CD類,它包含兩個數(shù)據(jù)成員;字符數(shù)組name和整型變量number;還包含四個公有成員函數(shù),init()函數(shù)接收兩個參數(shù),用參數(shù)對數(shù)據(jù)成員進(jìn)行賦值;getName()函數(shù)返回數(shù)據(jù)成員name;getNumber()函數(shù)返回數(shù)據(jù)成員number;output()函數(shù)將數(shù)據(jù)成員name和number輸出。CD類的定義體中,有三個錯誤:(1)init()函數(shù)將形參aa賦給name,由于name是字符數(shù)組,所以不能通過簡單的賦值運(yùn)算符進(jìn)行賦值,應(yīng)該使用strcpy()函數(shù)將形參aa指向的字符串拷貝到name中。(2)getName()函數(shù)的返回值為char*類型,所以函數(shù)體的return語句應(yīng)該返回name,而不是name指向的字符串。(3)output()函數(shù)需要輸出兩個數(shù)據(jù)成員,輸出字符數(shù)組時,只需要給出數(shù)組名name即可。三、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)42、使用VC++6.0打開考生文件夾下的源程序文件2.cpp。閱讀下列函數(shù)說明和代碼,完成空出部分程序。函數(shù)fun(intn)的功能是在n行n列的矩陣中,每行都有最大的數(shù),本程序求這n個最大數(shù)中的最小一個,并作為參數(shù)返回。注意:不能修改程序的其他部分,只能修改fun函數(shù)。試題程序:#include#defineN100inta[N][N];intfun(intn){}voidmain(){intn:cout<<"pleaseinputN:"<>n;for(inti=0;i(n;i++)for(intj=0;j>a[i][j];}cout<<"TheminOfmaxnumbersis"<標(biāo)準(zhǔn)答案:introw;intmax;intmin;intcol;for(row=0;row(n;row++)//外循環(huán)求行最大值中的最小值{for(max=a[row][0],col=l;col知識點解析:本題有兩層循環(huán),內(nèi)層循環(huán)求每一行的最大值,外層循環(huán)求最小值。求最大值,首先將最大值賦值為每行第一列的元素,然后依次循環(huán)比較。將求出的第一個最大值賦值為第一個最小值,然后將以后求得的最大值依次與之比較,求出所有值的最小值。四、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)43、使用VC6打開考生文件夾proj3下的工程proj3,其中定義了一個字符串變量類StringVar。類成員的說明在程序注釋中。請在//********333********//********666********之間填寫StringVar成員函數(shù)和友元函數(shù)的實現(xiàn)代碼。在main函數(shù)中給出了一組測試數(shù)據(jù),運(yùn)行時輸入:HelloKitty此情況下程序的輸出應(yīng)該是:HelloKittyBorgBorg注意:只需在//********333********和//********666********之間填入所編寫的若干語句,不要改動程序中的其他內(nèi)容。//StringVar.h#include<iostream>#include<cstdlib>#include<cstddef>#include<cstring>usingnamespacestd;voidwriteToFile(constchar*path);classStringVar{public:Stringvar(intsize);//構(gòu)造函數(shù),size為字符串長度(字符個數(shù))初始值;字符串內(nèi)容初始化為空串Stringvar(constchara[]);//構(gòu)造函數(shù),用參數(shù)數(shù)組a的內(nèi)容初始化當(dāng)前對象StringVar(constStringVar&strobj)://復(fù)制構(gòu)造函數(shù)_StringVar(){delete[]value;};//析構(gòu)函數(shù)intlength()const{returnstrlen(value);}//從輸入流ins輸入一個字符串,其中可以包括空格voidinput_line(istream&ins);//返回字符串首地址char*getValue()const{returnvalue;}private:char*value;//字符串首地址intmaX_length;//字符串最大長度(字符個數(shù)最大值)};//將the_string通過輸出流outs輸出ostream&operator<<(ostream&outs,constStringVarthe_string);//main.cpp#include<iostream>#include<string>#include"StringVar.h"//****************333****************//****************666****************intmain(){StringVarnamel(30),name2("Borg");name1.input_line(cin);StringVarname3(name2);cout<<name1<<end1;cout<<name2<<end1;cout<<name3<<end1;writeToFile(".\\");return0;}//writeToFile.cpp#include<iostream>#include<fstream>#include<sstream>#include<string>usingnamespacestd;#include"StringVar.h"voidwriteToFile(constchar*path){charfilename[30];strcpy(filename,path);strcat(filename,"out.dat");ofstreamfout(filename);istringstreamis(string("JennyZheng"));StringVarname1(40),name2("John");name1.input_line(is);StringVarname3(name2);fout<<name1<<name2<<name3:fout.close();}標(biāo)準(zhǔn)答案:StringVar∷StringVar(intsize):max_length(size)//使用成員初始化列表初始化max_length{value=newchar[size];value[0]=’\0’;}StringVar∷StringVar(constchara[]){max_length=strlen(a)+1;value=newchar[max_length];strcpy(value,a);}StringVar∷StringVar(constStringVar&strobj){max_length=strobj.max_length;value=newchar[strlen(strobj.value)+1];strcpy(value,strobj.value);}voidStringVar∷input,_line(istream&ins){inti=0;charch;while(i<max_length_1&&(ch=ins.get())!=’\n’){value[i++]=ch;}value[i]=’\0’;}ostream&operator<<(ostream&outs,constString—Vaurthe_string){outs<<the_string.getValue()<<end1;returnouts;}知識點解析:由StringVar個頭文件可知:頭文件重定義了StringVar類,它包含的成員信息如下:兩個數(shù)據(jù)成員:char*類型的value,指同字符串的首地址;int類型的max_length,表示字符串的最大長度。兩個構(gòu)造函數(shù):接收int類型的構(gòu)造函數(shù)和接收constchara[]的構(gòu)造函數(shù)。一個復(fù)制構(gòu)造函數(shù):用參數(shù)strobj對象的成員值給當(dāng)前對象的成員賦值;析構(gòu)函數(shù):使用delete[]釋放value指向的地址空間;length()成員函數(shù):返回成員value指向的字符串長度;input_line()成員函數(shù):使用輸入流參數(shù)輸入一個字符串,保存到value指向的內(nèi)存空間;getValue()成員函數(shù):常成員函數(shù),返回value的值。另外類定義體外部還聲明一個重載“<<”運(yùn)算符函數(shù),將stringVar對象中value指向的字符串輸出,并返回輸出流outs的引用StringVar.h中,已經(jīng)給出的定義有:析構(gòu)函數(shù)、length()函數(shù)和getValue()函數(shù),所以需要我們完成的函數(shù)定義有:構(gòu)造函數(shù)、復(fù)制構(gòu)造函數(shù)、input_line()函數(shù)和重載的“<<”運(yùn)算符函數(shù)①stringVar(intsize);題意指出,size為字符串長度(字符個數(shù))初始值,字符串內(nèi)容初始化為空串,所以需要使用size設(shè)置成員max_length,為value申請size個字符的存儲空間,并把value的第一個字符設(shè)置為’\0’表示空串,這樣保證析構(gòu)函數(shù)的delete[]也是正確的。②stringVaur(constchara[]);題意指出,使用參數(shù)數(shù)組a的內(nèi)容初始化對象的成員,即將數(shù)組a中的內(nèi)容,存放到value指向的內(nèi)存空間,由于value是使用new分配的(保證析構(gòu)函數(shù)的delete[]是正確的),所以不能簡單的把數(shù)組a的首地址賦給value,需要將數(shù)組a的內(nèi)容復(fù)制到value指向的內(nèi)存空間中,另外成員max)lengh,初值最小必須是value指向的內(nèi)存空間長度,即value指向的字符串長度+1(題意中max_length表示字符個數(shù)的最大值,所以需要包含字符串結(jié)束符’\0’)(此構(gòu)造函數(shù)的形參必須傳入的是字符串,如果是字符數(shù)組,必須傳入數(shù)組的長度,以防數(shù)組a的最后一個字符不是結(jié)束符’\0’,此時strlen()函數(shù)獲取的長度,就不是字符數(shù)組a的字符個數(shù))③stringVar(constStringVar&strobj);復(fù)制構(gòu)造函數(shù)需要將形參strobj的成員賦給當(dāng)前調(diào)用該復(fù)制構(gòu)造函數(shù)的對象成員,在賦值value時,同樣需要為value分配足夠的內(nèi)存空間。④input_line(istream&ins);input_line()函數(shù)需要使用形參ins輸入流,輸入一個字符串存放到value中,題意要求可以輸入空格,所以我們不能直接用輸入流ins和輸入運(yùn)算符,因為輸入運(yùn)算符會丟棄空白符、空格符和制表符,可以使用輸入流ins的成員函數(shù):get()和while循環(huán),逐個輸入字符存放到value下標(biāo)i的字符中,直到輸入的字符為換行符或value存滿(i=max_lengh)為止,當(dāng)這兩個條件滿足其一,那么就應(yīng)該停止輸入,另外需要注意:value指向的字符串結(jié)尾,必須包含空字符’\0’,所以下標(biāo)max_lengh-1必須是空字符,循環(huán)輸入時,i取值最大為max_length-2。⑤ostrearn&operator<<(ostream&outs,constStringVarthe_string);輸出運(yùn)算符重載函數(shù),題意要求將the_string通過輸出流outs輸出,由于the_string是stringVar對象,所以輸出的應(yīng)該是對象的成員value指向的字符串,根據(jù)返回值可知,函數(shù)必須返回輸入流ostream的引用:另外由于第一形參是輸入流outs,所以無法通過StringVar對象來調(diào)用,該函數(shù)不是類的成員函數(shù),函數(shù)定義時,不能限定stringVal作用域,由于該函數(shù)不是類的成員函數(shù),所以使用輸出流outs輸出value指向的字符串時,不能直接使用私有成員value,而是應(yīng)該使用getValue()公有成員函數(shù),返回value的值,再輸出。國家二級(C++)機(jī)試模擬試卷第2套一、選擇題(本題共40題,每題1.0分,共40分。)1、在軟件開發(fā)中,需求分析階段產(chǎn)生的主要文檔是()。A、可行性分析報告B、軟件需求規(guī)格說明書C、概要設(shè)計說明書D、集成測試計劃標(biāo)準(zhǔn)答案:B知識點解析:A)錯誤,可行性分析階段產(chǎn)生可行性分析報告。C)錯誤,概要設(shè)計說明書是總體設(shè)計階段產(chǎn)生的文檔。D)錯誤,集成測試計劃是在概要設(shè)計階段編寫的文檔。B)正確,需求規(guī)格說明書是后續(xù)工作如設(shè)計、編碼等需要的重要參考文檔。2、對長度為n的線性表排序,在最壞情況下,比較次數(shù)不是n(n-1)/2的排序方法是()。A、快速排序B、冒泡排序C、直接插入排序D、堆排序標(biāo)準(zhǔn)答案:D知識點解析:除了堆排序算法的比較次數(shù)是O(nlog2n),其他的都是n(n-1)/2。3、當(dāng)需要將一個函數(shù)boolisnumber(charc)聲明為內(nèi)聯(lián)函數(shù)時,則此內(nèi)聯(lián)函數(shù)的函數(shù)原型為()。A、enumboolisnumber(charc);B、defineboolisnumber(charc);C、inlineboolisnumber(charc);D、extemboolisnumber(charc);標(biāo)準(zhǔn)答案:C知識點解析:此題考查的是內(nèi)聯(lián)函數(shù)的相關(guān)知識點。函數(shù)原型應(yīng)指出函數(shù)名、返回值類型以及在調(diào)用函數(shù)時必須提供的參數(shù)的個數(shù)和類型,因為要聲明為內(nèi)聯(lián)函數(shù),故應(yīng)加inline關(guān)鍵字。4、下面關(guān)于函數(shù)模板的表述中不正確的是()。A、類模板的成員函數(shù)都是模板函數(shù)B、類模板本身在編譯過程中不會產(chǎn)生任何代碼C、類模板只能有虛擬類型的參數(shù)D、用類模板定義一個對象時,實參不能省略標(biāo)準(zhǔn)答案:C知識點解析:類模板本身在編譯時是不會產(chǎn)生代碼的,只有在其實例化以后才產(chǎn)生代碼。定義一個對象時,不能省略其實參。5、下面關(guān)于派生類的描述中錯誤的是()。A、派生類中至少有一個基類B、一個派生類可以作為另一個派生類的基類C、派生類只繼承了基類中的公有成員和保護(hù)成員D、派生類的缺省繼承方式是私有標(biāo)準(zhǔn)答案:C知識點解析:繼承方式有公有繼承、私有繼承和保護(hù)繼承3種,缺省的繼承方式是私有繼承。派生類從基類繼承所有的成員,但是對于基類的私有成員派生類是不可直接訪問的。6、下面關(guān)于派生類的描述中錯誤的是()。A、派生類中至少有一個基類B、一個派生類可以作為另一個派生類的基類C、派生類只繼承了基類中的公有成員和保護(hù)成員D、派生類的缺省繼承方式是私有標(biāo)準(zhǔn)答案:C知識點解析:繼承方式有公有繼承、私有繼承和保護(hù)繼承3種,缺省的繼承方式是私有繼承。派生類從基類繼承所有的成員,但是對于基類的私有成員派生類是不可直接訪問的。7、有如下類定義:classMyBase{intk;public:MyBase(intn=0):k(n){}intvalue()const{returnk;}};classMyDerived:MyBase{intj;public:MyDerived(inti):j(i){}intgetK()const{returnk;}intgetJ()const{returnj;}};編譯時發(fā)現(xiàn)有一處語法錯誤,對這個錯誤最準(zhǔn)確的描述是()。A、函數(shù)getK試圖訪問基類的私有成員變量kB、在類MyDerived的定義中,基類名MyBase前缺少關(guān)鍵字public、protected或privateC、類MyDerived缺少一個無參的構(gòu)造函數(shù)D、類MyDerived的構(gòu)造函數(shù)沒有對基類數(shù)據(jù)成員k進(jìn)行初始化標(biāo)準(zhǔn)答案:A知識點解析:默認(rèn)繼承方式為私有繼承,私有繼承將基類的公用成員和保護(hù)成員都變?yōu)榱怂接谐蓡T,基類的私有成員依然屬于基類私有,派生類不能訪問基類的私有成員。所以A選項正確。8、有如下程序:#includeusingnamespacestd;classTestClass{intn;public:TestClass(intk):n(k){}intget(){returnn;}intget()const{returnn+1;}};intmain(){TestClassp(5);constTestClassq(6);cout<A、55B、57C、75D、77標(biāo)準(zhǔn)答案:B知識點解析:C++中對常對象的成員函數(shù)調(diào)用,將自動調(diào)用其常成員函數(shù),程序中調(diào)用原型為"intget()const;"的函數(shù),對于非常對象將調(diào)用原型為"intget();"的函數(shù)。因為首先用5對對象p進(jìn)行了初始化,所以執(zhí)行p.get()時直接返回5,而對于常對象則以6對q進(jìn)行初始化,在調(diào)用q.get()時,將調(diào)用原型為"intget()const;"的函數(shù),該函數(shù)將返回n+1,第二個輸出應(yīng)為7,所以本題答案為57。9、如下函數(shù)模板:template<classT>Tsquare(Tx){returnx*x;}其中T是()。A、函數(shù)形參B、函數(shù)實參C、模板形參D、模板實參標(biāo)準(zhǔn)答案:C知識點解析:本題考查模板函數(shù)的基本概念,根據(jù)模板函數(shù)的定義,T是模板形參,所以答案為C。10、關(guān)系表中的每一行記錄稱為一個()。A、字段B、元組C、屬性D、關(guān)鍵碼標(biāo)準(zhǔn)答案:B知識點解析:在關(guān)系表中,每一列稱為一個屬性,對應(yīng)表中的一個字段;每一行稱為一個元組,對應(yīng)表中的一條記錄。11、算法的空間復(fù)雜度是指()。A、算法在執(zhí)行過程中所需要的計算機(jī)存儲空間B、算法所處理的數(shù)據(jù)量C、算法程序中的語句或指令條數(shù)D、算法在執(zhí)行過程中所需要的臨時工作單元數(shù)標(biāo)準(zhǔn)答案:A知識點解析:算法的空間復(fù)雜度是指算法在執(zhí)行過程中所需要的內(nèi)存空間。所以選擇A。12、程序調(diào)試的任務(wù)是()。A、設(shè)計測試用例B、驗證程序的正確性C、發(fā)現(xiàn)程序中的錯誤D、診斷和改正程序中的錯誤標(biāo)準(zhǔn)答案:D知識點解析:程序調(diào)試的任務(wù)是診斷和改正程序中的錯誤。13、下列關(guān)于多態(tài)性的描述,錯誤的是()。A、C++語言中的多態(tài)性分為編譯時的多態(tài)性和運(yùn)行時的多態(tài)性B、編譯時的多態(tài)性可通過函數(shù)重載實現(xiàn)C、運(yùn)行時的多態(tài)性可通過模板和虛函數(shù)實現(xiàn)D、實現(xiàn)運(yùn)行時多態(tài)性的機(jī)制稱為動態(tài)綁定標(biāo)準(zhǔn)答案:C知識點解析:編譯時的多態(tài)性是通過函數(shù)重載和模板體實現(xiàn)的,運(yùn)行時的多態(tài)性是通過虛函數(shù)體實現(xiàn)的。14、對下列二叉樹進(jìn)行中序遍歷的結(jié)果是()。A、ABCDEFGHB、ABDGEHCFC、GDBEHACFD、GDHEBFCA標(biāo)準(zhǔn)答案:C知識點解析:遍歷就是不重復(fù)地訪問二叉樹的所有結(jié)點。二叉樹遍歷的方法有3種:前序遍歷、中序遍歷和后序遍歷。記住3種遍歷的順序:①前序,訪問根→按前序遍歷左子樹→按前序遍歷右子樹。②中序,按中序遍歷左子樹→訪問根→按中序遍歷右子樹。③后序,按后序遍歷左子樹→按后序遍歷右子樹→訪問根。所以對該二叉樹的中序遍歷結(jié)果為GDBEHACF。15、下列關(guān)于完全二叉樹的敘述中,錯誤的是()。A、除了最后一層外,每一層上的結(jié)點數(shù)均達(dá)到最大值B、可能缺少若干個左右葉子結(jié)點C、完全二叉樹一般不是滿二叉樹D、具有結(jié)點的完全二叉樹的深度為[log2n]+1標(biāo)準(zhǔn)答案:B知識點解析:滿二叉樹指除最后一層外,每一層上所有結(jié)點都有兩個子結(jié)點的二叉樹。完全二叉樹指除最后一層外,每一層上的結(jié)點數(shù)均達(dá)到最大值,在最后一層上只缺少右邊的若干葉子結(jié)點的二叉樹。因此選項A敘述正確,而選項B敘述錯誤。由定義可知,滿二叉樹肯定是完全二叉樹,而完全二叉樹一般不是滿二叉樹。16、下面程序的運(yùn)行結(jié)果是()。#include<iostream.h>intx=5;intfun(inta){intc;c=x*a;returnc;}voidmain(){intx=3,a=4;x=x+fuh(a);cout<<"x="<<x<<endl;}A、x=1.5B、x=17C、x=23D、x=25標(biāo)準(zhǔn)答案:C知識點解析:由主函數(shù)main入手,首先x被賦值為3,a被賦值為4。然后調(diào)用fun函數(shù),參數(shù)為4,所以在fun函數(shù)中的a=4。而主程序中的x作用域是由它定義開始到cout輸出,在fun函數(shù)中無效。而在fun函數(shù)定義前的變量x作用域是整個程序,所以fun函數(shù)中的x值為5,這樣c的值就為20。在主函數(shù)中的x+fun(a)中的x為靠近這條語句的x定義,即3,所以最后x的值為20+3=23。17、下面不屬于對象主要特征的是A、唯一性B、多態(tài)性C、可復(fù)用性D、封裝性標(biāo)準(zhǔn)答案:C知識點解析:對象的基本特點如下:可知C選項正確。18、派生類的成員函數(shù)不能訪問的基類成員是A、公有成員和保護(hù)成員B、私有成員C、保護(hù)成員D、公有成員標(biāo)準(zhǔn)答案:B知識點解析:基類中的private成員,只有基類和基類的友元可以訪問,派生類的成員函數(shù)不能直接訪問,所以派生類若要訪問基類的private成員,必須使用基類的接口,答案為B。19、有如下類定義:classB{public:voidfun1(){}private:voidfun2(){}protected:voidfun3(){}};classD:publicB{protected:voidfun4(){}};若obj是類D的對象,則下列語句中不違反訪問控制權(quán)限的是()。A、obj.fun1();B、obj.fun2();C、obj.fun3();D、obj.fun4();標(biāo)準(zhǔn)答案:A知識點解析:本題考查公用繼承對基類成員的訪問屬性。在公用繼承中,基類的公用成員和保護(hù)成員在派生類中保持原有的訪問屬性,其私有成員仍為基類私有。所以在本題中,在類外引用成員函數(shù)時,派生對象只能引用基類的公用成員函數(shù)fun1,故本題答案為A。20、有兩個關(guān)系R和S如下:由關(guān)系R得到關(guān)系S的操作是()。A、選擇B、投影C、自然連接D、并標(biāo)準(zhǔn)答案:A知識點解析:由關(guān)系R到關(guān)系S為一元運(yùn)算,排除C和D。關(guān)系S是關(guān)系R的一部分,是通過選擇之后的結(jié)果,因此選A。21、有如下程序:#include#includeusingnamespacestd;classAppliance{public:Appliance(stringt="A"):type(t){}~Appliance(){cout<A、041B、410C、0A41TD、41T0A標(biāo)準(zhǔn)答案:D知識點解析:執(zhí)行派生類構(gòu)造函數(shù)的順序是:1、調(diào)用基類構(gòu)造函數(shù),2、調(diào)用子對象構(gòu)造函數(shù),3、再執(zhí)行派生類析構(gòu)函數(shù),4、執(zhí)行基類的析構(gòu)函數(shù),所以本題中定義分別定義了room1,room2后,調(diào)用構(gòu)造函數(shù)后沒有輸出,而調(diào)用析構(gòu)函數(shù)的順序依次為room2的析構(gòu)函數(shù),輸出41,然后執(zhí)行Appliance的析構(gòu)函數(shù)輸出T,然后執(zhí)行room1的析構(gòu)函數(shù)輸出0,最后執(zhí)行Appliance的析構(gòu)函數(shù)輸出A,所以D選項正確。22、下列關(guān)于this指針的敘述中,正確的是A、類的成員函數(shù)都有this指針B、類的友元函數(shù)都有this指針C、任何與類相關(guān)的函數(shù)都有this指針D、類的非靜態(tài)成員函數(shù)都有this指針標(biāo)準(zhǔn)答案:D知識點解析:本題考查this指針,只有類的非靜態(tài)成員才有this指針,所以D選項正確。23、關(guān)于函數(shù)聲明格式中的<返回類型>,下列敘述錯誤的是A、<返回類型>有可能包含關(guān)鍵字trueB、<返回類型>有可能包含自定義標(biāo)識符C、<返回類型>有可能包含字符*D、<返回類型>有可能包含關(guān)鍵字float標(biāo)準(zhǔn)答案:A知識點解析:本題考查函數(shù)返回類型,函數(shù)返回類型可以是普通常量型的,可以返回指針以及自定義類型,但是不能包含關(guān)鍵字true,所以A選項錯誤。24、設(shè)有表示公司和員工及雇傭的三張表,員工可在多家公司兼職,其中公司C(公司號,公司名,地址,注冊資本,法人代表,員工數(shù)),員工S(員工號,姓名,性別,年齡,學(xué)歷),雇傭E(公司號,員工號,工資,工作起始時間)。其中表C的鍵為公司號,表S的鍵為員工號,則表E的鍵(碼)為A、公司號,員工號B、員工號,工資C、員工號D、公司號,員工號,工資標(biāo)準(zhǔn)答案:A知識點解析:二維表中的行稱為元組,候選鍵(碼)是二維表中能唯一標(biāo)識元組的最小屬性集。若一個二維表有多個候選碼,則選定其中一個作為主鍵(碼)供用戶使用。公司號唯一標(biāo)識公司,員工號唯一標(biāo)識員工,而雇傭需要公司號與員工號同時唯一標(biāo)識,故表E的鍵(碼)為(公司號,員工號),故A選項正確。25、有如下程序:#include#includeusingnamespacestd;classAnimal{public:virtualstringGetType()const{return"Animal";}virtualstringGetVoice()const{return"Voice";}};classDog:publicAnimal{public:stringGetType()const{return"Dog";}stringGetVoice()const{return"Woof";}};classCat:publicAnimal{public:stringGetType()const{return"Cat";}stringGetVoice()const{return"Miaow";}};voidType(Animala){cout<A、DogspeakVoice-CatspeakVoiceB、DogspeakWoof-CatspeakMiaowC、AnimalspeakVoice-AnimalspeakVoiceD、AnimalspeakWoof-AnimalspeakMiaow標(biāo)準(zhǔn)答案:D知識點解析:本題考查虛函數(shù)的運(yùn)用,本題中定義Dogd;Type(d)時,執(zhí)行基類的Type函數(shù),輸出Animal,然后輸出speak,然后執(zhí)行派生類的Speak函數(shù)輸出Woof,最后輸出-,同理cat輸出類似,所以結(jié)果為D選項正確。26、有如下程序:#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;}執(zhí)行這個程序的輸出結(jié)果是()。A、BBBB、BBDC、DBBD、DBD標(biāo)準(zhǔn)答案:C知識點解析:在某基類中聲明為virtual并在一個或多個派生類中被重新定義的成員函數(shù),本題中定義類B的對象b、對象指針*p=newD以及類D的對象d;執(zhí)行fun1會調(diào)用派生類的show函數(shù),因為show函數(shù)為虛函數(shù),而調(diào)用fun2、fun3仍然為基類的show函數(shù),所以本題答案為C。27、下列關(guān)于賦值運(yùn)算符=重載的敘述中,正確的是A、賦值運(yùn)算符只能作為類的成員函數(shù)重載B、默認(rèn)的賦值運(yùn)算符實現(xiàn)了"深層復(fù)制"功能C、重載的賦值運(yùn)算符函數(shù)有兩個本類對象作為形參D、如果已經(jīng)定義了復(fù)制(拷貝)構(gòu)造函數(shù),就不能重載賦值運(yùn)算符標(biāo)準(zhǔn)答案:A知識點解析:本題考查字符串的定義,A選項中,定義了一個字符,而用字符串賦值,所以錯誤,C選項定義了字符數(shù)組,但是賦值的字符串實際上有6個字符,所以賦值錯誤,D選項定義了一個字符串指針數(shù)組,賦值錯誤。28、有如下程序:#includeusingnamespacestd;intmain(){voidfunction(doubleval);doubleval;function(val);cout<A、編譯出錯,無法運(yùn)行B、輸出:3C、輸出:3.0D、輸出一個不確定的數(shù)標(biāo)準(zhǔn)答案:D知識點解析:本題考查函數(shù)調(diào)用及傳值方式傳遞參數(shù),執(zhí)行函數(shù)function時,并沒有將3的值傳回來,而val又沒有初始化,所以會輸出一個不確定的值,D選項正確。29、下列關(guān)于內(nèi)聯(lián)函數(shù)的敘述中,正確的是A、內(nèi)聯(lián)函數(shù)就是在一個函數(shù)體內(nèi)定義的函數(shù)B、內(nèi)聯(lián)函數(shù)必須通過關(guān)鍵字inline來定義C、在類體中定義的函數(shù),都是內(nèi)聯(lián)函數(shù)D、內(nèi)聯(lián)函數(shù)不需要return語句標(biāo)準(zhǔn)答案:C知識點解析:在類體中定義的成員函數(shù),C++系統(tǒng)會自動將它們作為內(nèi)聯(lián)函數(shù)處理,而在類外定義的成員函數(shù),系統(tǒng)并不把它們默認(rèn)為內(nèi)聯(lián)函數(shù),內(nèi)聯(lián)函數(shù)可以用return,以可以不用,所以只有選項C正確。30、有如下類定義和變量定義:classParents{public:intpublicData;private:intprivateData;};classChildA:publicParents{/*類體略*/};classChildB:privateParents{/*類體略*/};ChildAa;ChildBb;下列語句中正確的是A、cout<<a.publicData<B、cout<<a.privateData<C、cout<<b.privateData<D、cout<<b.publicData<標(biāo)準(zhǔn)答案:A知識點解析:本題考查派生類對基類成員的訪問屬性,派生類公用繼承基類,所以派生類可以直接使用基類的公用成員,所以只有A選項正確。31、有如下語句序列:intx=10,&r=x;cout<A、10-10B、10-0x28ff48C、0x28ff44-10D、0x28ff44-0x28ff48標(biāo)準(zhǔn)答案:A知識點解析:本題考查引用概念和使用,題目中r為x的引用,所以與x的值相同,結(jié)果為A,A選項正確。32、下列選項中,正確的C++表達(dá)式是A、a+b=b+cB、xyz+C、www++9D、a[3]標(biāo)準(zhǔn)答案:D知識點解析:A選項中,a+b是表達(dá)式,不可以作為左值;選項B中,運(yùn)算符"+"作為一元運(yùn)算符,應(yīng)該放在操作數(shù)之前,返回操作數(shù)本身;作為二元運(yùn)算符,必須作用于兩個操作數(shù)之間;選項C中,運(yùn)算符"++"是一元運(yùn)算符,只能有一個操作數(shù);答案為D。33、若MyClass為一個類,執(zhí)行語句"MyClassa[4],*p[5];"時會自動調(diào)用該類構(gòu)造函數(shù)的次數(shù)是A、2B、4C、5D、9標(biāo)準(zhǔn)答案:B知識點解析:本題考查默認(rèn)構(gòu)造函數(shù),題中定義了包含4個元素的一維對象數(shù)組,而指針數(shù)組不占用空間,所以不調(diào)用構(gòu)造函數(shù),那么構(gòu)造函數(shù)就執(zhí)行4次,答案為B。34、在名為BigNumber的類的類體中對運(yùn)算符函數(shù)double進(jìn)行了如下聲明:operatordouble(BigNumber);函數(shù)聲明中有一個明顯的錯誤,這個錯誤就是A、參數(shù)表中不應(yīng)該有任何參數(shù)B、缺少對函數(shù)返回類型的說明C、參數(shù)聲明中缺少參數(shù)變量D、函數(shù)聲明中缺少函數(shù)體標(biāo)準(zhǔn)答案:A知識點解析:本題考查類型轉(zhuǎn)換函數(shù),其一般形式如下:operator類型名(){實現(xiàn)轉(zhuǎn)換的語句}在函數(shù)名前面不能指定函數(shù)類型,函數(shù)沒有參數(shù),所以A選項錯誤。35、有如下程序段:inti=2;intj=3;intmain(){inti=9,j=i;cout<A、23B、93C、99D、39標(biāo)準(zhǔn)答案:C知識點解析:全局變量也稱為外部變量,它是在函數(shù)外部定義的變量。它不屬于哪一個函數(shù),它屬于一個源程序文件。其作用域是整個源程序。在函數(shù)中使用全局變量,一般應(yīng)作全局變量說明,本題中定義了兩個全局變量i,j,所以主函數(shù)中對全局變量重新賦值輸出后為99,所以答案為C。36、已知一程序運(yùn)行后執(zhí)行的第一個輸出操作是cout<A、1234B、******1234C、**********1234D、1234******標(biāo)準(zhǔn)答案:B知識點解析:本題考查輸入輸出格式的控制,先是定義寬度為10個字符,然后填充字符,1234只有四個字符,所以要在左側(cè)填充6個*,即輸出******1234,B選項正確。37、下面不屬于軟件測試實施步驟的是A、集成測試B、回歸測試C、確認(rèn)測試D、單元測試標(biāo)準(zhǔn)答案:B知識點解析:軟件測試主要包括單元測試、集成測試、確認(rèn)測試和系統(tǒng)測試。38、在公有繼承的情況下,允許派生類直接訪問的基類成員包括()。A、公有成員B、公有成員和保護(hù)成員C、公有成員、保護(hù)成員和私有成員D、保護(hù)成員標(biāo)準(zhǔn)答案:B知識點解析:本題考查公用繼承對基類成員的訪問屬性。在公用繼承中,基類的公用成員和保護(hù)成員在派生類中保持原有的訪問屬性,其私有成員仍為基類私有。所以本題答案為B。39、有如下類聲明:classBase1{};classBase2{};classDerived:publicBase2,publicBase1{};在一個Derived對象消亡時,析構(gòu)函數(shù)被調(diào)用的順序是A、~Derived、~Base1、~Base2B、~Derived、~Base1、~Base2C、~Base1、~Base2、~DerivedD、~Base2、~Base1、~Derived標(biāo)準(zhǔn)答案:A知識點解析:C++中,派生類構(gòu)造函數(shù)都是先調(diào)用基類構(gòu)造函數(shù),再根據(jù)聲明次序定義數(shù)據(jù)成員,另外對于多繼承,派生類的構(gòu)造函數(shù)初始化列表中,基類構(gòu)造函數(shù)是按照基類在派生類的派生列表中出現(xiàn)的次序調(diào)用的;而析構(gòu)函數(shù)是按構(gòu)造函數(shù)運(yùn)行順序的逆序進(jìn)行調(diào)用的,可知題目中析構(gòu)函數(shù)的調(diào)用順序為:派生類Derived的析構(gòu)函數(shù),Base1的析構(gòu)函數(shù),Base2的析構(gòu)函數(shù);答案為A。40、若為類MyClass重載運(yùn)算符"+",下列聲明中,錯誤的是A、friendMyClassoperator+(double,double);B、friendMyClassoperator+(double,MyClass);C、friendMyClassoperator+(MyClass,double);D、friendMyClassoperator+(MyClass,MyClass);標(biāo)準(zhǔn)答案:A知識點解析:重載運(yùn)算符必須具有一個類類型的操作數(shù),這條規(guī)則強(qiáng)制重載運(yùn)算符不能重新定義用于內(nèi)置類型對象的運(yùn)算符。選項B、C、D正確,A錯誤,答案為A。二、基本操作題(本題共1題,每題1.0分,共1分。)41、使用VC6打開考生文件夾下的proj1工程目錄內(nèi)的proj1.dsw文件,其中在編輯窗口內(nèi)顯示的主程序文件中定義有Xabc類和主函數(shù)main。在程序文本中位于每行"//ERROR**********found**********下面的一一行有錯誤,請加以更正。更正后程序的輸出為:57注意:只允許修改每個"//ERROR**********found**********下面的一行語句,不允許改動程序中的其他任何內(nèi)容。#include<iostream>usingnamespacestd;classXabc{int*a;intn;public:Xabc(intaa[],intnn):n(an){a=newint[n];for(inti=0;i標(biāo)準(zhǔn)答案:(1)a[i]=aa[i];(2)d+=x.GetA(i);(3)intf=x.SumA(5);知識點解析:(1)Xabc的構(gòu)造函數(shù)需要使用形參aa為成員指針a賦值,函數(shù)體中,首先動態(tài)分配n個連續(xù)的整型變量的內(nèi)存空間,并將內(nèi)存空間的首地址賦給a,然后通過for循環(huán),使用數(shù)組aa為a的n個元素的賦值(2)x是類Xabc的對象,成員a在定義時沒有指定訪問標(biāo)號,默認(rèn)為private成員,所以這里不能通過x對象直接訪問a,應(yīng)該通過公有成員函數(shù)GetA()來訪問(3)sumA()函數(shù)是類Xabc的公有成員函數(shù),需要通過對象來引用,而不能直接引用三、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)42、使用VC6打開考生文件夾下的源程序文件modi2.cpp。閱讀下列函數(shù)說明和代碼,補(bǔ)充空出的代碼。函數(shù)convert(cha*des,char*str)實現(xiàn)的功能是:(1)如果字符串最后面有空格,則全部刪除;(2)轉(zhuǎn)換后的數(shù)據(jù)放到des,并且指針作為返回值返回。注意:不能修改程序的其他部分,只能補(bǔ)充convert()函數(shù)。1#include2#include3#defineMAXLEN10244char*convert(char*des,char*str)5{67}8voidmain()9{10chardest[MAXLEN];11char*string="abedef";12cout<<string<<"<一一"<標(biāo)準(zhǔn)答案:1intlength=0;2inti;3for(length=0;str[lengch]!=NULL;length++);//求數(shù)組長度4length一一;//下標(biāo)從0~len=1,下標(biāo)減1表示最后一個字符的下標(biāo)值5for(i=length;i>=0;i--)6{7if(str[i]!=’’)//判斷結(jié)尾是否有空格,從后往前判斷直到不是不是空格了跳出循環(huán)8break;9}10for(length=0;length<=i;length++)11{12des[length]=str[1ength];//從前面開始,逐個將str中的字符拷貝到des數(shù)組中,不含最后面的空格13}14des[1ength]=NULL;//最后一個字符為NULL15returndes;知識點解析:函數(shù)convert(cha*des,char*str)實現(xiàn)的功能是將字符串最后面有空格刪除,并將轉(zhuǎn)換后的數(shù)據(jù)放到des,返回指針,可以將字符串最后空格前的所有所有字符拷貝到des中,關(guān)鍵是確定下標(biāo)從那開始到最后都是空格。[解題思路](1)利用循環(huán)將字符串str的長度求出,然后從字符串的尾部開始檢索,用循環(huán)從字符串的最后一個字符往前面逐個檢查,如果該字符不是空格則退出循環(huán),這個時候就找到了最后一個非空格字符所在的下標(biāo)位置,然后從下標(biāo)0開始到該位置,逐個將str里面字符拷貝到des中。(2)程序當(dāng)中使用了3次循

溫馨提示

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

評論

0/150

提交評論