全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C上機(jī)題庫(kù)_第1頁(yè)
全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C上機(jī)題庫(kù)_第2頁(yè)
全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C上機(jī)題庫(kù)_第3頁(yè)
全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C上機(jī)題庫(kù)_第4頁(yè)
全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)C上機(jī)題庫(kù)_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 計(jì)算機(jī)等級(jí)考試二級(jí)C+模擬試題上機(jī)部分 1 一、改錯(cuò)題 使用VC6打開(kāi)考生文件夾下的工程kt6_1,此工程包含一個(gè)源程序文件kt6_1.cpp,但該程序運(yùn)行有問(wèn)題,請(qǐng)改正程序中的錯(cuò)誤,使程序的輸出結(jié)果如下: Constructor2 Constructor1 i=0 i=10 Destructor 源程序文件kt6_1.cpp清單如下: #include classCSample inti; public: CSample()cout<<"Constructor1"< CSample(intval)cout<<"Constructo

2、r2"< CSample()cout<<"Destructor"< voiddisp(); ; /*found*/ voiddisp() cout<<"i="< voidmain() CSample*a,b(10); /*found*/ a->disp(); /*found*/ b->disp(); 【參考答案】 (1)將void disp() 改為:void CSample:disp() (2)將a->disp(); 改為:a=new CSample; a->disp(); (

3、3)將b->disp(); 改為:b.disp(); 【試題解析】(1)主要考查類成員函數(shù)定義格式的熟練掌握,對(duì)于類體外函數(shù)的實(shí)現(xiàn),應(yīng)該使用作用域符":",按照返回值類型類名:函數(shù)名(參數(shù)列表)的形式進(jìn)行說(shuō)明; (2)主要考查對(duì)動(dòng)態(tài)存儲(chǔ)分配的掌握,根據(jù)前面的定義,a是一個(gè)指針類型的變量,指向一個(gè)對(duì)象,但是并沒(méi)有被初始化,此時(shí)a中的數(shù)據(jù)無(wú)任何意義,應(yīng)該使用動(dòng)態(tài)存儲(chǔ)分配new生成一個(gè)新的對(duì)象,并將返回的指針賦值給a; (3)主要考查對(duì)象指針與對(duì)象在調(diào)用成員函數(shù)時(shí)格式的不同,b是一個(gè)對(duì)象變量,使用b調(diào)用成員函數(shù)應(yīng)該用"."運(yùn)算符。 二、簡(jiǎn)單應(yīng)用題 編寫函

4、數(shù)fun(),它的功能是利用以下所示的簡(jiǎn)單迭代方法求方程cos(x)-x=0的一個(gè)實(shí)根。 xn+1=cos(xn) 迭代步驟如下: (1)取x1初值為0.0。 (2)x0=x1,把x1的值賦給x0。 (3)x1=cos(x0),求出一個(gè)新的x1。 (4)若x0-x1的絕對(duì)值小于0.000001,則執(zhí)行步驟(5),否則執(zhí)行步驟(2)。 (5)所求x1就是方程cos(x)-x=0的一個(gè)實(shí)根,做為函數(shù)值返回。 程序輸出結(jié)果Root=0.739085。 注意:部分源程序已存在文件kt6_2.cpp中。 請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。 文件k

5、t6_2的內(nèi)容如下: #include #include #include floatfun() voidmain() cout<<"Root="< 【參考答案】 float fun() float x1=0.0,x0; do x0=x1; x1=cos(x0); while(fabs(x0-x1)>=1e-6); return x1; 【試題解析】 解答本題的關(guān)鍵之處在于看清題中所給的“迭代步驟”,同時(shí)要理解xn+1=cosxn通式的含義,要考慮到x1的初值為0.0。 三、綜合應(yīng)用題使用VC6打開(kāi)考生文件夾下的工程kt6_3,此工程包含一個(gè)源程序文

6、件kt6_3.cpp,其中定義了用于表示考生的類Student,請(qǐng)按要求完成下列操作,將程序補(bǔ)充完整。 (1)定義私有數(shù)據(jù)成員code、english分別用于表示考生的編號(hào)、英語(yǔ)成績(jī)、它們都是int型的數(shù)據(jù)。請(qǐng)?jiān)谧⑨尅?*1*”之后添加適當(dāng)?shù)恼Z(yǔ)句。 (2)完成成員函數(shù)voidStudent:inputinformation()的定義,該函數(shù)用于用戶輸入一個(gè)考生對(duì)象的信息,輸入格式如下所示: 輸入編號(hào): 英語(yǔ)成績(jī): 計(jì)算機(jī)成績(jī): 請(qǐng)?jiān)谧⑨尅?*2*”之后添加適當(dāng)?shù)恼Z(yǔ)句。 (3)利用已實(shí)現(xiàn)的類Student的成員函數(shù),完成函數(shù)voidfirstname(Student*A,intnum)的定義,該

