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

下載本文檔

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

文檔簡介

國家二級(jí)(C++)機(jī)試模擬試卷2(共9套)(共139題)國家二級(jí)(C++)機(jī)試模擬試卷第1套一、程序改錯(cuò)題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的工程test12_1,此工程包含一個(gè)源程序文件test_12.cpp,但該程序運(yùn)行有問題,請(qǐng)改正程序中的錯(cuò)誤,使該程序的輸出結(jié)果如下:fun(Sample&p)12fun(Sample*p)342010源程序文件test12_1清單如下:#include<iostream.h>classSample{private:intx,y;staticintz;public:Sample(inta,intb){x=a;y=b;}voidfun(Sample&p);voidfun(Sample*p);staticvoidprint(Samples);};/***************found***************/intz=10;voidSample::fun(Sample&p){x=p.K;y=p.y;cout<<"fun(Sample&p)"<<""<<x<<""<<y<<endl;}voidSample::fun(Sample*p){/**************found**************/x=p.x;y=p.y;cout<<"fun(Sample*p)"<<"’<<x<<""<<y<<endl;}voidSample::print(Samples){/***************found*****************/x=20;cout<<s.x<<""<<z<<endl;}voidmain(){Samplep(1,2),q(3,4);p.fun(p);p.fun(&q);p.print(p);}標(biāo)準(zhǔn)答案:(1)錯(cuò)誤:intz=10;正確:intSample::z=10;(2)錯(cuò)誤:x=p.x;y=p.y;正確;x=p->x;y=p->y;(3)錯(cuò)誤:x=20;正確;s.x=20;知識(shí)點(diǎn)解析:(1)主要考查考生對(duì)于靜態(tài)成員初始化定義的理解,靜態(tài)成員使用關(guān)鍵字static修飾,應(yīng)對(duì)其進(jìn)行類體外初始化,格式為數(shù)據(jù)類型“類名::靜態(tài)變量名:初始值”;(2)主要考查考生對(duì)于指針與引用區(qū)別的掌握,x和y都是指針類型的變量,應(yīng)使用“->”調(diào)用類的成員;(3)主要考查考生對(duì)于靜態(tài)成員函數(shù)的掌握,在靜態(tài)成員函數(shù)中使用非靜態(tài)成員,需要用對(duì)象來引用。二、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、請(qǐng)編寫一個(gè)函數(shù)intfun(intnFirst,intnSecond),求兩個(gè)數(shù)的最小公倍數(shù)并返回這個(gè)值。注意:部分源程序已存在文件test13_2.cpp中。如輸入7和8時(shí),結(jié)果是56。請(qǐng)勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填寫若干語句。文件test13_2的內(nèi)容如下;#include<iostream.h>intfun(intnFirst,intnSecond);voidmain(){intnFirst,nSecond;cout<<"Pleaseinputthefirstone";cin>>nFirst;cout<<"Pleaseinputthesecondone";cin>>nSecond;cout<<"最小公倍數(shù):"<<fun(nFirst,nSecond)<<endl;}intfun(intnFirst,intnSecond){}標(biāo)準(zhǔn)答案:intfun(intnFirst,intnSecond){intnMax,nMin;if(nFirst>nSecond){nMin=nFirst;nMin=nSecond;}else{nMax=nSecond;nMin=nFirst;}intnMod=nMax%nMin;while(nMod){nMax=nMin;nMin=nMod;nMod=nMax%nMin;}intnMultiple=nFirst*nSecond/nMin;returnnMultiple;}知識(shí)點(diǎn)解析:本題考查的是考生利用基本的控制語句解決實(shí)際問題的能力。注意算法的設(shè)計(jì),其中%是取余操作。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的工程test11_3。此工程包含一個(gè)test11_3.cpp,其中定義了類CPosition,但該類的定義都并不完整。請(qǐng)按要求完成下列操作,將類CPosition的定義補(bǔ)充完整。(1)在類定義外完成重載的兩個(gè)構(gòu)造函數(shù)CPosition()和CPosition(doubledx,doubledy),其中前者為不帶參數(shù)的構(gòu)造函數(shù),使CPosition對(duì)象的默認(rèn)值為x=0,y=0,后者為帶參數(shù)的構(gòu)造函數(shù),把數(shù)據(jù)成員x和y分別初始化為參數(shù)dx和dy的值。請(qǐng)?jiān)谧⑨尅?/**1**”之后添加適當(dāng)?shù)恼Z句。(2)在類體中添加函數(shù)move(doubleax,doubleay)的定義,使得點(diǎn)的坐標(biāo)x和y分別移動(dòng)ax和ay個(gè)單位,請(qǐng)?jiān)谧⑨尅?/**2**”之后添加適當(dāng)?shù)恼Z句。(3)完成函數(shù)doubledistance(doublebx,doubleby)的定義,該函數(shù)返回*this和點(diǎn)(bx,by)的距離,請(qǐng)?jiān)谧⑨尅?/**3**”之后添加適當(dāng)?shù)恼Z句。注意:除在指定的位置添加語句外,請(qǐng)不要改動(dòng)程序中的其他語句。源程序文件test11_3.cpp清單如下:#include<iostream.h>#include<math.h>classCPosition{public:CPosition();CPosition(doubledx,doubledy);doublegetx();doublegety();//**2**doubledistance(doublebx,doubleby);private:doublex;doubley;};//**1**{x=0;y=0;}CPosition::CPosition(doubledx,doubledy){x=dx;y=dy;}doubleCPosition::getx(){returnx;}doubleCPosition::gety(){returny;}doubleCPosition::distance(doublebx,doubleby){//**3**}voidmain(){doublea,b;cout<<"Inputx,ypositionofapoint:";cin>>a>>b;CPositionpsA(a,b);cout<<“Inputx,ypositionofanotherpoint:";cin>>a>>b;cout<<"Thedistanceis"<<psA.distance(a,b)<<endl;}標(biāo)準(zhǔn)答案:(1)CPosition::CPosition()(2)voidmove(doubleax,doubleay){x+=ax;y+=ay;};(3)returnsqrt(pow(x-bx,2)+pow(y-by,2));知識(shí)點(diǎn)解析:本題主要考查考生對(duì)于類的定義和重載構(gòu)造函數(shù)的掌握情況。在(3)中使用了基本的數(shù)學(xué)函數(shù)sqrt(x)求x的開方,pow(x,n)函數(shù)是求x的n次方。國家二級(jí)(C++)機(jī)試模擬試卷第2套一、選擇題(本題共38題,每題1.0分,共38分。)1、下列數(shù)據(jù)結(jié)構(gòu)中,能用二分法進(jìn)行查找的是()。A、無序線性表B、線性鏈表C、二叉鏈表D、順序存儲(chǔ)的有序表標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:二分法查找只適用于順序存儲(chǔ)的有序表,表中的元素按值從小到大排列。2、下列敘述中,不屬于設(shè)計(jì)準(zhǔn)則的是()。A、提高模塊獨(dú)立性B、使模塊的作用域在該模塊的控制域中C、設(shè)計(jì)成多入口、多出口模塊D、設(shè)計(jì)功能可預(yù)測的模塊標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:大量軟件設(shè)計(jì)表明,以下的設(shè)計(jì)準(zhǔn)則是可以借鑒為設(shè)計(jì)的指導(dǎo)和對(duì)軟件結(jié)構(gòu)圖進(jìn)行優(yōu)化,這些準(zhǔn)則是:提高模塊獨(dú)立性;模塊規(guī)模適中;深度、寬度、扇出和扇入適當(dāng);使模塊的作用域在該模塊的控制域中;應(yīng)減少模塊的接口和界面的復(fù)雜性;設(shè)計(jì)成單入口、單出口的模塊;設(shè)計(jì)功能可預(yù)測的模塊。3、下列隊(duì)列的描述中,正確的是()。A、隊(duì)列屬于非線性表B、隊(duì)列在隊(duì)尾刪除數(shù)據(jù)C、隊(duì)列按“先進(jìn)后出”進(jìn)行數(shù)據(jù)操作D、隊(duì)列按“先進(jìn)先出”進(jìn)行數(shù)據(jù)操作標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:隊(duì)列是只允許在一端刪除,在另一端插入的順序表,允許刪除的一端叫做隊(duì)頭,允許插入的一端叫做隊(duì)尾。隊(duì)列的操作數(shù)是依據(jù)先進(jìn)先出的原則進(jìn)行的。因此隊(duì)列亦稱作先進(jìn)先出的線性表,或后進(jìn)后出的線性表。4、對(duì)下列二叉樹進(jìn)行前序遍歷的結(jié)果為()。A、ABCDEFGHB、ABDGEHCFC、GDBEHACFD、GDHEBFCA標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:遍歷就是不重復(fù)地訪問二叉樹的所有結(jié)點(diǎn)。二叉樹遍歷的方法有3種:前序遍歷、中序遍歷和后序遍歷。記住3種遍歷的順序:①前序,訪問根一按前序遍歷左予樹一按前序遍歷右子樹。②中序,按中序遍歷左子樹一訪問根一按中序遍歷有子樹。③后序,按后序遍歷左子樹一按后序遍歷右子樹一訪問根。所以對(duì)該二叉樹的中序遍歷結(jié)果為ABDGEHCF。5、對(duì)于長度為n的線性表,在最壞情況下,下列各排序法所對(duì)應(yīng)的比較次數(shù)中正確的是()。A、冒泡排序?yàn)閚(n-1)/2B、簡單插入排序?yàn)閚C、希爾排序?yàn)閚D、快速排序?yàn)閚/2標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:在最壞情況下,冒泡排序所需要的比較次數(shù)為n(n-1)/2:簡單插入排序所需要的比較次數(shù)為n(n-1)/2;希爾排序所需要的比較次數(shù)為0(n1.5);堆排序所需要的比較次數(shù)為0(nlog2n)。6、為了使模塊盡可能獨(dú)立,要求()。A、內(nèi)聚程度要盡量高,耦合程度要盡量強(qiáng)B、內(nèi)聚程度要盡量高,耦合程度要盡量弱C、內(nèi)聚程度要盡量低,耦合程度要盡量弱D、t勾聚程度要盡量低,耦合程度要盡量強(qiáng)標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:模塊獨(dú)立性是指每個(gè)模塊只完成系統(tǒng)要求的獨(dú)立的子功能,并且與其他模塊的聯(lián)系最少且接口簡單。耦合性與內(nèi)聚性是模塊獨(dú)立性的兩個(gè)定性標(biāo)準(zhǔn),耦合與內(nèi)聚是相互關(guān)聯(lián)的。在程序結(jié)構(gòu)中,各模塊的內(nèi)聚性越強(qiáng),則耦合性越弱。一般較優(yōu)秀的軟件設(shè)計(jì),應(yīng)盡量做到高內(nèi)聚,低耦合,即減弱模塊之間的耦合性和提高模塊內(nèi)的內(nèi)聚性,有利于提高模塊的獨(dú)立性。7、數(shù)據(jù)獨(dú)立性是數(shù)據(jù)庫技術(shù)的重要特點(diǎn)之一。所謂數(shù)據(jù)獨(dú)立性是指()。A、數(shù)據(jù)與程序獨(dú)立存放B、不同的數(shù)據(jù)被存放在不同的文件中C、不同的數(shù)據(jù)只能被對(duì)應(yīng)的應(yīng)用程序所使用D、以上二三種說法都不對(duì)標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:數(shù)據(jù)獨(dú)立性是數(shù)據(jù)與程序問的互不依賴性,即數(shù)據(jù)庫中數(shù)據(jù)獨(dú)立于應(yīng)用程序而不依賴于應(yīng)用程序。所以選項(xiàng)A),選項(xiàng)B)和選項(xiàng)C)都不正確。8、在學(xué)校中,“班級(jí)”與“學(xué)生”兩個(gè)實(shí)體集之間的聯(lián)系屬于()關(guān)系。A、一對(duì)一B、一對(duì)多C、多對(duì)一D、多對(duì)多標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:一個(gè)班可以有多名學(xué)生,而一名學(xué)生只能屬于一個(gè)班級(jí),所以“班級(jí)”與“學(xué)生”兩個(gè)實(shí)體集之間的聯(lián)系屬于一對(duì)多關(guān)系。9、在公有派生時(shí),派生類中定義的成員函數(shù)只能訪問原基類的()。A、私有成員、保護(hù)成員和公有成員B、保護(hù)成員和私有成員C、公有成員和保護(hù)成員D、公有成員和私有成員標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:派生類中的成員,一部分是從基類繼承來的,另一部分是自己定義的新成員,所有的這些成員也分為公有、私有和保護(hù)三種訪問權(quán)限。其中,從基類繼承下來的全部成員構(gòu)成派生類的基類,這部分的私有成員是派生類不能直接訪問的,而公有成員和保護(hù)成員則是派生類可以直接訪問的,但它們?cè)谂缮愔械脑L問屬性隨著派生類對(duì)基類的繼承方式而改變。10、有如下定義:intb[10]={l,2,3,4,5,6,7,8,9,10},*q=b;則數(shù)值為8的表達(dá)式是()。A、*q+8B、*(q+7)C、*q+=8D、q+7標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:數(shù)組的下標(biāo)是從O到數(shù)組的長度減1。*(p+i)是取數(shù)組的第i+1個(gè)元素,即下標(biāo)為i的元素。因此*(p+7)取數(shù)組的第八個(gè)元素,即元素8。11、下面的符號(hào)中可以用作C++標(biāo)識(shí)符的是()。A、3testB、fcc-otherC、elseD、radius標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:C++標(biāo)識(shí)符是以字母、下劃線開頭的,由字母、數(shù)字及下劃線組成的,不與關(guān)鍵字相同的字符串。選項(xiàng)C)中else為關(guān)鍵字。12、下列程序執(zhí)行后,輸出的結(jié)果是()。intX=-5,Y=0;while(++x)y++;cout<A、1B、2C、4D、5標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:循環(huán)條件是++x,在c++中,對(duì)于非0值全都為真,0代表假。x的初始值為一5,所以循環(huán)能進(jìn)行4次。13、有如下類聲明:classTestClass{intn;public:TestClass(inti=0):n(i){)voidsetValue(intn0);};下面關(guān)于setValue成員函數(shù)的實(shí)現(xiàn)中,正確的是()。A、TestClass::setValue(intn0){n=n0;}B、voidTestClass::setValue(intn0){n=n0;)C、voidsetValue(intn0){n=n0;}D、setValue(intn0){n=n0;)標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:C++中類成員函數(shù)的實(shí)現(xiàn)形式為:返回類型類名::成員函數(shù)名(參數(shù)列表){代碼塊}14、下面關(guān)于常成員函數(shù)的說法中正確的是()。A、常成員函數(shù)不能修改任何的數(shù)據(jù)成員B、常成員函數(shù)只能修改一般的數(shù)據(jù)成員C、常成員函數(shù)只能修改常數(shù)據(jù)成員D、常成員函數(shù)只能通過常對(duì)象來調(diào)用標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:C++中使用const關(guān)鍵字來說明函數(shù)稱為常成員函數(shù),常成員函數(shù)不能更新對(duì)象中的數(shù)據(jù)成員。15、下面的函數(shù)調(diào)用為:fun(x+y,3,min(n.1,y))則fun的實(shí)參個(gè)數(shù)是()。A、3B、4C、5D、6標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:在C++中,<形參列表>是由逗號(hào)分開的,分別說明函數(shù)的各個(gè)參數(shù)。在fun()函數(shù)中它包括三個(gè)形參:x+y,3和min(n.1,y):當(dāng)調(diào)用一個(gè)函數(shù)時(shí),實(shí)參與形參一對(duì)一一匹配,所以實(shí)參個(gè)數(shù)也是3個(gè)。16、下面關(guān)于虛函數(shù)的描述中,正確的是()。A、基類中利用virtual關(guān)鍵字說明一個(gè)虛函數(shù)后,其派生類中定義相同的原型函數(shù)時(shí)可不必加virtual來說明B、虛函數(shù)是非成員函數(shù)C、虛函數(shù)是static類型的成員函數(shù)D、派生類中的虛函數(shù)與基類中類型相同的虛函數(shù)具有不同的參數(shù)個(gè)數(shù)或類型標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:虛函數(shù)是非static類型的成員函數(shù),基類中可以利用virtual關(guān)鍵字來聲明虛函數(shù),派生類中定義相同原型函數(shù)時(shí)可不必加virtual說明,直接重寫基類中的函數(shù)。在派生類中的虛函數(shù)必須與基類中的虛函數(shù)具有相同的參數(shù)個(gè)數(shù)與類型。17、有如下程序:#includeusingnamespacestd;classBase{protected:Base(){cout<<‘Base’;}Base(charc){cout<A、DerivedB、DerivedBaseC、BaseDerivedD、DerivedDerived標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:派生類Derived由基類Base公有派生,在派生類構(gòu)造函數(shù)聲明時(shí)系統(tǒng)會(huì)自動(dòng)調(diào)用基類的缺省構(gòu)造函數(shù)。調(diào)用Derivedd(Derived);后,執(zhí)行類Derived構(gòu)造函數(shù)的Derived(charc),系統(tǒng)自動(dòng)調(diào)用基類的缺省構(gòu)造函數(shù)Base(),輸出字母Base;再執(zhí)行派生類的構(gòu)造函數(shù)Derived(charc),輸出字母Derived。18、有如下程序:#includeusingnamespacestd;intmain(){cout.fill(’*’);cout.width(6);Cout。fill(’#’);cout<<888<A、###888B、888###C、***888D、888***標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:C++在流操作中,利用cout對(duì)象的width屬性設(shè)置輸出字符的寬度,用fill函數(shù)來設(shè)置需要填充的字符。題目程序中,首先設(shè)置填充字符為*,輸出寬度為6,但在輸出前又設(shè)置了填充字符為撐,所以在輸出時(shí),其填充字符為#,由于888不足6個(gè)字符,所以在前面以三個(gè)“#”來填充。19、假定一個(gè)類的構(gòu)造函數(shù)為A(intaa,intbb){a=aa--;b=a*1)b;},則執(zhí)行Ax(4,5);語句后,x.a(chǎn)和x.b的值分別為()。A、3和15B、5和4C、4和20D、20和5標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:因?yàn)閍a后減,所以a=4;b的值與a、bb相關(guān),b=4*5=20,與aa沒有任何關(guān)系。20、在類中說明的成員可以使用關(guān)鍵字的是()。A、publicB、extemC、cpuD、register標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:extern用于聲明外部變量的,register聲明寄存器類型變量,無cpu類型。它們都不能聲明類成員。public聲明為公有訪問權(quán)限。21、下列不能作為類的成員的是()。A、自身類對(duì)象的指針B、自身類對(duì)象C、自身類對(duì)象的引用D、另一個(gè)類的對(duì)象標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:類的定義,如果有自身類對(duì)象,會(huì)使其循環(huán)定義,選項(xiàng)B)錯(cuò)誤。在類中具有自身類的指針,可以實(shí)現(xiàn)鏈表的操作,當(dāng)然也可以使用對(duì)象的引用,類中可以有另一個(gè)類的對(duì)象,即成員對(duì)象。22、使用地址作為實(shí)參傳給形參,下列說法正確的是()。A、實(shí)參是形參的備份B、實(shí)參與形參無聯(lián)系C、形參是實(shí)參的備份D、參與形參是同一對(duì)象標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:地址作為實(shí)參,表示實(shí)參與形參代表同一個(gè)對(duì)象。如果實(shí)參是數(shù)值,形參也是普通變量,此時(shí)形參是實(shí)參的備份。23、下列程序的輸出結(jié)果是()。#includevoidmain(){intn[][3]={10,20,30,40,50,60};int(*p)[3];p=n;cout<A、10,30,50B、10,20,30C、20,40,60D、10,30,60標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:如果數(shù)組元素都是相同類型的指針,則稱這個(gè)數(shù)組為指針數(shù)組。指針數(shù)組一般用于處理二維數(shù)組。聲明的格式為:<數(shù)據(jù)類型×(*變量名)×[元素個(gè)數(shù)]>。p表示指向數(shù)組n的行指針,初始化“(*p)[3]=n;”,地址的等價(jià)形式:p+i、p[i]、*p+i)都表示數(shù)組第i+1行的第1個(gè)元素的首地址。*(p+i)+j、p[i]+j、&p[i]D]都表示數(shù)組第i+1行、第.;+1列元素的地址。他的等價(jià)形式:+(+(p+i)+j)、*(p[i]+j)、p[i]D]都表示數(shù)組第i+1、第j+1列元素的值。所以本題中分別訪問數(shù)組元素p[0][0],p[0][1],p[0][2]。24、設(shè)程序如下:#includeusingnamespacestd;intmain(){int**p,*q,r=10;q=&r;p=&q;COUt<<**p+1<A、P的地址B、r的地址C、11D、運(yùn)行錯(cuò)誤標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:p為一個(gè)二級(jí)指針,其存放的是指針變量q的地址,而q存放的又是r的地址。故式子**p相當(dāng)于對(duì)r的引用。所以最后輸出的結(jié)果為11。25、下面關(guān)于函數(shù)模板的表述中不正確的是()。A、類模板的成員函數(shù)都是模板函數(shù)B、類模板本身在編譯過程中不會(huì)產(chǎn)牛任何代碼C、類模板只能有虛擬類型的參數(shù)D、用類模板定義一個(gè)對(duì)象時(shí),實(shí)參不能省略標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:類模板本身在編譯時(shí)是不會(huì)產(chǎn)生代碼的,只有在其實(shí)例化以后才產(chǎn)生代碼。定義一個(gè)對(duì)象時(shí),不能省略其實(shí)參。26、下面類的聲明中的幾個(gè)語句,正確的是(設(shè)定語句是主函數(shù)中的語句)()。classTestClass{private:intdata;public:TestClass(intgdata)}}data=gdata;}voidshow(){cout<A、TestClass*p:B、TestClassm;C、TestClass.data=8:D、TestClass.show();標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:C++中,若沒有類的顯式聲明構(gòu)造函數(shù)則系統(tǒng)會(huì)為其提供一個(gè)默認(rèn)的構(gòu)造函數(shù),若提供了構(gòu)造函數(shù)則會(huì)將系統(tǒng)提供的默認(rèn)的構(gòu)造函數(shù)覆蓋。調(diào)用構(gòu)造函數(shù)時(shí),實(shí)參必須與形參匹配。但是如果聲明一個(gè)對(duì)象指針時(shí),不是定義一個(gè)對(duì)象,不調(diào)用對(duì)象的構(gòu)造函數(shù)。27、類中的一個(gè)字符指針成員指向具有m個(gè)字節(jié)的存儲(chǔ)空間時(shí),它所能存儲(chǔ)的字符串的最大長度為()。A、m-2B、m一1C、mD、m+1標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:在c++中,字符串以*\0作為字符串結(jié)束的標(biāo)志,所以個(gè)數(shù)為m-1。28、有如下程序:#includeusingnamespacestd;classTestClass{staticinti:public:TestClass(){i++:{~TestClaSS0{i--;}staticintgetVal(){retumj;}}intTestClass::i=0:voidfO{TestClassobj2;cout<getVal();deleteobj3;cout<A、232B、221C、222D、231標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:由于i是類TestClass的靜態(tài)成員,該成員被類的所有實(shí)例共享。當(dāng)定義obj1時(shí),系統(tǒng)自動(dòng)調(diào)用構(gòu)造函數(shù)TestClass(),i的值將加1:調(diào)用函數(shù)f()時(shí),在定義obj2時(shí)系統(tǒng)會(huì)自動(dòng)調(diào)用構(gòu)造函數(shù)TestClass(),i的值將再加l;調(diào)用obj2.getVal();后,將i的值輸出,輸出值為2;當(dāng)調(diào)用函數(shù)f()即將結(jié)束時(shí),系統(tǒng)自動(dòng)調(diào)用析構(gòu)函數(shù)~TestClass(),i的值將減1;當(dāng)定義obj3時(shí),系統(tǒng)自動(dòng)調(diào)用構(gòu)造函數(shù)TestClass(),i的值將加1,調(diào)用cout<getVal():后,將i的值輸出,輸出值為2;調(diào)用deleteobi3后將執(zhí)行TestClass的析構(gòu)函數(shù)~TestClass(),執(zhí)行后,i的值將減1,TestClass::getVal()為類的一個(gè)靜態(tài)成員函數(shù),其作用是返回私有靜態(tài)成員變量i的值1。29、下面關(guān)于派牛類的描述中錯(cuò)誤的是()。A、派生類中至少有一個(gè)基類B、一個(gè)派生類可以作為另一個(gè)派生類的基類C、派牛類只繼承了基類中的公有成員和保護(hù)成員D、派生類的缺省繼承方式是私有標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:繼承方式有公有繼承、私有繼承和保護(hù)繼承3種,缺省的繼承方式是私有繼承。派生類從基類繼承所有的成員,但是對(duì)于基類的私有成員派生類是不可直接訪問的。30、有盤如下程序:#includeusingnamespacestd:classTestClass{intn:public:TestClass(intk):n(k){)intget0{returnn;}intgetoconst{returnn+l;)};intmain(){TestClassp(5);constTestClassq(6);cout<A、55B、57C、75D、77標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:C++中對(duì)常對(duì)象的成員函數(shù)調(diào)用,將自動(dòng)調(diào)用其常成員函數(shù),程序中調(diào)用原型為"intget()const;”的函數(shù),對(duì)于非常對(duì)象將調(diào)用原型為“intget();”的函數(shù)。因?yàn)槭紫扔?對(duì)對(duì)象p進(jìn)行了初始化,所以執(zhí)行p.get()時(shí)直接返回5,而對(duì)于常對(duì)象則以6對(duì)q進(jìn)行初始化,在調(diào)用q.get()時(shí),將調(diào)用原型為“intget()const;”的函數(shù),該函數(shù)將返回n+1,第二個(gè)輸出應(yīng)為7,所以本題答案為57。31、下列關(guān)于抽象類的表述中正確的是()。A、派生類必須要實(shí)現(xiàn)作為基類的抽象類中的純虛函數(shù)B、抽象類的成員函數(shù)至少有一個(gè)沒實(shí)現(xiàn)C、抽象類不可能用來定義對(duì)象D、派生類不能成為抽象類標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:C++中擁有純虛函數(shù)的類稱為抽象類。抽象類不能用來定義對(duì)象。如果一個(gè)抽象類的派生類沒有重定義來自基類的某個(gè)純虛函數(shù),則該函數(shù)在派生類中仍是純虛函數(shù),該類仍為抽象類。32、執(zhí)行下列語句:#includeusingrlamespacestd;intmain(){intx=3;if(x=5)cout<A、3B、4C、5D、6標(biāo)準(zhǔn)答案:C知識(shí)點(diǎn)解析:if(條件)語句1else語句2,語句的執(zhí)行過程是:首先判斷條件是否為真(不為0),為真則執(zhí)行語句1,否則執(zhí)行語句2。題目中的條件是x=5,意思是把5賦予變量x,它將x置5且返回一個(gè)真值。33、假定TestClass為一個(gè)類,則該類的拷貝構(gòu)造函數(shù)的聲明語句為()。A、TestClass(TestClassx)B、TestClass&(TestClassX)C、TestClass(TestClass*x)D、TestClass(TestClass&x)標(biāo)準(zhǔn)答案:D知識(shí)點(diǎn)解析:C++中的拷貝構(gòu)造函數(shù)是用一個(gè)已知的對(duì)象初始化一個(gè)正在創(chuàng)建的同類對(duì)象??截悩?gòu)造函數(shù)的一般格式如下:(類名)::(類名)(const(類名)&<引用對(duì)象名));其中const可以省略。34、下面關(guān)于指針的說法中錯(cuò)誤的是()。A、在指針定義的同時(shí)可以對(duì)其進(jìn)行初始化B、指針根據(jù)其所指向變量的類型的不同,所占用內(nèi)存大小也不同C、指針中存放的是內(nèi)存單元的地址D、相同類型的指針之間可以相互賦值標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:指針是一種用來存放其他變量地址的數(shù)據(jù)類型,它的聲明形式為:(類型)*(變量名),可以在聲明的時(shí)候?qū)ζ溥M(jìn)行初始化。由于其存放的是內(nèi)存單元的地址,所以大小一般都是4個(gè)字節(jié)。35、下面不屬于C++的預(yù)定義的流對(duì)象是()。A、cinB、iostreamC、clogD、cerr標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:C++中的四個(gè)預(yù)定義流對(duì)象:cout,cin,CelT,clog。36、下列程序執(zhí)行后,屏幕的輸出是()。#includeusingnamespacestd;voidswap(intx,inty){inttemp=x:x=y;Y=temp;cout<<“x=”<A、x=3.y=2B、x=2,Y=3x=3.y=2x=3,Y=2C、x=2.y=3D、x=3,Y=2標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:C++中默認(rèn)的參數(shù)傳遞是值傳遞,也就是將實(shí)參的副本傳遞給被調(diào)用函數(shù)的形參,被調(diào)用的函數(shù)中對(duì)形參的任何改動(dòng)都不會(huì)影響實(shí)參。37、在每個(gè)C++程序中必須有且僅有一個(gè)()。A、函數(shù)B、主函數(shù)C、預(yù)處理指令D、語句標(biāo)準(zhǔn)答案:B知識(shí)點(diǎn)解析:在每一個(gè)C++程序中必須有且只有一個(gè)主函數(shù),每個(gè)程序的執(zhí)行都是從主函數(shù)的開始。38、有如下程序:#includeusingnamespacestd;classA{public:A(){cout<<“A”;}};classB{public:B(){cout<<“B”;));classC:publicA{Bb:public:C(){cout<<“C”;});intmain(){Cobj;return0;}執(zhí)行后的輸出結(jié)果是()。A、ABCB、BACC、ACBD、CBA標(biāo)準(zhǔn)答案:A知識(shí)點(diǎn)解析:C++程序中的執(zhí)行子類,首先執(zhí)行基類的構(gòu)造函數(shù),然后執(zhí)行數(shù)據(jù)成員類的構(gòu)造函數(shù),最后執(zhí)行子類本身的構(gòu)造函數(shù),所以輸出結(jié)果為ABC。二、基本操作題(本題共1題,每題1.0分,共1分。)39、使用VC6打開考生文件夾下的源程序文件modil.cpp,該程序運(yùn)行時(shí)有錯(cuò)誤,請(qǐng)改正程序中的錯(cuò)誤,使得程序輸出:1,2,3,4,5,注意:不要改動(dòng)main函數(shù),不能增行或刪行,也不能更改程序的結(jié)構(gòu),錯(cuò)誤的語句在//******error******的下面。#includeclassTestClass{//******error******TestClass(inti){m=j=i;}voidprint(){cout<<++mi<<’.’;}public:intm—i;};intmain(){//******error******inti();TestCiassdata(O);whiJe(i>5){//******error******i++:data.print();}cout<標(biāo)準(zhǔn)答案:(1)public:TestClass(inti)(2)inti(10);(3)i一:知識(shí)點(diǎn)解析:程序要求輸出1,2,3,4,5,。主函數(shù)main()中有while循環(huán),調(diào)用類TestClass中的成員函數(shù)print()實(shí)現(xiàn)函數(shù)功能。[解題思路](1)打開moidl.cpp調(diào)試程J芋,顯示錯(cuò)誤提示為第一標(biāo)識(shí)下modil.cpp(20):errorC2248:TestClass::TestClass:cannotaccessprivatememberdeclaredinclassTestClass”,提示類TestClass中的構(gòu)造函數(shù)TestClass被定義為私有的,無法獲得,所以這里應(yīng)該是public,即“public:TestClass(inti)。(2)題目中要求輸出結(jié)果為1,2,3,4,5,即循環(huán)5次。第三個(gè)表示while循環(huán)條件是i大于5就進(jìn)行循環(huán)?!癷nti();”應(yīng)該實(shí)現(xiàn)變量i的初始化,題干中要求不能刪除i初始化中的括號(hào),所以在括號(hào)中添加i的初始值。大于5且循環(huán)5次,所以i的初始值為10,而while循環(huán)中對(duì)i的操作應(yīng)該是i一,這樣第二個(gè)和第三個(gè)標(biāo)示下應(yīng)該是“inti(10):”和“i一:”。三、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)40、使崩VC6打開考生文件夾下的源程序文件modi2.cpp。請(qǐng)完成函數(shù)fun(char*data),此函數(shù)的功能是,找出字符串?dāng)?shù)組中最小的ASCII值,如果有相同變量,則輸出最后。個(gè)所在的位置;如果字符串為空,則返回一1;或者不仔在時(shí)也返回一1。注意:請(qǐng)勿改動(dòng)豐函數(shù)main與其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語句。計(jì)算數(shù)字如果第一個(gè)字母最小,則返回0。依次增加。#includeintfun(char*data){}voidmain(){charsir[1024];cout<<“請(qǐng)輸入一行英文字符串:\n”:cin.getline(str,1024);cout<<“最小的字母出現(xiàn)在距離頭部”<標(biāo)準(zhǔn)答案:intMinPos=0;//初始化最小值位置iffdat=NULL)//判斷輸入字符串是否為空return-1:char‘MinData=data[0];//設(shè)置字符串第一個(gè)字符為最小值if[MinDala=0)//判斷第一個(gè)字符是否存在return—1;for(inti=1;data[i]!=0;i++){if(data[i]<=MinData){MinData=data[i];//逐個(gè)判斷每個(gè)字母是否小于標(biāo)記字符MinPos=i;∥最小值位置}}returnMinPos;知識(shí)點(diǎn)解析:(1)該程序功能是找出字符串?dāng)?shù)組中最小的ASCII值。它的解題思路,用最小值變量標(biāo)記第一個(gè)待找字符,把所有待找字符和標(biāo)記字符逐個(gè)進(jìn)行比較,并標(biāo)記其當(dāng)前最小值及其所在位置,從而找出最小值。(2)從已給部分源程序的main主函數(shù)開始入手,核心函數(shù)intfun(char*data)中的data參數(shù)為輸入的字符串?dāng)?shù)組,其中MinPos為最小值位置。[解題思路](1)MinPos變量首先指向字符串data的第一個(gè)字符,同時(shí)將標(biāo)志位:MinPos初始值賦為0。(2)然后利用for循環(huán)對(duì)每一個(gè)當(dāng)前字符與MinPos標(biāo)記的字符進(jìn)行比較。(3)循環(huán)中將求得的最小數(shù)據(jù)data[i]賦值給MinData,并將該數(shù)據(jù)項(xiàng)數(shù)組標(biāo)志位賦給標(biāo)志位MinPos。四、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)41、用VC6打開考生文件夾下的源程序文件modi3.cpp,其中定義了多個(gè)類,但類不能達(dá)到輸出要求,按照定義的輸出修改函數(shù),使得輸出如下:TestClass3TestClass2TestClass1其中定義的類并不完整,按照要求完成下列操作,將類的定義補(bǔ)充完整。(1)類TestClass2公共繼承于TestClass1,請(qǐng)?jiān)谧⑨專?*******1********后添加適當(dāng)?shù)恼Z句。(2)print函數(shù)為虛函數(shù),請(qǐng)?jiān)谧⑨專?*******2********后添加適當(dāng)?shù)恼Z句。(3)修改語句,使得P指定對(duì)象obj3,請(qǐng)?jiān)谧⑨專?*******3********后添加適當(dāng)?shù)恼Z句。(4)修改語句,利用P調(diào)用print()函數(shù),完成輸出信息,注釋//********4********后添加適當(dāng)?shù)恼Z句。注意:僅在函數(shù)指定位置添加語句,請(qǐng)勿改動(dòng)主函數(shù)main與其他函數(shù)中的任何內(nèi)容。#ineludeusingnarnespaeestd;classTestClass1{public:voidprint(){cout<<”TestClass1”<標(biāo)準(zhǔn)答案:(1)將“classTescClaLss2”補(bǔ)充完整為:classTestClass2:publicTestClass1(2)將“voidprintl()”補(bǔ)充完整為:virtualvoidprint()(3)將“p=ob’i3;”修改為:p=&obj3;(4)將“p.print();”修改為:p一>prim();知識(shí)點(diǎn)解析:本題的功能是通過print虛函數(shù)將字符串輸出。在VC環(huán)境下打開程序,根據(jù)題干給出的幾條功能要求,對(duì)程序中給出注釋下的內(nèi)容逐個(gè)補(bǔ)全或修改。從已定源程序的main主函數(shù)開始入手,可以看出程序通過調(diào)用類和成員函數(shù)實(shí)現(xiàn)各種輸出操作。[解題思路](1)題日l要求“類restClass2公共繼承于TestClassl”。從已有的類產(chǎn)生一個(gè)新的子類,成為類的派生。聲明派生類的一般形式為:class派生類名:[繼承方式]基類名。根據(jù)題目中的要求以及派生類的一般形式,第1個(gè)標(biāo)識(shí)下添加語句“classTestClass2:publicTestClassl”。(2)題目2要求“print函數(shù)為虛函數(shù)”。在C++中,用virtual聲明的函數(shù)為虛函數(shù),因此第2個(gè)標(biāo)識(shí)下的語句修改為“vimtralvoidprinl()”。(3)題目3要求“使得p指定對(duì)象obj3”。p為指針變量,obj3為類的對(duì)象,將一個(gè)指針變量指向另一個(gè)變量,只要把被指向的變量的地址賦給指針變量即可。取對(duì)象obj3地址的語句為&obj3,所以這里補(bǔ)全“p=&obj3;”。(4)題目4要求“利用p調(diào)用prim()函數(shù)”。C++中用”->嘖運(yùn)算符實(shí)現(xiàn)成員訪問,因此調(diào)用print()函數(shù),應(yīng)將第4個(gè)標(biāo)識(shí)下修改為“p->print();”。國家二級(jí)(C++)機(jī)試模擬試卷第3套一、程序改錯(cuò)題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的工程test28_1,此工程包含一個(gè)源程序文件test28_1.cpp,但該程序運(yùn)行有問題,請(qǐng)改正程序中的錯(cuò)誤,使該程序的輸出結(jié)果為:55源程序文件test28_1.cpp清單如下:#include<iostream.h>classA{public:/*****************found*****************staticintn=1;A(){n++;};~A()(n--;};};/*****************found*****************intn=0;intmain(){Aa;Ab[3];A*c=newA;c=&a;/*****************found*****************cout<<c.n<<end1;cout<<A::n<<end1;return0;}標(biāo)準(zhǔn)答案:(1)錯(cuò)誤:staticintn=1;正確:staticintn;(2)錯(cuò)誤:intn=0;正確:intA::n=0;(3)錯(cuò)誤:cout<<c.n<<end1;正確:cout<<c->n<<end1;知識(shí)點(diǎn)解析:(1)在類的聲明中只能對(duì)靜態(tài)數(shù)據(jù)成員進(jìn)行引用性聲明,不能進(jìn)行靜態(tài)數(shù)據(jù)成員的初始化:(2)由于靜態(tài)數(shù)據(jù)成員是類的成員,所以在初始化時(shí)必須限定它所屬的類:(3)c為類的對(duì)象指針,訪問類成員函數(shù)時(shí)使用符號(hào)“->”,而不能用“.”。二、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、請(qǐng)編寫一個(gè)函數(shù)sortnum(intnum),參數(shù)num是一個(gè)三位的整數(shù),該函數(shù)將num的百位、十位和個(gè)位的數(shù)字進(jìn)行重排,并返回由上述的三個(gè)數(shù)字組成的最大的三位數(shù)。注意:部分源程序已存在文件test28_2.cpp中。如輸入456后,輸出結(jié)果如下:654請(qǐng)勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)sortnum的花括號(hào)中填寫若干語句。文件test28_2.cpp的內(nèi)容如下:#include<iostream.h>intsortnum(intnum){}voidmain(){intnum;intresult=0;cout<<“請(qǐng)輸入一個(gè)三位數(shù)”;cin>>num;cout<<sortnum(num)<<end1;}標(biāo)準(zhǔn)答案:intsortnum(intnum){intnumber[3],i,j,temp;for(i=0;i<3;i++){number[i]=num%10;num=num/10;}for(i=0;i<2;i++){for(j=i+1;j<3;j++)if(number[j]<=number[i]){temp=number[j];number[j]=number[i];number[i]=temp;}}num=number[2]*100+number[1]*10+number[0];returnnum;}知識(shí)點(diǎn)解析:本題除考查考生對(duì)基本控制結(jié)構(gòu)和數(shù)組訪問的熟練程度外,還考查了考生根據(jù)實(shí)際需要,建立模型,對(duì)數(shù)字進(jìn)行排序的能力,答案中所示時(shí)是冒泡排序法。請(qǐng)注意程序中數(shù)組下標(biāo)的范圍和兩層for循環(huán)嵌套中循環(huán)變量的取值情況。國家二級(jí)(C++)機(jī)試模擬試卷第4套一、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的工程test25_3,此工程包含一個(gè)源程序文件test25_3.cpp,其中定義了用于表示堆的類Set,但它的定義并不完整。請(qǐng)按要求完成下列操作,將程序補(bǔ)充完整。(1)完成成員函數(shù)intIsMemberOf(intn)的定義,該函數(shù)檢查參數(shù)n是否在類的數(shù)據(jù)成員數(shù)組elems中,如果在返回1,反之返回0。請(qǐng)?jiān)谧⑨尅?/**1**”之后添加適當(dāng)?shù)恼Z句。(2)完成成員函數(shù)intAdd(intn)的定義,如果參數(shù)n包含在類的數(shù)據(jù)成員數(shù)組elems中則返回1如果數(shù)組超界則返回0,如果都不是,則將參數(shù)n插入到elems中,下標(biāo)大小為類的數(shù)據(jù)成員PC,之后PC自加一。請(qǐng)?jiān)谧⑨尅?/**2**”之后添加適當(dāng)?shù)恼Z句。(3)完成拷貝初始化構(gòu)造函數(shù)Set(Set&s)的定義,請(qǐng)?jiān)谧⑨尅?/**3**”之后添加適當(dāng)?shù)恼Z句。輸出結(jié)果如下:1{}{1,2,3,4,5,6,7,8}注意:除在指定位置添加語句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。源程序文件test25_3.cpp清單如下:#include<iostream.h>classSetpublic:Set(){PC=O;}Set(Set&s);voidEmpty(){PC=O;}intIsEmpty(){returnPC==O;}intIsMemberOf(intn);intAdd(intn);voidPrint();private:intelems[100];intPC;};intSet::IsMemberOf(intn){//**1**if(elems[i]==n)return1;returnO;}intSet::Add(intn){//**2**return1;elseif(PC>=100)returnO;else{elems[PC++]=n;return1;}}Set::Set(Set&s){//**3**for(inti=O;i<PC;i++)elems[i]=s.elems[i];}voidSet::Print(){cout<<"{";for(inti=O;i<PC-1;i++)cout<<elems[i]<<",";if(PC>O)cout<<elems[PC-1];cout<<"}"<<endl;}voidmain(){SetA;cout<<A.IsEmpty()<<endl;A.Print();SetB;for(inti=l;i<=8;i++)B.Add(i);B.Print();}標(biāo)準(zhǔn)答案:(1)for(inti=O;i<PC;i++)(2)if(IsMemberOf(n))(3)PC=s.PC;知識(shí)點(diǎn)解析:本題主要考查考生對(duì)于類的成員函數(shù)的定義和拷貝初始化函數(shù)的理解。國家二級(jí)(C++)機(jī)試模擬試卷第5套一、程序改錯(cuò)題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的工程test19_1,此工程包含一個(gè)源程序文件test19_1.cpp,但該程序運(yùn)行有問題,請(qǐng)改正程序中的錯(cuò)誤,使程序的輸出結(jié)果如下:1:weight:5age:02:weight:7age:9源程序文件test19_1.cpp清單如下:#include<iostream.h>classanimal{public:/****************found*******************/friendvoidsetvalue(animal&,int);/****************found*******************/voidprint()protected:intitsweight;intitsage;};voidanimal::print(){cout<<"weight:"<<itsweight<<end1;cout<<"age:"<<itsage<<end1;}voidsetvalue(animal&ta,inttw){ta.itsweight=tw;ta.ihsage=0;}voidsetvalue(animal&ta,inttw,inttn){ta.itsweight=tw;ta.itsage=tn;}voidmain(){/****************found*******************/animalpeppysetvalue(peppy,5);cout<<"1:"<<end1;peppy.print();setvalue(peppy,7,9);cout<<"2:"<<end1;peppy.print();}標(biāo)準(zhǔn)答案:(1)錯(cuò)誤:缺少友元函數(shù)的聲明正確:添加友元函數(shù)的聲明friendvoidsetvalue(animal&,int,int);(2)錯(cuò)誤:viodprint();正確:voidprint();(3)錯(cuò)誤:animalpeppy正確:animalpeppy;知識(shí)點(diǎn)解析:(1)主要考查考生對(duì)于成員函數(shù)定義規(guī)則的掌握,成員函數(shù)必須先聲明再使用,即使是友元函數(shù)也不例外;(2)主要考查考生對(duì)于關(guān)鍵字的掌握,空類型的關(guān)鍵字應(yīng)用"void";(3)主要考查考生對(duì)于變量定義的掌握,該處缺少“;”。二、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、請(qǐng)編寫一個(gè)函數(shù)intpattern_index(charsubstr[],charstr[]),該函數(shù)執(zhí)行含通配符“?”的字符串的查找時(shí),該通配符可以與任一個(gè)字符匹配成功。當(dāng)子串substr在str中匹配查找成功時(shí),返回子串substr在str中的位置,否則返回值為0。要求使用for循環(huán)實(shí)現(xiàn)。輸出結(jié)果如下:子串起始位置:5注意:部分源程序已存在文件test20_2.cpp中。請(qǐng)勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)pattern_index的花括號(hào)中填寫若干語句。文件test20_2.cpp的內(nèi)容如下:#include<iostream.h>intpattern_index(charsubstr[],charstr[]){}voidmain(){char*substring,*string;intsame;substring="???gram";string="thisprogramreturnindexofsubstring";same=pattern_index(substring,string);if(same)cout<<"子串起始位置:"<<same<<end1;elsecout<<"匹配不成功"<<end1;}標(biāo)準(zhǔn)答案:intpattern_index(charsubstr[],charstr[]){inti,j,k;for(i=0;str[i];i++)for(j=i,k=0;(str[j]==substr[k])||(substr[k]==’?’);j++,k++)if(!substr[k+1])return(i);return(0);}知識(shí)點(diǎn)解析:本題主要考查的是考生使用for循環(huán)和一維數(shù)組的綜合能力。對(duì)于復(fù)雜查找,往往使用for的多重循環(huán),注意里層for循環(huán)用來查找字符串的使用三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的工程test18_3,此工程包含一個(gè)源程序文件test18_3.cpp,其中定義了用于表示雇員的類Employee,但類Employee的定義并不完整。請(qǐng)按要求完成下列操作,將類Employee的定義補(bǔ)充完整。(1)補(bǔ)充類Employee的構(gòu)造函數(shù),請(qǐng)使用字符串函數(shù)將數(shù)據(jù)成員name,address,city,province和zipcode分別初始化為參數(shù)*nm,*addr,*city,*prov和*zip的值。請(qǐng)?jiān)谧⑨尅?/**1**”之后添加適當(dāng)?shù)恼Z句;(2)完成類Employee的成員函數(shù)ChangeName(char*newName)的定義,將newName指向的內(nèi)容賦值給數(shù)據(jù)成員name,請(qǐng)?jiān)谧⑨尅?/**2**”之后添加適當(dāng)?shù)恼Z句;(3)完成類Employee的成員函數(shù)Display()的定義,先使用指針buffer動(dòng)態(tài)申請(qǐng)一個(gè)char型的200單位大小的空間,然后使用字符串函數(shù)將數(shù)據(jù)成員name和address依次復(fù)制其中,最后返回該指針buffer,將請(qǐng)?jiān)谧⑨尅?/**3**”之后添加適當(dāng)?shù)恼Z句。輸出結(jié)果如下:王東建國路大街105號(hào)注意:除在指定位置添加語句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。源程序文件test18_3.cpp清單如下:#include<iostream.h>#include<string.h>classEmployee{protected:charname[20];charaddress[100];charcity[20];charprovince[20];charzipcode[10];public:Employee(char*nm,char*addr,char*city,char*prov,char*zip);voidChangeName(char*newName);char*Display();};Employee::Employee(char*nm,char*adr,char*cit,char*prov,char*zip){//**1**strcpy(city,cit);strcpy(province,prov);strcpy(zipcode,zip);}voidEmployee::ChangeName(char*newName){//**2**}char*Employee::Display(){//**3**strcat(buffer,address);returnbuffer;}voidmain(){Employeeemp("李華","建國路大街105號(hào)","石家莊","河北","103400");emp.ChangeName("王東");cout<<emp.Display()<<end1;}標(biāo)準(zhǔn)答案:(1)strcpy(name,nm);strcpy(address,adr);(2)strcpy(name,newName);(3)char*buffer=newchar[200];strcpy(buffer,name);知識(shí)點(diǎn)解析:本題主要考查考生對(duì)于類的定義和字符串函數(shù)的靈活運(yùn)用。算法如下:先使用strchr函數(shù)將名字中的空格找到,然后替換成為字符串結(jié)束標(biāo)志,接著使用strcpy函數(shù)將被切斷的字符串后面的部分復(fù)制到一個(gè)新的字符串newName中,再使用strcat函數(shù)連接“,”和原字符串的前半部分。國家二級(jí)(C++)機(jī)試模擬試卷第6套一、程序改錯(cuò)題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的工程test18_1,此工程包含一個(gè)源程序文件(est18_1.cpp,但該程序運(yùn)行有問題,請(qǐng)改正程序中的錯(cuò)誤,使程序的輸出結(jié)果如下:Enterxandy:-4-5xoffset=1yoffset=1angle=45radius=1.41421源程序文件test18_1.cpp清單如下:#include<iostream.h>#include<math.h>classpoint{public:voidset(doubleix,doubleiy){x=ix;y=iy;}doublexoffset(){returnx;}doubleyoffset(){returny;}doubleangle(){return(180/3.14159)*atan2(y,x);}/****************found*******************/inlineradius(){returnsqrt(x*x+y*y);}protected:doublex;doubley;};voidmain(){pointp;doublex,y;cout<<"Enterxandy:\n";cin>>x>>y;p.set(x,y);/****************found*******************/p.x+=5;p.y+=6;/****************found*******************/cout<<"xoffset="<<p.xoffset()<<end1;cout<<"yoffset="<<p.yoffset()<<end1;cout<<"angle="<<p.angle()<<end1;cout<<"radius="<<p.radius()<<end1;標(biāo)準(zhǔn)答案:(1)錯(cuò)誤:inlineradius()正確:inlinedoubleradius()(2)錯(cuò)誤:p.x+=5;p.y+=6;正確:p.set((p.xoffset()+5),(p.yoffset()+6));(3)應(yīng)在結(jié)尾處添加“}”知識(shí)點(diǎn)解析:(1)主要考查考生對(duì)于內(nèi)聯(lián)函數(shù)使用規(guī)則的掌握,雖然使用內(nèi)聯(lián)函數(shù)返回函數(shù)的值,但也要確定返回值的類型;(2)主要考查考生對(duì)于對(duì)象訪問類的數(shù)據(jù)成員的權(quán)限的掌握,對(duì)象不能直接訪問類的私有或保護(hù)成員,只能通過類的公有成員函數(shù)去訪問;(3)主要考查考生對(duì)于主函數(shù)定義的掌握,該處缺少“}”,函數(shù)體的花括號(hào)一定是成對(duì)出現(xiàn)的。二、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、請(qǐng)編寫一個(gè)函數(shù)intSeqSearch(intlist[],intstart,intn,intkey),該函數(shù)從start開始,在大小為n的數(shù)細(xì)list中查找key值,返回最先找到的key值的位置,如果沒有找到則返回-1。請(qǐng)使用for循環(huán)實(shí)現(xiàn)。注意:部分源程序已存在文件test19_2.cpp中。請(qǐng)勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)SeqSearch的花括號(hào)中填寫若干語句。文件test19_2.cpp的內(nèi)容如下:#include<iostream.h>intSeqSearch(intlist[],intstart,intn,intkey){}voidmain(){intA[10];intkey,count=0,pos;cout<<"Enteralistof10integers:";for(pos=0;pos<10;pos++){cin>>A[pos];}cout<<"Enterakey:";cin>>key;pos=0;while((pos=SeqSearch(A,pos,10,key))!=-1){count++;pos++;}cout<<key<<"occurs"<<count<<(count!=1?"times":"time")<<"inthelist."<<end1;}標(biāo)準(zhǔn)答案:intSeqSearch(intlist[],intstart,intn,intkey){for(inti=start;i<n;i++){if(list[i]==key){returni;}}return-1;}知識(shí)點(diǎn)解析:本題考查的是考生使用for和if等基本控制結(jié)構(gòu)的綜合水平,查找一個(gè)數(shù)組中的指定元素并返回序號(hào)是一個(gè)基本操作,注意一維數(shù)組的實(shí)參格式。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的工程test17_3,此工程包含一個(gè)源程序文件test17_3.cpp,其中定義了用于表示點(diǎn)的類Point和表示內(nèi)容的類Text以及二者的派生類CircleWithText,但它們的定義并不完整。請(qǐng)按要求完成下列操作,將它們的定義補(bǔ)充完整。(1)定義類Point的構(gòu)造函數(shù),請(qǐng)使用參數(shù)列表的形式將成員函數(shù)x和y分別初始化為參數(shù)x1和y1的值。請(qǐng)?jiān)谧⑨尅?/**1**?!敝筇砑舆m當(dāng)?shù)恼Z句。(2)完成類Text的構(gòu)造函數(shù)Text(char*str)的定義,將char型的str指向的內(nèi)容賦值給text并且輸出str所指向的內(nèi)容,請(qǐng)?jiān)谧⑨尅?/**2**”之后添加適當(dāng)?shù)恼Z句。(3)定義類CircleWithText的構(gòu)造函數(shù)CircleWithText(intcx,intcy,char*msg),int型的cx和cy用于賦值給x和y,char型的指針*msg用于賦值給text,請(qǐng)?jiān)谧⑨尅?/**3**”之后添加適當(dāng)?shù)恼Z句。輸出結(jié)果如下:Point:34hello注意:除在指定位置添加語句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。源程序文件test17_3.cpp清單如下:#include<iostream.h>#include<string.h>classPoint{intx,y;public://**1**{cout<<"Point:"<<x<<’’<<y<<’\n’;}~Point(){}};classText{chartext[100];public:Text(char*str){//**2**}~Text(){}};classCircleWithText:publicPoint,publicText{public://**3**{}~CircleWithText(){}};voidmain(){CircleWithTextcm(3,4,"hello");}標(biāo)準(zhǔn)答案:(1)Point(int×1=0,inty1=0):x(x1),y(y1)(2)strcpy(text,str);cout<<str<<"\n";(3)CircleWithText(intcx,intcy,char*msg):Point(cx,cy),Text(msg)知識(shí)點(diǎn)解析:本題主要考查考生對(duì)于多繼承中類的定義和派生類構(gòu)造函數(shù)的定義的掌握。注意學(xué)會(huì)使用參數(shù)列表的形式定義派生類的構(gòu)造函數(shù),在列表中的格式是基類名1(向基類傳遞的參數(shù)列表),基類名2(向基類傳遞的參數(shù)列表)。國家二級(jí)(C++)機(jī)試模擬試卷第7套一、程序改錯(cuò)題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的工程test32_1,此工程包含一個(gè)源程序文件test32_1.cpp,但該程序運(yùn)行有問題,請(qǐng)改正函數(shù)中的錯(cuò)誤,使該程序的輸出結(jié)果為:AddedResultforthisC++tutorial:3源程序文件test32_1.cpp清單如下:/**********found**********/#include<iostream>classCPP_Tutorial{intprivate_data;/*****************found*****************/classfriendclass;public:CPP_Tutorial(){private_data=5;}};classfriendclass{public:intsubtractfrom(intx){CPP_Tutorialvar2;/*****************found*****************/returnvar2-x;}};voidmain(){friendclassvar3;cout<<"AddedResultforthisC++tutorial:"<<var3.subtractfrom(2)<<end1;}標(biāo)準(zhǔn)答案:(1)錯(cuò)誤:ginclude<iostream>正確:#include<iostream.h>(2)錯(cuò)誤:classfriendclass;正確:friendclassfriendclass;(3)錯(cuò)誤:returnvar2-x;正確;returnvar2.private_data-x;知識(shí)點(diǎn)解析:(1)主要考查考生是否理解頭文件的概念,在C++中可以把已經(jīng)定義好的或者系統(tǒng)自帶的類定義引入自建的工程中,其方式就是通過使用頭文件,把要引入的結(jié)構(gòu)放在頭文件(.h結(jié)尾的)中,在自建工程的開頭使用#include加入即可,不過應(yīng)該使用頭文件的全名,題目中錯(cuò)誤的丟掉了擴(kuò)展名.h;(2)主要考查考生是否掌握了友元類的定義,友元類是聲明在一個(gè)類內(nèi)的新的類,友元類的所有成員都可以訪問原來類的所有成員,所以友元類破壞了程序的封裝性,不過只有友元類和友元函數(shù)能夠直接訪問所在類的私有成員,題目中的類friendclass將要訪問所在類的私有成員,所以應(yīng)該被定義成友元類;(3)主要考查考生對(duì)于對(duì)象和對(duì)象成員操作的掌握,var2是類CPP_Tutorial的對(duì)象,它不能直接和數(shù)據(jù)成員操作,應(yīng)該使用對(duì)象訪問成員的操作符“.”操作它的數(shù)據(jù)成員private_data和x進(jìn)行操作。二、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、請(qǐng)編寫一個(gè)函數(shù)fun(),它的功能是計(jì)算并輸出給定整數(shù)n的所有因子(不包括1與自身)之和(規(guī)定n的值不大于1000)。例如:輸入n的值為856,則輸出為sum=763。注意:部分源程序已存在文件test33_2.cpp中。請(qǐng)勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)count的花括號(hào)中填寫若干語句。文件test33_2.cpp清單如下:#include<stdio.h>#include<iostream.h>intfun(intn){}voidmain(){intn,sum;cout<<"Inputn:"<<end1;cin>>n;sum=fun(n);cout<<"sum=\n"<<sum<<end1;}標(biāo)準(zhǔn)答案:intfun(intn){ints=0,i;for(i=2;i<=n-1;i++)if(n%i==0)s+=i;returns;}知識(shí)點(diǎn)解析:本題的解題思路是用n逐個(gè)去除以2到n-1之間的所有數(shù),如果n能被除盡,則把所得到的一個(gè)因子累加到s中去。此種題型為典型考題。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的工程test31_3。此工程包含一個(gè)test31_3.cpp,其中定義了可以動(dòng)態(tài)分配的字符串類,但該類的定義并不完整。請(qǐng)按要求完成下列操作,將程序補(bǔ)充完整。(1)定義類tstring的私有數(shù)據(jù)成員length和p,它們分別是血型的數(shù)據(jù)和字符型的指針,其中l(wèi)ength表示一個(gè)字符串的長度。請(qǐng)?jiān)谧⑨尅?/**1**”之后添加適當(dāng)?shù)恼Z句。(2)完成類tstring的構(gòu)造函數(shù),使length等于字符串m的長度,并申請(qǐng)由指針p指向的length長的字符型空間,將m所指的字符串復(fù)制到該空間。請(qǐng)?jiān)谧⑨尅?/**2**”之后添加適當(dāng)?shù)恼Z句。(3)完成類tstring的成員函數(shù)strcopy(tstringn)的定義,該函數(shù)將對(duì)象n的值(包括字符串長度和字符串本身)復(fù)制給調(diào)用該函數(shù)的對(duì)象(對(duì)象n的字符串長度任意)。請(qǐng)?jiān)谧⑨尅?/**3**”之后添加適當(dāng)?shù)恼Z句。(4)完成類tstring的友元函數(shù)strlink(tstringm,tstringn)的定義,該函數(shù)將可動(dòng)態(tài)分配的字符串類對(duì)象m和n的字符串成員連接在一起(對(duì)象m和n的字符串長度任意),并返回該串。請(qǐng)?jiān)谧⑨尅?/**4**”之后添加適當(dāng)?shù)恼Z句。注意:除在指定位置添加語句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。程序輸出結(jié)果如下:hellotheworld!源程序文件test31_3.cpp清單如下:#include<iostream.h>#include<conio.h>#include<string.h>clasststring{public://**1**tstring(char*m){//**2**strcpy(p,m);}voidstrcopy(tstringn);friendchar*strlink(tstringm,tstringn);};voidtstring::strcopy(tstringn){//**3**char*q;q=newchar[length];strcpy(q,tstring::p);q=strcat(tstring::p,n.p);tstring::p=q;tstring::length=strlen

溫馨提示

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

評(píng)論

0/150

提交評(píng)論