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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

國家二級C++機試(操作題)模擬試卷36(共9套)(共27題)國家二級C++機試(操作題)模擬試卷第1套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modil.cpp,請修改程序中的錯誤,使程序能得出正確的結果:num:0num:1num:10注意:不要改動main函數,不能增行或刪行,也不能更改程序的結構,錯誤的語句在∥******error******的下面。#includeinti=10;ClassTestClass{public:TestClass(inti){cout<<“num:”<標準答案:(1)this一>i=i+1;.或TestClass::i=i+1:或(*this).i=i+1;(2)TestClassprint(0);(3)cout<<“num:”<<::i<知識點解析:程序要求輸出member的值為0,1,10。從已定源程序的main主函數開始入手,可以看出程序首先通過類TestClass中的TestClass構造函數的調用實現第一次num值的輸出;然后通過調用類TestClass中的成員函數Print實現第二次num值的輸出;最后通過輸出函數cout實現第三次num值的輸出。(1)打開modil.cpp,調試程序,顯示錯誤提示為第二標識下“modil.cpp(22):errorC2512:’TestClass’:noappropriatedefaultconstructoravailable”,主函數中首先調用的就是第2個標識下的TestClassprint函數,構造函數的名字和類的名字是一樣的,而程序中給出的“TestClassprint;”沒有給出參數,所以程序調試時無法確定調用的函數。根據TestClass構造函數“YestClass(inti)”的定義,應該存在int型參數,并且題目要求第一次輸出的值為“0”,所以第2個標識正確的調用函數為“TestClassprint(0);”0(2)運行,發(fā)現第一次的輸出正確,但是第二次的輸出值為“一858993460”,并不是題目中要求的“1”。在主函數中,可知第二次輸出調用的是“print.Print();”,即類TestClass的成員函數“Print()”。成員函數Print的定義“voidPrint()const”中的輸出語句為“cout<<”num:“<i=i+1;”或“TestClass::i=i+1;”或“(*this).i=i+1;”。(3)主函數中通過“cout<<”num:“<二、簡單應用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi2.cpp。閱讀下列函數說明和代碼,補充空出的代碼。函數conven(char*des,char*str,charc,char*str2)的功能是:如果str中包含字符“!”,則替換成.一.a;如果str中包含字符“&”,則替換成rt”;如果str中包含字符“*",則替換成str2。并用函數返回目標轉換后的指針。注意:只能補充函數convert(char*des.char*str,char*str2)。#include#include#defineMAXLEN1024voidconvert(char*des,char*str,char*str2){}voidmain(){chardest[MAXLEN];char‘str=”!&cefghi*!&”;char*str2=”jklm”;convert(dest,str,str2);cout<標準答案:deS[0]=0;chartemp(2]={0,0);for(inti=0;str[i]!=NULL;i++){if(Str[i]==‘!’){temp[0]=’a’;//4換成‘a’strcat(deS,temp);}elseif(str[i]==‘&’){temp[0]=‘b’;strcat(deS,temp);//替換成’b’}elseif(str[i]==“”){strcat(des,str2);//4換成str2}else{temp[0]=str[i];strcat(des,temp);//其他情況則添加在后面}知識點解析:函數convert(char*des,char*str,charc,char*str2)的功能是將str中包含的特定字符替換成其他字符,因此可利用循環(huán)搜索str字符串,找到特定字符后進行替換。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的源程序文件modi3.cpp。其中定義的類并不完整,按要求完成下列操作,將類的定義補充完整,使得程序輸出21到屏幕。完成以下功能:(1)增加靜態(tài)私有變量mNumber,類型為int,請在注釋∥********1********后添加適當的語句。(2)增加靜態(tài)變量mNumber并初始化為10,請在注釋∥********2********后添加適當的語句。(3)完成靜態(tài)函數get的定義,請在注釋∥********3********后添加適當的語句。(4)完成對象obj對靜態(tài)函數get的調用,使得輸出21到屏幕上,請在注釋∥********4********后添加適當的語句。注意:增加代碼,或者修改代碼的位置已經用符號表示出來。請不要修改其他的程序代碼。#includeciassTestClass{∥********1********intmOther;public:TestClass(inti){mOther=i;}∥********3********{returnmNumber+obj一>mOther;}};∥********2********intmain(){TestClassobj(11);∥********4********cout<<<標準答案:(1)添加語句:staticintmNumber;(2)添加語句:intTestClass::mNumber=10;(3)添加語句:staticintget(Testclass*obj)(4)將“cout<<<知識點解析:本題中程序的功能是利用get函數計算對象成員數值的和。在VC環(huán)境下打開程序,根據題干給出的幾條功能要求,對程序中給出注釋下的內容逐個補全或修改。從己定源程序的main主函數開始入手,可以看出程序通過調用類TestClass和get()成員函數實現各種輸出操作國家二級C++機試(操作題)模擬試卷第2套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modil.cpp,但該程序運行有問題,請改正main函數中的錯誤,使程序的輸出結果是:nember=1nember=10nember=100注意:不要改動main函數,不能增行或刪行,也不能更改程序的結構,錯誤的語句在∥********error********的下面。#includeClassTestClass{public:TestClass(inti)(nember=i;}voidSetNember(intm){nember=m;}intGetNember()const{returnnember;}voidPrint()const{cout<<“nember=”<標準答案:(1)Testclassobj1(1);(2)obj1.SetNember(10);(3)obj2.setNember(100);知識點解析:程序要求輸出nerrlber的值為l,10,100。從已定源程序的main主函數開始入手,可以看出程序定義了TestClass類的對象obj1和obi2,然后通過調用類的成員函數實現了題目中的輸出結果。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi2.cpp。請補充完整程序fun(inti),使程序完成以下功能:如果i=5,則輸出如下5行井號。###############注意:不要改動main()函數,不得增行或刪行,也不得更改程序的結構。#includevoidfun(inti){}intmain(){fun(5);return0;}標準答案:for(intj=0;j知識點解析:(1)該程序功能是輸出5行井號。它的解題思路,兩層循環(huán),外循環(huán)為行,內循環(huán)為列。第一行為1列,第二行為兩列,同理類推,第n行為n列。(2)從已給部分源程序的main主函數開始入手,核心函數fun(inti)中的i參數為i行#。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的源程序文件modi3.cpp。通過繼承完成輸入到屏幕指定的信息:TestClassATestClassBTestClassC其中定義的類并不完整,按要求完成下列操作,將類的定義補充完整。(1)完成類B虛繼承于A,請在注釋∥********1********后添加適當的語句。(2)完成類C虛繼承于A,請在注釋∥********2********后添加適當的語句。(3)完成類D繼承于B,C,請在注釋∥********3********后添加適當的語句。(4)函數fun通過調用基類的fun,完成所輸出的內容,請在注釋∥********4********后添加適當的語句。注意:增加代碼,或者修改代碼的位置已經用符號表示出來。請不要修改其他的程序代碼。#includeClassTeStClassA{public:voidfun(){cout<<“TestClassA”<標準答案:(1)將“classTestClassB:”補充完整為:classTestClassB:virtualpublicTestClassA(2)將“classTestClassC:”補充完整為:classTestClassC:virtualpublicTestClassA(3)將“classTestClassD:”補充完整為:classTestClassD:publicTestClassB,publicTeStClassC(4)添加語句:TestClassA::fun();TestClassB::fun();TestClassC::fun();知識點解析:在VC環(huán)境下打開程序,根據題干給出的幾條功能要求,對程序中給出注釋下的內容逐個補全或修改。從己定源程序的main主函數開始入手,可以看出程序通過調用類和函數fun實現各種輸出操作。國家二級C++機試(操作題)模擬試卷第3套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modi1.cpp,該程序運行時有錯誤,請改正程序中的錯誤,使得程序運行后沒有內存遺漏。可以在修改處增加或者刪除一條語句。本程序完成輸入兩個字符串,分別存儲到s1,s2中。注意:不要改動main函數,不能增行或刪行,也不能更改程序的結構,錯誤的語句在//********error********的下面。#includevoidmain(){char*s1;chars2[1024];cout<<"pleaseinputastring:"<標準答案:(1)s1=newchar[1024],(2)delete[]s1;(3)刪除“deletes2;”語句知識點解析:(1)s1變量為指針變量,在使用前要對其分配空間,所以第1個標識下添加“s1=newchar[1024];”。(2)為了防止內存空間的泄漏,指針變量使用后,要將其空間釋放,第二個標識下“delete[]s1;”。(3)s2是數組變量,空間是在使用前靜態(tài)分配的,不是使用前動態(tài)分配的,所以使用后不用釋放內存空間,這里應該刪除“deletes2;”。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi2.cpp。請完成函數fun(intx),該函數功能是判定x的所有的約數,并且在函數中調用寫函數WriteFile()將結果輸出到modi2.txt文件中。例如:x=10的約數為1,2,5,10。注意:不要改動main()函數,不得增行或刪行,也不得更改程序的結構。#include#inClude#includeusingnamespacestd;voidWriteFile(intc){ofstreamout1;out1.open("modi2.txt",iosbase::binary|ios_base::app);out1<標準答案:for(inti=l;i<=x;i++){if(x%i==0)//{如果x被i整除,那么i為x的約數{WriteFile(i);//將約數i存入文件}}知識點解析:(1)由1到x,循環(huán)判斷其中是否有x的約數。(2)如果X被i整除,那么i為X的約數。(3)最后調用WriteFile函數,將約數i存入文件。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的源程序文件modi3.cpp。其中定義的類并不完整,按要求完成下列操作,將類的定義補充完整。完成以下功能:(1)基類Person完成打印功能,定義其中的打印函數為虛函數,請在注釋//********1********后添加適當的語句。(2)類Man繼承于Person,在構造函數中設置性別為1,請在注釋//********2********后添加適當的語句。(3)類Woman繼承于Person,在構造函數中設置性別為0,請在注釋//********3********后添加適當的語句。(4)實現函數fun(),用于傳遞不同的類型,打印出性別,請在注釋//********4********后添加適當的語句。輸出的內容如下:Sex=ManSex=Woman注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。#includeClassPerson{public://********l********voidprint(){);intSex;};classMan:publicPemson(public:Man(){//********2********}voidprint(){cout<<"Man"<標準答案:(1)將“voidprint(){};”補充完整為:virtualvoidprint(){};(2)添加語句:sex=1;(3)添加語句:sex=0;(4)添加語句:Voidfun(Person&p)知識點解析:(1)題目1要求“基類Person完成打印功能,定義其中的打印函數為虛函數”。虛函數是函數的一種,定義虛函數,在函數名前聲明virtual就可以了,所以第1個標識下的“voidprint(){};”語句修改為“virtualvoidprint(){};”。(2)題目2要求“類Man繼承于Person,在構造函數中設置性別為1”?;怭erson中變量sex是用來存放性別的,Man繼承Person,所以Man中性別的變量可以使用基類中的sex變量,設置性別為1,即“sex=1;”。(3)題目3要求“類Woman繼承于Person,在構造函數中設置性別為0”。同(2),在第三個標識下添加“sex=0;”。(4)題目4要求“實現函數fun(),用于傳遞不同的類型,打印出性別”。根據“p.print();”語句知道,fun()函數的形參為指針P,由于它調用了基類Person中的成員函數print(),所以P的基類為Person,即添加函數fun()的定義為“voidfun(Person&p)”。國家二級C++機試(操作題)模擬試卷第4套一、基本操作題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數fun的功能是:將a所指3×5矩陣中第k列的元素左移到第0列,第k列以后的每列元素行依次左移,原來左邊的各列依次繞到右邊。例如,有下列矩陣:123451234512345若k為2,程序執(zhí)行結果為345123451234512請在程序的中括號處填入正確的內容并把中括號刪除,使程序得出正確的結果。注意:部分源程序在文件BLANKl.C中。不得增行或刪行,也不得更改程序的結構!試題程序:#inclucle#defineM3#defineN5voidfun(int(*a)[N],intk){inti,j,p,temp;/*********found*********/for(p=1;p<=【1】;P++)for(i=0;i標準答案:(1)k(2)N一1(3)temp知識點解析:填空1:外循環(huán)p的值為數組移動的次數,試題要求第k列左移,則需要移動的次數為k,所以應填k。填空2:矩陣共N列,所以應填N一1。填空3:臨時變量temp中存放的值為數組最左邊元素的值,需要把temp放到數組的末尾,即放到a[i][N—1]中,所以應填temp。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數fun的功能是:給定n個實數,輸出平均值,并統(tǒng)計平均值以上(含平均值)的實數個數。例如,n=8時,輸入193.199、195.673、195.757、196.051、196.092、196.596、196.579、196.763、所得平均值為195.838745,在平均值以上的實數個數應為5。請改正程序中的錯誤,使其能得出正確的結果。注意:部分源程序在文件MODI1.C中,不要改動main函數,不得增行或刪行,也不得更改程序的結構!試題程序:#include#include#includeintfun(floatx[],intn)/*********found*********/intj,c=0;floatxa=0.0;for(j=0;jxa)c++;returnc;}main(){floatx[100]={193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763};system("cls");printf("%d\n",fun(x,8));}標準答案:(1){intj,c=0;floatxa=0.0;(2)if(x[j]>=xa)知識點解析:(1)本題著重考查考生對C語言基本語法以及比較運算符的掌握情況。(2)本題中的第一個錯誤:在C語言中,{}應威對出現,所以程序中的語句"intj,c=0;floatxa=0.0;"應改為"{intj,c=0;floatxa=0.0;”或相同作用的語句;三、綜合應用題(本題共1題,每題1.0分,共1分。)3、請編寫函數fun,其功能是:將一個數字字符串轉換為一個整數(不得調用C語言提供的將字符串轉換為整數的函數)。例如,若輸入字符串“一1234”,則函數把它轉換為整數值一1234。注意:部分源程序給出如下。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。試題程序:#include#includelongfun(char*p){}voidmain(){chars[6];longn;printf("Enterastring:\n");gets(S);n=fun(S);printf("%id\n",n);}標準答案:longfun(char*p){longn=0;intflag=1;if(*p==’-’)/*負數時置flag為一1*c/{p++;flag=一1;}elseif(*p==’+’)/*正數時置flag為1*/p++;while(*p!=’\0’){n=n*10+*p一’0’;/*將字符串轉成相應的整數*/p++;}returnn*flag;}知識點解析:if語句的作用是判斷該字符串為正數還是負數,while循環(huán)的作用是將字符串轉成相應的整數。注意:*p是一個字符(例如‘9’、‘4’),并不是一個數,要將其轉成相應的數字需令其減去’0’(不是’\0’),即*p一’0’就得到*p這個字符的相應數字,例如’0’一’0’=0、’8’一’0’=8等。必須在程序的前面加#include,函數atol的作用是將字符串轉換成長整型數,它是一個庫函數。國家二級C++機試(操作題)模擬試卷第5套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請使用VC6或使用【答題】菜單打開考生文件夾proj1下的工程proj1,此工程包含一個源程序文件proj1.cpp。其中位于每個注釋“//ERROR****found****”之后的一行語句存在錯誤。請改正這些錯誤,使程序的輸出結果為:Youareright.注意:只修改注釋“//ERROR****found****”的下一行語句,不要改動程序中的其他內容。//proj1.cpp#includeusingnamespacestd;classMyClass{public:MyClass(intx):number(x){}//ERROR********found********~MyClass(intx){}//ERROR********found********voidJudge(MyClass&obj);private:intnumber;};voidJudge(MyClass&obj){if(obj.number==10)cout<<"Youareright."<<endl;elsecout<<"Sorry"<標準答案:(1)~MyClass(){}(2)friendvoidJudge(MyClass&obj);(3)MyClassobject(10);知識點解析:(1)主要考查考生對析構函數的掌握,析構函數是沒有形參的,因此把形參去掉即可,因為該類沒有動態(tài)分配空間,所以不需要使用delete語句釋放空間。(2)主要考查考生對友元函數的掌握,在函數定義中有語句voidJudge(MyClass&obj),在main函數中有語句Judge(object);,即Judge函數是可以被類外函數調用的,并且定義時沒有加上類名和作用域,因此可以知道Judge函數是友元函數,需要在類型前加上friend。(3)主要考查考生對構造函數調用的掌握,題目要求輸出結果為:Youarefight.,在Judge函數體內有語句:if(obj.number==10)cout<<"Youareright."<二、簡單應用題(本題共1題,每題1.0分,共1分。)2、請使用VC6或使用【答題】菜單打開考生文件夾proj2下的工程proj2,該工程中包含一個程序文件main.cpp,其中有類CPolygon(“多邊形”)、CRectangle(“矩形”)、CTriangle(“三角形”)的定義。請在橫線處填寫適當的代碼并刪除橫線,以實現上述類定義。該程序的正確輸出結果應為:2010注意:只能在橫線處填寫適當的代碼,不要改動程序中的其他內容,也不要刪除或移動“//****found****”。#includeusingnamespacestd;classCPolygon{public://*********found*********_________//純虛函數area聲明voidprintarea(void)//*********found*********{cout<<________<printarea();ppoly2->printarea();return0;}標準答案:(1)virtualintarea(void)=0;知識點解析:(1)主要考查考生對純虛函數的掌握,在定義純虛函數時要看在派生類中函數的定義:intarea(void)。由此可知純虛函數應該為:virtualintarea(void)=0;。(2)主要考查考生對純虛函數的掌握情況,由voidprintarea(void)可知,該函數要打印面積,因此在此要調用純虛函數area,即cont<三、綜合應用題(本題共1題,每題1.0分,共1分。)3、請使用VC6或使用【答題】菜單打開考生文件夾prog3下的工程prog3,其中包含了類Polynomial(“多項式”)的定義。形如5x4+3.4x2一7x+2的代數式稱為多項式,其中的5為4次項系數,3.4為2次項系數,一7為1次項系數,2為0次項(常數項)系數。此例缺3次項,意味著3次項系數為0,即省略了0x3。在Polynomial中,多項式的各個系數存儲在一個名為coef的數組中。例如,對于上面的多項式,保存在coef[0]、coef[1]…coef[4]中的系數依次為:2.0、一7.0、3.4、0.0.5.0,也即對于i次項,其系數就保存在coef[i]中。成員函數getValue計算多項式的值,多項式中x的值是由參數指定的。請補充完成文件Polynomial.cpp中成員函數getValue的定義。此程序的正確輸出結果應為:Valueofp1whenx=2.0:59.8Valueofp2whenx=3.0:226.8注意:只在函數getValue的“//23332”和“/r/26662”之間填入若干語句,不要改動程序中的其他內容。//Polynomiac.h#includeusingnamespacestd;classPolynomial{//“多項式”類public:Polynomial(doublecoef[],intnum):coef(newdouble[num]),numofterms(num){for(inti=0;icoef[i]=coef[i];}~Polynomial(){delete[]coef;}//返回指定次數項的系數doublegetCoefficient(intpower)const{returncoef[power];}//返回在x等于指定值時多項式的值doublegetValue(doublex)const;private://系數數組,coef[0]為0次項(常數項)系數,coef[1]為1次項系數,coef[2]為2次項(平方項)系數,余類推。Double*coef;intnum_of_terms;};voidwriteToFile(constchar*path);//Polymomial.cpp#include"Polynomial.h"doublePolynomial::getValue(doublex)const{//多項式的值value為各次項的累加和doublevalue=coef[0];//************333************//************666************returnvalue;}//main.cpp#include"Polynomial.h"intmain(){doublep1[]={5.0,3.4,-4.0,8.0},p2[]={0.0,-5.4,0.0,3.0,2.0);Polynomialpolyl(p1,sizeof(p1)/sizeof(double)),poly2(p2,sizeof(p2)/sizeof(double));cout<<"Valueofp1whenx=2.0:"<標準答案:for(inti=1;i0)//當j大于零時,做相乘操作,即完成該項的乘方動作{x_value*=x;j--;}value+=coef[i]*xvalue;//把i項的乘方結果乘以該項系數后加進value中}知識點解析:題目要求成員函數getValue計算多項式的值,多項式中x的值由參數指定,多項式的值value為各次項的累加和。由類的定義可知數組coef中存儲的是各次項的系數,這里使用for循環(huán)來完成題目要求,當次項為0時,value=coef[0]。當次項為1時,value=coef[1]*x+coef[0]。依次類推直到X的最高次數。國家二級C++機試(操作題)模擬試卷第6套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請使用VC6或使用【答題】菜單打開考生文件夾pmjl下的工程projl,此工程中含有一個源程序文件projl.cpp。其中位于每個注釋“//ERROR****found****”之后的一行語句存在錯誤。請改正這些錯誤,使程序的輸出結果為:Thevalueis:10注意:只修改注釋“//ERROR****found****”的下一行語句,不要改動程序中的其他內容。//projl.cpp#includeusingnamespacestd;classMember{//ERROR**********found**********private:Member(intval):value(val){)intvalue;);classMyClass{Memberm;public://ERROR**********found**********MyClass(intval){}intGetValue()const{returnm.value;}};intmain(){MyClass*obj=newMyClass(i0);//ERROR**********found**********下列語句輸出obj指向類中的value值cout<<“Thevalueis:”<標準答案:(1)public:(2)MyClass(intval):一m(val){}或MyClass(intval){一m=val}(3)cout<<“Thevalueis:”<GetValue()<知識點解析:本題主要考查的是Member類和MyClass類,其中涉及構造函數、成員函數和類的指針。類的指針調用類的成員函數時要使用標識符“一>”,而不是“.”,這是最容易出錯的地方。私有成員使用private,公有成員使用public,保護成員使用protected,類的構造函數一定是公有成員函數?!窘忸}思路】(1)主要考查考生對私有成員和公有成員的掌握,先看改錯語句的下一條語句:Member(intval):value(val){},該語句是一個構造函數,因此我們可以得出此處為公有成員,因為構造函數不可能是私有成員。(2)主要考查構造函數,構造函數要對類的成員進行初始化,因此在這里使用成員列表初始化,即MyClass(intval):一m(val){}或MyClass(intval){一m=val}。(3)指針調用類的成員函數時,應使用標識符“一>”?!窘忸}寶典】判斷該成員是公有成員還是私有成員的方法很多,不必一一死記,只要記住公有成員可以被類外函數調用,私有成員則不可以,類的構造函數一定是公有成員函數就可以了。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、請使用VC6或使用【答題】菜單打開考生文件夾proj2下的工程proj2,該工程中含有一個源程序文件proj2.cpp,其中定義了CharShape類、Tfian~e類和Rectangle類。CharShape是一個抽象基類,它表示由字符組成的圖形(簡稱字符圖形),純虛函數Show用于顯示不同字符圖形的相同操作接口。TfanOe和Rectangle是CharShape的派生類,它們分別用于表示字符三角形和字符矩形,并且都定義了成員函數Show,用于實現各自的顯示操作。程序的正確輸出結果應為:****************########################請閱讀程序,分析輸出結果,然后根據以下要求在橫線處填寫適當的代碼并刪除橫線。(1)將Triangle類的成員函數Show補充完整,使字符三角形的顯示符合輸出結果。(2)將Rectangle類的成員函數Show補充完整,使字符矩形的顯示符合輸出結果。(3)為類外函數fun添加合適的形參。注意:只在指定位置編寫適當代碼,不要改動程序中的其他內容,也不要刪除或移動“//****found****”。{/proj2.cpp#includeusingnamespacestd;classCharShape{public:CharShape(charch):一ch(ch){};virtualvoidShow()=0;protected:charch;//組成圖形的字符};classTriangle:publicCharShape{public:Triangle(charch,intr):Char—Shape(ch),一rows(r){}voidShow();private:introws;//行數};classRectangle:publicCharShape{public:Rectangle(charch,intr,intC):CharShape(ch),_rows(r),一cols(c){}voidShow();private:introws,cols;//行數和列數};voidTriangle::Show()//輸出字符組成的三角形{for(inti=1;i<=rows;i++){//**********found**********for(intJ=1;J<=——;J++)cout<<ch;cout<標準答案:(1)i*2—1(2)一rows(3)一cols(4)CharShape&cs知識點解析:本題主要考查抽象類CharShape類及其派生類Triangle和Rectangle,其中涉及構造函數、純虛函數、成員函數和函數調用。著重考查函數Show()在Triangle類與在Rectangle類中的定義,填空前應先理解Show()函數在該類中的功能。【解題思路】(1)考查for循環(huán)語句,該語句所在的函數的功能是輸出字符組成的三角形。從外層循環(huán)中可以看出下標i代表行數,那么下標j就代表每一行字符的個數,因為要輸出的是三角形,所以每一行的個數與該行的行數相關,即j<=i*2一1;。(2)考查for循環(huán)語句,該語句所在的函數的功能是輸出字符組成的矩形?;氐絉ectangle類中可以知道矩形的長和寬就是類中私有成員的行數和列數,因此在這里只要要求下標i不大于行數即可。(3)考查for循環(huán)語句,該語句所在的函數的功能是輸出字符組成的矩形?;氐絉ectangle類中可以知道矩形的長和寬就是類中私有成員的行數和列數,因此在這里只要要求下標j不大于列數即可。(4)主要考查考生對虛函數的掌握,該語句所在的函數是普通函數fun,題目要求為fun函數添加形參。從函數體中可以知道形參名為cs,那么形參的類型是什么呢?就是抽象類CharShape,因此要使用CharShape&cs才可以實現題目要求輸出的內容?!窘忸}寶典】本題主要考查考生對for循環(huán)語句的掌握及虛函數的使用,for循環(huán)是最??嫉降闹R點,要結合好上下文的語義來填寫,首先要清楚該語句所在函數要實現的功能,其次要知道該語句的作用。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、請使用VC6或使用【答題】菜單打開考生目錄proj3下的工程文件proj3,此工程中包含一個源程序文件proj3.cpp,其功能是從文本文件in.dat中讀取全部整數,將整數序列存放到intAn’ay類的對象中,然后建立另一對象myArray,將對象內容賦值給myArray。類intArray重載了“=”運算符。程序中給出了一個測試數據文件input,不超過300個的整數。程序的輸出是:1011131620要求:補充編制的內容寫在“//*********333*********”與“//*********666*********”之間。實現重載賦值運算符函數,并將賦值結果在屏幕輸出。格式不限。不得修改程序的其他部分。注意:程序最后將結果輸出到文件out.dat中。輸出函數writeToFile已經編譯為obj文件,并且在本程序中調用。//intArray.hclassintArray{private:int*array;intlength;public:intArray(char*filename);intArray();intArray&operator=(constintAr。ray&src);一intArray();voidshow();};voidwriteTOFile(constchar*path);//main.cpp#include#include#include#include“intArray.h”usingnamespacestd;intArray::intArray(){length=10;array=newint[1ength];}intArray::intArray(char*filename){ifstreammyFile(filename);array=newint[300];length=0;while(myFile>>array[1ength++])length_____;myFile.close();}intArray&intArray::operator=(constintArray&src){if(array!=NULL)delete[]array;length=src.1ength;array=newint[1ength];//*********333*********//*********666*********return*this;}intArray::一intArray(){delete[]array;}voidintArray::show(){intstep=0;for(inti=0;i標準答案:for(inti=0;i知識點解析:本題主要考查intAtray類,其中涉及動態(tài)數組、構造函數、運算符重載、析構函數及其他成員函數?!窘忸}思路】主要考查考生對運算符重載的掌握,該函數要重載運算符“=”,該運算符的意思是賦值。先看該函數的其他語句:if(array!=NULL)delete[]array;length=src.1ength;array=newint[1ength];第一條語句是把原來動態(tài)數組釋放,第二條語句是把形參$1rc的成員length賦值給變量length,第三條語句是給指針array分配內存。接下來要把動態(tài)數組中的值逐個賦給array數組,在這里使用for循環(huán)語句,循環(huán)變量i的范圍是0~length,并進行賦值操作。國家二級C++機試(操作題)模擬試卷第7套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請使用VC6或使用【答題】菜單打開考生文件夾pmjl下的工程projl,其中在編輯窗口內顯示的主程序文件中定義有類ABC和主函數main。程序文本中位于每行“//ERROR****found****”之后的一行語句有錯誤,請加以改正。改正后程序的輸出結果應該是:2123注意:只修改每個“//ERROR****found*****”下面的一行,不要改動程序中的其他任何內容。#includeusingnamespacestd;clasSABC{public://ERROR**********found**********ABC(){a=0;b=0;C=0;}ABC(intaa,intbb,intCC);voidSetab(){++a,++b;)intSum(){returna+b+C;)private:inta,b;constintC;};ABC::ABC(intaa,intbb,intCC):C(CC){a=aa;b=bb;)intmain(){ABCx(1,2,3),Y(4,5,6);ABCZ,*W=&Z;W一>Setab();//ERROR**********found***********intsl=X.Sum()+Y一>Sum();cout<標準答案:(1)ABC():a(0),b(0),c(0){}(2)ints1=x.Sum()+y.Sum();(3)ints2=sl+w一>Sum();知識點解析:本題考查的是ABC類,其中涉及構造函數、成員函數和常變量私有成員。構造函數中因為要給常變量私有成員初始化,所以必須使用成員列表初始化來賦初值。只有類的指針在調用成員函數時才使用標識符“一>”?!窘忸}思路】(1)主要考查考生對構造函數的掌握情況,根據私有成員的定義:conatintc;可知,c為常變量,因此構造函數必須使用成員列表初始化來給c賦初始值。(2)主要考查考生對類的指針的掌握情況,根據主函數的第一條語句:ABCx(1,2,3),y(4,5,6);可知,x和y都是ABC類,但不是指針,因此它們調用ABC類的成員函數要使用標識符“.”,而不是“一>”。(3)主要考查考生對類的指針的掌握情況,根據主函數的第二條語句:ABCz,*w=&z;可知,w是ABC類的指針,指向z,因此w調用A:BC類的成員函數時要使用標識符“一>”,而不是“.”。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、請使用VC6或使用【答題】菜單打開考生文件夾proj2下的工程proj2,其中在編輯窗口內顯示的主程序文件中定義有類Base和Derived,以及主函數main。程序文本中位于每行“//****found****”下面的一行內有一處或多處下畫線標記,請在每個下畫線標記處填寫合適的內容,并刪除下畫線標記。經修改后運行程序,得到的輸出應為:sum=55。注意:只在橫線處填寫適當的代碼,不要改動程序中的其他內容。#includeusingnamespacestd;claSSBase{public:Base(intml,intm2){meml=ml;mem2=m2;}intsum(){returnmeml+mem2;}private:intmeml,mem2;//基類的數據成員};//派生類Derived從基類Base公有繼承//**********found***********classDerived:{public://構造函數聲明Derived(intml,intm2,intm3);//sum函數定義,要求返回meml、mem2和mem3之和//**********found***********intsum(){return——+mem3;)private:intmem3;//派生類本身的數據成員};//構造函數的類外定義,要求由m1和m2分別初始化meml和mem2,由m3初始化mem3//**********found**********__________Derived(intml,intm2,intm3)://**********found***********__________,mem3(m3){}intmain(){Basea(4,6);Derivedb(10,15,20);intsum=a.sum()+b.sum();cout<<“sum=”<標準答案:(1)publicBase(2)Base::sum()(3)Derived::(4)Base(m1,m2)知識點解析:本題考查的是Base類及其派生類Derived類,其中涉及構造函數和成員函數。構造函數在類外定義時,因為構造函數是屬于類的函數,所以函數前也要加上類名和作用域符,派生類的構造函數要先給基類初始化,使用成員列表初始化?!窘忸}思路】(1)主要考查考生對公有繼承的掌握情況,根據題目要求:派生類Derived從基類Base公有繼承,因此這里使用public來公有繼承。(2)主要考查考生對成員函數的掌握情況,根據題目對sum函數的要求:sum函數定義,要求返回mem1、mem2和mem3之和,因此這里直接調用基類的sum函數,再加上mem3就滿足題目要求。(3)主要考查考生對構造函數的掌握情況,由于Derived的構造函數在類外定義,因此要加上類名和作用域符,即Derived::。(4)主要考查考生對構造函數的掌握情況,因為Derived是Base類的派生類,所以其構造函數要使用成員列表初始化先給Base初始化?!窘忸}寶典】主要考查考生對公有繼承、成員函數和構造函數的掌握程度,在派生類中直接調用基類的函數,要在前面加上基類名和作用域符,從而防止派生類中也有相同函數時產生的二義性。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、請使用VC6或使用【答題】菜單打開考生文件夾proj3下的工程proj3,其中包含主程序文件main。cpp和用戶定義的頭文件Array.h,整個程序包含有類Array的定義和主函數main的定義。請把主程序文件中的Array類的成員函數Contrary()的定義補充完整,經補充后運行程序,得到的輸出結果應該是:585,4,3,2,10,0,8.4,5.6,4.5,3.4,2.3,1.2注意:只允許在“//**********333**********”和“//**********666**********”之間填寫內容,不允許修改其他任何地方的內容。//Array.h#includeusingnamespacestd;templateclassArray{//數組類public:Array<=m){cout<<“下標越界!”<voidArray::Contrary(){//補充函數體//*********333*********//*********666*********}intmain(){intsl[5]={1,2,3,4,5);doubles2[6]={1.2,2.3,3.4,4.5,5.6,8.4};Arraydl(sl,5);Arrayd2(s2,6);inti;d1.Contrary();d2.Contrary();cout<標準答案:for(inti=0,j=m一1;i知識點解析:本題考查的是Array類,其中涉及構造函數、const函數和運算符重載。交換數組中前后對稱的元素的值,要使用兩個下標i和j,一個代表第一個元素,一個代表最后一個元素,交換后i++,j一即可?!窘忸}思路】主要考查考生對交換算法的掌握情況,根據題目對要完成的函數Contrary的要求:交換數組a中前后位置對稱的元素的值。這里取下標i=0,即為數組中的第一個元素,j=m一1,即為數組中的最后一個元素,利用中間值temp交換元素的值,然后i逐次遞增的同時j逐次遞減,再交換,循環(huán)到i>j時停止交換即可?!窘忸}寶典】主要考查考生對數組中元素交換的掌握情況,交換算法要使得兩個下標i和j移動的范圍能覆蓋全部元素,同時要確定for循環(huán)的終止條件。國家二級C++機試(操作題)模擬試卷第8套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modil.cpp,該程序運行時有誤,請改正其中的錯誤,使程序正常運行,并使程序在界面上輸出為:平均值為:29最大值為:112最小值為:-11注意:錯誤的語句在∥********error********的下面。修改該語句即可。#includeUSingnamespacestd;intmain(){inti;AvelMin;Max;intdata[8].{0,112,43,78,一11,一6,7,9);Ave=0;for(i=0;i<8;i++)∥********error********Ave=data[i];Ave/=8;cout<<“平均值為:”<Min)Min=data[i];}cout<<”最大值為.II<標準答案:(1)Ave+=data[i];或Ave=Ave+data[i];(2)if(data[i]>Max)Max=data[i];(3)if(data[i]知識點解析:(1)觀察程序可知,第一個for循環(huán)是求數組各個元素的和,逐次將每個元素值加起來,而程序當中是逐個賦值,因此第l標識處應將Ave=data[i]改成Ave+=data[i]或Ave=Ave+data[i]。(2)根據題意再求數組當中元素的最大最小值,用變量Max記錄最大值,Min記錄最小值,在for循環(huán)中,逐次比較,如果該元素值比當前Max大,則Max取該元素值,因此第2標識處正確的應該是if(data[i]>Max)Max=data[i]。(3)同樣如果數組該元素值比Min小,則Min取該元素值。因此,兩個if中條件判斷錯誤,第3標識處“if(data[i]>Min)Min=data[i]”改成“if(data[i]二、簡單應用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi2.cpp。閱讀下列函數說明和代碼。補充函數convert(longS,long*str),使之從低位開始取出長整型變量S中奇數位上的數,依次存放在數str中。例如,當S中的數為:7654321時,str中的數為:7531。注意:請勿改動主函數。#includevoidconvert(10ngS,long*str){}voidmain(){longS,res;cout<>s;convert(s,&res);cout<<”TheresultiS:”(標準答案:longsl=10;*str=s%10;//先取個位數while(s>0){S=s/100;//每次除以i00,*str=s%10*s1+*str;//取除以100后的個位數,str增加1位s1=s1*10;}知識點解析:(1)由審題分析可知,奇數位即為個位數、百位數、萬位數……,取個位數比較簡單,S%10便得到了個位數。獲取百位數可由s/100后,再和10取余得到,同樣萬位數可由s/10000,再和10取余得到,從百位數開始后面的奇數位都是在上次的基礎上再除以100后再取余數,因此可利用循環(huán)。(2)在循環(huán)外先取S的個位數,然后進入循環(huán),s=s/100,獲取除以100的個位數方法為s%10,這個數是*str的高一位,乘以它所在*str中的位置的權值,然后和以前的值相加便得到這次*str值,如此循環(huán),直到s為0為止。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的源程序文件modi3.cpp,其中定義了用于表示日期的類Date,但類Date的定義并不完整。請按要求完成下列操作,將類Date的定義補充完成。(1)定義私有數據成員year、month和day,分別用于表示年、月和日,它們都是int型的數據。請在注釋∥********1********之后添加適當的語句。(2)完成默認構造函數Date的定義,使Date對象的默認值為:year=l,month=l,day=l,請在注釋∥********2********之后添加適當的語句。(3)完成重載構造函數Date(inty,intm,intd)的定義,把數據成員year、month和day分別初始化為參數y、m和d的值,請在注釋∥********3********之后添加適當的語句。(4)完成成員函數print()的類外定義,使其以“年一月一日”的格式將Date對象的值輸出到屏幕上,例如:2008.8.8。請在注釋∥********4********之后添加適當的語句。注意:僅在函數指定位置添加語句,請勿改動主函數main與其他函數中的任何內容。1#include2classDate{3public:4∥********2********56Date(inty,intm,intd)7{8∥********3********910}11voidprint()con.qt;12private:3.3‖datamember14∥********1********1516};17voidDate::print=()const18{19∥********4********2021}22intmain()(23Datenation,a1._day(1949,10,1);24nationalday.print();25return0;26}標準答案:(1)添加語句:intyear,month,day,(2)添加語句:Date(){year=1;month=1;day=1;}(3)添加語句:year=y;month=m;day=d;(4)添加語句:cout<知識點解析:在VC環(huán)境下打開程序,根據題干給出的幾條功能要求,對程序中給出注釋下的內容逐個補全或修改。從已給定源程序的main主函數開始入手,可以看出程序通過調用類Date和函數print實現各種輸出操作。解題思路(1)題目1要求“定義私有數據成員year、month和day,分別用于表示年、月和日,它們都是int型的數據”。在C++程序的private區(qū)域中添加變量year、month、day的定義,即在第1個標識下添加“intyear,month,day;”。(2)題目2要求“完成默認構造函數Date的定義,使Date對象的默認值為:year=1,month=1,day=1”。在CH中,構造函數是一種特殊的成員函數,它的名字與類同名。在Date構造函數體內,根據題目要求,設置變量默認值“year=1,month=1,day=1”,即:“Date0{yem=1;month=1;day=1;}”。(3)題目3要求“完成重載構造函數Date(inty,intm,intd)的定義,把數據成員year、mohth和day分別初始化為參數y、m和d的值。”在構造函數Date(inty,intm,intd)函數體內,即標識3下,添加賦值語句,將y,m,d賦值給year,month,day,即“year=y;month=m;day=d;”。(4)題目4要求“完成成員函數print()的類外定義,使其以“年一月~日”的格式將Date對象的值輸出到屏幕上”。在程序中的voidDate::print0cons

溫馨提示

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

評論

0/150

提交評論