7、函數(shù)根據(jù)考生信息A,輸出num個(gè)考生中總分最高者的編號(hào)及其相應(yīng)的總分,在此不考慮總分相同的情況。請(qǐng)?jiān)谧⑨尅?*3*”之后添加適當(dāng)?shù)恼Z(yǔ)句。 注意:除在指定位置添加語(yǔ)句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。 源程序文件kt6_3.cpp清單如下: #include classStudent /*1* intcomputer; inttotal; public: voidgetinformation(); voidcomputesum(); intgetcode(); intgettotalscore(); Student(); voidStudent:getinformation() /*2* cou

8、t<<"英語(yǔ)成績(jī):" cin>>english; cout<<"計(jì)算機(jī)成績(jī):" cin>>computer; voidStudent:computesum() total=english+computer; cout<<"編號(hào)"< intStudent:getcode() returncode; intStudent:gettotalscore() returntotal; voidfirstname(Student*A,intnum) /*3* tempsum=(*A

9、0).gettotalscore(); for(inti=1;i if(*Ai).gettotalscore()>tempsum) tempcode=(*Ai).getcode(); tempsum=(*Ai).gettotalscore(); cout<<"總分最高者-"< voidmain() Student*A3; inti,n=3; for(i=0;i Ai=newStudent; Ai->getinformation(); for(i=0;i Ai->computesum(); firstname(A,3); 【參考答案】 (1

10、)int code; int english; (2)cout<<"輸入編號(hào):" cin>>code; (3)int tempcode,tempsum; tempcode=(*A0).getcode(); 【試題解析】 本題是對(duì)C+程序設(shè)計(jì)的綜合考查,其設(shè)計(jì)類的成員及成員函數(shù)的定義與調(diào)用,數(shù)據(jù)的輸入輸出,for循環(huán)語(yǔ)句,if條件判斷語(yǔ)句等多個(gè)知識(shí)點(diǎn),其中(3)中為指針數(shù)組的使用,指針數(shù)組是一組指針,每一個(gè)成員都按照指針的操作規(guī)則,但是整個(gè)訪問(wèn)規(guī)則仍然使用數(shù)組下標(biāo)方式,如A0指的是第一個(gè)指針,而* A0是取出第一個(gè)指針指向的內(nèi)容。2 一、改錯(cuò)題 使用V

11、C6打開(kāi)考生文件夾下的工程kt7_1,此工程包含一個(gè)源程序文件kt7_1.cpp,但該程序運(yùn)行有問(wèn)題,請(qǐng)改正程序中的錯(cuò)誤,使程序的輸出結(jié)果如下: Constructor1 Constructor1 Constructor1 Destructor Constructor2 Destructor x=0 x=5 Destructor Destructor 源程序文件kt21_1.cpp清單如下: #include classB intx; public: B()x=0;cout<<"Constructor1"<<ENDL;< p> B(int

12、i)x=i;cout<<"Constructor2"<<ENDL;< p> B()cout<<"Destructor"<<ENDL;< p> /*found*/ B(inti)cout<<I<<"BEDESTRUCTOR"<<ENDL;< p> voidprint()cout<<"x="<<X<<ENDL;< p> voidmain() B*ptr;

13、 ptr=newB2; /*found*/ ptr0=B(0); ptr1=B(5); /*found*/ for(inti=0;i<2;) ptri.print(); deleteptr; 【參考答案】 (1)將B(int i)cout<<I<<" p be Destructor?<<endl;刪除<> (2)將ptr0=B(0);改為:ptr0=B(); (3)將for (int i=0;i<2;)改為:for(int i=0;i<2;i+) B(inti)x=i;cout<<"Constru

14、ctor2"<<ENDL;< p> B()cout<<"Destructor"<<ENDL;< p> /*found*/ B(inti)cout<<I<<"BEDESTRUCTOR"<<ENDL;< p> voidprint()cout<<"x="<<X<<ENDL;< p> voidmain() B*ptr; ptr=newB2; /*found*/ ptr0=B(0)

