國家二級(C++)機試模擬試卷1(共363題)_第1頁
國家二級(C++)機試模擬試卷1(共363題)_第2頁
國家二級(C++)機試模擬試卷1(共363題)_第3頁
國家二級(C++)機試模擬試卷1(共363題)_第4頁
國家二級(C++)機試模擬試卷1(共363題)_第5頁
已閱讀5頁,還剩108頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

國家二級(C++)機試模擬試卷1(共9套)(共363題)國家二級(C++)機試模擬試卷第1套一、選擇題(本題共38題,每題1.0分,共38分。)1、由于常對象不能被更新,因此()。A、通過常對象只能調(diào)用它的常成員函數(shù)B、通過常對象只能調(diào)用靜態(tài)成員函數(shù)C、常對象的成員都是常成員D、通過常對象可以調(diào)用任何不改變對象值的成員函數(shù)標準答案:A知識點解析:本題考查常對象的基本知識,常對象只能調(diào)用它的常成員函數(shù),而不能調(diào)用非const函數(shù),常對象的成員函數(shù)不一定都是常成員函數(shù),只需保證其數(shù)據(jù)成員是常數(shù)據(jù)成員即可。所以本題選A。2、有如下類定義:classAA{inta;public:intgetRef()const{return&a;}//①intgetValue()const{returna;}//②voidset(intn)const{a=n;}//③friendvoidshow(AAaa)const{cout<<a;}//④};其中四個函數(shù)的定義中正確的是()。A、①B、②C、③D、④標準答案:B知識點解析:本題考查常成員函數(shù),常成員函數(shù)只能引用本類中的數(shù)據(jù)成員,而不能修改它。所以本題答案為B。3、有如下類定義:classPoint{intXX,YY;public:Point():xx(0),yy(0){}Point(intX,inty=0):xx(x),yy(y){}};若執(zhí)行語句Pointa(2),b[3],*c[4];則Point類的構(gòu)造函數(shù)被調(diào)用的次數(shù)是()。A、2次B、3次C、4次D、5次標準答案:C知識點解析:本題考查默認構(gòu)造函數(shù)和帶參數(shù)的構(gòu)造函數(shù),題目中定義一個對象a(2)以及對象數(shù)組b[3],共執(zhí)行4次構(gòu)造函數(shù),對象指針不調(diào)用構(gòu)造函數(shù)。所以本題答案為C。4、關(guān)于函數(shù)重載,下列敘述中錯誤的是()。A、重載函數(shù)的函數(shù)名必須相同B、重載函數(shù)必須在參數(shù)個數(shù)或類型上有所不同C、重載函數(shù)的返回值類型必須相同D、重載函數(shù)的函數(shù)體可以有所不同標準答案:C知識點解析:所謂函數(shù)重載是指同一函數(shù)名可以對應多個函數(shù)實現(xiàn)。進行函數(shù)重載時,要求同名函數(shù)在參數(shù)個數(shù)上不同,或者參數(shù)類型上不同。但函數(shù)的返回類型不能作為判斷重載的依據(jù)。5、有如下程序:#includeusingnamespacestd;classTest{public:Test(){n+=2;}~Test(){n-=3;}staticintgetNum(){retumn;}private:staticintn:};intTest::n=1;intmain(){Test*p=newTest;deletep;cout<<"n="<A、n=0B、n=1C、n=2D、n=3標準答案:A知識點解析:語句Test*p=newTest;會調(diào)用類的構(gòu)造函數(shù)1"est(){n+=2),使n的值由原來的1變?yōu)?,然后deletep調(diào)用類的析構(gòu)函數(shù)~Test(){n-=3;},因為n是static型變量,所以會在3的基礎(chǔ)上減3使得輸出結(jié)果為0。6、下列運算符函數(shù)中肯定不屬于類FunNumber的成員函數(shù)的是()。A、intoperator-(FunNumber);B、FunNumberoperator-();C、FunNumberoperator-(int);D、intoperator-(FunNumber,F(xiàn)unNumber);標準答案:D知識點解析:本題考查運算符重載的一些規(guī)則:①一般情況下,單目運算符最好重載為類的成員函數(shù),雙目運算符則最好重載為類的友元函數(shù);②雙目運算符=、()、[]、->不能重載為類的友元函數(shù);③類型轉(zhuǎn)換函數(shù)只能定義為一個類的成員函數(shù),而不能定義為類的友元函數(shù);④若一個運算符的操作需要修改對象的狀態(tài),選擇重載為成員函數(shù)較好;⑤若運算符所需的操作數(shù)(尤其是第一個操作數(shù))希望有隱式類型轉(zhuǎn)換,則只能選用友元函數(shù);⑥當運算符函數(shù)是一個成員函數(shù)時,最左邊的操作數(shù)(或者只有最左邊的操作數(shù))必須是運算符類的一個類對象(或者是對該類對象的引用);如果左邊的操作數(shù)必須是一個不同類的對象,或者是一個內(nèi)部類型的對象,該運算符函數(shù)必須作為一個友元函數(shù)來實現(xiàn)。所以答案為D。7、若有下面的函數(shù)調(diào)用:fun(a+b,3,max(n—1,b))則fun的實參個數(shù)是()。A、3B、4C、5D、6標準答案:A知識點解析:本題考查函數(shù)實參個數(shù)的基礎(chǔ)知識,根據(jù)實參的概念,(a+b)、3、max(n-1,b)分別為其中的3個實參。故答案為A。8、下面是關(guān)于派生類聲明的開始部分,其中正確的是()。A、classvirtualB:publicAB、virtualclassB:publicAC、classB:publicAvirtualD、classB:virtualpublicA標準答案:D知識點解析:聲明派生類的一般形式為:class派生類名:[繼承方式]基類名。其中繼承方式包括:public,private,protected,而virtual為C++中的關(guān)鍵字。虛函數(shù)的使用方法是在基類用virtual聲明成員函數(shù)為虛函數(shù)。9、有如下程序:#includeusingnamespaeestd;classPair{intm,n;public:Pair(intj,intk):m(j),n(k){}intget(){returnm;}intget()const{returnm+n;}};intmain(){Paira(3,5);constPairb(3,5);cout<A、33B、38C、83D、88標準答案:B知識點解析:本題考查常對象、常成員函數(shù)及構(gòu)造函數(shù)。常對象只能調(diào)用常成員函數(shù),所以本題中,對象a為普通對象,執(zhí)行a.get()后,會執(zhí)行默認構(gòu)造函數(shù),輸出3;對象b為常對象,執(zhí)行b.get()后,會執(zhí)行常構(gòu)造函數(shù),輸出8。10、耦合性和內(nèi)聚性是對模塊獨立性度量的兩個標準。下列敘述中正確的是()。A、提高耦合性降低內(nèi)聚性有利于提高模塊的獨立性B、降低耦合性提高內(nèi)聚性有利于提高模塊的獨立性C、耦合性是指一個模塊內(nèi)部各個元素間彼此結(jié)合的緊密程度D、內(nèi)聚性是指模塊間互相連接的緊密程度標準答案:B知識點解析:模塊獨立性是指每個模塊只完成系統(tǒng)要求的獨立的子功能,并且與其他模塊的聯(lián)系最少且接口簡單。一般較優(yōu)秀的軟件設(shè)計,應盡量做到高內(nèi)聚,低耦合,即減弱模塊之間的耦合性和提高模塊內(nèi)的內(nèi)聚性,有利于提高模塊的獨立性,所以A)錯誤,B)正確。耦合性是模塊間互相連接的緊密程度的度量而內(nèi)聚性是指一個模塊內(nèi)部各個元素間彼此結(jié)合的緊密程度,所以C)與D)錯誤。11、如果一個模板聲明列出了多個參數(shù),則每個參數(shù)之間必須使用逗號隔開,每個參數(shù)都必須使用()關(guān)鍵字來修飾。A、constB、staticC、voidD、class標準答案:D知識點解析:如果一個模板聲明列出了多個參數(shù),則每個參數(shù)之間必須使用逗號隔開,每個參數(shù)都必須使用class關(guān)鍵字來修飾。12、軟件詳細設(shè)計產(chǎn)生的圖如下:該圖是()。A、N-S圖B、PAD圖C、程序流程圖D、E-R圖標準答案:C知識點解析:N—S圖提出了用方框圖來代替?zhèn)鹘y(tǒng)的程序流程圖,所以A不對。PAD圖是問題分析圖,它是繼承程序流程圖和方框圖之后提出的又一種主要用于描述軟件詳細設(shè)計的圖形表示工具,所以B不對。E—R圖是數(shù)據(jù)庫中的用于表示E—R模型的圖示工具,所以D不對。根據(jù)圖中所示表示方法是進行軟件詳細設(shè)計時使用的程序流程圖。13、有如下兩個類定義:classAA{};classBB{AAv1,v2;BBv3;int*v4;};其中有一個成員變量的定義是錯誤的,這個變量是()。A、vlB、v2C、v3D、v4標準答案:C知識點解析:本題主要考查類對象的定義,類的對象一般放在類結(jié)構(gòu)體外或在主函數(shù)中定義,而不能放在類定義的結(jié)構(gòu)體中,但自身類的指針可以,本題BBv3不能被定義于類體內(nèi)。14、有如下程序:#includeusingnamespacestd;classBase{public:Base(intx=0){cout<A、0B、1C、01D、001標準答案:D知識點解析:本題考查派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù),在定義一個派生類的對象時,先調(diào)用基類的構(gòu)造函數(shù),然后再執(zhí)行派生類的構(gòu)造函數(shù),對象釋放時,先執(zhí)行派生類的析構(gòu)函數(shù),再執(zhí)行基類的析構(gòu)函數(shù)。所以本題中定義了一個對象d,先執(zhí)行基類的構(gòu)造函數(shù)輸出0,因為派生類中的私有數(shù)據(jù)成員為.Base,所以還會執(zhí)行一次基類的構(gòu)造函數(shù)輸出0,最后執(zhí)行派生類的構(gòu)造函數(shù)輸出1,所以本題答案為D。15、下列關(guān)于類和對象的敘述中,錯誤的是()。A、一個類只能有一個對象B、對象是類的具體實例C、類是對某一類對象的抽象D、類和對象的關(guān)系是一種數(shù)據(jù)類型與變量的關(guān)系標準答案:A知識點解析:此題考查的是類和對象的概念。類是用戶定義的一種數(shù)據(jù)類型,可以使用這個類型來說明一個或多個變量,即對象。16、有如下程序:#includeusingnamespacestd;classXX{protected:intk=public:XX(intn=5):k(n){};~XX(){cout<<“XX”;}virtualvoidfoconst=0;};inlinevoidXX::f()const{cout<A、28XXB、28YYXXC、33XXD、33XXYY標準答案:A知識點解析:類YY公有派生于類XX,派生類對象可以替代基類對象向基類對象的引用進行賦值初始化,XX&p=*newYY語句定義了XX對象p引用,并用YY對象初始化,p并不是YY對象的別名,是XX基類對象的別名,故先調(diào)用基類XX的構(gòu)造函數(shù)將k初始化為5,p.f()首先輸出k一3即2,然后調(diào)用XX":f()輸出k+3即8,delete&p刪除p,調(diào)用XX的析構(gòu)函數(shù)輸出“XX”。17、算法的空間復雜度是指()。A、算法程序的長度B、算法程序中的指令條數(shù)C、算法程序所占的存儲空間D、算法執(zhí)行過程中所需要的存儲空間標準答案:D知識點解析:算法的空間復雜度是指執(zhí)行這個算法所需要的內(nèi)存空間。一個算法所占用的存儲空間包括算法程序所占的空間、輸入的初始數(shù)據(jù)所占的存儲空間以及算法執(zhí)行中所需要的額外空間。其中額外空間包括算法程序執(zhí)行過程中的工作單元以及某種數(shù)據(jù)結(jié)構(gòu)所需要的附加存儲空間。如果額外空間量相對于問題規(guī)模來說是常數(shù),則稱該算法是原地工作的。在許多實際問題中,為了減少算法所占的存儲空間,通常采用壓縮存儲技術(shù),以便盡量減少不必要的額外空間。18、下列語句中,錯誤的是()。A、constintbuffer=-256;B、constinttemp;C、constdouble*ooint;D、constdouble*rt=newdouble(5.5);標準答案:B知識點解析:符號常量聲明語句的語法格式足:const類型名符號常量=初值表達式,選項B)中未給常變量賦初值,故錯誤:而選項C)中定義的是一個指向浮點型常量的指針,而不是定義一個浮點型常量,所以可以不賦初值。19、下列關(guān)于函數(shù)參數(shù)的敘述中,正確的是()。A、在函數(shù)原型中不必聲明形參類型B、在調(diào)用一個函數(shù)時,若函數(shù)中修改了形參變量的值,則對應的實參變量的值也被修改C、函數(shù)形參的生存期與整個程序的運行期相同D、函數(shù)的形參在函數(shù)被調(diào)用時獲得初始值標準答案:D知識點解析:本題考查函數(shù)參數(shù)的相關(guān)知識,函數(shù)原型中必須聲明形參類型,所以A選項錯誤,調(diào)用一個函數(shù)時如果修改了形參值,那么實參可能改變也可能不改變,所以B選項錯誤,函數(shù)形參的生存期一般在函數(shù)執(zhí)行整個函數(shù)中存在,除了靜態(tài)變量,所以c選項錯誤。20、若目前D盤根目錄下并不存在test.txt文件,則下列打開文件方式不會自動創(chuàng)建test.txt文件的是()。A、ifstreamfin;fin.open(”d:\\test.txt”,ios_base::in);B、fstreamrio;rio.open(”d:\\test.txt”,ios_base::out);C、ofstreamfout;fout.open(”d:\\test.txt”,ios_base::out);D、ofstreamfout;fout.open(”d:\\test.txt”,ios_base::app);標準答案:A知識點解析:本題考查文件流的一些操作,jos::in是以輸入方式打開文件,如果并不存在這個文件,也不會自動創(chuàng)建一個新文件,所以A選項正確。21、下面字符串中,不可以用作C++標識符的是()。A、caseB、testCC、ReturnD、X2008標準答案:A知識點解析:C++標識符是一個以字母或下劃線開頭的,由字母、數(shù)字、下劃線組成的字符串。標識符不能與任何一個關(guān)鍵字同名,因此case不能作為標識符。22、若要在Number類的聲明中將減法運算符重載為成員函數(shù),下列重載函數(shù)聲明中正確的是A、Number-(Number);B、Numberoperator-(Number);C、Number-operator(Number);D、Numberoperator-(Number,Number);標準答案:D知識點解析:本題考查重載減法運算符,重載運算符的一般形式為:函數(shù)類型operator運算符名稱(參數(shù)列表){對運算符的重載處理}根據(jù)定義規(guī)則,只有B選項正確。23、下面是重載為非成員函數(shù)的運算符函數(shù)原型,其中錯誤的是A、MyClassoperator*(MyClass);B、MyClassoperator+(MyClass,int);C、MyClass&operator-=(MyClass&,MyClass);D、MyClass&operator=(MyClass&,MyClass);標準答案:D知識點解析:本題考查賦值運算符重載,賦值運算符只能作為類的成員函數(shù)重載,所以D選項錯誤。24、下列關(guān)于模板的敘述中,正確的是()。A、如果一個類中存在純虛函數(shù),這個類就是類模板B、函數(shù)模板不能有形式參數(shù)表C、類模板是一種參數(shù)化類型的類,是類的生成器D、類模板中不能包含構(gòu)造函數(shù)標準答案:C知識點解析:類模板實際上是將類模板實例化成一個具體的類,它是類的生成器,它的格式是:類名<實際的類型>。25、下列選項中,不是C++關(guān)鍵字的是A、intB、staticC、enumD、final標準答案:D知識點解析:A選項中,int是定義整型數(shù)據(jù)的關(guān)鍵字;B選項中,static是定義靜態(tài)數(shù)據(jù)類型的關(guān)鍵字;C選項中enum是定義枚舉類型的關(guān)鍵字;答案為D。26、有如下程序:#inc1ude<iostream>usingnamespacestd;c1assTestClass{staticinti;public:TestClass(){i++;}~TestClass(){i——;}staticintgetVal0{returni;));intTestClass::i=0;voidf0{TestClassobj2;cout<<obj2.getVal();}intmain(){TestClassobj1;f();TestClass*obj3=newTestClass;cout<<obj3—>getVal();deleteobj3;cout<<TestClass::getVal();return0:}程序的輸出結(jié)果是()。A、232B、221C、222D、231標準答案:B知識點解析:由于i是類TestClass的靜態(tài)成員,該成員被類的所有實例共享。當定義objl時,系統(tǒng)自動調(diào)用構(gòu)造函數(shù)TestClass(),i的值將加l;調(diào)用函數(shù)f()時’在定義obj2時系統(tǒng)會自動調(diào)用構(gòu)造函數(shù)TestClass(),i的值將再加1;調(diào)用obj2.getVal();后將i的值輸出,輸出值為2;當調(diào)用函數(shù)f()即將結(jié)束時,系統(tǒng)自動調(diào)用析構(gòu)函數(shù)~TestClass(),i的值將減1:當定義obj3時,系統(tǒng)自動調(diào)用構(gòu)造函數(shù)TestClass(),i的值將加1,調(diào)用cout<<obj3_>getVal();后,將i的值輸出,輸出值為2:調(diào)用deleteobj3后將執(zhí)行TestClass的析構(gòu)函數(shù)~TestClass(),執(zhí)行后,i的值將減1,TestClass::getVal()為類的一個靜態(tài)成員函數(shù)’其作用是返回私有靜態(tài)成員變量i的值1。27、有如下類定義:classBase{intm;public:intn;protected:intp;};classDerived:privateBase{intk;public:voidf();};則允許成員函數(shù)f訪問的數(shù)據(jù)成員的個數(shù)是A、1B、2C、3D、4標準答案:C知識點解析:私有繼承中,基類的所有成員(除了private成員)在派生類中為private成員;另外C++中,class關(guān)鍵字定義的類,默認的訪問級別為private;題目中Derived以private方式繼承Base,所以Derived中private成員有:n、p、k,沒有public和protected成員,成員函數(shù)f可以訪問Derived的private成員、public成員和protected成員,答案為C。28、有如下類定義:classPass{staticintcount;public:Pass(){}voidshow()const;friendintgetCount();staticintincre();};在所聲明的4個函數(shù)中,具有this指針的有A、Pass和showB、Pass和showC、show和increD、getCount和incre標準答案:A知識點解析:C++的類定義中,只有非靜態(tài)成員函數(shù)具有this指針,Pass類中g(shù)etCount()函數(shù)是友元函數(shù),不屬于成員函數(shù),沒有this指針,選項B、D錯誤;incre()函數(shù)是靜態(tài)成員函數(shù),沒有this指針,選項C錯誤;答案為A。29、有如下類定義:classAA{inta;public:AA(intn=0):a(n){}};classBB:publicAA{public:BB(intx)__________};其中劃線處應填寫的內(nèi)容是A、:AA(x){}B、:a(n){}C、{a(x);}D、{a=x;}標準答案:A知識點解析:C++中,派生類構(gòu)造函數(shù)的初始化列表只能初始化派生類的成員,不能直接初始化繼承成員。所以派生類構(gòu)造函數(shù)需要將基類構(gòu)造函數(shù)包含在初始化列表中來間接初始化繼承成員,選項B錯誤;AA中的成員a是private成員,對BB不可見,選項C,D錯誤;答案為A。30、設(shè)有表示學生選課的三張表,學生S(學號,姓名,性別,年齡,身份證號),課程C(課號,課名),選課SC(學號,課號,成績),則表SC的關(guān)鍵字(鍵或碼)為()。A、課號,成績B、學號,成績C、學號,課號D、學號,姓名,成績標準答案:C知識點解析:學號是學生表S的主鍵,課號是課程表C的主鍵,所以選課表SC的關(guān)鍵字就應該是與前兩個表能夠直接聯(lián)系且能唯一定義的學號和課號,所以選擇C)。31、有如下頭文件:intf1();staticintf2();classMA{public:intf3();staticintf4();};在所描述的函數(shù)中,具有隱含的this指針的是()。A、f1B、f2C、f3D、f4標準答案:C知識點解析:只有類的非靜態(tài)成員函數(shù)才隱含this指針,其作用域是類內(nèi)部,當類的非靜態(tài)成員函數(shù)中訪問類的非靜態(tài)成員時,編譯器會自動將對象本身的地址作為一個隱含參數(shù)傳遞給函數(shù),而不必一定寫上this。所以本題答案為C。32、下列關(guān)于模板的表述中,正確的是A、如果一個類中存在純虛函數(shù),這個類就是類模板B、函數(shù)模板不能帶有形式參數(shù)表C、類模板帶有模板形參表D、類模板中不能包含構(gòu)造函數(shù)標準答案:C知識點解析:存在純虛函數(shù)的類是抽象基類,選項A錯誤;函數(shù)模板的形參表不能為空,不然定義函數(shù)模板也沒有意義,選項B錯誤;類模板中是可以包含構(gòu)造函數(shù)的,選項D錯誤。答案為C。33、通過運算符重載,可以改變運算符原有的A、優(yōu)先級B、結(jié)合性C、操作數(shù)類型D、操作數(shù)個數(shù)標準答案:C知識點解析:本題考查運算符重載,重載不能改變運算符運算對象的個數(shù);不能改變運算符的優(yōu)先級別;不能改變運算符的結(jié)合性;重載運算符的函數(shù)不能有默認值,否則就改變了運算符參數(shù)的個數(shù);不能定義新的運算符,某些運算符不能重載。所以答案為C。34、p是指向ClassA類型對象的指針。執(zhí)行deletep;時,系統(tǒng)自動調(diào)用A、析構(gòu)函數(shù)B、構(gòu)造函數(shù)C、靜態(tài)函數(shù)D、友元函數(shù)標準答案:A知識點解析:指向?qū)ο蟮闹羔樖褂胐elete刪除時,該指針指向的對象會被撤銷,編譯器會自動調(diào)用析構(gòu)函數(shù)來釋放該對象占有的資源,答案為A。35、下列敘述中正確的是A、每一個結(jié)點有兩個指針域的鏈表一定是非線性結(jié)構(gòu)B、所有結(jié)點的指針域都為非空的鏈表一定是非線性結(jié)構(gòu)C、循環(huán)鏈表是循環(huán)隊列的鏈式存儲結(jié)構(gòu)D、線性結(jié)構(gòu)的存儲結(jié)點也可以有多個指針標準答案:D知識點解析:一個非空的數(shù)據(jù)結(jié)構(gòu)如果滿足以下兩個條件:有且只有一個根結(jié)點;每一個結(jié)點最多有一個前件,也最多有一個后件,則稱為線性結(jié)構(gòu),在數(shù)據(jù)結(jié)構(gòu)中習慣稱為線性表。雙向鏈表結(jié)點具有兩個指針域,屬于線性結(jié)構(gòu),A選項錯誤。循環(huán)鏈表所有結(jié)點的指針域都為非空,屬于線性結(jié)構(gòu),B選項錯誤。循環(huán)鏈表是鏈表,循環(huán)隊列屬于隊列,隊列只能在隊尾入隊,在排頭退隊,鏈表可以在任何位置插入、刪除,C選項錯誤。雙向鏈表結(jié)點具有多個指針域,D選項正確。36、下列控制格式輸入/輸出的操作符中,能夠設(shè)置浮點數(shù)精度的是()。A、setprecisionB、setwC、setfillD、showpoint標準答案:A知識點解析:iomanip中定義的操縱符包括:setfill(ch)用ch填充空白、setprecision(n)將浮點精度置為n、setw(w)、讀寫w個字符的值showpoint設(shè)置小數(shù)點。37、ClassA是一個類,且有如下語句序列ClassAc1,*c2;ClassA*c3=newMyClass;ClassA&c4=c1;則ClassA的構(gòu)造函數(shù)被調(diào)用的次數(shù)是A、1B、2C、3D、5標準答案:B知識點解析:定義一個ClassA類型的對象c1,生成新對象c1,調(diào)用默認構(gòu)造函數(shù);定義一個ClassA類型的指針c2,指針未賦初值,沒有新對象生成,沒有調(diào)用構(gòu)造函數(shù);定義一個ClassA類型的指針c3,使用動態(tài)分配方式為c3分配內(nèi)存,生成新的對象,將c3初始化為新對象的地址,調(diào)用默認構(gòu)造函數(shù);定義一個ClassA類型的引用c4,引用c1對象,沒有新對象生成,未調(diào)用構(gòu)造函數(shù);答案為B。38、有如下類定義:classAA{inta;public:intgetRef()const{return&a;}//①intgetValue()const{returna;}//②voidset(intn)const{a=n;}//③friendvoidshow(AAaa)const{tout<A、①B、②C、③D、④標準答案:B知識點解析:本題考查常成員函數(shù),常成員函數(shù)只能引用本類中的數(shù)據(jù)成員,而不能修改它。所以本題答案為B。二、基本操作題(本題共1題,每題1.0分,共1分。)39、請使用VC6或使用[答題]菜單打開考生文件夾proj1下的工程projl,該工程中包含程序文件main.cpp,其中有類Door(“門”)和主函數(shù)main的定義。程序中位于每個“//ERROR****found****”之后的一行語句有錯誤,請加以改正。改正后程序的輸出結(jié)果應為:打開503號門…門是鎖著的,打不開。打開503號門的鎖…鎖開了。打開503號門…門打開了。打開503號門…門是開著的,無須再開門。鎖上503號門…先關(guān)門…門鎖上了。注意:只修改每個“//ERROR**********found**********”下的那一行,不要改動程序中的其他內(nèi)容。#includeusingnamespacestd;classDoor{intnum;//門號booldosed;//true表示門關(guān)著boollocked;//true表示門鎖著public:Door(intnum){//ERROR**********found**********nm=this->Rum;closed=locked=true;}boolisClosed()eonst{returndosed;}//門關(guān)著時返回true,否則返回falseboolisOpened()eonst{lreturn!closed;}//門開著時返回true,否則返回falseboolisLoeked()eonst{returnlocked;}//門鎖著時返回true,否則返回falseboolislJnlocked()eonst{retllm!locked;}//門未鎖時返回true,否則返回falsevoidopen(){//開門eout<標準答案:(1)this一>num=num;(2)if(!closed)(3)voidlock(){知識點解析:(1)主要考查考生對this指針的掌握,在構(gòu)造函數(shù)中this指針指向的是當前類,因此要給num賦值使用語句this一>num=num;完成。(2)主要考查考生對if語句的掌握,先看類的私有成員中關(guān)于closed的定義:boolclosed;//true表示門關(guān)著。再看下一條語句:cout<<”門是開著的,無須再開門?!?;。即滿足條件時就會輸出:門是開著的,無須再開門。因此if括號內(nèi)應該是!closed。(3)主要考查考生對const函數(shù)的掌握,lock函數(shù)體中存在語句locked=true,即有參數(shù)發(fā)生改變,因此不能用_const。三、簡單應用題(本題共1題,每題1.0分,共1分。)40、使用VC6打開考生文件夾下的源程序文件modi2.cpp。閱讀下列函數(shù)說明和代碼,完成空出部分的程序。函數(shù)func(intA[NUM],intn)實現(xiàn)的功能是將數(shù)組的內(nèi)容進行一次重新排序。排序的方法是:給定n,則下標為i的數(shù)字與下標為n-i的數(shù)字交換。從0開始,交換N/2次,則最后的內(nèi)容為排序后的結(jié)果。如果:A[8]={1,2,3,4,5,6,7,8},n=6,則結(jié)果:A[8]={7,6,5,4,3,2,1,8}。注意:不能修改其他代碼。#include#defineNUM8voidfunc(intA[NUM],intn){}intmain(){intA[NUM]={1,2,3,4,5,6,7,8);func(A,6);for(inti=0;i標準答案:for(inti=0;i知識點解析:func()函數(shù)完成對數(shù)組內(nèi)容的重排,下標為i的數(shù)字與下標為n-i的數(shù)字交換,可以用循環(huán)來實現(xiàn)。四、綜合應用題(本題共1題,每題1.0分,共1分。)41、請使用VC6或使用[答題]菜單打開考生文件夾proj3下的工程proj3,其中包含了類IntegerSet和主函數(shù)main的定義。一個IntegerSet對象就是一個整數(shù)的集合,其中包含0個或多個無重復的整數(shù);為了便于進行集合操作,這些整數(shù)按升序存放在成員數(shù)組elem的前若干單元中。成員函數(shù)add的作用是將一個元素添加到集合中(如果集合中不存在該元素),成員函數(shù)remove從集合中刪除指定的元素(如果集合中存在該元素)。請編寫成員函數(shù)remove。在main函數(shù)中給出了一組測試數(shù)據(jù),此時程序的正確輸出結(jié)果應為:234527283166752345627283166752345619272831667534561927283166753456192728316675要求:補充編制的內(nèi)容寫在“//**********333**********”與“//**********666**********”之間,不得修改程序的其他部分。注意:程序最后將結(jié)果輸出到文件out.dat中。輸出函數(shù)WriteToFile已經(jīng)編譯為obj文件,并且在本程序中調(diào)用。//IntegorSet.h#ifndefINTEGERSET#defineINEGERsET#includeusingnamespacestd;constintMAXELEMENTS=100;//集合最多可擁有的元素個數(shù)classIntegerSet{intelem[MAXELEMENTS];//用于存放集合元素的數(shù)組intcounter;//用于記錄集合中元素個數(shù)的計數(shù)器public:IntegerSet():counter(0){}//創(chuàng)建一個空集合IntegerSet(intdata[],intsize);//利用數(shù)組提供的數(shù)據(jù)創(chuàng)建一個整數(shù)集合voidadd(intelement);//添加一個元素到集合中voidremove(intelemerit);//刪除集合中指定的元素intgetCount()const{retuIllcounter;}//返回集合中元素的個數(shù)intgetElement(inti)const{returnelem[i];}//返回集合中指定的元素voidshow()eonst;};voidWriteToFfle(char*);#ndif//main.cpp#include"IntegerSet.h"#includeIntegerSet::IntegerSet(intdata[],intsize):counter(O){for(inti=0;i0;j--)if(element>=elem[j-1])break;//如果找到的是等于element的元素,說明要添加的元素已經(jīng)存在,直接返回if(j>O)if(element=elem[j-1])return;//如果找到的是小于element的元素,j就是要添加的位置//該元素及其后面的元素依次后移,騰出插入位置for(intk=counter;k>j;k--)elem[k]=elem[k-1];elem[j]=element;//將element插入到該位置counter++;//計數(shù)器加1}voidIntegerSet::remove(intelement){//**********333**********//**********666**********}voidIntegerSet::show()const{for(inti=0;i標準答案:for(inti=0;i知識點解析:主要考查考生對有序數(shù)組的掌握,題目要求成員函數(shù)rem0Ve從集合中刪除指定的元素(如果集合中存在該元素)。遍歷數(shù)組elem中的元素,找出與形參element相等的元素,并將其刪除,每刪除一個元素,即將該元素之后的每個元素前移一位,如果不存在與形參element相等的元素則沒有操作。使用下標i遍歷數(shù)組,if語句判斷是否與element相等。國家二級(C++)機試模擬試卷第2套一、選擇題(本題共37題,每題1.0分,共37分。)1、有如下類定義:classMyBase{intk;public:MyBase(intn=0):k(n){}intvalue()const{returnk;}};classMyDerived:MyBase{intj;public:MyDerived(inti):j(i){}intgetK()const{returnk;}intged()eonst{returnj;}};編譯時發(fā)現(xiàn)有一處語法錯誤,對這個錯誤最準確的描述是()。A、函數(shù)getK試圖訪問基類的私有成員變量kB、在類MyDerived的定義中,基類名MyBase前缺少關(guān)鍵字public、protected或privateC、類MyDerived缺少一個無參的構(gòu)造函數(shù)D、類MyDerived的構(gòu)造函數(shù)沒有對基類數(shù)據(jù)成員k進行初始化標準答案:A知識點解析:默認繼承方式為私有繼承,私有繼承將基類的公用成員和保護成員都變?yōu)榱怂接谐蓡T,基類的私有成員依然屬于基類私有,派生類不能訪問基類的私有成員。所以A選項正確。2、下列關(guān)于C++流的描述中,錯誤的是()。A、cout>>’A’表達式可輸出字符AB、eof()函數(shù)可以檢測是否到達文件尾C、對磁盤文件進行流操作時,必須包含頭文件fstreamD、以ios_base::out模式打開的文件不存在時,將自動建立一個新文件標準答案:A知識點解析:本題考查C++流,想要輸出宇符“A”,則應該是cout<<“A”,所以本題答案為A。3、下列程序的輸出結(jié)果為1,2.3,2,4.6,橫線處應填()。#includeusingnamespacestd;classBase{public:Base(inta):idata(a){}voidprint(){cout<A、print()B、idata(a)C、(inta)D、Base(a)標準答案:D知識點解析:與上題一致,也是考查了類的繼承方式,Derived類繼承了Base類的構(gòu)造函數(shù)。4、有如下程序:#include<iostream>usingnamespacestd:classMyClass{public:MyClass(intX):val(X){}voidPrint()const{cout<<”const:val=”<<val<<’\t’;}voidPrint(){cout<<”val=”<<val<<’\t’;}private:intval;};intmain(){constMyClassobjl(10);MyClassobj2(20);obj1.Print();obj2.Print();return0;}執(zhí)行這個程序的輸出結(jié)果是()。A、val=10const:val=20B、const:val=10const:val=20C、const:val=10val=20D、val=10val=20標準答案:C知識點解析:本題考查常對象、常成員函數(shù)及構(gòu)造函數(shù)。常對象只能調(diào)用常成員函數(shù),普通對象調(diào)用普通成員函數(shù)。所以本題中obj1為常對象,執(zhí)行obj1.print()后,會執(zhí)行常構(gòu)造函數(shù),輸出const:Val=10;而obj2為普通對象,執(zhí)行obj2.print()時,會執(zhí)行默認構(gòu)造函數(shù),輸出val=20。故答案為C。5、下列關(guān)于類模板的模板參數(shù)的敘述中,錯誤的是()。A、模板參數(shù)可以作為數(shù)據(jù)成員的類型B、模板參數(shù)可以作為成員函數(shù)的返回類型C、模板參數(shù)可以作為成員函數(shù)的參數(shù)類型D、模板參數(shù)不能作為成員函數(shù)的局部變量的類型標準答案:D知識點解析:本題考查類模板的概念和定義模板參數(shù)可以作為成員函數(shù)的局部變量的類型。6、設(shè)R是一個2元關(guān)系,有3個元組,S是一個3元關(guān)系,有3個元組。如T=R×S,則T的元組的個數(shù)為()。A、6B、8C、9D、12標準答案:C知識點解析:R為n元關(guān)系,有p個元組S為m元關(guān)系,有q個元組。兩個關(guān)系笛卡兒積是一個n+m元的關(guān)系,元組個數(shù)是q×p。所以T的元組的個數(shù)為9個。7、有如下函數(shù)模板定義:templateT1sum(T1a1){return(a1+a2+a3);}則以下調(diào)用中正確的是()。A、sum(5);B、sum<4,3>(5);C、sum(5);D、sum(5);標準答案:A知識點解析:本題考查的函數(shù)模板的使用,有時不能根據(jù)用戶傳進來的參數(shù)決定所有模板函數(shù)的值類型,如函數(shù)的返回值,還有用戶希望自己指定參數(shù)類型,這時就需要顯式地指出參數(shù)模板的類型,顯示指定模板的類型格式為:返回值類型函數(shù)模板<參數(shù)類型表>(參數(shù)表)。8、下列關(guān)于線性鏈表的敘述中,正確的是()。A、各數(shù)據(jù)結(jié)點的存儲空間可以不連續(xù),但它們的存儲順序與邏輯順序必須一致B、各數(shù)據(jù)結(jié)點的存儲順序與邏輯順序可以不一致,但它們的存儲空間必須連續(xù)C、進行插入與刪除時,不需要移動表中的元素D、以上說法均不正確標準答案:C知識點解析:一般來說,在線性表的鏈式存儲結(jié)構(gòu)中,各數(shù)據(jù)結(jié)點的存儲序號是不連續(xù)的,并且各結(jié)點在存儲空間中的位置關(guān)系與邏輯關(guān)系也不一致。線性鏈表中數(shù)據(jù)的插入和刪除都不需要移動表中的元素,只需改變結(jié)點的指針域即可。9、已知字母A的ASCII代碼值為65,若變量kk為char型,下列不能正確判斷出kk中的值為大寫字母的表達式是()。A、kk>=’A’&&kk=’Z’B、!(kk>=’A’‖kk<=’Z’)C、(kk+32)>=’a’&&(kk+32)<=’z’D、isalpha(kk)&&(kk<=91)標準答案:B知識點解析:選項A用邏輯運算符來連接關(guān)系表達式’A’<=kk并且kk<=’Z’,介于’A’與’Z’之間為大寫字母。選項C用邏輯與運算符來連接關(guān)系表達式(kk+32)>’a’和(kk+32)<=’z’,因為大寫’A’與小寫’a’,ASCII碼相差32,由表達式可知C正確。選項D調(diào)用函數(shù)isalpha(),首先判斷kk是否為字母,接著通過與運算(kk<=91)來判斷kk是否為大寫字母;而選項B的表達式給的結(jié)果是除了’A’與’Z’的大寫字母,不符合題意。10、下列有關(guān)指針的操作中,正確的是()。A、inta=10;void*ptr=&a;cout<<*(ptr);B、int*ptr=newint[10];deleteptr;C、intAnay[4];*(Anay+3)=10;D、int*ptr=newint*[10];標準答案:C知識點解析:選項A首先定義整型變量a,初值為10;然后定義void類型指針ptr,將a的地址賦給ptr,由于a的類型和ptr的類型不同,所以不能直接賦值,A錯誤;選項B動態(tài)分配10個整型數(shù)的存儲空間,首地址賦給ptr,釋放ptr時需要使用delete[],B錯誤;選項C定義數(shù)組Array,它包含4個整型元素,然后將與數(shù)組首地址Array偏移3個整型數(shù)的地址指向的元素,賦值為10,即Array[3]=10,正確;選項D使用new運算符動態(tài)分配10個整型指針元素的存儲空間,首地址賦給ptr,所以ptr必須是一個指向指針的指針int**ptr,錯誤;本題答案為C。11、下列運算符中,既可作為類成員函數(shù)重載,又可作為非成員函數(shù)重載的是()。A、=B、+=C、輸入流的提取運算符>>D、輸出流的插入運算符<<標準答案:B知識點解析:C++中,賦值運算符=必須重載為類成員函數(shù),選項A不滿足;對于輸入流的提取運算符>>合輸出流的插入運算符<<,正常用法是左操作數(shù)是IO類型,而不是該類的類對象,所以必須將它們定義為非成員函數(shù),選項C、D不滿足,本題答案為B。12、下列運算符中,不能被重載的是A、||B、+=C、.D、--標準答案:D知識點解析:本題考查運算符重載,不能重載的運算符只有5個:.、.*、::、sizeof、?:所以本題選擇C13、在數(shù)據(jù)庫的三級模式結(jié)構(gòu)中,描述數(shù)據(jù)庫中全體數(shù)據(jù)的全局邏輯結(jié)構(gòu)和特征的是()。A、內(nèi)模式B、用戶模式C、外模式D、概念模式標準答案:D知識點解析:數(shù)據(jù)庫系統(tǒng)在其內(nèi)部分為三級模式,即概念模式、內(nèi)模式和外模式。概念模式是數(shù)據(jù)庫系統(tǒng)中全局數(shù)據(jù)邏輯結(jié)構(gòu)的描述,全體用戶的公共數(shù)據(jù)視圖。外模式也稱子模式或者用戶模式,是用戶的數(shù)據(jù)視圖,也就是用戶所能夠看見和使用的局部數(shù)據(jù)的邏輯結(jié)構(gòu)和特征的描述,是與某一應用有關(guān)的數(shù)據(jù)的邏輯表示。內(nèi)模式又稱物理模式,是數(shù)據(jù)物理結(jié)構(gòu)和存儲方式的描述,是數(shù)據(jù)在數(shù)據(jù)庫內(nèi)部的表示方式。描述數(shù)據(jù)庫中全體數(shù)據(jù)的全局邏輯結(jié)構(gòu)和特征的是概念模式,故D選項正確。14、下面描述錯誤的是()。A、模塊的獨立性與模塊的信息隱蔽和局部化無關(guān)B、內(nèi)聚性和耦合性是模塊獨立程度的定性度量標準C、一個模塊的內(nèi)聚性越高則該模塊的獨立性越強D、一個模塊的耦合性越高則該模塊的獨立性越弱標準答案:A知識點解析:模塊獨立性的概念是抽象、模塊化、信息隱蔽和局部化的直接結(jié)果。模塊的獨立性是指軟件模塊的編寫和修改應使其具有獨立功能,且與其他模塊的關(guān)聯(lián)盡可能少。故本題答案為A選項。15、下列關(guān)鍵字中,用來表示繼承方式的是A、staticB、constC、virtualD、protected標準答案:D知識點解析:本題考查繼承使用的關(guān)鍵字,屬于基礎(chǔ)知識,使用D選項為繼承使用的關(guān)鍵字。16、下列關(guān)于完全二叉樹的敘述中,錯誤的是()。A、除了最后一層外,每一層上的結(jié)點數(shù)均達到最大值B、可能缺少若干個左右葉子結(jié)點C、完全二叉樹一般不是滿二叉樹D、具有結(jié)點的完全二叉樹的深度為[log2n]+1標準答案:B知識點解析:滿二叉樹指除最后一層外,每一層上所有結(jié)點都有兩個子結(jié)點的二叉樹。完全二叉樹指除最后一層外,每一層上的結(jié)點數(shù)均達到最大值,在最后一層上只缺少右邊的若干葉子結(jié)點的二叉樹。因此選項A敘述正確,而選項B敘述錯誤。由定義可知,滿二叉樹肯定是完全二叉樹,而完全二叉樹一般不是滿二叉樹。17、下列哪一條不屬于數(shù)據(jù)庫設(shè)計的任務?()A、設(shè)計數(shù)據(jù)庫應用結(jié)構(gòu)B、設(shè)計數(shù)據(jù)庫概論結(jié)構(gòu)C、設(shè)計數(shù)據(jù)庫邏輯結(jié)構(gòu)D、設(shè)計數(shù)據(jù)庫物理結(jié)構(gòu)標準答案:A知識點解析:數(shù)據(jù)庫設(shè)計工作量大而且過程復雜,既是一項數(shù)據(jù)庫工程也是一項龐大的軟件工程。考慮數(shù)據(jù)庫及其應用系統(tǒng)開發(fā)全過程,將數(shù)據(jù)庫設(shè)計分為以下6個階段:需求分析、概念結(jié)構(gòu)設(shè)計、邏輯結(jié)構(gòu)設(shè)計、物理結(jié)構(gòu)設(shè)計、數(shù)據(jù)庫實施和數(shù)據(jù)庫的運行和維護。18、對于長度為n的線性表,在最壞情況下,下列各排序法所對應的比較次數(shù)中正確的是()。A、冒泡排序為n(n-1)/2B、簡單插入排序為nC、希爾排序為nD、快速排序為n/2標準答案:A知識點解析:在最壞情況下,冒泡排序所需要的比較次數(shù)為n(n-1)/2:簡單插入排序所需要的比較次數(shù)為n(n-1)/2;希爾排序所需要的比較次數(shù)為O(n1.5):堆排序所需要的比較次數(shù)為O(nlog2n)。19、有如下程序:#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知識點解析:派生類構(gòu)造函數(shù)都是先調(diào)用基類構(gòu)造函數(shù),再根據(jù)聲明次序定義數(shù)據(jù)成員,另外對于多繼承,派生類的構(gòu)造函數(shù)初始化列表中,基類構(gòu)造函數(shù)是按照基類在派生類的派生列表中出現(xiàn)的次序調(diào)用的;由于Derived類的派生列表中,Base2在前,所以應該先調(diào)用Base2的構(gòu)造函數(shù),再調(diào)用Base1的構(gòu)造函數(shù);銷毀派生類對象時,總是按照構(gòu)造函數(shù)運行次序的相反順序調(diào)用析構(gòu)函數(shù),首先運行派生類析構(gòu)函數(shù),然后按繼承層次依次向上調(diào)用各基類函數(shù);所以Derived對象銷毀時,首先調(diào)用Derived的析構(gòu)函數(shù),接著調(diào)用Base1的析構(gòu)函數(shù),最后調(diào)用Base2的析構(gòu)函數(shù);輸出結(jié)果為:"db1b2",答案為C。20、有如下程序:#includeusingnamespacestd;classAA{public:AA(intn){cout<A、321B、231C、213D、123標準答案:D知識點解析:構(gòu)造函數(shù)初始化列表僅指定用于初始化成員的值,并不指定這些初始化執(zhí)行的次序;初始化執(zhí)行的次序是根據(jù)類定義中成員的聲明順序完成的,初始化列表結(jié)束后,再執(zhí)行函數(shù)體;程序創(chuàng)建CC對象c,調(diào)用CC的構(gòu)造函數(shù),由于在類CC中,AA類對象a首先聲明,所以先調(diào)用AA類的構(gòu)造函數(shù),完成成員a的初始化,輸出"1",再調(diào)用BB類的構(gòu)造函數(shù),完成成員b的初始化,輸出"2",最后執(zhí)行CC構(gòu)造函數(shù)的函數(shù)體,輸出"3";答案為D。21、若已經(jīng)聲明了函數(shù)原型"boolfun(boola,intb=0);",則下列重載函數(shù)聲明中正確的是A、boolfun(boola=true,intb=0);B、intfun(boola,intB);C、voidfun(doublea,intB);D、voidfun(boola,intb=0);標準答案:C知識點解析:本題考查函數(shù)重載相關(guān)知識,重載函數(shù)是函數(shù)的一種特殊情況,為方便使用,C++允許在同一范圍中聲明幾個功能類似的同名函數(shù),但是這些同名函數(shù)的形式參數(shù)(指參數(shù)的個數(shù)、類型或者順序)必須不同,也就是說用同一個運算符完成不同的運算功能。ABD選項的形參都與原函數(shù)相同,所以不能作為重載函數(shù),選項C正確。22、下列關(guān)于函數(shù)模板的敘述中,錯誤的是A、從模板實參表和從模板函數(shù)實參表獲得信息矛盾時,以模板實參的信息為準B、對于常規(guī)參數(shù)所對應的模板實參,任何情況下都不能省略C、虛擬類型參數(shù)沒有出現(xiàn)在模板函數(shù)的形參表中時,不能省略模板實參D、模板實參表不能為空標準答案:D知識點解析:虛擬類型參數(shù)出現(xiàn)在模板函數(shù)的形參表中時,可以省略模板實參。所以D選項錯誤。23、下列字符串中,不可以用做C++標識符的是()。A、y_2006B、_TEST_HC、ReturnD、switch標準答案:D知識點解析:本題考查C++標識符的命名規(guī)則,其規(guī)則有如下幾點:①所有標識符必須由字母、數(shù)字或下畫線組成,且必須由字母或下畫線開頭;②所有標識符不能使用C++已有的關(guān)鍵字;③大、小寫字母表示不同意義,即代表不同的標識符。選項C中雖然return是關(guān)鍵字,但因首字母大、小寫不同,也可用于標識符,但不建議使用。故答案為D。24、如果派生類以protected方式繼承基類,則原基類的protected成員和public成員在派生類中的訪問屬性分別是()。A、public和publicB、public和protectedC、protected和publicD、protected和protected標準答案:D知識點解析:本題考查保護繼承中派生類對基類的訪問屬性,在受保護繼承中,基類的公用成員和保護成員在派生類中成了保護成員,其私有成員仍為基類私有,所以本題答案為D。25、要利用C++流實現(xiàn)輸入輸出的各種格式控制,必須在程序中包含的頭文件是A、fstreamB、istreamC、ostreamD、iomanip標準答案:D知識點解析:本題考查格式控制相關(guān)知識,屬于基礎(chǔ)知識,需要包含iomanip,所以D選項正確。26、在數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)模型包括概念模型、邏輯模型和A、物理模型B、空間模型C、時間模型D、數(shù)據(jù)模型標準答案:A知識點解析:數(shù)據(jù)模型按照不同的應用層次分為3種類型:概念數(shù)據(jù)模型、邏輯數(shù)據(jù)模型、物理數(shù)據(jù)模型,故A選項正確。27、下列關(guān)于函數(shù)的描述中,錯誤的是A、函數(shù)可以沒有返回值B、函數(shù)可以沒有參數(shù)C、函數(shù)可以是一個類的成員D、函數(shù)不能在類體中定義標準答案:D知識點解析:函數(shù)可以不需要返回值,即void型的,函數(shù)可以沒有參數(shù),所以AB選項正確,函數(shù)可以作為類的成員函數(shù),所以C正確,D錯誤。28、有如下類聲明:classTe{public:Te();//①Tete;//②Te*pte;//③voidf(Te&rte);//④};在標注號碼的的四個語句中,錯誤的是A、①B、②C、③D、④標準答案:B知識點解析:本題考查類的定義和對象的定義,題目中定義類Te中又定義了Te類型的對象te,這樣陷入循環(huán)中,所以②是錯誤的,答案為B選項。29、下列選項中,與實現(xiàn)運行時多態(tài)性無關(guān)的概念是A、重載函數(shù)B、虛函數(shù)C、引用D、指針標準答案:A知識點解析:C++中,實現(xiàn)運行時多態(tài)性必須滿足兩個條件:1、被調(diào)用的成員函數(shù)為虛函數(shù);2、調(diào)用必須通過基類類型的引用或指針。選項B、C、D正確;多態(tài)性是虛函數(shù)在運行時期綁定,而重載的函數(shù)是在編譯期綁定,重載主要是為了C++的代碼復用,與多態(tài)性沒有關(guān)系;答案為A。30、有如下程序段:inti=0,j=1;int&r=i;//①r=j;//②int*p=&i;//③*p=&r;//④其中會產(chǎn)生編譯錯誤的語句是()。A、④B、③C、②D、①標準答案:A知識點解析:本題考查指針和引用。①為引用,使用正確;④中&r表示一個地址,而*p已經(jīng)是一個值了,不能將一個指針賦值給一個值,所以編譯錯誤。31、下列敘述中正確的是A、有兩個指針域的鏈表稱為二叉鏈表B、循環(huán)鏈表是循環(huán)隊列的鏈式存儲結(jié)構(gòu)C、帶鏈的棧有棧頂指針和棧底指針,因此又稱為雙重鏈表D、結(jié)點中具有多個指針域的鏈表稱為多重鏈表標準答案:D知識點解析:雙向鏈表與二叉鏈表均是有兩個指針域的鏈表,A選項錯誤。在單鏈表的第一個結(jié)點前增加一個表頭結(jié)點,隊頭指針指向表頭結(jié)點,最后一個結(jié)點的指針域的值由NULL改為指向表頭結(jié)點,這樣的鏈表稱為循環(huán)鏈表。循環(huán)隊列是隊列的一種順序存儲結(jié)構(gòu)。循環(huán)鏈表與循環(huán)隊列是兩種存儲結(jié)構(gòu),B選項錯誤。雙向鏈表結(jié)點有兩個指針域,指向前一個結(jié)點的指針和指向后一個結(jié)點的指針,而帶鏈的棧是單鏈表形式,C選項錯誤。故正確答案為D選項。32、下面不屬于需求分析階段任務的是()。A、確定軟件系統(tǒng)的功能需求B、確定軟件系統(tǒng)的性能需求C、需求規(guī)格說明書評審D、制定軟件集成測試計劃標準答案:D知識點解析:需求分析階段的工作有:需求獲取;需求分析;編寫需求規(guī)格說明書;需求評審,所以選擇D。33、有三個關(guān)系R、S和T如下:由關(guān)系R和S通過運算得到關(guān)系T,則所使用的運算為()。A、并B、自然連接C、笛卡爾積D、交標準答案:D知識點解析:自然連接是一種特殊的等值連接,它要求兩個關(guān)系中進行比較的分量必須是相同的屬性組,并且在結(jié)果中把重復的屬性列去掉,所以B)錯誤。笛卡爾積是用R集合中元素為第一元素,S集合中元素為第二元素構(gòu)成的有序?qū)Γ訡)錯誤。根據(jù)關(guān)系T可以很明顯的看出是從關(guān)系R與關(guān)系S中取得相同的關(guān)系組所以取得是交運算,選擇D)。34、執(zhí)行下列語句段后,輸出字符"*"的個數(shù)是()。for(inti=50;i>1;i-=2)cout<<′*′;A、24B、25C、26D、50標準答案:B知識點解析:本題考查for循環(huán)語句,題目中每執(zhí)行完循環(huán)體后,i都會減2,那么只有50到2之間的偶數(shù)才能輸出"*",所以總共輸出25次。35、下列關(guān)于繼承和派生的敘述中,正確的是A、派生類中新定義的成員函數(shù)可以訪問基類的所有成員B、在私有繼承的情況下,派生類中新定義的成員函數(shù)不能訪問基類的保護成員C、基類對象可以賦值給派生類對象D、如果派生類沒有實現(xiàn)基類的一個純虛函數(shù),則該派生類是一個抽象類標準答案:D知識點解析:本題考查繼承與派生,派生類中的成員訪問基類中的成員由派生方式?jīng)Q定,如果派生類私有繼承基類,那么就不能新定義的成員函數(shù)就不能訪問基類的私有成員,所以A選項錯誤。在私有繼承的情況下,派生類中新定義的成員函數(shù)可以訪問基類的保護成員。基類對象在某種情況下可以賦值給派生類對象。36、下列關(guān)于模板的表述中,錯誤的是A、模板形參表的兩邊使用尖括號括起來B、模板以關(guān)鍵字template開始C、模板聲明中的關(guān)鍵字class都可以用關(guān)鍵字typename替代D、模板的形參表中可以有多個參數(shù)標準答案:C知識點解析:模板定義以關(guān)鍵字template開始,后接模板形參表,模板形參表是用尖括號括住的一個或多個模板形參的列表,形參之間用逗號分隔,選項A、B、D正確;至于選項C,一般關(guān)鍵字class和typename在模板形參表中,是沒有區(qū)別的,但是關(guān)于類模板,類定義的關(guān)鍵字也是class,這里class是不可用typename替代的,答案為C。37、下列關(guān)于C++函數(shù)的說明中,正確的是()。A、內(nèi)聯(lián)函數(shù)就是定義在另一個函數(shù)體內(nèi)部的函數(shù)B、函數(shù)體的最后一條語句必須是return語句C、標準C++要求在調(diào)用一個函數(shù)之前,必須先聲明其原型D、編譯器會根據(jù)函數(shù)的返回值類型和參數(shù)表來區(qū)分函數(shù)的不同重載形式標準答案:D知識點解析:一般函數(shù)進行調(diào)用時,要將程序執(zhí)行權(quán)轉(zhuǎn)到被調(diào)用函數(shù)中,然后再返回到調(diào)用它的函數(shù)中;而內(nèi)聯(lián)函數(shù)在調(diào)用時,是將調(diào)用表達式用內(nèi)聯(lián)函數(shù)體來替換,而不是在定義在另一個函數(shù)體內(nèi),所以A選項錯誤。函數(shù)可以沒有返回值,所以就不需要return了,如果被調(diào)函數(shù)在調(diào)用函數(shù)之前已經(jīng)定義,那么就不需要聲明,所以C選項錯誤,正確選項為D。二、基本操作題(本題共1題,每題1.0分,共1分。)38、請打開考生文件夾下的解決方案文件proj1,其中有點類Point和線段類Line和主函數(shù)main的定義,程序中位于每個“//ERROR****found****”之后的一行語句有錯誤,請加以改正。改正后程序的輸出應為:p1=(8,4)p2=(3,5)注意:只修改兩個“//ERROR****found****”下的那一行,不要改動程序中的其他內(nèi)容。#include<iostream>#include<cmath>usingnamespacestd;classPoint{doublex,y;public:Point(doublex=0.0,doubley=0.0)//ERROR*******found*******{x=x;y=y;}doublegetX()const{returnx;}doublegetY()const{returny;}//ERROR*******found*******voidshow()const{cout<<’(’<<x<<’,’<<y<<’)’}};classLine{Pointp1,p2;public:Line(Pointpt1,Pointpt2)//ERROR*******found*******{pt1=p1;pt2=p2;}PointgetP1()const{returnp1;}PointgetP2()const{returnp2;}};intmain(){Lineline(Point(8,4),Point(3,5));cout;<<"p1=";line.getP1().show();cout<<"p2=";line.getP2().show();cout<<endl;return0;}標準答案:(1):x(x),y(y){}或{this一>x=x,this一>y=y;}(2)voidshow()const{cout<<’(’<<x<<’,’<<y<<’)’;}(3):p1(pt1),p2(pt2){}或{p1=pt1;p2=pt2}知識點解析:(1)主要考查考生對構(gòu)造函數(shù)的掌握,因為形參名和私有成員名稱一樣,因此不能直接賦值,在這里使用成員列表初始化,也可以使用this指針賦值。(2)主要考查考生對語句基本語法的掌握,根據(jù)語句:voidshow()const{cout<<’(’<<x<<’,’<<y<<’)’}??煽闯龊瘮?shù)體內(nèi)并沒有“;”作為cout語句的結(jié)束符,因此程序錯誤。(3)主要考查考生對構(gòu)造函數(shù)的掌握,形參是pt1和pt2,這里寫反了,也可以使用成員列表初始化法,可以避免這種錯誤。三、簡單應用題(本題共1題,每題1.0分,共1分。)39、請打開考生文件夾下的解決方案文件proj2,該工程中包含一個程序文件main.cpp,其中有類Quadritic、類Root及主函數(shù)main的定義。一個Quadritic對象表示一個ax2+bx+c的一元二次多項式。一個Root對象用于表示方程ax2+bx+c=0的一組根,它的數(shù)據(jù)成員num_of_roots有3種可能的值,即0、1和2,分別表示根的3種情況:無實根、有兩個相同的實根和有兩個不同的實根。請在程序中的橫線處填寫適當?shù)拇a并刪除橫線,以實現(xiàn)上述類定義。此程序的正確輸出結(jié)果應為(注:輸出中的X~2表示x2):3X~2+4X+5=0.0無實根4.5X^2+6X+2=0.0有兩個相同的實根:一0.666667和一0.6666671.5X^2+2X一3=0.0有兩個不同的實根:0.896805和一2.23014注意:只能在橫線處填寫適當?shù)拇a,不要改動程序中的其他內(nèi)容,也不要刪除或移動“//****found****”。#1nclude<lostream>#include<iomanip>{}include<cmath>usingnamespacestd;classRoot{//一元二次方程的根public:constdoublex1;//第一個根constdoublex2;//第二個根constintnum_of_roots;//不同根的數(shù)量:0、1或2//創(chuàng)建一個“無實根”的Root對象Root():x1(0.0),x2(0.0),num_Of_roots(0){}//創(chuàng)建一個“有兩個相同的實根”的Root對象Root(doubleroot)//**********found**********:__________{}//創(chuàng)建一個“有兩個不同的實根”的Root對象Root(doubleroot1,doubleroot2):x1(root1),x2(root2),mum_of_roots(2){}voidshow()const{//顯示根的信息cout<<"\t\t";switch(num_of_roots){case0://**********found**********________case1:cout;<<"有兩個相同的實根:"<<x1<<"和"<<x2;break;default:cout<<"有兩個不同的實根:"<<x1<<"和"<<x2;break;}}};classQuadratic{//二次多項式public:constdoublea,b,c;//分別表示二次項、一次項和常數(shù)項等3個系數(shù)Quadratic(doublea,doubleb,doublec)//構(gòu)造函數(shù)//**********found*********:____________{}Quadratic(Quadratic&x)//復制構(gòu)造函數(shù):a(x.a(chǎn)),b(x.b),c(x.c){}Quadraticadd(Quadraticx)const{//求兩個多項式的和returnQuadratiC(a+x.a(chǎn),b+x.b,c+x.c);}Quadraticsub(Quadraticx)const{//求兩個多項式的差//**********found**********___________}doublevalue(doublex)const{//求二次多項式的值returna*x*x+b*x+c;}Rootroot()const{//求一元二次方程的根doubledelta=b*b一4*a*c;//計算判別式if(delta<0.0)returnRoot;();if(delta==0.0)returnRoot(一b/(2*a));doublesq=sqrt(delta);returnRoot((一b+sq)/(2*a),(一b—sq)/(2*a));}voidshow()const{//顯示多項式cout<<endl<<a<<"X^2"<<showpos<<b<<"X"<<C<<noshowpos;}voidshowFunction(){//顯示一元二次方程show();cout<<"=0.0";}};intmain(){Quadraticq1(3.0,4.0,5.0),q2(4.5,6.0,2.0),q3(q2.sub(q1));q1.showFunction();q1.root().show();q2.showFunction();q2.root:().show();q3.showFunction();q3.root().show();cout<<endl:return0;}標準答案:(1)x1(root),x2(root),nun_of_roots(1)(2)coul<<"無實根";break;(3)a(a),b(b),c(c)(4)returnQuadratic(a—x.a(chǎn),b—x.b,c—x.c);知識點解析:(1)主要考查考生對構(gòu)造函數(shù)的掌握,題目要求創(chuàng)建一個“有兩個相同的實根”的Root對象。說明兩個根x1和x2相等,根的數(shù)量為1,因此可以得出語句:x1(root),x2(root),num_of_roots(1){}。(2)主要考查考生對switch語句的掌握,在語句switch(nun_oLroots){中,Hum_of_roots代表根的數(shù)量,當為0時,表示沒有根,因此輸出無實根,注意要在句尾加break。(3)主要考查考生對構(gòu)造函數(shù)的掌握,本題使用成員初始化列表來構(gòu)造函數(shù)。(4)主要考查考生對成員函數(shù)的掌握,題目要求求兩個多項式的差。兩個多項式的差就是各個次方的系數(shù)相減,因此得出語句:retumQuadratic(a—x.a(chǎn),b—x.b,c—x.e);。四、綜合應用題(本題共1題,每題1.0分,共1分。)40、請打開考生文件夾下的解決方案文件proj3,其中聲明IntSet是一個用于表示正整數(shù)集合的類。IntSet的成員函數(shù)Intersection的功能是求當前集合與另一個集合的交集。請完成成員函數(shù)Intersection。在main函數(shù)中給出了一組測試數(shù)據(jù),此時程序的輸出應該是:求交集前:123581028911305667求交集后:12358102891130566728要求:補充編制的內(nèi)容寫在“//********333********”與“//********666********”之間,不得修改程序的其他部分。注意:程序最后將結(jié)果輸出到文件out.dat中。輸出函數(shù)writeToFile已經(jīng)編譯為obj文件,并且在本程序中調(diào)用。//Intset.h#include<iostream>usingnamespacestd;constintMax=100;classIntSet{public:IntSet()//構(gòu)造一個空集合{end=一1;}IntSet(inta[],intsize)//構(gòu)造一個包含數(shù)組a中size個元素的集合{if(size>=Max)end=Max一1;elseend=size一1;for(inti=0;i<=end;i++)element[i]=a[i];}boolIsMemberOf(inta)//判斷a是否為集合中的一個元素{for(inti=0;i<=end;i++)if(element[i]==a)returntrue;returnfalse;}intGetEnd(){returnend;}//返回最后一個元素的下標intGetElement(inti){returnelement[i];}//返回下標為i的元素IntSetIntersection(In

溫馨提示

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

評論

0/150

提交評論