![國(guó)家二級(jí)C++機(jī)試(操作題)模擬試卷7(共26題)_第1頁(yè)](http://file4.renrendoc.com/view14/M0B/17/21/wKhkGWa8AbmAfqXUAAK6gwtB2zw417.jpg)
![國(guó)家二級(jí)C++機(jī)試(操作題)模擬試卷7(共26題)_第2頁(yè)](http://file4.renrendoc.com/view14/M0B/17/21/wKhkGWa8AbmAfqXUAAK6gwtB2zw4172.jpg)
![國(guó)家二級(jí)C++機(jī)試(操作題)模擬試卷7(共26題)_第3頁(yè)](http://file4.renrendoc.com/view14/M0B/17/21/wKhkGWa8AbmAfqXUAAK6gwtB2zw4173.jpg)
![國(guó)家二級(jí)C++機(jī)試(操作題)模擬試卷7(共26題)_第4頁(yè)](http://file4.renrendoc.com/view14/M0B/17/21/wKhkGWa8AbmAfqXUAAK6gwtB2zw4174.jpg)
![國(guó)家二級(jí)C++機(jī)試(操作題)模擬試卷7(共26題)_第5頁(yè)](http://file4.renrendoc.com/view14/M0B/17/21/wKhkGWa8AbmAfqXUAAK6gwtB2zw4175.jpg)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
國(guó)家二級(jí)C++機(jī)試(操作題)模擬試卷7(共9套)(共26題)國(guó)家二級(jí)C++機(jī)試(操作題)模擬試卷第1套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請(qǐng)打開(kāi)考生文件夾下的解決方案文件proj1,其中在編輯窗口內(nèi)顯示的主程序文件中定義有類(lèi)ABC和主函數(shù)main。程序文本中位于每行“//ERROR****found****”之后的一行語(yǔ)句有錯(cuò)誤,請(qǐng)加以改正,改正后程序的輸出結(jié)果應(yīng)該是:2123注意:只修改每個(gè)“//ERROR****found****”下面的一行,不要改動(dòng)程序中的其他任何內(nèi)容。#includeusingnamespacestd;classABC{public://ERROR*******found*******ABC(){a=0;b=0;c=0;}ABC(intas,intbb,intcc);voidSetab(){++a,++b;}intSum(){returna+b+c;}private:inta,b;constintc;};ABC::ABC(intas,intbb,intcc):c(cc){a=aa;b=bb;}intmain(){ABCx(1,2,3),y(4,5,6);ABCz,*w=&z,w->Setab();//ERROR*******found*******ints1=x.Sum()+y->Sum();cout<標(biāo)準(zhǔn)答案:(1)ABC():a(0),b(0),c(0){}(2)intsl=x.Sum()+y.Sum();(3)ints2=sl+w->Sum();知識(shí)點(diǎn)解析:(1)主要考查考生對(duì)構(gòu)造函數(shù)的掌握情況,根據(jù)私有成員的定義:constintc;可知,c為常變量,因此構(gòu)造函數(shù)必須使用成員列表初始化來(lái)給c賦初始值。(2)主要考查考生對(duì)類(lèi)的指針的掌握情況,根據(jù)主函數(shù)的第一條語(yǔ)句:ABCx(1,2,3),y(4,5,6);可知,x和y都是ABC類(lèi),但不是指針,因此它們調(diào)用ABC類(lèi)的成員函數(shù)要使用標(biāo)識(shí)符“.”,而不是“->”。(3)主要考查考生對(duì)類(lèi)的指針的掌握情況,根據(jù)主函數(shù)的第二條語(yǔ)句:ABCz,*w=&z;可知,w是ABC類(lèi)的指針,指向z,因此w調(diào)用ABC類(lèi)的成員函數(shù)時(shí)要使用標(biāo)識(shí)符“->”,而不是“.”。二、簡(jiǎn)單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、請(qǐng)打開(kāi)考生文件夾下的解決方案文件proj2,此工程中含有一個(gè)源程序文件proj2.epp。函數(shù)char*GetNum(char*src,char*buf)從sre開(kāi)始掃描下一個(gè)數(shù)字字符序列,并將其作為一個(gè)字符串取出放入字符串空間buf中。函數(shù)返回掃描的終止位置,如果返回NULL表示沒(méi)有掃描到數(shù)字字符序列。運(yùn)行程序時(shí),如果輸入的一行字符序列是ABC012XYZ378MN274WS則輸出為:Digitstring1is012Digitstring2is378Digitstring3is274注意:只在橫線(xiàn)處編寫(xiě)適當(dāng)代碼,不要?jiǎng)h除或移動(dòng)“//****found****”。//proj2.cpp#includeusingnamespacestd;char*GetNum(char*src,char*buf){while(*src!=’\0’){if(isdigit(*Src))break;src++;}if(*src==’\0’)//*********found*********______________;while(*src!=’\0’&&isdigit(*src)){//*********found*********____________;buf++;src++;}*buf=’\0’;returnRsrc;}intmain(){charstr[100],digits[20];cin.getline(str,100);char*p=str;inti=1;while((p=GetNum(p,digits))!=NULL){cout<<"Digitstring"<標(biāo)準(zhǔn)答案:intmin=x.a(chǎn)知識(shí)點(diǎn)解析:主要考查考生對(duì)友元函數(shù)的掌握情況,友元函數(shù)可以訪(fǎng)問(wèn)類(lèi)的私有數(shù)據(jù)成員,題目要求函數(shù)求出兩個(gè)數(shù)據(jù)成員的大于1的最小公因子,從2開(kāi)始往上算,因此要同時(shí)可以被兩個(gè)私有成員整除,這里用取余符號(hào)完成,取余為0即為整除。國(guó)家二級(jí)C++機(jī)試(操作題)模擬試卷第2套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請(qǐng)打開(kāi)考生文件夾下的解決方案文件proj1。程序中位于每個(gè)//ERROR****found****下一行的語(yǔ)句有錯(cuò)誤,請(qǐng)加以更正。更正后程序的輸出應(yīng)為:Thevalueis5Thevalueis10Thereare2objects.Thereare1objects.注意:只修改每個(gè)//ERROR****found****下的那一行,不要改動(dòng)程序中的其他內(nèi)容。#include<iostream>usingnamespacestd;classMyClass{public:MyClass(intvalue){//ERROR**********found**********this.value=value;count++;}//ERROR**********found**********void~MyClass(){count--;}staticintgetCount(){returncount;}intgetValue(){returnvalue;}private:intvalue;staticintcount;};//ERROR**********found**********staticintMyClass::count=0;intmain(){MyClass*p=newMyClass(5);MyClass*q=newMyClass(10);cout<<"Thevalueis"<<p->getValue()<<endl;cout<<"Thevalueis"<<q->getValue()<<endl;cout<<"Thereare"<<MyClass::getCount()<<"objects."<<endl;deletep;cout<<"Thereare"<<MyClass::getCount()<<"objects."<<endl;return0;}標(biāo)準(zhǔn)答案:(1)this->value=value;(2)~MyClass()(3)intMyClass::count=0;知識(shí)點(diǎn)解析:(1)主要考查考生對(duì)this指針的掌握,this是一個(gè)指針變量,調(diào)用成員時(shí)應(yīng)使用標(biāo)識(shí)符"->"。(2)主要考查考生對(duì)析構(gòu)函數(shù)的掌握.定義析構(gòu)函數(shù)時(shí)不能使用任何返回類(lèi)型。(3)主要考查考生對(duì)靜態(tài)成員的掌握,靜態(tài)成員賦值時(shí)不用添加static,但聲明時(shí)要使用。二、簡(jiǎn)單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、請(qǐng)打開(kāi)考生文件夾下的解決方案文件proj2,其中定義了Shape類(lèi)和Point類(lèi)。Shape類(lèi)表示抽象的形狀,其成員函數(shù)draw聲明了顯示形狀的接口。Point是Shape的派生類(lèi),表示平面直角坐標(biāo)系中的點(diǎn),其成員函數(shù)draw用于在屏幕上顯示Point對(duì)象;成員函數(shù)distance用于計(jì)算兩個(gè)點(diǎn)之間的距離。提示:在平面直角坐標(biāo)系中,點(diǎn)(x1,y2)和點(diǎn)(x2,y2)之間的距離為:d=;標(biāo)準(zhǔn)庫(kù)函數(shù)sprt用于求平方根。請(qǐng)?jiān)跈M線(xiàn)處填寫(xiě)適當(dāng)?shù)拇a并刪除橫線(xiàn),以實(shí)現(xiàn)上述類(lèi)定義。此程序的正確輸出結(jié)果應(yīng)為:(3,0)(0,4)Distance=5注意:只在橫線(xiàn)處填寫(xiě)適當(dāng)?shù)拇a,不要改動(dòng)程序中的其他內(nèi)容,也不要?jiǎng)h除或移動(dòng)"****found****"。#include<iostream>#include<math.h>usingnamespacestd;classShape{public://**********found**********______________________________virtual~Shape(){}};classPoint:publicShape{public:Point(doublex,doubley):x_(x),y_(y){}virtualvoiddraw()const;//**********found**********doubledistance(_____________)const{returnsqrt((x_-pt.x_)*(x_-pt.x_)+(y_-pt.y_)*(y_-pt.y_));}private://**********found**********____________________};voidPoint::draw()const{//**********found**********cout<<’(’<<__________<<’)’<<endl;}intmain(){Point*pt1=newPoint(3,0);Point*pt2=newPoint(0,4);Shape*s=pt1;s->draw();s=pt2;s->draw();cout<<"Distance="<<pt1->distance(*pt2)<<endl;deletept1;deletept2;return0;}標(biāo)準(zhǔn)答案:(1)virtualvoiddraw()const=0;(2)constPoint&pt(3)doublex_,y_:(4)x_<<’,’<<y_知識(shí)點(diǎn)解析:(1)主要考查考生對(duì)純虛函數(shù)的掌握,參考在派生類(lèi)中該函數(shù)的定義可得到,注意純虛函數(shù)要"=0"。(2)主要考查考生對(duì)成員函數(shù)的掌握,由函數(shù)體可知形參為constPoint&pto(3)主要考查考生對(duì)私有成員的掌握,由構(gòu)造函數(shù)可知私有成員為doublex_,y_。(4)根據(jù)題目要求輸出私有成員變量x_,y_。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、請(qǐng)打開(kāi)考生文件夾下的解決方案文件proj3,其中聲明的Matrix是一個(gè)用于表示矩陣的類(lèi)。其成員函數(shù)transpose的功能是實(shí)現(xiàn)矩陣的轉(zhuǎn)置運(yùn)算。將矩陣A的行列互換,所得到的矩陣稱(chēng)為A的轉(zhuǎn)置,記作AT。例如,若有3x3矩陣則A的轉(zhuǎn)置為AT=請(qǐng)編寫(xiě)成員函數(shù)transpose,以實(shí)現(xiàn)矩陣轉(zhuǎn)置功能。要求:補(bǔ)充編制的內(nèi)容寫(xiě)在//**********333**********與//**********666**********之間,不得修改程序的其他部分。注意:程序最后將結(jié)果輸出到文件out.dat中。//Matrix.h#include<iostream>#include<iomanip>usingnamespacestd;constintM=18;constintN=18;classMatrix{intarray[M][N];public:Matrix(){}intgetElement(inti,intj)const{returnarray[i][j];}voidsetElement(inti,intj,intvalue){array[i][j]=value;}voidtranspose();voidshow(constchar*s)const{cout<<endl<<s;for(inti=0;i<M;i++){cout<<endl;for(intj=0;j<N;j++)cout<<setw(4)<<array[i][j];}}};voidreadFromFile(constchar*,Matrix&);voidwriteToFile(char*,Matrix&);//main.cpp#include<fstream>#include"Matrix.h"voidreadFromFile(constchar*filename,Matrix&m){ifstreaminfile(filename);if(!infile){cerr<<"無(wú)法讀取輸入數(shù)據(jù)文件!\n";return;}intd;for(inti=0;i<M;i++)for(intj=0;j<N;j++){infile>>d;m.setElement(i,j,d);}}voidMatrix::transpose(){//********333********//********666********}intmain(){Matrixm;readFromFile("in.dat",m);m.show("Beforetranspose:");m.transpose();m.show("Aftertranspose:");writeToFile("",m);return0;}標(biāo)準(zhǔn)答案:for(inti=0;i<M;i++)for(intj=0;j<i;j++){inttemp=array[i][i];array[i][j]=array[j][i];array[j][i]=temp;}知識(shí)點(diǎn)解析:主要考查考生對(duì)二維數(shù)組的掌握,程序用二維數(shù)組表示矩陣,編寫(xiě)矩陣轉(zhuǎn)置功能。要實(shí)現(xiàn)矩陣的轉(zhuǎn)置,只要使矩陣中的元素array[i][j]與array[j][i]交換.程序使用循環(huán)語(yǔ)句遍歷矩陣元素,外層循環(huán)用于控制行下標(biāo),內(nèi)層循環(huán)用于控制列下標(biāo)。國(guó)家二級(jí)C++機(jī)試(操作題)模擬試卷第3套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開(kāi)考生文件夾下的源程序文件modi1.cpp,該程序運(yùn)行時(shí)有錯(cuò),請(qǐng)改正錯(cuò)誤,使得程序正確執(zhí)行,并且輸出以下語(yǔ)句:TestClass1:0TestClass2注意:不要改動(dòng)main函數(shù),不能增行或刪行,也不能更改程序的結(jié)構(gòu),錯(cuò)誤的語(yǔ)句在//******error******的下面。1#include<iostream.h>2structTestClass13{4TestClass1(inti=0)5{6m_i=i;7}8voidprint()9{10cout<<’’TestClass1:’’<<m_i<<end1;11};12intm_i;13};14classTestClass215{16public:17TestClass2()18{19}20voidprint()21{22cout<<’’TestClass2’’<<end1;23};24//********error********25private:26~TestClass2()27{28}29};30intmain()31{32//********error********33TestClass1obj1();34//********error********35TestClass2obj2();36obj1.print();37obj2.print();38return0;39}標(biāo)準(zhǔn)答案:(1)public:(2)TestClasslobj1(0);或TestClass1obj1;(3)TestClass2obj2;知識(shí)點(diǎn)解析:程序要求輸出TestClass1:0和TestClass2。從已定源程序的main主函數(shù)開(kāi)始入手,可以看出程序首先定義TestClass1和TestClass2類(lèi)型的變量,然后通過(guò)調(diào)用其中的print成員函數(shù)實(shí)現(xiàn)輸出結(jié)果。(1)第1個(gè)標(biāo)識(shí)下的“private:~TestClass2()”是析構(gòu)函數(shù),它不是私有的,所以這里應(yīng)該為“刪除private:或修改為public:”。(2)第2個(gè)標(biāo)識(shí)下的“TestClass1obj1();”語(yǔ)句是定義一個(gè)TestClass1類(lèi)型的對(duì)象obj1(),根據(jù)類(lèi)TestClass1構(gòu)造函數(shù)的定義“TestClass1(inti=0)”,知道存在整型參數(shù),應(yīng)該補(bǔ)充參數(shù),或者只是先定義一個(gè)對(duì)象名,然后在使用時(shí)補(bǔ)充參數(shù),即修改為“TestClass1obj1(0);或TestClass1obj1;”。(3)同理第3個(gè)標(biāo)識(shí)下的“TestClass2obj2();”語(yǔ)句修改為“TestClass2obj2;”。二、簡(jiǎn)單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開(kāi)考生文件夾下的源程序文件modi2.cpp。完成函數(shù)fun(char*s,inta[]),其功能是把s中出現(xiàn)的數(shù)字轉(zhuǎn)換成數(shù)字存儲(chǔ)在a[]中,然后返回轉(zhuǎn)換的個(gè)數(shù)。例如:s=’’1234abcdef567’’;則:a[]中存儲(chǔ)著1234567返回:7注意:不能修改程序的其他部分,只能修改fun()函數(shù)。1#include<iostream.h>2intfun(char*s,inta[])3{45}6intmain()7{8inta[1024];9intlen=fun(’’1234abcdef567’’,a);10for(inti=0;i<len;i++)11{12cout<<a[i]<<’’;13}14cout<<end1;15cout<<i<<end1;16return0;17}標(biāo)準(zhǔn)答案:1intj=0;2for(inti=0;s[i]!=0;i++)//字符串內(nèi)循環(huán)3{4if(s[i]>=’0’&&s[i]<=’9’)//判斷字符是否為0~9的字符5{6a[j++]=s[i]-;0’;//如果為0~9的字符,轉(zhuǎn)換為整型7}8}9returnj;//返回?cái)?shù)字個(gè)數(shù)知識(shí)點(diǎn)解析:(1)該程序功能是把字符串中出現(xiàn)的數(shù)字轉(zhuǎn)換成數(shù)字存儲(chǔ)在數(shù)組中,然后返回轉(zhuǎn)換的個(gè)數(shù)。其中,字符和整型的ASCII差為96,即為’0’的ASCII碼值。(2)從已給部分源程序的main主函數(shù)開(kāi)始入手,核心函數(shù)fun實(shí)現(xiàn)題目中要求的功能,其中intfun(char*s,inta[])中的s為要轉(zhuǎn)換的字符串,a為存放轉(zhuǎn)換為數(shù)字的數(shù)組,返回值為轉(zhuǎn)換的個(gè)數(shù)。(3)j變量用來(lái)記錄轉(zhuǎn)換的個(gè)數(shù),首先初始化為0。(4)然后利用for循環(huán)對(duì)每一個(gè)當(dāng)前字符進(jìn)行判斷是否為數(shù)字字符。(5)如果為數(shù)字字符,就將其減去字符’0’,即實(shí)現(xiàn)字符和整型的轉(zhuǎn)換。并且,將j的變量值加1。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開(kāi)考生文件夾下的源程序文件modi3.cpp。類(lèi)Person完成對(duì)人的姓名和年齡的綁定。函數(shù)fun()獲得年齡比較大的姓名。然后輸出這個(gè)姓名到屏幕。其中定義的類(lèi)并不完整,按要求完成下列操作,將類(lèi)的定義補(bǔ)充完整。(1)完成類(lèi)的構(gòu)造函數(shù),請(qǐng)?jiān)谧⑨專(zhuān)?*******1********后添加適當(dāng)?shù)恼Z(yǔ)句。(2)完成構(gòu)造函數(shù)對(duì)姓名的賦值,請(qǐng)?jiān)谧⑨專(zhuān)?*******2********后添加適當(dāng)?shù)恼Z(yǔ)句。(3)定義類(lèi)的友元函數(shù)fun(),請(qǐng)?jiān)谧⑨專(zhuān)?*******3********后添加適當(dāng)?shù)恼Z(yǔ)句。(4)補(bǔ)充函數(shù)fun()的年齡比較,請(qǐng)?jiān)谧⑨專(zhuān)?*******4********后添加適當(dāng)?shù)恼Z(yǔ)句。注意:增加代碼,或者修改代碼的位置已經(jīng)用符號(hào)表示出來(lái)。請(qǐng)不要修改其他的程序代碼。1#include<iostream.h>2classPerson3{4public:5//********1********67{8inti;9for(i=0;sUserrName[i]!=0;i++)10{11m_UserName[i]=sUserrName[i];12}13//********2********1415m_Old=nOld;16}17private:18charm_UserName[32];19intm_Old;20//********3********2122};23voidfun(char*s,Person&person1,Person&person2)24{25//********4********26if()27{28for(inti=0;person1.m_UserName[i]!=0;i++)29{30s[i]=person1.m_UserName[i];31s[i+1]=0;32}33}34else35{36for(inti=0;person2.m_UserName[i]!=0;i++)37{38s[i]=person2.m_UserName[i];39s[i+1]=0;40}41}42}43voidmain()44{45chars[32];46Personp1(’’abc’’,20);47Personp2(’’def’’,30);48fun(s,p1,p2);49cout<<s<<end1;50return;51}標(biāo)準(zhǔn)答案:(1)添加語(yǔ)句:Person(char*sUserrName,intnO1d)(2)添加語(yǔ)句:m_UserName[i]=0;(3)添加語(yǔ)句:friendvoidfun(char*s,Person&person1,Person&person2);(4)將“if()”補(bǔ)充完整為:if(person1.m_O1d>person2.m_O1d)知識(shí)點(diǎn)解析:在VC環(huán)境下打開(kāi)程序,根據(jù)題干給出的幾條功能要求,對(duì)程序中給出注釋下的內(nèi)容逐個(gè)補(bǔ)全或修改。從已定源程序的main主函數(shù)開(kāi)始入手,函數(shù)fun是輸出年齡較大的姓名,類(lèi)Person記錄了姓名和年齡。(1)題目1要求“完成類(lèi)的構(gòu)造函數(shù)”。根據(jù)“classPerson”語(yǔ)句知道Person為類(lèi),所以類(lèi)Person的構(gòu)造函數(shù)名為Person,根據(jù)第1個(gè)標(biāo)識(shí)下的大括弧中的語(yǔ)句知道函數(shù)中的參數(shù)為數(shù)組sUserrName存放姓名,整型nOld存放年齡,所以補(bǔ)充構(gòu)造函數(shù)定義為“Person(char水sUserrName,intnOld)”。(2)題目2要求“完成構(gòu)造函數(shù)對(duì)姓名的賦值”。根據(jù)(1)中的分析,在第2個(gè)標(biāo)識(shí)下補(bǔ)全姓名賦值,即“m_UserName[i]=0;”。(3)題目3要求“定義類(lèi)的友元函數(shù)fun()”。在C++中,如果在本類(lèi)以外的其它地方定義了一個(gè)函數(shù),在類(lèi)體中是用friend對(duì)該函數(shù)進(jìn)行聲明的,此函數(shù)稱(chēng)為本類(lèi)的友元函數(shù),并且能夠調(diào)用本類(lèi)中的成員變量。程序中的fun函數(shù)定義為“voidfun(char*s,Person&person1,Person&person2)”,所以聲明fun()為類(lèi)Person的友元函數(shù),即這里補(bǔ)全“friendvoidfun(char*s,Person&person1,Person&person2);”。(4)題目4要求“補(bǔ)充函數(shù)fun()的年齡比較”。類(lèi)Person中年齡的變量為m_O1d,根據(jù)C++中類(lèi)變量的調(diào)用格式補(bǔ)充第4個(gè)標(biāo)識(shí)下,if判斷中的條件語(yǔ)句,即“if(person1.m_O1d>person2.m_O1d)”。國(guó)家二級(jí)C++機(jī)試(操作題)模擬試卷第4套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請(qǐng)打開(kāi)考生文件夾下的解決方案文件proj1,程序中位于每個(gè)“//ERROR****found****”之后的一行語(yǔ)句有錯(cuò)誤,請(qǐng)加以改正。改正后程序的輸出結(jié)果應(yīng)為:value=63number=1注意:只修改每個(gè)“//ERROR****found****”下的那一行,不要改動(dòng)程序中的其他內(nèi)容。#include<iostream>usingnamespacestd;classMyClass{int*p;constintN;public://ERROR*******found*******MyClass(intval):N=1{P=newint;*P=val;}//ERROR*******found*******~MyClass(){delete*p;}friendvoidprint(MyClasS&obj);};//ERROR*******found*******voidMyClass::print(MyClass&obj){cout<<"value="<<*(obj.p)<<endl;cout<<"number="<<o(jì)bj.N<<endl;}intmain(){MyClassobj(63);print(obj);return0;}標(biāo)準(zhǔn)答案:(1)MyClass(intval):N(1)(2)~MyClass(){delete[]p;}(3)voidprint(MyClass&obj)知識(shí)點(diǎn)解析:(1)主要考查考生對(duì)構(gòu)造函數(shù)的掌握,在這里不能使用賦值語(yǔ)句。(2)主要考查考生對(duì)析構(gòu)函數(shù)的掌握,析構(gòu)函數(shù)的delete語(yǔ)句要使用標(biāo)識(shí)符“[]”,即delete[]p;。(3)主要考查考生對(duì)友元函數(shù)的掌握,友元函數(shù)并不屬于類(lèi),因此定義時(shí)前面不用加類(lèi)名和作用域符號(hào)。二、簡(jiǎn)單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、請(qǐng)打開(kāi)考生文件夾下的解決方案文件proj2,此工程中包含一個(gè)程序文件main.cpp,其中有“班級(jí)”類(lèi)Class和“學(xué)生”類(lèi)Student的定義,還有主函數(shù)main的定義。在主函數(shù)中定義了兩個(gè)“學(xué)生”對(duì)象,他們屬于同一班級(jí)。程序展示,當(dāng)該班級(jí)換教室后,這兩個(gè)人的教室也同時(shí)得到改變。請(qǐng)?jiān)跈M線(xiàn)處填寫(xiě)適當(dāng)?shù)拇a,然后刪除橫線(xiàn),以實(shí)現(xiàn)上述類(lèi)定義。此程序的正確輸出結(jié)果應(yīng)為:改換教室前:學(xué)號(hào):0789姓名:張三班級(jí):062113教室:521學(xué)號(hào):0513姓名:李四班級(jí):062113教室:521改換教室后:學(xué)號(hào):0789姓名:張三班級(jí):062113教室:311學(xué)號(hào):0513姓名:李四班級(jí):062113教室:311注意:只能在橫線(xiàn)處填寫(xiě)適當(dāng)?shù)拇a,不要改動(dòng)程序中的其他內(nèi)容。#include<iostream>usingnamespacestd;classClass{//“班級(jí)”類(lèi)public:Class(constchar*id,constchar*Eoom){strcpy(classid,id);//**********found**********_____________}constchar*getClassTD()const{returnclass_id;}//返回班號(hào)//**********found**********constchar*getClassEoom()const{________}//返回所在教室房號(hào)voidchangeRoomTo(constchar*new_Eoom){//改換到另一個(gè)指定房號(hào)的教室strcpy(classroom,new_room);}private:charclass_id[20];//班號(hào)charclassroom[20];//所在教室房號(hào)};classStudent{//“學(xué)生”類(lèi)charmy_id[10];//學(xué)號(hào)charmy_name[20];//姓名Class&my_class;//所在教室public://**********found**********Student(constchar*the_id,constchar*the_name,Class&the_class):__________{strcpy(my_id,the_id);strcpy(my_name,the_name);}constchar*getID()const{returnmy_id;}constchar*getName()const{returnmy_name;}ClassgetClass()const{returnmy_class;}};voidshowStudent(Student*stu){cout<<"學(xué)號(hào):"<<stu->getID()<<"";cout<<"姓名:"<<stu->getName()<<"";cout<<"班級(jí):"<<stu->getClass().getClasSID()<<"";cout<<"教室:"<<stu->getClass().getClassroom()<<endl;}intmain(){ClasScla("062113","521");StudentZhang("0789","張三",cla),Li("0513","李四",cla);cout<<"改換教室前:"<<endl;showStudent(&Zhang);showStudent(&Li);//062113班的教室由521改換到311//**********found**********________cout<<"改換教室后:"<<endl;showStudent(&Zhang);showStudent(&Li);return0;}標(biāo)準(zhǔn)答案:(1)strcpy(classroom,room);(2)returnclassroom;(3)my_class(the_class)(4)cla.changeRoomTo("311");知識(shí)點(diǎn)解析:(1)主要考查考生對(duì)strcpy函數(shù)的掌握情況,根據(jù)上一條語(yǔ)句:strcpy(class_id,id);可知,這條語(yǔ)句要復(fù)制字符串room,因此使用strcpy函數(shù)復(fù)制,即strcpy(classroom,room);。(2)主要考查考生對(duì)函數(shù)返回值的掌握情況,根據(jù)函數(shù)要求:返回所在教室房號(hào)及函數(shù)要求返回的類(lèi)型為constchar*,可以得出這里直接使用return語(yǔ)句返回classroom即可。(3)主要考查考生對(duì)構(gòu)造函數(shù)的掌握情況,先看函數(shù)體中:strcpy(my_id,the_id);strcpy(my_name,the_name):可知只有參數(shù)Class&the_class未使用,因此在這里使用成員列表初始化給my_class賦初始值。(4)主要考查考生對(duì)成員函數(shù)調(diào)用的掌握,程序要求052113班的教室由521改換到311。在類(lèi)Class中已經(jīng)定義了函數(shù):voidchangeRoomTo(constchar*new_room),因此直接調(diào)用函數(shù)changeRoomTo即可。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、請(qǐng)打開(kāi)考生文件夾下的解決方案文件proj3,其中聲明的DataList類(lèi),是一個(gè)用于表示數(shù)據(jù)表的類(lèi)。sort成員函數(shù)的功能是將當(dāng)前數(shù)據(jù)表中的元素升序排列。請(qǐng)編寫(xiě)這個(gè)sort函數(shù)。程序的正確輸出應(yīng)為:排序前:7,1,3,11,6,9,12,10,8,4,5,2排序后:1,2,3,4,5,6,7,8,9,10,11,12要求:補(bǔ)充編制的內(nèi)容寫(xiě)在“//********333********”與“//******666******”兩行之間。不得修改程序的其他部分。注意:程序最后將結(jié)果輸出到文件out.dat中。輸出函數(shù)writeToFile已經(jīng)編譯為obj文件,并且在本程序調(diào)用。//DataList.h#include<iostream>usingnamespacestd;classDataList{//數(shù)據(jù)表類(lèi)intlen;double*d;public:DataLlst(intlen,doubledata[]=NULL);~DataList(){delete[]d;}intlength()const{returnlen;)//數(shù)據(jù)表長(zhǎng)度(即數(shù)據(jù)元素的個(gè)數(shù))doublegetElement(inti)consL{returnd[i];}voidsort();//數(shù)據(jù)表排序voidshow()const;//顯示數(shù)據(jù)表};voidwriteToFile(char*,constDataList&);//main.cpp#include"DataList.h"DataList::DataList(intlen,doubledata[]):len(fen)(d=newdouble[len];for(inti=0;i<len;i++)d[i]=(data==NULL?0.0:data[i]);}voidDataList::sort(){//數(shù)據(jù)表排序//********333********//********666********}voidDataList::show()const{//顯示數(shù)據(jù)表for(inti=0;i<len一1;i++)tout<<d[i]<<",";couL<<d[len—1]<<endl;}intmain(){doubles[]={7,1,3,11,6,9,12,10,8,4,5,2};DaLaListlist(12,s);cout<<"排序前:";list.show();list.soft();cout<<endl<<”排序后:”;list.show();writeToFile("",list);return0;}標(biāo)準(zhǔn)答案:for(int1=0;i<len;++1)//從頭遍歷數(shù)組dfor(intj=i;j<len;++j)//從i+1處遍歷數(shù)組dif(d[i]>d[j])//d[i]和d[j]比較人,如果大于,就d[i]和d[j]做換{inttemp=d[i];//把臨時(shí)整型變量temp賦值為d[i]d[i]=d[j];//把d[j]賦值給d[i]d[j]=temp;//把temp值賦給d[j]}知識(shí)點(diǎn)解析:本題使用最簡(jiǎn)單的冒泡排序算法,首先明確要排序的動(dòng)態(tài)數(shù)組d,其長(zhǎng)度為len,在此可以使用兩個(gè)下標(biāo)i和j相比較,當(dāng)d[i]>d[j]時(shí),數(shù)組內(nèi)的值利用中間變量temp進(jìn)行交換。國(guó)家二級(jí)C++機(jī)試(操作題)模擬試卷第5套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開(kāi)考生文件夾下的源程序文件modi1.cpp,該程序運(yùn)行時(shí)有錯(cuò),請(qǐng)改正其中的錯(cuò)誤,使程序正確運(yùn)行,并且使程序輸出的結(jié)果為:HelloVisualC++!HelloVisualC++!!注意:錯(cuò)誤的語(yǔ)句在//******error******的下面,修改該語(yǔ)句即可。1#include<iostream.h>2classCMyObject3{4public:5CMyObject()6{7//******error******8cout<<’’Hello,9’’VisualC++!’’<<end1;10}11CMyObject(intn)12{13//******error******14cout<<’’Hello,\n15visualC++!!’’<<end1;16}17//******error******18∧CMyObject()19{20}21};22voidmain()23{24CMyObjectobj1;25CMyObjectobj2(0);26}標(biāo)準(zhǔn)答案:(1)cout<<’’Hello,’’(2)cout<<’’Hello,\(3)~CMyObject()知識(shí)點(diǎn)解析:程序當(dāng)中定義了類(lèi)CMyObject,含有兩個(gè)構(gòu)造函數(shù)和一個(gè)析構(gòu)函數(shù),在構(gòu)造函數(shù)內(nèi)部均使用cou輸出一段字符。(1)由程序的運(yùn)行結(jié)果可知,語(yǔ)句CMyObjectobj1;定義obj1對(duì)象調(diào)用默認(rèn)的構(gòu)造函數(shù),此時(shí)屏幕上輸出“HelloVisualC++!”,cout流中的數(shù)據(jù)是用流插入運(yùn)算符“<<”順序加入的,第1個(gè)標(biāo)識(shí)下“Hello,”字符串插在輸出流中,因此必須加雙引號(hào)引用起來(lái),即第1個(gè)標(biāo)識(shí)下應(yīng)該為“cout<<’’Hello,’’”。(2)第2個(gè)標(biāo)識(shí)下“\n”表示換行,與要求的輸出結(jié)果不同,因此第2個(gè)標(biāo)識(shí)下應(yīng)改為“cout<<’’Hello,\”。(3)析構(gòu)函數(shù)是一個(gè)特殊的函數(shù),其函數(shù)名與類(lèi)名相同,并在其名加“~”,用來(lái)與構(gòu)造函數(shù)加以區(qū)別,因此第3個(gè)標(biāo)識(shí)下應(yīng)改為“~CMyObject()”。二、簡(jiǎn)單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開(kāi)考生文件夾下的源程序文件modi2.cpp。閱讀下列函數(shù)說(shuō)明和代碼。函數(shù)MergeAndSort(ints[],inte[],inta[],intm,intn)實(shí)現(xiàn)將兩個(gè)數(shù)組合并。這兩個(gè)數(shù)組已經(jīng)有序,按照由小到大的順序排列。例如:e[]={1,3,5,6},m是數(shù)組e的長(zhǎng)度,即為4。a[]={2,4,5,7,11,13},n是數(shù)組a的長(zhǎng)度,即為6。則執(zhí)行的結(jié)果為:s[]={1,2,3,4,5,6,7,11,13}補(bǔ)充函數(shù)fun(ints[],inte[],inta[],intm,intn),使之實(shí)現(xiàn)上述要求。注意:請(qǐng)勿改動(dòng)主函數(shù)。1#include<iostream.h>2voidMergeAndSort(ints[],inte[],inta[],intm,intn]3{45}6intmain()7{8intdata[20],i;9inta[]={1,3,5,6};10intb[]={2,4,5,7,11,13};11cout<<’’a[]=’’;12for(i=0;i<4;i++)13cout<<a[i]<<’,’;14cout<<end1;15cout<<’’b[]=’’;16for(i=0;i<6;i++)17cout<<b[i]<<’,’;18cout<<end1;19MergeAndSort(data,a,b,4,6);20cout<<’’s[]=’’;21for(i=0;i<9;i++)22cout<<data[i]<<’,’;23cout<<end124return0;25}標(biāo)準(zhǔn)答案:1inti,j,k;2i=0;3j=0;4k=0;5while(i<m&&:j<n)6{7if(e[i]<a[j])8{9s[k++]=e[i++];//取小的,因?yàn)閺男〉酱笈判?0}11elseif(e[i]==a[j])//相等,取e[i]或a[j]都可12{13s[k++]=e[i];14i++;15j++;16}17else//e[i]>a[j],取小的a[j]18{19s[k++]=a[j++];20}21}22while(i<m)s[k++]=e[i++];//如果數(shù)組e后面還有沒(méi)有加進(jìn)來(lái)的元素,則加進(jìn)去23while(j<n)s[k++]=a[j++];//如果數(shù)組a后面還有沒(méi)有加進(jìn)來(lái)的元素,則加進(jìn)去知識(shí)點(diǎn)解析:函數(shù)MergeAndSort(ints[],inte[],inta[],intm,intn)實(shí)現(xiàn)將數(shù)組e和數(shù)組a的合并,這兩個(gè)數(shù)組已經(jīng)照由小到大的順序排列,因此只需逐個(gè)比較e數(shù)組和a數(shù)組的元素值,每次取兩個(gè)元素值的小的,如果相等則取兩個(gè)當(dāng)中的任意一個(gè)均可。(1)由審題分析可知,可設(shè)置循環(huán)來(lái)逐個(gè)讀取e數(shù)組和a數(shù)組的元素值,然后選擇小的元素放在數(shù)組s中,如果相等則取a數(shù)組元素或e數(shù)組元素均可,可以利用ifelse語(yǔ)句來(lái)進(jìn)行判斷。(2)由于數(shù)組e和數(shù)組a長(zhǎng)度可能不一定相同,因此在循環(huán)結(jié)束之后,還需要把長(zhǎng)度長(zhǎng)的數(shù)組的剩余的元素添加到s數(shù)字中,即循環(huán)結(jié)束后如果e數(shù)組內(nèi)還有字符的話(huà)把e數(shù)組內(nèi)剩下的字符添加到S數(shù)組內(nèi),同樣如果a數(shù)組內(nèi)還有字符的話(huà)把a(bǔ)數(shù)組內(nèi)剩下的字符添加到s數(shù)組內(nèi)。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開(kāi)考生文件夾下的源程序文件modi3.cpp。其中定義的類(lèi)并不完整,按要求完成下列操作,將類(lèi)的定義補(bǔ)充完整。完成以下功能:(I)定義CMyTime的私有成員函數(shù)m_year、m_month類(lèi)型為int,請(qǐng)?jiān)谧⑨專(zhuān)?*******1********后添加適當(dāng)?shù)恼Z(yǔ)句。(2)補(bǔ)充完成CMyTime的構(gòu)造函數(shù),完成對(duì)m_year、m_month的賦值,請(qǐng)?jiān)谧⑨專(zhuān)?*******2********后添加適當(dāng)?shù)恼Z(yǔ)句。(3)完成print()的輸出,請(qǐng)?jiān)谧⑨專(zhuān)?*******3********后添加適當(dāng)?shù)恼Z(yǔ)句。輸出格式如下:CurrentTimeyear:xxmonth:xx注意:xx表示兩位0~9的數(shù)字,如CurrentTimeyear:08month:04。(4)完成對(duì)month的增加函數(shù)AddMonth(intm),請(qǐng)?jiān)谧⑨專(zhuān)?*******4********后添加適當(dāng)?shù)恼Z(yǔ)句。注意:除在指定位置添加語(yǔ)句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。1#include<iostream.h>2classCMyTime3{4private:5//********1********67public:8CMyTime(intyear,intmonth)9{10//********2********1112}13voiddisplay()14{15charyearChar[3];16charmonthChar[3];17yearChar[0]=(m_year%100)/10+’0’;18yearChar[1]=(m_year%10)+’0’;19monthChar[0]=(m_month%10)/10+’0’’;20monthChar[1]=(m_month%10)+’0’;21//********3********2223cout<<’’CurrentTime¨<<¨year:’’<<yearChar<<¨month:’’<<monthChar<<end1;24}25voidAddMonth(intm)26{27m_month=m_month-1+m;28//********4********2930m_month=m_month%12+1;31}32voidAddYear(intn)33{34m_year=m_year+n;35}36};37intmain()38{39CMyTimemyTime(2006,11);40myTime.AddMonth(5);41myTime.display();42myTime.AddYear(1);43myTime.display();44return0;45}標(biāo)準(zhǔn)答案:(1)添加語(yǔ)句:intm_year,m_month;(2)添加語(yǔ)句:m_year:year;m_month=month;(3)添加語(yǔ)句:yearChar[2]=0;monthChar[2]=0;(4)添加語(yǔ)句:m_year+=m_month/12;或m_year=m_year+m_month/12;知識(shí)點(diǎn)解析:程序中定義了類(lèi)CMyTime,含有m_year和m_month兩個(gè)成員變量,成員函數(shù)display()顯示成員變量的值,AddMonth(intm)和AddYear(intn)函數(shù)分別改變m_month和m_year個(gè)成員變量的值。(1)第1個(gè)標(biāo)識(shí)下添加CMyTime的私有成員變量m_year、m_month的聲明,因此第1個(gè)標(biāo)識(shí)下應(yīng)添加“intm_year,m_month;(2)第2個(gè)標(biāo)識(shí)下完成類(lèi)成員構(gòu)造函數(shù)變量的初始化,即將參數(shù)分別賦值給m_year和m_month,因此第2個(gè)標(biāo)識(shí)下應(yīng)添加“m_year=year;m_month=month;”。(3)第3個(gè)標(biāo)識(shí)下準(zhǔn)備輸出yearChar數(shù)組和monthChar數(shù)組,字符數(shù)組的最后一個(gè)字符應(yīng)該為NULL(0),因此第3個(gè)標(biāo)識(shí)下應(yīng)添加“yearChar[2]=0;monthChar[2]=0;”。(4)m_month和參數(shù)之和賦值給m_month,其和可能超過(guò)12,如果超過(guò)12表示下一年了,因此m_year應(yīng)該加1,故先判斷m_month是否比12大,可取m_onth/12和m_year相加,如果m_month沒(méi)有超過(guò)12則m_month/12=0,反之則為1,第4標(biāo)識(shí)下應(yīng)添加“m_year+=m_month/12;或m_year=m_year+m_month/12;”。國(guó)家二級(jí)C++機(jī)試(操作題)模擬試卷第6套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開(kāi)考生文件夾下的源程序文件modi1.cpp,該程序運(yùn)行時(shí)有錯(cuò)誤,請(qǐng)改正錯(cuò)誤,使得程序輸出:Hellotest注意:不要改動(dòng)main函數(shù),不能增行或刪行,也不能更改程序的結(jié)構(gòu),錯(cuò)誤的語(yǔ)句在//******error******的下面。1#include<iostream>2//********error********3template<T>4voidfun(Tt)5{6std::cout<<’’test’’<<std::end1;7}8//********error********9template<bool>10voidfun(boolt)11{12std::cout<<(t?’’Hello’’:’’Hi’’)<<std::endlj13}14intmain()15{16//********error********17boolflag=TRUE;18fun(flag);19fun((int)flag);20return0;21}標(biāo)準(zhǔn)答案:(1)template<classT>(2)刪除“template<bool>”(3)boolflag=true;知識(shí)點(diǎn)解析:程序要求輸出字符串Hellotest。從已定源程序的main主函數(shù)開(kāi)始入手,調(diào)用函數(shù)fun實(shí)現(xiàn)字符的輸出。(1)C++中的模板類(lèi)格式為template<classT>,所以將題目中程序中的第1個(gè)標(biāo)識(shí)下語(yǔ)句“template<T>”修改為“template<classT>”。(2)在第2個(gè)標(biāo)識(shí)下的“voidfun(boolt)”函數(shù)中,其中t變量為布爾型變量,是C++中的基礎(chǔ)變量,并不是模板變量,并沒(méi)有使用到模板類(lèi),所以刪除第2個(gè)標(biāo)識(shí)下的模板類(lèi)型定義語(yǔ)句。(3)第3個(gè)標(biāo)識(shí)下的“boolflag=TRUE;”是聲明布爾型變量flag,并將其值賦為邏輯真。而TRUE并不是合法值,C++中區(qū)分大小寫(xiě),所以邏輯真值應(yīng)為true,即“boolflag=true;”。二、簡(jiǎn)單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開(kāi)考生文件夾下的源程序文件modi2.cpp。請(qǐng)完成函數(shù)fun(char*s),該函數(shù)完成以下功能:(1)把s中的大寫(xiě)字母轉(zhuǎn)換成小寫(xiě)字母,把其中的小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)字母。并且在函數(shù)中調(diào)用寫(xiě)函數(shù)WriteFile()將結(jié)果輸出到modi2.txt文件中。例如:s=’’helloTEST’’,則結(jié)果為:s=’’HELLOtest’’(2)完成函數(shù)WriteFile(char*s),把字符串輸入文件中。提示:打開(kāi)文件使用的第二參數(shù)為ios_base::binarylios_base::app。注意:不要改動(dòng)main()函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)。1#include<iostream>2#include<fstream>4#include<cmath>4usingnamespacestd;5voidWriteFile(char*s)6{78}9voidfun(char*s)10{1112}13voidClearFile()14{15Ofstreamout1;16out1.open(’’modi2.txt’’);17out1.close();18}19intmain()20{21ClearFile();22chars[1024];23cout<<’’pleaseinputastring:’’<<end1;24cin.getline(s,1024);25fun(s);26return0;27}標(biāo)準(zhǔn)答案:(1)voidWriteFile(char*s)中的命令語(yǔ)句:1ofstreamont1;2out1.open(’’modi2.txt’’,ios_base::binary|ios_base::app);//打開(kāi)文件modi23out1<<s;//寫(xiě)入字符串s4out1.close();(2)voidfun(char*s)中的命令語(yǔ)句:1for(inti=0;s[i]!=0;i++)//循環(huán)判斷每一個(gè)字符2{3if(s[i]>=’A’&&s[i]<=’Z’)//如果是大寫(xiě)字符,轉(zhuǎn)換為小寫(xiě)字符4{5s[i]=s[i]=’A’+’a’;//’s[i]-’A’+’a’等于字符s[i]+32’6}7Elseif(s[i]>=’a’&&s[i]<=’Z’)//如果是小寫(xiě)字符,轉(zhuǎn)換為大寫(xiě)字符8{9s[i]=s[i]-’a’+’A’;//’s[i]-’a’+’A’等于字符s[i]-3210}11}12WriteFile(s);知識(shí)點(diǎn)解析:(1)本題要求實(shí)現(xiàn)兩個(gè)函數(shù)的功能,其中WriteFile(char*s)實(shí)現(xiàn)把字符串輸入到文件中;fun(char*s)函數(shù)實(shí)現(xiàn)大寫(xiě)字母轉(zhuǎn)換成小寫(xiě)字母,把其中的小寫(xiě)字母轉(zhuǎn)換成大寫(xiě)字母。其中大小寫(xiě)字母之間的ASCII碼差為32。(2)從已給部分源程序的main主函數(shù)開(kāi)始入手,首先實(shí)現(xiàn)WriteFile函數(shù),然后再實(shí)現(xiàn)fun函數(shù),并在其中調(diào)用WriteFile函數(shù)。(3)在WriteFile(char*s)函數(shù)中,利用標(biāo)準(zhǔn)流ofstream實(shí)現(xiàn)字符串寫(xiě)入文件modi2.txt。(4)在fun函數(shù)中,利用for循環(huán)逐個(gè)判斷字符是大寫(xiě)還是小寫(xiě)。(5)如果是大寫(xiě),那么加上32實(shí)現(xiàn)大寫(xiě)轉(zhuǎn)換為小寫(xiě)。否則,就減去32,實(shí)現(xiàn)小寫(xiě)到大寫(xiě)的轉(zhuǎn)換。最后調(diào)用前面實(shí)現(xiàn)的WriteFile函數(shù),將字符串寫(xiě)入文件。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開(kāi)考生文件夾下的源程序文件modi3.cpp。通過(guò)繼承完成輸入到屏幕指定的信息:TestClassATestClassBTestClassC其中定義的類(lèi)并不完整,按要求完成下列操作,將類(lèi)的定義補(bǔ)充完整。(1)完成類(lèi)B虛繼承于A,請(qǐng)?jiān)谧⑨專(zhuān)?***************后添加適當(dāng)?shù)恼Z(yǔ)句。(2)完成類(lèi)C虛繼承于A,請(qǐng)?jiān)谧⑨專(zhuān)?*******2********后添加適當(dāng)?shù)恼Z(yǔ)句。(3)完成類(lèi)D繼承于B,C,請(qǐng)?jiān)谧⑨專(zhuān)?*******3********后添加適當(dāng)?shù)恼Z(yǔ)句。(4)函數(shù)fun通過(guò)調(diào)用基類(lèi)的fun,完成所輸出的內(nèi)容,請(qǐng)?jiān)谧⑨專(zhuān)?*****4******后添加適當(dāng)?shù)恼Z(yǔ)句。注意:增加代碼,或者修改代碼的位置已經(jīng)用符號(hào)表示出來(lái)。請(qǐng)不要修改其他的程序代碼。1#include<iostream.h>2ClassTestClassA3{4public:5voidfun(){6cout<<’’TestClassA’’<<end1;7}8};9//********1********10classTestClassB11{12public:13voidfun()14{15cout<<’’TestClassB’’<<end1;16}17};18//********2********19classTestClassC20{21public:22voidfun()23{24cout<<’’TestClassC’’<<end1;25}26};27//********3********28classTestClassD29{30public:31voidfun()32{33//********4********3435}36};37voidmain()38{39TestClasSDtest;40test.fun();41return;42};標(biāo)準(zhǔn)答案:(1)將“classTestClassB:”補(bǔ)充完整為:classTestClassB:virtualpublicTestClassA(2)將“classTestClassC:”補(bǔ)充完整為:classTestClassC:virtualpublicTestClassA(3)將“classTestClassD:”補(bǔ)充完整為:classTestClassD:publicTestClassB,publicTestClassC(4)添加語(yǔ)句:TestClassA::fun();TestClassB::fun();TestClassC::fun();知識(shí)點(diǎn)解析:在VC環(huán)境下打開(kāi)程序,根據(jù)題干給出的幾條功能要求,對(duì)程序中給出注釋下的內(nèi)容逐個(gè)補(bǔ)全或修改。從已定源程序的main主函數(shù)開(kāi)始入手,可以看出程序通過(guò)調(diào)用類(lèi)和函數(shù)fun實(shí)現(xiàn)各種輸出操作。(1)題目1要求“完成類(lèi)B虛繼承于A”。在C++中,聲明虛基類(lèi)的一般形式為:class派生類(lèi)名:virtual繼承方式基類(lèi)名,由題目知道TestClassA為基類(lèi),TestClassB為派生類(lèi),所以第1個(gè)標(biāo)識(shí)下修改為“classTestClassB:virtualpublicTIestClassA”。(2)同(1),題目2和題目3中要求的標(biāo)識(shí)2和3下的語(yǔ)句修改為“classTestClassC:virtualpublicTestClassA”和“classTestClassD:publicTestClassB,publicTestClassC”。(3)題目4要求“函數(shù)fun通過(guò)調(diào)用基類(lèi)的fun,完成所輸出的內(nèi)容”。在C++中調(diào)用基類(lèi)的成員函數(shù),要使用作用域限定符“::”,類(lèi)名A::函數(shù)fun,就是調(diào)用類(lèi)A的函數(shù)fun,根據(jù)題目中的要求補(bǔ)全對(duì)類(lèi)TestClassA、TestClassB以及TestClassC中的fun函數(shù),即:TestClassA::fun();TestClassB::fun();TestClassC::fun();國(guó)家二級(jí)C++機(jī)試(操作題)模擬試卷第7套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開(kāi)考生文件夾下的源程序文件modi1.cpp,該程序運(yùn)行時(shí)有錯(cuò)誤,請(qǐng)改正其中的錯(cuò)誤,使程序正確運(yùn)行。并且使程序輸出的結(jié)果為:OK注意:錯(cuò)誤的語(yǔ)句在//******error******的下面,修改該語(yǔ)句即可。1#include<iostream.h>2classCBase3{4public:5CBase()6{7a=b=0;8}9private:10inta,b;11};12classCDerive1:publicCBase13{14public:15CDerivel()16{17}18//******error******19virtualvoidfunc();20};21classCDerive2:publicCDerive122{23public:24CDerive2()25{26a=0;27b=0;28}29voidfunc()30{31//******error******32cout<<’’OK’’<end1;33}34private:35inta;36intb;37};38voidmain()39{40CDerive2obj;41//******error******42CDerive1*p=(CDerivel*)obj;43p->func();44}標(biāo)準(zhǔn)答案:(1)virtualvoidfunc()=0;(2)cout<<’’OK’’<<end1;(3)CDerivel*p=(CDerive1*)&obj;知識(shí)點(diǎn)解析:程序中定義了類(lèi)CBase、CDerive1和CDerive2,類(lèi)CDerive1公有派生于類(lèi)CBase,CDerive2公有派生于類(lèi)CDerive1,在類(lèi)CDerive1中定義了虛函數(shù)func(),但是沒(méi)有給出具體實(shí)現(xiàn),派生類(lèi)CDerive2中給出了func()函數(shù)的具體實(shí)現(xiàn),因此CDerive1類(lèi)中的func()函數(shù)是純虛函數(shù)。(1)由審題分析可知,CDerive1類(lèi)中的func()函數(shù)是純虛函數(shù),純虛函數(shù)的定義格式為:virtual<函數(shù)類(lèi)型><函數(shù)名>(<參數(shù)表>)=0,因此第1個(gè)標(biāo)識(shí)下應(yīng)為“virtualvoidfunc()=0;”。func()函數(shù)沒(méi)有參數(shù)表。(2)編譯程序后發(fā)現(xiàn)第2個(gè)標(biāo)識(shí)下有錯(cuò)誤,cout流中的數(shù)據(jù)是用流插入運(yùn)算符“<<”順序加入的,因此“<”不正確,應(yīng)改成“cout<<"OK’’<<end1;”。(3)函數(shù)的調(diào)用方式有2種:非多態(tài)調(diào)用和多態(tài)調(diào)用,非多態(tài)調(diào)用是指不使用指針或引用的直接調(diào)用,多態(tài)調(diào)用是指通過(guò)對(duì)象的指針或引用的調(diào)用,在主函數(shù)中定義了CDerive1*p,p是指向基類(lèi)CDerive1的指針,因此是多態(tài)調(diào)用方式,即通過(guò)對(duì)象的指針來(lái)調(diào)用,應(yīng)該把派生類(lèi)對(duì)象的地址賦給p,而不是對(duì)象名,因此第3個(gè)標(biāo)識(shí)下應(yīng)改為“CDerive1*p=(CDerive1*)&obj;”。二、簡(jiǎn)單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開(kāi)考生文件夾下的源程序文件modi2.cpp。閱讀下列函數(shù)說(shuō)明和代碼。函數(shù)func(intd[],intn)的功能是將長(zhǎng)度為num的數(shù)組d的每一個(gè)數(shù)字是奇數(shù)的擴(kuò)大l倍,并存儲(chǔ)到數(shù)組d中。例如:123456789返回:226410614818將fune(intd[],mtnum)補(bǔ)充完整。注意:請(qǐng)勿改動(dòng)主函數(shù)。1#include<iostream.h>2voidfunc(intd[],intnum)3{45}6intmain()7{8intData[]={1,2,3,4,5,6,7,8,9};9func(Data,9);10for(inti=0,i<sizeof(Data)/sizeof(int);i++)11{12cout<<Data[i]<<’’;13}14cout<<end1;15return0;16}標(biāo)準(zhǔn)答案:1for(inti=0;i<num;i++)2{3if(d[i]%2!=0)4d[i]=2*d[i];5}知識(shí)點(diǎn)解析:函數(shù)func(intd[],intn)功能是將長(zhǎng)度為num的數(shù)組d的每一個(gè)數(shù)字是奇數(shù)的擴(kuò)大1倍,并存儲(chǔ)到數(shù)組d中,因此可利用循環(huán)來(lái)查找該數(shù)組,如果該元素為奇數(shù)則變?yōu)樵瓉?lái)的兩倍。(1)由審題分析可知,利用循環(huán)來(lái)逐個(gè)判斷d[]中的元素,d[]中元素個(gè)數(shù)為num,因此循環(huán)變量從0變化至num。(2)在循環(huán)內(nèi),用if判斷該元素是不是奇數(shù),即if(d[i]%2!=0),將滿(mǎn)足條件的d[i]擴(kuò)大一倍。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開(kāi)考生文件夾下的源程序文件modi3.cpp。其中定義的類(lèi)并不完整,按要求完成下列操作,將類(lèi)的定義補(bǔ)充完整。完成以下功能:(1)完成CMyClass的構(gòu)造函數(shù),請(qǐng)改正注釋?zhuān)?*******1********后的錯(cuò)誤。(2)完成func()函數(shù)定義,請(qǐng)改正注釋?zhuān)?*******2********的錯(cuò)誤。(3)初始化CmyClass的成員變量Number3為4,請(qǐng)改正注釋?zhuān)?*******3********后的錯(cuò)誤。(4)完成func()函數(shù),請(qǐng)改正注釋?zhuān)?*******4********后的錯(cuò)誤。輸出的結(jié)果為:Number1=12Number2=18Number3=16Number1=4Number2=2Number3=19注意:除在指定位置添加語(yǔ)句之外,請(qǐng)不要改動(dòng)程序中的其他內(nèi)容。1#include<iostream.h>2classCMyClass3{4public:5//********1********6CMyClass(inti,intj)7{8Number1=i;9Number3+=i;10}11voiddisplay()12{13cout<<’’Number1=’’<<Number1<<end1;14cout<<’’Number2=’’<<Number2<<end1;15cout<<’’Number3=’’<<Number3<<end1;16}17voidAddNum(inti)18{19Number3+=i;20}21private:22intNumber1;23constintNumber2;24staticintNumber3;25//********2********2627};28//********3********2930voidfunc()31{32CMyClassobj(1,2);33obj.Number1=4;34//********4********35obj.AddNum();36obj.display();37}38voidmain()39{40CMyClassmyObj(12,18);41myObj.display();42func();43return;44}標(biāo)準(zhǔn)答案:(1)將“CMyClass(inti,intj)”補(bǔ)充完整為:CMyClass(inti,intj):Number2(j)(2)添加語(yǔ)句:friendvoidfunc();(3)添加語(yǔ)句:intCMyClass::Number3=4;(4)將“obj.AddNum()”補(bǔ)充完整為:obj.AddNum(2);知識(shí)點(diǎn)解析:程序中定義了CMyClass類(lèi),其含有3個(gè)成員變量和多個(gè)成員函數(shù),成員變量Number2為常成員,Number3為靜態(tài)成員。display()函數(shù)輸出3個(gè)成員變量的值,AddNum(inti)函數(shù)改變靜態(tài)成員變量Num
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《樹(shù)立法律的權(quán)威》課件
- 《ogou超級(jí)模板》課件
- 《轉(zhuǎn)換鎖閉系統(tǒng)》課件
- 《繼電器控制部分》課件
- 二零二五年度順德區(qū)商業(yè)物業(yè)資產(chǎn)委托管理合同
- 《我們維護(hù)正義》課件
- 二零二五年度環(huán)保型路面材料采購(gòu)勞務(wù)分包合同范本3篇
- 二零二五年度網(wǎng)絡(luò)安全企業(yè)聘用文員合同范本4篇
- 當(dāng)代世界經(jīng)濟(jì)與政治課件
- 《念奴嬌 赤壁懷古 》說(shuō)課稿 2024-2025學(xué)年統(tǒng)編版高中語(yǔ)文必修上冊(cè)
- 圓翳內(nèi)障病(老年性白內(nèi)障)中醫(yī)診療方案
- 中考物理復(fù)習(xí)備考策略
- 博士后進(jìn)站申請(qǐng)書(shū)博士后進(jìn)站申請(qǐng)書(shū)八篇
- 小報(bào):人工智能科技科學(xué)小報(bào)手抄報(bào)電子小報(bào)word小報(bào)
- GB/T 41509-2022綠色制造干式切削工藝性能評(píng)價(jià)規(guī)范
- 全面介紹現(xiàn)貨中遠(yuǎn)期交易
- 公安系防暴安全03安檢
- 孫權(quán)勸學(xué)教案全國(guó)一等獎(jiǎng)教學(xué)設(shè)計(jì)
- 企業(yè)生產(chǎn)現(xiàn)場(chǎng)6S管理知識(shí)培訓(xùn)課件
- 五年級(jí)下冊(cè)數(shù)學(xué)課件 第10課時(shí) 練習(xí)課 蘇教版(共11張PPT)
- 電梯口包邊施工方案正式
評(píng)論
0/150
提交評(píng)論