15、; ptr1=B(5); /*found*/ for(inti=0;i<2;) ptri.print(); deleteptr; 【參考答案】(1)將B(int i)cout<<I<<" p be Destructor?<<endl;刪除<> (2)將ptr0=B(0);改為:ptr0=B(); (3)將for (int i=0;i<2;)改為:for(int i=0;i<2;i+) 【試題解析】 本題主要考查對(duì)文件相關(guān)操作的熟練程度。首先定義文件流類的變量,然后使用該對(duì)象的open方法打開(kāi)一個(gè)文件,接著使用while

16、循環(huán)和getch方法每次讀入一個(gè)字符并統(tǒng)計(jì)字符個(gè)數(shù),最后使用close方法關(guān)閉文件,返回i值。 二、簡(jiǎn)單應(yīng)用題 編寫一個(gè)函數(shù)intcharnum(charfn10),該函數(shù)以只讀方式打開(kāi)文件fn,,通過(guò)統(tǒng)計(jì),返回文件中字符的個(gè)數(shù),請(qǐng)使用while循環(huán)實(shí)現(xiàn)計(jì)數(shù)功能。 注意:部分源程序已存在文件kt7_2.cpp中。 請(qǐng)勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)charnum的花括號(hào)中填寫若干語(yǔ)句。 文件kt7_2.cpp的內(nèi)容如下: #include #include #include intcharnum(charfn10); voidmain() intnum; num=charn

17、um("abc.txt"); cout<<"num="<<NUM<<ENDL;< p> intcharnum(charfn10) 【參考答案】 int charnum(char fn10) fstream file; file.open(fn,ios:in); if(!file) cout<<"abc.txt can't open"<<ENDL;< p> abort(); char ch; int i=0; while(!file.eof()

18、file.get(ch); i+; file.close(); return i-1; 【試題解析】 本題主要考查對(duì)文件相關(guān)操作的熟練程度。首先定義文件流類的變量,然后使用該對(duì)象的open方法打開(kāi)一個(gè)文件,接著使用while循環(huán)和getch方法每次讀入一個(gè)字符并統(tǒng)計(jì)字符個(gè)數(shù),最后使用close方法關(guān)閉文件,返回i值。 三、綜合應(yīng)用題使用VC6打開(kāi)考生文件夾下的工程kt7_3,此工程包含一個(gè)源程序文件kt7_3.cpp,其中含有一個(gè)類Circle的定義,但該類的定義并不完整。請(qǐng)按要求完成下列操作,將類Circle的定義補(bǔ)充完整。 (1)為類Circle增加一個(gè)構(gòu)造函數(shù),該函數(shù)有一個(gè)參數(shù),并在構(gòu)造

19、時(shí)將該參數(shù)值賦給成員radius。將該函數(shù)實(shí)現(xiàn)為一個(gè)非內(nèi)聯(lián)函數(shù),并且使用參數(shù)列表的方式將類成員賦值。請(qǐng)?jiān)谧⑨尅?*1*”之后添加適當(dāng)?shù)恼Z(yǔ)句。 (2)為類Circle增加一個(gè)成員函數(shù)print(),使得可以輸出有關(guān)圓的信息,比如下列程序 Circlec; c.SetRadius(5); c.Print(); 將輸出:Thecirclehasradiusof5! 請(qǐng)?jiān)谧⑨尅?*2*”之后添加適當(dāng)?shù)恼Z(yǔ)句。 (3)完成友元函數(shù)voidCompareR(Circle*c1,Circle*c2)的定義,在屏幕中輸出c1與c2比較radius大小結(jié)果,要求使用if-else結(jié)構(gòu)完成。請(qǐng)?jiān)谧⑨尅?*3*”之后

20、添加適當(dāng)?shù)恼Z(yǔ)句。 輸出結(jié)果如下: Thecirclehasradusof5! Thecirclehasradiusof10! c1<C2< p> 注意:除在指定位置添加語(yǔ)句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。 源程序文件kt7_3.cpp清單如下: #include classCircle public: Circle():radius(5) /*1* voidSetRadius(intr)radius=r; intGetRadius()returnradius; /*2* friendvoidCompareR(Circle*c1,Circle*c2); private: in

21、tradius; voidCompareR(Circle*c1,Circle*c2) /*3* cout<<"c1>c2"<<ENDL;< p> else if(c1->GetRadius()=(c2->GetRadius() cout<<"c1=c2"<<ENDL;< p> else if(c1->GetRadius()<(c2->GetRadius() cout<<"c1<C2"<<ENDL;&

22、lt; p> voidmain() Circlec1; c1.SetRadius(5); c1.Print(); Circlec2(10); c2.Print(); CompareR(&c1,&c2); 【參考答案】 (1)Circle(int rad):radius(rad) (2)void Print()cout<<"The circle has radius of "<<RADIUS<<"!N"< p> (3)if (c1->GetRadius()>(c2->G

23、etRadius() 【試題解析】 本題考查成員函數(shù)的定義與實(shí)現(xiàn),友元函數(shù),if分支語(yǔ)句等知識(shí)點(diǎn)。友元函數(shù)的類體外的定義與一般函數(shù)一樣,其中if-else的使用,else總是與其最近的那個(gè)if配對(duì)使用的,書(shū)寫時(shí)最好使用縮進(jìn)格式,將配對(duì)的if-else對(duì)齊,以免出錯(cuò)。3 一、改錯(cuò)題 使用VC6打開(kāi)考生文件夾下的工程kt8_1,此工程包含一個(gè)源程序文件kt8_1.cpp,但該程序運(yùn)行有問(wèn)題,請(qǐng)改正程序中的錯(cuò)誤,使程序的輸出結(jié)果如下: f1functionofderive f2functionofbase f4functionofbase 源程序文件kt8_1.cpp清單如下: #include c

24、lassbase public: /*found*/ voidf1()cout<<"f1functionofbase"<<ENDL;< p> virtualvoidf2()cout<<"f2functionofbase"<<ENDL;< p> virtualvoidf3()cout<<"f3functionofbase"<<ENDL;< p> voidf4()cout<<"f4functionofbase&

25、quot;<<> /*found*/ classderive:publicbase voidf1()cout<<"f1functionofderive"<<ENDL;< p> voidf2(intx)cout<<"f2functionofderive"<<ENDL;< p> voidf4()cout<<"f4functionofderive"<<> voidmain() base*p; deriveobj2; /*f

26、ound*/ p=obj2; p->f1(); p->f2(); p->f4(); 【參考答案】 (1)將void f1() cout<<"f1 function of base"<<ENDL;< p> 改為:virtual void f1() cout<<"f1 function of base"<<ENDL;< p> (2)將class derive:public base 改為:class derive:public base (3)將p=obj2; 改為:p

27、=&obj2; 【試題解析】 (1)主要考查對(duì)虛函數(shù)的深刻理解,虛函數(shù)是動(dòng)態(tài)聯(lián)編的基礎(chǔ),也是實(shí)現(xiàn)多態(tài)性的重要方法,它可以根據(jù)不同的情況動(dòng)態(tài)的選擇執(zhí)行哪一個(gè)函數(shù)。在派生類中實(shí)現(xiàn)虛函數(shù)應(yīng)該滿足與基類的同名函數(shù)完全相同,并且使用關(guān)鍵字virtual修飾,本題中由輸出結(jié)果中的f1 function of derive可知,必須將基類base的成員函數(shù)f1()定義為虛函數(shù); (2)主要考查對(duì)派生類定義格式的掌握,應(yīng)該使用“:”后面是繼承列表,而“:”是作用域符; (3)主要考查類對(duì)象的定義與使用,p是一個(gè)指針類型的變量,給它的賦值應(yīng)該是一個(gè)地址,即使用取地址操作符&。 二、簡(jiǎn)單應(yīng)用題 已

28、知考生的記錄由學(xué)號(hào)和學(xué)習(xí)成績(jī)構(gòu)成,N名考生的數(shù)據(jù)已存入a結(jié)構(gòu)體數(shù)組中。請(qǐng)編寫函數(shù)fun,該函數(shù)的功能是:找出成績(jī)最低的考生記錄,通過(guò)形參返回主函數(shù)(規(guī)定只有一個(gè)最低分)。已給予出函數(shù)的首部,請(qǐng)完成該函數(shù)。 注意:部分源程序已存在文件kt8_2.cpp中。 請(qǐng)勿改動(dòng)主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填入所編寫的若干語(yǔ)句。 文件kt8_2.cpp的內(nèi)容如下: #include #include #include #defineN10 typedefstructss charnum10; ints; STU; voidfun(STUa,STU*s) voidmain()

29、STU aN="A01",81,"A02",89,"A03",66,"A04",87,"A05",77,"A06",90,"A07",79,"A08",61,"A09",80,"A10",71,m; fun(a,&m); cout<<"*Theoriginaldate*"<<ENDL;< p> cout<<"Th

30、elowest:"<<M.NUM<<M.S<<ENDL;< p> 【參考答案】fun(STU a,STU *s) int i, min; min=a0.s; for(i=0;i<N;I+)< p> if(ai.s<MIN)< p> min=ai.s; *s=ai; 【試題解析】 解題思路為:先假設(shè)第一個(gè)考生的成績(jī)最優(yōu),通過(guò)循環(huán)找到最低成績(jī),并將最低成績(jī)的考生記錄傳給指針s,帶回主函數(shù)。 三、綜合應(yīng)用題 使用VC6打開(kāi)考生文件夾下的工程kt8_3,此工程包含一個(gè)源程序文件kt8_3.cpp,該文件設(shè)計(jì)了

31、用于輸出乘法九九表的類。請(qǐng)認(rèn)真閱讀已有的代碼,按要求完成下列操作,將程序補(bǔ)充完整。 (1)定義類Table的私有數(shù)據(jù)成員x和y,分別用于表示九九表中的兩個(gè)乘數(shù)(x*y),它們都是int型的數(shù)據(jù)。請(qǐng)?jiān)谧⑨尅?*1*”之后添加適當(dāng)?shù)恼Z(yǔ)句; (2)完成類Table的成員函數(shù)print()的定義,該函數(shù)以"x*y=z"的格式打印出九九表中的一個(gè)乘法算式,請(qǐng)使用格式化輸出函數(shù)printf實(shí)現(xiàn),在注釋“/*2*”之后添加適當(dāng)?shù)恼Z(yǔ)句; (3)完成類Table9的成員函數(shù)print()的定義,該函數(shù)調(diào)用基類Table的print()函數(shù),將九九表輸出到屏幕,請(qǐng)?jiān)谧⑨尅?*3*”之后添加適當(dāng)

32、的語(yǔ)句; (4)補(bǔ)充主函數(shù),在屏幕上輸出九九表,以便測(cè)試所定義的類的正確性。請(qǐng)?jiān)谧⑨尅?*4*”之后添加適當(dāng)?shù)恼Z(yǔ)句。 注意:除在指定位置添加語(yǔ)句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。 源程序文件kt8_3.cpp清單如下: #include #include classTable /*1* intz; public: voidprint(intx,inty,intz); voidTable:print(intx,inty,intz) /*2* classTable9:publicTable public: voidprint(); voidTable9:print() /*3* intx,y,z;

33、 for(i=1;i<10;i+) for(j=1;j<I+1;J+)< p> x=i; y=j; z=i*j; Table:print(y,x,z); printf("n"); main() /*4* return0; 【參考答案】 (1)int x; int y; (2)printf( "%d*%d=%d ",x,y,z); if(z<10) printf(" "); (3)int i,j; (4)Table9 t_9; t_9.print(); 【試題解析】 主要考查將具體問(wèn)題抽象為類,將類的定義補(bǔ)

34、充完整,并進(jìn)行類定義測(cè)試的能力。4 一、改錯(cuò)題 使用VC6打開(kāi)考生文件夾下的工程kt9_1,此工程包含一個(gè)源程序文件kt9_1.cpp,但該程序運(yùn)行有問(wèn)題,請(qǐng)改正程序中的錯(cuò)誤,使程序的輸出結(jié)果如下: 4,5 20 源程序文件清單如下: #include<iostream.h> classA protected: intn,m; public: voidset(inta,intb)m=a;n=b; voidshow()cout<<m<<","<<n<<endl; /*found*/ classB:publicA in

35、ts; public: voidset()s=m*n; voidshows()cout<<s<<endl; ; voidmain() Bb; /*found*/ b.set(); b.show(); b.set(); /*found*/ b.show(); 【參考答案】 (1)在“”后添加分號(hào) (2)將b.set();改為:b.A:set(4,5); (3)將b.show();改為:b.shows(); 【試題解析】 (1)主要考查對(duì)類定義格式的掌握,類的結(jié)尾應(yīng)該使用""; (2)主要考查對(duì)基類與派生類函數(shù)調(diào)用關(guān)系的掌握,根據(jù)所要求的輸出結(jié)果,應(yīng)該調(diào)

36、用的函數(shù)為類A的set,而不是類B自身的set函數(shù),應(yīng)該避免調(diào)用的二義性; (3)主要考查對(duì)繼承與派生的理解,由所要求輸出結(jié)果可知正確:b.shows()。 二、簡(jiǎn)單應(yīng)用題 請(qǐng)編寫一個(gè)函數(shù)intCalcDigital(char*str),該函數(shù)可返回字符串str中數(shù)字字符(即“0”-“9”這10個(gè)數(shù)字)的個(gè)數(shù),如字符串"olympic2008"中數(shù)字字符的個(gè)數(shù)為4。請(qǐng)用if條件判斷語(yǔ)句與for循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)該函數(shù)。 注意:部分源程序已存在文件中。 請(qǐng)勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)find的花括號(hào)中填寫若干語(yǔ)句。 文件kt9_2.cpp的內(nèi)容如下: #i

37、nclude<iostream.h> #include<string.h> intCalcDigital(char*str); voidmain() char*str; str=newchar255; cout<<"輸入字符串:" cin>>str; intnum=CalcDigital(str); cout<<str<<":"<<num<<endl; intCalcDigital(char*str) 【參考答案】 int CalcDigital(char *

38、str) if(str=NULL) return 0; int num_of_digital=0; int len=strlen(str); for(int i=0;i<len;i+) if(stri<='9' && stri>='0') num_of_digital+; return num_of_digital; 【試題解析】 本題考查對(duì)于if條件判斷語(yǔ)句與for循環(huán)語(yǔ)句的熟練使用程度。注意判斷條件(判斷是否是數(shù)字是直接比較ASCII碼)的使用。 3綜合應(yīng)用題 使用VC6打開(kāi)考生文件夾下的工程kt9_3,此工程包含一個(gè)源程序

39、文件kt9_3.cpp,其中定義了Circle類與Money類,Circle類可對(duì)半徑為r的圓進(jìn)行周長(zhǎng)與面積的計(jì)算,而Money類用于計(jì)算一圓形游泳池的造價(jià)。游泳池四周有原形過(guò)道,過(guò)道外圍上柵欄,過(guò)道寬度為3米,根據(jù)鍵入的游泳池半徑,每米柵欄價(jià)格及每平方米過(guò)道價(jià)格,即可計(jì)算出游泳池的造價(jià)。請(qǐng)按要求完成下列操作,將程序補(bǔ)充完整。 (1)定義符號(hào)常量PI(值為3.14159f)與WIDTH(值為3.00f),分別用于表示圓周率與過(guò)道的固定寬度。請(qǐng)?jiān)谧⑨尅?*1*”之后添加適當(dāng)?shù)恼Z(yǔ)句。 (2)定義Circle類默認(rèn)構(gòu)造函數(shù),把私有成員radius初始化為參數(shù)r的值。請(qǐng)?jiān)谧⑨尅?*2*”之后添加適當(dāng)?shù)?/p>

40、語(yǔ)句; (3)完成Money類默認(rèn)構(gòu)造函數(shù)的定義,把私有成員FencePrice(每米柵欄的價(jià)格)、ConcretePrice(每平方米過(guò)道的價(jià)格)初始化為參數(shù)f,c的值。請(qǐng)?jiān)谧⑨尅?*3*”之后添加適當(dāng)?shù)恼Z(yǔ)句。 (4)完成Money類成員函數(shù)floatMoney:TotalMoney(floatfencelen,floatconarea)的定義,根據(jù)參數(shù)fencelen(柵欄的長(zhǎng)度)和conarea(過(guò)道的面積),返回柵欄與過(guò)道的總造價(jià)。請(qǐng)?jiān)谧⑨尅?*4*”之后添加適當(dāng)?shù)恼Z(yǔ)句。 注意:除在指定位置添加語(yǔ)句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。 源程序文件kt9_3.cpp清單如下: #inclu

41、de<iostream.h> /*1* classCircle private: floatradius; public: /*2* floatCircumference()return2*PI*radius; floatArea()returnPI*radius*radius; ; classMoney private: floatFencePrice; floatConcretePrice; public: Money(floatf,floatc); floatTotalMoney(floatfencelen,floatconarea); ; Money:Money(float

42、f,floatc) /*3* floatMoney:TotalMoney(floatfencelen,floatconarea) /*4* voidmain() floatradius,fence,concrete; cout.setf(ios:fixed); cout.setf(ios:showpoint); cout.precision(2); cout<<"Entertheradiusofthepool:" cin>>radius; cout<<"EntertheFencePrice:" cin>>f

43、ence; cout<<"EntertheConcretePrice:" cin>>concrete; CirclePool(radius); CirclePoolRim(radius+WIDTH); Moneymon(fence,concrete); floattotalmoney=mon.TotalMoney(PoolRim.Circumference(),(PoolRim.Area()-Pool.Area(); cout<<"ThetotalmoneyisRMB"<<totalmoney<<

44、;endl; 【參考答案】 (1)const float PI = 3.14159f; const float WIDTH =3.00f; (2)Circle(float r):radius(r); (3)FencePrice=f; ConcretePrice=c; (4)return FencePrice*fencelen+ConcretePrice*conarea; 【試題解析】 本題考查對(duì)符號(hào)常量的定義及類的定義與實(shí)現(xiàn)等方面的內(nèi)容,其中常類型的定義應(yīng)使用const關(guān)鍵字。5 一、改錯(cuò)題 使用VC6打開(kāi)考生文件夾下的工程kt10_1,此工程包含一個(gè)源程序文件kt10_1.cpp,但該程序運(yùn)

45、行有問(wèn)題,請(qǐng)改正程序中的錯(cuò)誤,使程序的輸出結(jié)果為: classBase classD1 classD2 classD3 finBase 源程序文件kt10_1.cpp清單如下: #include<iostream.h> classBase public: Base()cout<<"classBase"<<endl; voidf()cout<<"finBase"<<endl; ; classD1:virtualpublicBase public: D1()cout<<"cla

46、ssD1"<<endl; voidf()cout<<"finD1"<<endl; ; /*found*/ classD2:publicBase public: D2()cout<<"classD2"<<endl; ; /*found*/ classD3:publicD1,publicD2 public: D3()cout<<"classD3"<<endl; ; voidmain() D3d; /*found*/ d.f(); 【參考答案】 (

47、1)將class D2:public Base 改為:class D2:virtual public Base (2)將class D3:public D1,public D2 改為:class D3:public D1,public D2 (3)將d.f();改為:d.Base:f(); 【試題解析】 (1)主要考查對(duì)虛基類的理解,虛基類可以解決二義性的問(wèn)題,其定義方式是在繼承列表中使用virtual關(guān)鍵字,使用虛基類可以避免程序運(yùn)行中對(duì)基類函數(shù)調(diào)用的不惟一; (2)主要考查對(duì)類的定義方法的掌握,“:”為作用域符,此處應(yīng)該使用“:”,因?yàn)楹竺媸抢^承列表; (3)主要考查對(duì)虛基類函數(shù)調(diào)用過(guò)程的

48、理解,只有使用":"限定才能訪問(wèn)基類函數(shù),否則將會(huì)調(diào)用自身的函數(shù),如果該類沒(méi)有該函數(shù)的定義,則會(huì)自動(dòng)調(diào)用其父類的該函數(shù),所以必須使用“:”符號(hào)。 二、簡(jiǎn)單應(yīng)用題 請(qǐng)編寫一個(gè)函數(shù)inlinelongsum(intn),用遞歸函數(shù)完成運(yùn)算:sum(n)=1*1+2*2+?+n*n,遞歸表達(dá)式為sum(n)=sum(n-1)+n2。 注意:部分源程序已存在文件kt10_2.cpp中。 請(qǐng)勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)sum的花括號(hào)中填寫若干語(yǔ)句。 文件kt10_2.cpp的內(nèi)容如下: #include<iostream.h> inlinelong

49、sum(intn) voidmain() intn; cout<<"輸入n:" cin>>n; cout<<"結(jié)果為:"<<sum(n)<<endl; 【參考答案】 inline long sum(int n) if(n=1) return 1; else return n*n+sum(n-1); 【試題解析】 本題考查對(duì)遞歸函數(shù)掌握的熟練程度。遞歸的終止條件為n=1時(shí),值為1。 三、綜合應(yīng)用題 使用VC6打開(kāi)考生文件夾下的工程kt10_3,此工程包含一個(gè)源程序文件kt10_3.cpp,其中定義

50、了用于表示雇員信息的CEmployee類與表示公司信息的Company類,但這兩個(gè)類的定義并不完整。請(qǐng)按要求完成下列操作。 (1)定義Cemployee類的私有數(shù)據(jù)成員name(大小為50的字符數(shù)組)和pay(double型數(shù)據(jù)),分別用于記錄雇員姓名和月薪。請(qǐng)?jiān)谧⑨尅?*1*”之后添加適當(dāng)?shù)恼Z(yǔ)句。 (2)完成Company類默認(rèn)構(gòu)造函數(shù)的定義,該構(gòu)造函數(shù)將n值賦值給私有成員num,并完成指針emp所指的n個(gè)Cemployee對(duì)象空間的申請(qǐng),請(qǐng)?jiān)谧⑨尅?*2*”之后添加適當(dāng)?shù)恼Z(yǔ)句。 (3)完成Company類成員函數(shù)voidCompany:add(intcode,charname50,doub

51、lepay)的定義,該函數(shù)將某一雇員的編號(hào)code、姓名name及月薪pay輸入到公司信息中。請(qǐng)?jiān)谧⑨尅?*3*”之后添加適當(dāng)?shù)恼Z(yǔ)句。 (4)完成Company類成員函數(shù)voidCompany:print()的定義,使其以"_ispaid_RMBforonemonth"的格式輸出公司內(nèi)所有員工的月薪信息。請(qǐng)?jiān)谧⑨尅?*4*”之后添加適當(dāng)?shù)恼Z(yǔ)句。 注意:除在指定位置添加語(yǔ)句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。 源程序清單如下: #include<iostream.h> #include<string.h> classCEmployee public: v

52、oidputname(charn50)strcpy(name,n); voidgetname(charn50)strcpy(n,name); voidputpay(doubled)pay=d; doublegetpay()returnpay; private: /*1* ; classCompany private: CEmployee*emp; intnum; public: Company(intn); voidadd(intcode,charname50,doublepay); voidprint(); ; Company:Company(intn) /*2* voidCompany:a

53、dd(intcode,charname50,doublepay) /*3* voidCompany:print() /*4* for(inti=0;i<num;i+) (emp+i)->getname(c); money=(emp+i)->getpay(); cout<<c<<"ispaid"<<money<< "RMBforonemonth"<<endl; voidmain() Companycom(2); com.add(0,"Jack",200); c

54、om.add(1,"Lee",300); com.print(); 【參考答案】 (1)char name50; double pay; (2)num=n; emp=new CEmployeenum; (3)(emp+code)->putname(name); (emp+code)->putpay(pay); (4)char c50; double money; 【試題解析】 本題考查類成員的定義、類成員函數(shù)的定義與調(diào)用、對(duì)象數(shù)組的使用。注意指針和動(dòng)態(tài)申請(qǐng)空間new的使用方法。使用指針調(diào)用成員應(yīng)該用"->"符號(hào),new的返回值是指針類型

55、的。6 一、改錯(cuò)題 使用VC6打開(kāi)考生文件夾下的工程kt11_1,此工程包含一個(gè)源程序文件kt11_1.cpp,但該程序運(yùn)行有問(wèn)題,請(qǐng)改正函數(shù)中的錯(cuò)誤,使該程序的輸出結(jié)果為: Valuesare:1,2and3 Pressanykeytocontinue 源程序文件kt11_1.cpp清單如下: #include<iostream.h> classCommonBase public: intx; ; /*found*/ classDeriveCommonA:publicCommonBase public: inty; ; classDeriveCommonB:publicCommo

56、nBase public: intz; ; /*found*/ classOverlapping:publicDeriveCommonA;publicDeriveCommonB public: voidDisplay() cout<<"Valuesare:"<<DeriveCommonA:x<<","<<y<<"and"<<z<<endl; ; intmain() Overlappingov; /*found*/ ov.x=1; ov.y=2; ov.

57、z=3; ov.Display(); return0; 【試題解析】 (1)主要考查對(duì)派生類定義的理解,C+規(guī)定的繼承格式是在類名的后面加冒號(hào),之后是繼承方式和繼承類的名稱,題目中錯(cuò)誤的使用了作用域運(yùn)算符; (2)主要考查多繼承的定義,多繼承的格式基本上和單繼承相同,不過(guò)在多個(gè)基類之間應(yīng)該使用逗號(hào)分開(kāi),題目中錯(cuò)誤的使用了分號(hào),分號(hào)在C+中是結(jié)束標(biāo)志; (3)主要考查對(duì)派生類的對(duì)象訪問(wèn)的掌握,x是類CommonBase的成員,如果不加限制的訪問(wèn)就會(huì)產(chǎn)生二義性,編譯程序不知道這個(gè)x是A類的,還是B類的,所以必須使用作用域限制符“:”,為了解決這個(gè)問(wèn)題可以使用虛基類。 二、簡(jiǎn)單應(yīng)用題 請(qǐng)編寫函數(shù)fu

58、n(),該函數(shù)的功能是判斷字符串是否為回文,若是則函數(shù)返回1,主函數(shù)中輸出YES;否則返回0,主函數(shù)中輸出NO?;匚氖侵疙樧x和倒讀都一樣的字符串。 例如:字符串LEVEL是回文,而字符串123312就不是回文。 注意:部分源程序已存在文件kt11_2.cpp中。 請(qǐng)勿修改主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號(hào)中填寫若干語(yǔ)句。 文件kt11_2.cpp的內(nèi)容如下: #include<iostream.h> #include<stdio.h> #defineN80 intfun(char*str) voidmain() charsN; cout<<"Enterastring:"<<endl; gets(s); cout<<"nn" puts(s); if(fun(s) cout<<"YESn" else cout<<"NOn&quo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論