




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
國家二級C++機試(操作題)模擬試卷6(共9套)(共26題)國家二級C++機試(操作題)模擬試卷第1套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modi1.cpp,該程序運行時有錯誤,請改正其中的錯誤,使程序正常運行,并且輸出以下結果:(4,5)7,8(4,8)注意:錯誤的語句在//******error******的下面,修改該語句即可。1#include<iostream.h>2classCObj03{4public:5CObj0(inti,intj)6{7x=i;8y=j;9}10//********error********11virtualvoidmove(inta;intb)12{13x+=a;14y+=b;15}16voidprint()17{18tout<<’’(’’<<x<<’’,’’<<y<<’’)’’<<end1;19}20public:21intx,y;22};23classCObj1:publicCObj024{25public:26//******error******27CObj1(inti,intj,intk):(i,j)28{29m=k;30n=1;31}32voidprint()33{34cout<<m<<’’,’’<<n<<end1;35}36voidfunc()37{38move(3,5);39}40voiddisplay()41{42//******error******43print();44}45private:46intm,n;47};48voidmain()49{50CObj0obj(4,5);51obj.print();52CObj1obj1(1,3,7,8);53obj1.func()j54obj1.print();55obj1.display();56}標準答案:(1)virtualvoidmove(inta,intb)(2)CObj1(inti,intj,intk,int1):CObj0(i,j)(3)CObj0::print();知識點解析:程序中定義了CObj0和CObj1兩個類,CObj1公有派生于CObj0,CObj0有兩個public成員變量x和y,CObj1有2個private成員變量m和n,CObj0的print函數打印x和y的值,CObj1的print函數打印m和n的值,display函數調用基類的print函數打印CObj1的x和y的值。(1)編譯程序可知第1標識下有錯誤,此處是聲明虛函數,虛函數的聲明方式為:virtual<類型說明符><函數名>(<參數表>),參數表中各參數之間應該用“,”隔開,因此第1個標識下應改為“virtualvoidmove(inta,intb)”。(2)在主函數里“CObj1obj1(1,3,7,8);”,可知構造函數CObjl()有四個參數,完成變量m、n、x和y的初始化,k和1賦值給m和n,i和i賦值給x和y,x和y的初始化可通過基類構造函數來完成對x和y的初始化,第2個標識下應改為CObj1(inti,inti,intk,int1):CObj0(i,j)。(3)由程序運行結果可知標識3下調用的是基類的print()函數,而“print();”:是調用的派生類的print()函數,因此此時只能通過類名來直接調用print()函數,即第3個標識下應改為“CObj0::print0;”。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi2.cpp。閱讀下列函數說明和代碼。函數sort(int&m,int&n,int&1)實現將三個整數in、n、1由大到小輸出。in最大,1最小。程序分析:程序實現時,可以把最大的數放到m上,先將m與n進行比較,如果m<n則將m與n的值進行交換,然后再用m與1進行比較,如果m<1則將in與1的值進行交換,這樣能使m最大。然后再將n與1進行比較,若n<1則將n與1的值互換,互換后則1最小。將函數sort(int&m,int&n,int&1)補充完整,實現三個數的排序。注意:請勿改動主函數。1#include<iostream.h>2voidsort(int&m,int&n,int&1)3{45}6intmain()7{8intx=9;9inty=13;10intx=-3;11sort(x,y,Z);12cout<<x<<’,’<<y<<’,’<<z<<end1;13return0;14}標準答案:1intt;2if(m<n)3{t=m;m=n;n=t;)/*交換x,y的值*/4if(m<1)5{t=m;m=l;l=t;)/*交換v,z的值*/6if(n<1)7{t=n;n=1;1=t;}/*交換z,y的值*/知識點解析:sort函數實現3個參數的從大到小的排序,可以采用很多方法來排序,比如選擇法排序、冒泡法排序等,這里要求采用比較的方法來實現排序,由于需要排序的數據較少,只有3個,逐個比較就可以找到最大最值小進行排序。(1)由審題分析可知,三次比較便可將m、n、1排序。(2)在實現時,先將m與n進行比較,如果m<n則將m與n的值進行交換,然后再用m與1進行比較,如果m<1則將m與1的值進行交換,這樣能使m最大。然后再將n與1進行比較,若n<1則將n與1的值互換,互換后則1最小,這樣就得到m最大,1最小的排序結果。(3)在sort函數內用三個if比較即可,條件成立則進行交換。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的源程序文件modi3.cpp。其中定義的類并不完整,按要求完成下列操作,將類的定義補充完整。完成以下功能:(1)定義類CPoint的帶有兩個參數的構造函數,兩個變量為x、y都為int型,且缺省值為0。請在注釋//********1********后添加適當的語句。(2)完成類CRectangle的構造函數,給point1和point2進行賦值。請在注釋//********2********后添加適當的語句。(3)完成類CRectangle的函數GetArea(),用來計算矩形面積。請在注釋//********3********后添加適當的語句。(4)定義CRectangle類,擁有兩個私有對象point1和point2,類型為Point,請在注釋//********4********后添加適當的語句。注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。1#include<iostream.h>2#include<cmath>3C1assCPoint4{5public:6//********1********78{9x=i;10y=j;11}12intGetX()13{14returnx;15}16intGetY()17{18returnY;19}20private:21intx,y;22};23classCRectangle24{25public:26//********2********2728{29}30intGetArea()31{32//********3********3334intheight=point1.GetY()-point2.GetY();35return(width*height)?width*height:-width*height;36}37intGetGirth()38{39intwidth=abs(point1.GetX()-point2.GetX());40intheight=abs(point1.GetY()-point2.GetY());41return(2*(width+height));42}43private:44//********4********4546CPointpoint2;47};48intmain()49{50CRectanglerect(5,2,13,18);51cout<<rect.GetArea()<<end1,52cout<<rect.GetGirth()<<end1,53return0;54}標準答案:(1)添加語句:CPoint(inti=0,intj=0)(2)添加語句:CRectangle(inttop,intlefttintrightfintbottom):point1(top,left),point2(right,bottom)(3)添加語句:intwidth=point1.GetX()-point2.GetX();(4)添加語句:CPointpoint1;知識點解析:程序中定義了CPoint和CRectangle兩個類,分別表示點坐標類和矩形類,點坐標類有2個私有成員變量x和y表示坐標值,矩形類有2個CPoint成員。函數GetArea()用來計算矩形面積,可由矩形的長和寬計算得到,同樣GetGirth()函數返回矩形的周長也可由長和寬得到。主函數內定義一個CRectangle對象,分別調用GetArea()和GetGirth()計算面積和周長,然后打印計算結果。(1)在第1個標識下添加構造函數定義,該構造帶有兩個參數x和y的構造函數,x、y都為int型,缺省值為0,因此第1個標識下應添加CPoint(inti=0,intj=0)。(2)第2個標識下通過Cpoint類的構造函數來完成Crectangle類成員的初始化,在函數體內沒有任何函數語句,因此其初始化過程是在初始化列表里完成的,通過調用基類的構造函數來實現兩個私有對象point1和point2的初始化,故第2個標識下應添加CRectangle(inttop,intleft,intright,intbottom):point1(top,left),point2(right,bottom)。(3)面積為矩形的長寬之積,因此先計算矩形的長和寬,可由兩個Cpoint對象的x坐標相減計算得到,CPoint對象的x坐標為私有成員,只能通過公有接口函數調用獲得,因此第3個標識下為“intwidth=point1.GetX()-point2.GetX();”。(4)Crectangle類的成員變量為兩個Cpoint對象成員point1和point2,第4個標識下補充point1的定義,故第4個標識下應添加“CPointpoint1:”。國家二級C++機試(操作題)模擬試卷第2套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請打開考生文件夾下的解決方案文件proj1,此工程中包含了類Pets(“寵物”)和主函數main的定義。程序中位于每個“//ERROR****found****”之后的一行語句有錯誤,請加以改正。改正后程序的輸出結果應為:Name:sonnyType:dogName:JohnType:dogName:DannyType:catName:JohnType:dog注意:只修改每個“//ERROR****found****”下的那一行,不要改動程序中的其他內容。#include<iostream>usingnamespacestd;enumPets_type{dog,cat,bird,fish};classPets{private:char*name;Pets_typetype;public:Pets(constchar*name="sonny",Pets_typetype=dog);Pets&operator=(constPets&s);~Pets();voidshow()const;};Pets::Pets(constchar*name,Pets_typetype)//構造函數{this一>name=newchar[strlen(name)+1];strcpy(this一>name,name);//ERROR*******found*******type=type;}Pets::~Pets()//析構函數,釋放name所指向的字符串{//ERROR*******found*******name=’/0’;}Pets&Pets::operator=(constPets&s){if(&s==this)//確保不要向自身賦值return*this;delete[]name;name=newchar[strlen(s.name)+1];//ERROR*******found*******strcpy(this一>name,name);type=s.type;return*this;}voidPets::show()const{cout<<"Name:"<<name<<"Type:";switch(type){casedog:cout<<"dog";break;casecat:cout<<"cat";break;casebird:cout<<"bird";break;casefish:cout<<"fish";break;}cout<<endl;}intmain(){Petsmypet1,mypet2("John",dog);Petsyoupet("Danny",cat);mypet1.show();mypet2.show();youpet.show();youpet=mypet2;youpet.show();return0;}標準答案:(1)this一>type=type;(2)delete[]name;(3)strcpy(t.his一>name,s.name);知識點解析:(1)主要考查考生對構造函數的掌握情況,因為形參名和類的私有成員名稱都是type,為了避免混淆,所以規(guī)定類的私有成員使用this指針調用,即:this一>type=type;。(2)主要考查考生對析構函數的掌握情況,題目中要求,釋放name所指向的字符串。要釋放name指針用delete語句,即delete[]name;。(3)主要考查考生對strcpy函數的掌握情況,strcpy函數的形參為兩個字符串,而name為指向字符串的指針,因此使用語句:strcpy(this—>name,s.name);。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、請打開考生文件夾下的解決方案文件proj2,此工程中包含一個頭文件shape.h,其中包含了類Shape、Point和Triangle的聲明;包含程序文件shape.cpp,其中包含了類Triangle的成員函數和其他函數的定義;還包含程序文件proj2.cpp,其中包含測試類Shape、Point和Triangle的程序語句。請在程序中的橫線處填寫適當的代碼并刪除橫線,以實現上述功能。此程序的正確輸出結果應為:此圖形是一個抽象圖形,周長=0,面積=0此圖形是一個三角形,周長=6.82843,面積=2注意:只能在橫線處填寫適當的代碼,不要改動程序中的其他內容,也不要刪除或移動“//****found****”。//shape.hclasSShape{public:virtualdoubleperimeter()const{return0;}//返回形狀的周長virtualdoublearea()const{return0;}//返回形狀的面積virtualconstchar*name()const{return"抽象圖形";}//返回形狀的名稱};classPoint{//表示平面坐標系中的點的類doublex;doubley;public://**********found**********Point(doublex0,doubley0):_________{}//用x0、y0初始化數據成員x、ydoublegetX()const{returnx;}doublegetY()const{returny;}};classTriangle:publicShape{//**********found**********______________;//定義3個私有數據成員public:Triangle(Pointp1,Pointp2,Pointp3):point1(p1),point2(p2),point3(p3){)doubleperimeter()const;doublearea()const;constchar*name()const{return"三角形";}};//shape,cpp#include"shape.h"#include<cmath>doublelength(Pointp1,Pointp2){returnsqrt((p1.getX()-p2.getX())*(p1.getX()-p2.getX())+(p1.getY()-p2.getY())*(p1.getY()-p2.getY()));}doubleTriangle::perimeter()const{//一個return語句,它利用length函數計算并返回三角形的周長//**********found**********__________;}doubleTriangle::area()const{doubleS=perimeter()/2.0;returnsqrt(S*(s—length(pointl,point2))*(s—length(point2,point3))*(s—length(point3,pointl)));}//proj2.cpp#include"shape.h"#include<iostream>usingnamespacestd;//*********found**********___________//show函數的函數頭(函數體以前的部分){cout<<"此圖形是一個"<<shape.name()<<",周長="<<shape.perimeter()<<",面積="<<shape.area()<<endl;}intmain(){Shapes;Triangletri(Point(0,2),Point(2,0),Point(0,0));show(s);show(tri);return0;}標準答案:(1)x(x0),y(),0)(2)P0intpoint1,point2,point3(3)returnlength(point1,point2)+length(point1,point3)+length(point2,point3)(4)voidshow(Shape&shape)知識點解析:(1)主要考查考生對構造函數的掌握,題目要求用X0、y0初始化數據成員x、y,因此在這里使用成員列表初始化,即:Point(doublex0,doubley0):x(x0),y(y0){}。(2)主要考查考生對構造函數的掌握,題目要求定義3個私有數據成員。由構造函數可知3個私有數據成員的類型都是Point,名稱分別為point1、point2和point3,因此空格處填寫:Pointpoint1,point2,point3。(3)主要考查考生對成員函數的掌握,題目要求使用return語句,利用length函數計算并返回三角形的周長。length函數返回的是兩點間的距離,因此return語句只要返回三角形三條邊的距離和,即為三角形的周長。(4)主要考查考生對成員函數的掌握,這里要定義show函數的函數頭(函數體以前的部分)。由主函數main中show函數的使用情況show(s)和show(tri)可知,s是Shape類,tri是Triangle類,因為Triangle是Shape類的派生類,所以可知show函數的參數是Shape類型,無返回值,得出語句voidshow(Shape&shape)。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、請打開考生文件夾下的解決方案文件proj3,該文件中定義了用于表示日期的類Date、表示人員的類Person和表示職員的類Staff;程序應當顯示:張小麗123456789012345但程序中有缺失部分,請按以下提示把缺失部分補充完整:(1)在“//**1******found****”的下方是析構函數定義中的語句,它釋放兩個指針成員所指向的動態(tài)空間。(2)在“//**2******found****”的下方是rename函數中的一個語句,它使指針name指向申請到的足夠容納字符串new_name的空間。(3)在“//**3******found****”的下方是構造函數定義的一個組成部分,其作用是利用參數表中前幾個參數對基類Person進行初始化。注意:只在指定位置編寫適當代碼,不要改動程序中的其他內容,也不要刪除或移動“****found****”。填寫的內容必須在一行中完成,否則評分將產生錯誤。//proj3.cpp{}include<iostream>usingnamespacestd;classPerson{char*idcardno;//用動態(tài)空間存儲的身份證號char*name;//用動態(tài)空間存儲的姓名boolismale;//性別:true為男,false為女public:Person(constchar*pid,constchar*pname,boolpmale);~Person(){//**1*********found*******_______;}constchar*getIDCardNO()const{returnidcardno;)constchar*getName()const{returnname;)voidrename(constchar*new_name);boolisMale()const{returnismale;}};classstaff:publicPerson{char*department;doublesalary;public:staff(constchar*id_card_no,constchar*p_name,boolis_male,constchar*dept,doublesal);~staff(){delete[]department;)constchar*getDepartment()const{returndepartment;}voidsetDepartment(constchar*d);doublegetSalary()const{returnsalary;}voidsetSalary(doubles){salary=s;}};Person::Person(constchar*id_card_no,constchar*p_name,boolis_male):ismale(is_male){idcardno=newchar[strlen(id_card_no)+1];strcpy(idcardno,id_card_no);name=newchar[strlen(p_name)+1];strcpy(name,p_name);}voidPerson::rename(constchar*new_name){delete[]name;//**2*********found*******_________;strcpy(name,new_name);}Staff::Staff(constchar*id_card_no,constchar*p_name,boolis_male,//**3*********found*******constchar*dept,doublesal):______{department=newchar[strlen(dept)+1];strcpy(department,dept);salary=sal;}voidStaff::setDepartment(constchar*dept){delete[]department;department=newchar[strlen(dept)+1];strcpy(department,dept);}intmain(){StaffZhangsan("123456789012345","張三",false,"人事部",1234.56);Zhangsan.rename("張小麗");cout<<Zhangsan.getName()<<Zhangsan.getIDCardNO()<<endl;return0;}標準答案:(1)delete[]idcardno,name(2)nalxle=newchar[strlen(new_name)+1](3)Person(id_card_no,p_name,is_male)知識點解析:(1)主要考查考生對析構函數的掌握,題目要求釋放兩個指針成員所指向的動態(tài)空間。釋放動態(tài)空間應使用delete語句,因為要釋放兩個指針,使用語句:delete[]idcardno,name;實現。注意當釋放多個指針時,中間用逗號隔開。(2)考查動態(tài)數組分配空間,題目要求指針name指向申請到的足夠容納字符串new_name的空間。使用strlen(new_name)得到字符串new_name的長度,但是這里要注意加1。(3)主要考查考生對派生類構造函數的掌握,題目要求利用參數表中前幾個參數對基類Person進行初始化。派生類的構造函數要使用成員列表初始化法對基類初始化,因此為constchin*dept,doublesal):Person(id_card_no,p_name,is_male)。國家二級C++機試(操作題)模擬試卷第3套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請打開考生文件夾下的解決方案文件proj1,該工程中包含程序文件main.cpp,其中有類Foo和主函數main的定義。程序中位于每個“//ERROR****found****”之后的一行語句有錯誤,請加以改正。改正后程序的輸出結果應該是:X=aY=42注意:只修改每個“//********found********”下的那一行,不要改動程序中的其他內容。#include<iostream>usingnamespacestd;classFoo{public:Foo(charx){x_=x;}chargetX()const{returnx_;}public:staticinty_;private:charx_;};//ERROR*******found*******intFoo.y_=42;intmain(intargc,char*argv[]){//ERROR*******found*******Foof;//ERROR*******found*******cout<<"X="<<f.x_<<endl;cout<<"Y="<<f.y_<<endl;return0;}標準答案:(1)intFoo::y_=42;(2)Foof(’a’);(3)cout<<"X="<<f.getX()<<endl;知識點解析:主要考查考生對靜態(tài)成員的掌握,因為靜態(tài)整型變量y_是Foo類的公有成員,所以給y_賦值時要加上“Foo::”,即intFoo::y_=42;。(2)主要考查考生對構造函數的掌握,題目要求程序輸出:X=aY=42可以知道,在給Foo類的f聲明時要同時初始化為字符a,即語句Foof(’a’);。(3)主要考查考生對成員函數的掌握,因為x是類Foo的私有成員,所以不能在main函數中直接調用,要通過公有成員函數getX()調用。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、請打開考生文件夾下的解決方案文件proj2,該工程中包含程序文件main.cpp,其中有類Mammal(“哺乳動物”)、類Elephant(“大象”)、類Mouse(“老鼠”)的定義和主函數main的定義。請在橫線處填寫適當的代碼并刪除橫線,以實現上述定義。此程序的正確輸出結果應為:ELEPHANTMOUSE注意:只能在橫線處填寫適當的代碼,不要改動程序中的其他內容,也不要刪除或移動“//****found****”。#include<iostream>usingnamespacestd;enumcategory{ENPTY,ELEPHANT,NOUSE);char*output[]={"ENPTY","ELEPHANT","NOUSE"};classMammal{public:Mammal(char*str){//**********found**********name=new__________strcpy(name,str);}virtualchar*WhoAmI()=0;Virtual~Hammal(){delete[]name;}voidPrLnt(){cout<<WhoAmI()<<endl;}private:char*name;};classElephant:publicNammal{public://**********found**********Elephant(char*str):_____________{}char*NhoAmI(){returnoutput[ELEPHANT];}};classNouse:publicNammal{public:Mouse(char*str):Mammal(str){}//**********found**********char*WhoAmI(){__________)};intmain(){//**********found**********Mammal*pm=new_________("Huanhuan");pm->Print();deletepm;pm=newNouse("Nicky");pm->Print();deletepm;return0;}標準答案:(1)char[strlen(str)+1];(2)Mammal(str)(3)returnoutput[MOUSE];(4)Elephant知識點解析:(1)主要考查分配空間,程序要給name分配空間,由下一條語句中strcpy(name,str)可知程序要把字符串str復制給name,因此要分配的空間大小為strlen(str)+1。(2)主要考查考生對構造函數的掌握,因為Elephant類是Mammal類的派生類,所以其構造函數要使用成員列表先對Mammal類初始化。(3)主要考查考生對枚舉類型的掌握,先看程序:enumcategory{EMPTY,ELEPHANT,MOUSE}。再參考Elephant類中的WhoAmI函數:chal*WhoA-mI(){returnoutput[ELEPHANT];}??芍@里要填寫的返回語句為:returnoutput[MOUSE];。(4)主要考查考生對派生類的掌握,題目要求輸出:ELEPHANTMOUSE可知,要先調用Elephant類的WhoAmI函數,因此給指針pm分配Elephant類空間。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、請打開考生文件夾下的解決方案文件proj3,本題創(chuàng)建一個小型字符串類,字符串長度不超過100。程序文件包括proj3.h、proj3.cpp、writeToFile.obj。補充完成重載賦值運算符函數,完成深復制功能。屏幕上輸出的正確結果應該是:Hello!Happynewyear!要求:補充編制的內容寫在“//**********333**********水料”與“**********666**********”兩行之間。不得修改程序的其他部分。注意:程序最后調用writeToFile函數,使用另一組不同的測試數據,將不同的運行結果輸出到文件out.dat中。輸出函數writeToFile已經編譯為obj文件。//proj3.h#include<iostream>#include<iomanip>usingnamespacestd;classMiniString{public:friendostream&operator<<(ostream&output,constMiniString&s)//重載流插入運算符{output<<s.sPtr;returnoutput;}friendistream&operator>>(istream&input,MiniString&s)//重載流提取運算符{chartemp[100];//用于輸入的臨時數組temp[0]=’\0’;//初始為空字符串input>>setw(100)>>temp;intinLen=strlen(temp);//輸入字符串長度if(inLen!=0){s.length=inLen;//賦長度if(s.sPtr!=0)delete[]s.sPtr;//避免內存泄漏s.sPtr=newchar[s.length+1];strcpy(s.sPtr,temp);//如果s不是空指針,則復制內容}elses.sPtr[0]=’\0’;//如果s是空指針,則為空字符串returninput;}voidmodString(constchar*string2)//更改字符串內容{if(string2!=0)//如果string2不是空指針,則復制內容{if(strlen(string2)!=length){length=strlen(string2);delete[]sPtr;sPtr=newchar[length+1];//分配內存}strcpy(sPtr,string2);}elsesPtr[0]=’\0’;//如果string2是空指針,則為空字符串}MiniString&operator=(constMiniString&otherString);MiniString(constchar*s=""):length((s!=0)?strlen(s):0)//構造函數{sptr=0;if(length!=0)setString(s);}~MiniString()//析構函數{delete[]sPtr;)private:intlength;//字符串長度char*sPtr;//指向字符串起始位置voidsetString(constchar*string2)//輔助函數{sPtr=newchar[strlen(string2)+1];//分配內存if(string2!=0)strcpy(sptr,string2);//如果string2不是空指針,則復制內容elsesPtr[0]=’\0’;//如果string2是空指針,則為空字符串}},//proj3.cpp{}include<iostream>#include<iomanip>usingnamespacestd;#include"proj3.h"MiniString&MiniString::operator=(constMiniString&otherString){//重載賦值運算符函數。提示:可以調用輔助函數setString//************333*********//*************666**********}intmsin(){MiniStringstrl("Hello!"),str2;voidwriteToFile(constchar*);str2=strl;//使用重載的賦值運算符str2.modString("Happynewyear!");cout<<strl<<’\n’;cout<<str2<<’\n’;writeToFile("");return0;}標準答案:1ength=otherStrlng.length;//把對象字符串otherstrinq的長度賦值給變量lenqthsetString(otherString.sPtr);//調用函數setstrinq,實現給類變量sptr分配空間,以及逐個把對象otherstring字符串的值復制到sptr中return*this;//返回被賦值的對象知識點解析:主要考查考生對運算符重載的掌握,題目要求重載賦值運算符函數。要重載的運算符是“=”,即賦值的意思。提示:可以調用輔助函數setString。該函數的功能是復制形參的字符串到sPtr中,因此,首先復制:length,其次通過函數setString復制sPtr,最后按要求返回*this;。國家二級C++機試(操作題)模擬試卷第4套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modi1.cpp,該程序運行時有錯,請改正其中的錯誤,使程序正確運行,并且使程序輸出的結果為:30130注意:錯誤的語句在//******error******的下面,修改該語句即可。1#include<iostream.h>2inta=10;3classCObj4{5public:6CObj()7{8a=b=0;9}10voiddisplay()11{12//******error********13cout<<a<<b<end1;14}15voidfunc(inta)16{17//******error******18a+=a;19}20voidfunc2()21{22//******error******23a+=a;24}25private:26inta,b;27};28voidmain()29{30CObjobj;31obj.func(3);32obj.display();33obj.func2();34obj.display();35}標準答案:(1)cout<<a<<b<<end1;(2)this->a+=a;(3)a+=::a;知識點解析:程序當中定義了全局變量a和類CObj,類CObj含有成員變量a和b,類CObj的變量a和全局變量a均為整型變量,名字完全一樣,使用時需要注意區(qū)分。類CObj成員函數display()打印變量a和b的值,func(inta)函數和func2()均使類成員變量a增加,但是增加方式不同。(1)成員函數display()打印變量a和b的值,即cout輸出a和b的值,cout流中的數據是用流插入運算符“<<”順序加入的,因此“<”不正確,因此第1個標識下應改成cout<<a<<b<<end1。(2)在func(inta)中,參數a傳遞進來,其和成員變量a名字一樣,因此第2個標識下的“a+=a”有歧義,從程序的運行結果來分析,CObjobj聲明對象obj,初始化類成員變量a和b均為0,調用func函數后輸出30,說明a為3,b:為0,因此這里應該是成員變量與參數a的和賦給成員變量a,正確的寫法是“this->a+=a;”。(3)func2()函數雖然沒有參數,但是成員變量a和全局變量a重名,第3個標識下“a、+=a”也會有歧義,分不清楚是全局變量加倍還是類成員變量加倍或者其他情況,調用func2()函數后,輸出“130”,說明a為13,b為0,因此是成員變量與全局變量a的和賦給成員變量a,正確的寫法是“a+=::a;”,“::a”表示是全局變量a。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi2.cpp。閱讀下列函數說明和代碼。函數num(char*str)實現返回字符串中非數字的個數。例如:abc123abc45返回輸出:6將函數num()補充完整。注意:請勿改動主函數。1#include<iostream.h>2intnum(char*str)3{45}6intmain()7{8charstr[1024];9cout<<’’pleaseinputastrfng:’’<<end1;10cin.getline(str,1024);11cout<<’’charnumberis’’<<num(str)<<end1;12return0;13}標準答案:1intnumber=0;2for(inti=0;str[i]!=0;i++)3if(str[i]>’9’||str[i]<’0’)//非數字字符4number++;5returnnumber;知識點解析:函數num(char*str)實現返回字符串中非數字的個數,數字從0開始到9結束,共有10個,因此判斷數組字符比較簡單,即“’0’<=str[i]<=’9’”,除數字字符外其余的都是非數字字符,利用這個關系可迅速判斷該字符是否是非數字字符。(1)利用循環(huán)搜索數組str中的元素,循環(huán)變量從0開始,直到str[i]=0(到了字符數組的尾),不斷地讀取str中讀取元素。(2)每讀到一個元素判斷是否是非數字字符,即滿足條件“str[i]>’9’||str[i]<’0’的字符為非數字字符,非數字字符個數加1,循環(huán)結束就得到了非數字字符的個數。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的源程序文件modi3.cpp。其中定義的類并不完整,按要求完成下列操作,將類的定義補充完整。完成以下功能:(1)完成構造函數,設置數組元素的個數為0,請在注釋//********1********之后添加語句。(2)完成函數AddMember(intn),如果參數n包含在類的數據成員數組中,則返回0,否則把數據寫入數組,然后返回1,請在注釋//********2********之后添加語句。(3)完成函數DelMember(intn),如果變量在數據中,則刪除該變量,并且返回1,如果不存在則返回0,請在注釋//********3********之后添加語句。(4)完成成員函數islnclude(intn)的定義,該函數檢查參數n是否在類的數據成員數組elems中,如果在返回1,否則返回0。請在注釋//********4********之后添加語句。注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。1#include<iostream.h>2#defineMAXLENGTH5003classCArray4{5public:6CArray()7{8//********1********910}11intAddMember(intn)12{13for(inti=0;i<length;i++)14{15//********2********16if(Array[i]=n)17return0;18}19Array[1ength++]=n;20return1;21}22intDelMember(intn)23{24inti;25for(i=0;i<length;i++)26{27if(Array[i]==n)28{29break;30}31}32//********3********33if()34{35for(;i<length-1;i++)36{37Array[i]=Array[i+1];38}39length--;40return1;41}42return0;43}44intisInclude(intn)45{46for(inti=0;i<length;i++)47{48//********4********49if()50{51return1;52}53}54return0;55}56private:57intArray[MAXLENGTH];58intlength;//用來記錄數組的個數59};60intmain()61{62CArrayobj;63obj.AddMember(1);64obj.AddMember(3);65obj.AddMember(8);66obj.AddMember(23);67cout<<obj.isInclude(8)<<end1;68cout<<obj.isInclude(11)<<end1:69obj.DelMember(3);70obj.DelMember(8);71cout<<obj.isInclude(2)<<end1;72cout<<obj.isInclude(1)<<end1;73return0;74}標準答案:(1)添加語句:length=0;(2)將“if(Array[i]=n)”補充完整為:if(Array[i]==n)或if(n==Array[i])(3)將“if()”補充完整為:if(i<lenqth)或if(i!=lenqth)(4)將“if()”補充完整為:if(Array[i]==n)或if(n==Array[i])知識點解析:程序中定義了類CArray,有兩個數據成員和多個成員函數。變量為length用來記錄數組元素的個數,數組Array[MAX_LNGTH]用來存放數組元素。成員函數AddMember()和DelMember()分別表示添加和刪除元素,函數isInclude(intn)檢查數組當中是否存在值為n的元素。(1)使length的初始化為0,因此添加語句:“l(fā)ength=0;”。(2)第2個標識下是檢查n是否已經在數組當中存在,用if語句來判斷,即if(Array[i]==n)或if(n==Array[i])。(3)DelMember(intn)函數刪除指定的元素,由于元素在數組當中的位置未知,因此必須先查找該元素的位置,在該函數的實現過程當中通過for循環(huán)來完成,即第一個for循環(huán)查找n在數組中的位置。如果n存在于數組中,那么if中的break語句就會執(zhí)行跳出循環(huán),此時循環(huán)變量i的值會小于length,即通過判斷i的值是否小于length值可以知道n是否存在數組中,如果存在數組中接下來進行刪除操作。即第3個標識下應改為if(i<length)或if(i!=length)。(4)islnclude(intn)成員函數用來判斷n是否存在數組當中,可用if語句比較,即第4個標識下應改為“if(Array[i]==n)或if(n==Array[i])”。國家二級C++機試(操作題)模擬試卷第5套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請打開考生文件夾下的解決方案文件proj1,該工程中包含程序文件main.cpp,其中有類CDate(“日期”)和主函數main的定義。程序中位于每個“//EPdlOR****found****”之后的一行語句有錯誤,請加以改正。改正后程序的輸出結果應為:原日期:2005—9—25更薪后的日期:2006—4—1注意:只修改每個“//ERROR****found****”下的那一行,不要改動程序中的其他內容。#include<iostream>#include<cstdlib>usingnamespacestd;classCDate//日期類{//ERROR******found******proteerect:CDate(){};CDate(intd,intm,inty){//ERROR******found******Set;Date(intday=d,intmonth=m,intyear=Y);};voidDisplay();//顯示日期voidSetDate(intClay,intmonth,intyear)//設置日期{m_nDay=day;m_nNonth=month;m_nYear=year;_}private:intm_nDay;//日intm_nMonth;//月intm_nYear;//年};voidCDate::Display()/,/顯示日期{//ERROR******found******eout<<m_nDay<<"一"<<m_nNonth<<"一"<<m_nYear;cout<<endl;}intmain(){CDated(25,9,2005);//調用構造函數初始化日期cout<<"原日期:";d.Display();d.SetDate(1,4,2006);//調用成員函數重新設置日期tout<<“更新后的日期:”;d.Display();return0;}標準答案:(1)public:(2)SetDate(d,m,y);(3)cout<<m_nYear。<<”-”<<m_n.Month<<”-”<<m_nDay:知識點解析:(1)通過主函數中成員函數的調用可知這里應該為公有成員,而且構造函數必須為公有繼承。(2)主要考查考生對成員函數的掌握,程序在這里調用成員函數SetDate,直接把形參代入即可。(3)題目要求輸出原日期:2005-9-25??梢灾垒敵鲰樞驗椋合容敵瞿?,其次月,最后是日。二、綜合應用題(本題共1題,每題1.0分,共1分。)2、請打開考生文件夾下的解決方案文件proj3,其中聲明了SortedList類,是一個用于表示有序數據表的類。其成員函數insert的功能是將一個數據插入到一個有序表中,使得該數據表仍然保持有序。請編寫這個insert函數。程序的正確輸出應為:插入前:1,2,4,5,7,8,10插入6和3后:1,2,3,4,5,6,7,8,10要求:補充編制的內容寫在“//********333********”與“//********666********”之間。不得修改程序的其他部分。注意:程序最后將結果輸出到文件out.dat中。輸出函數writeToFile已經編譯為obj文件,并且在本程序中調用。//SortedList.h#include<iostream>usingnamespacestd;classSortedList{//有序數據表類intlen;double*d;public:SortedLiSt(intlen,doubledata[]=NULL);~SortedList(){delete[]d;}intlength()const{returnlen;}//有序數據表長度(即元素的個數)doublegetElement(inti)const{returnd[i];)voidinsert(doubledata);voidshow()const;//顯示有序數據表};voidwriteToFile(char*,constSortedLiSt&);//main.cpp#include"SortedList.h"SortedList::SortedList(intlen,doubledata[]):len(len){d=newdouble[len];for(intk=0;k<len;k++)d[k]=(data==NULL?0.0:data[k]);for(inti=0;i<len一1;i++){intm=i;for(intj=i;j<fen;j++)if(d[j]<d[m])m=j;if(m>i){doublet=d[m];d[m]=d[i];d[i]=t;}}}voidSortedList::insert(doubledata){//********333********//********666********}voidSortedList::show()const{//顯示有序數據表for(inti=0;i<len一1;i++)cout<<d[i]<<",";cout<<d[len—1]<<endl;}intmain(){doubles[]={5,8,1,2,i0,4,7};SortedListlist(7,s);cout<<"插入前:"<<endl;list.show();list.insert(6.0);list.insert(3.0);cout<<"插入6和3后:"<<endl;list.show();writeToFile("",list);return0;}標準答案:for(Inti=0;i<len;++1)//遍歷數組dif(data<d[i])//如果data小于d[i]{len++;//數組d的長度自加1double*dd=newdouble[len];//分配長度為len空間for(intk=len;k>i;k--)//在數組d中從k等于len到i做遍歷dd[k]=d[k一1];//把d[k一1]賦值給dd[k]dd[i]=data;//把data賦值給dd[i]for(intj=0;j<i;j++)//把數組d從0到i做遍歷dd[j]=d[j];//把d[j]賦值給dd[j]delete[]d;//刪d分酉芒的空間d=newdouble[len];//給d分配長度為len的空間for(intindex=0;index<len;++index)//遍歷數組dd從0到lend[index]=dd[index];//地dd[index]賦值給d[index]delete[]dd;//刪dd分配的空間break;//跳出循環(huán)}知識點解析:主要考查考生對插入算法的掌握,題目要求insert函數的功能是將一個數據插入到一個有序表中,使得該數據表仍保持有序。可以知道數據表d是一組有序的數組,那么就采取先比較再插入的步驟完成即可。要注意動態(tài)數組d的長度是確定的,要添加元素,就要重新分配空間。國家二級C++機試(操作題)模擬試卷第6套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modi.epp,該程序運行時有錯誤,請改正錯誤,使得程序正常運行,并且要求最后一個catch()必須拋出執(zhí)行的任何異常。程序通過拋出異常輸出:error0ERROR注意:不要改動main函數,不能增行或刪行,也不能更改程序的結構,錯誤的語句在//******error******的下面。1#include<iostream.h>2intmain()3{4try5{6throw(’’error’’);7}8//********error********9catch(chars)10{11cout<<s<<end1;12}13try14{15throw((int)0);16}17//********error********18catch()19{20cout<<i<<end1;21}22try23{24throw(0);25throw(’’error’’);26}27//********error********28catch()29{30cout<<’’ERROR’’<<end1;31}32return0;33}標準答案:(1)catch(char*s)(2)catch(inti)(3)catch(…)知識點解析:本程序是對各種異常信息的處理。try-cmch的結構中,catch子句用來捕捉異常的信息。(1)第1個標識前的異常拋出語句為“throw(’’error’’):”,其中的類型為字符串。所以對應的異常捕捉語句catch中應該符合這個類型,而程序中給出的語句“catch(chars)”是字符型的,所以第2個標識下的語句修改為“catch(char*s)”。(2)第2個標識前的異常拋出語句為“throw((int)0);”,其中的類型為int。所以對應的異常捕捉語句catch中應該符合這個類型,所以補充catch子句中的類型,否則找不到匹配的catch塊,那么系統(tǒng)就會調用一個系統(tǒng)函數,使程序終止運行。即第1個標識下的語句修改為“catch(inti)”。(3)如果在catch子句中沒有指定異常信息的類型,那么就用刪節(jié)號“…”表示它可以捕捉任何類型的異常信息,即修改為“catch(…)”。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi2.cpp。請補充完整程序fun(inti),使程序完成以下功能:如果i=5,則輸出如下5行井號。###############注意:不要改動main()函數,不得增行或刪行,也不得更改程序的結構。1#include<iostream.h>2voidfun(inti)3{45}6intmain()7{8fun(5);9return0;10}標準答案:1for(intj=0;j<i;j++)//行循環(huán)2{3for(intk=0;k<=j;k++)//列循環(huán)4cout<<’’#’’;//輸出“#”5cout<<end1;6}知識點解析:(1)該程序功能是輸出5行井號。它的解題思路,兩層循環(huán),外循環(huán)為行,內循環(huán)為列。第一行為1列,第二行為兩列,同理類推,第n行為n列。(2)從已給部分源程序的main主函數開始入手,核心函數fun(inti)中的i參數為i行≠≠。(3)首先,利用for循環(huán)進行外層循環(huán),要輸出的i行。(4)然后,利用for循環(huán)進行內層循環(huán),輸出對應i行的i列。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的源程序文件modi3.cpp。程序通過繼承關系,實現對姓名的控制。類TestClass1實現對名字訪問的接口,TestClass2實現對名字的設置和輸出。程序輸出為:TestClass2NameMay其中定義的類并不完整,按要求完成下列操作,將類的定義補充完整。(1)在類TestClass1中定義接口函數GetName,為純虛函數。請在注釋//********1********后添加適當的語句。(2)函數GetName2()實現獲得名字的緩存,但是只獲得讀允許操作這個緩存,請在注釋//********2********后添加適當的語句。(3)實現TestClass2的構造函數,請在注釋//********3********后添加適當的語句。(4)完成TestClass2的構造函數,實現對名字的處理。請在注釋//********4********后添加適當的語句。注意:增加代碼,或者修改代碼的位置已經用符號表示出來。請不要修改其他的程序代碼。1#include<iostream.h>2ClassTestClass13{4public:5//********1********67};7classTestClass2:publicTestClass18{10public:11voidGetName()12{13cout<<’’TeStClass2Name’’<<end1;14}15//********2********1617{18returnm_str;19}20//********3********2122{23inti;24for(i=0;str[i]!=0;i++)25m_str[i]=str[i];26//********4********2728}29private:30charm_str[32],31};32voidmain()33{34TestClass1*p;35TestClass2obj1(’’May’’),36pP=&obj1;37p一>GetName();38cout<<obj1.GetName2()<<end1;39return;40}標準答案:(1)添加語句:virtualvoidGetName()=0;(2)添加語句:constchar*GetName2()(3)添加語句:TestClass2(char*str)(4)添加語句:m_str[i]=0;知識點解析:在VC環(huán)境下打開程序,根據題干給出的幾條功能要求,對程序中給出注釋下的內容逐個補全或修改。從已定源程序的main主函數開始入手,可以看出程序通過調用類TestClass和接口函數Getname實現各種輸出操作。(1)題目1要求“在類TestClass1中定義接口函數GetName,為純虛函數”。在C++中,在基類中用virtual聲明成員函數為虛函數。純虛函數是在聲明虛函數時被“初始化”為0的函數,即“virtualvoidGetName()=0;”。(2)題目2要求“函數GetName2()實現獲得名字的緩存,但是只獲得讀允許操作這個緩存”。只能引用數據成員,而不能修改,那么使用常成員函數。一般形式為,const函數類型函數名,即“constchar*GetName2()”。(3)題目3要求“實現TestClass2的構造函數”。TestClass2的構造函數與類TestClass2名應該相同,而且第三個標識下的大括弧中是對字符數組str的操作,所以類TestClass2的構造函數中的參數為str,即這里補全為“TestClass2(char*str)”。(4)題目4要求“完成TestClass2的構造函數,實現對名字的處理”,補全類TestClass2的構造函數,構造函數中的名字變量str對
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 倉庫無償使用合同范本
- 原煤洗選合同范例
- 心血管內科模擬試題及答案
- 美容師中級模擬考試題+參考答案
- 個人年終工作總結開頭和結尾
- 城區(qū)綠地養(yǎng)護合同范本
- 七年級政治教學計劃
- 一周培訓總結
- 勞務用工明細合同范本
- 陰陽合同算什么合同范本
- 學生創(chuàng)新能力培養(yǎng)方案計劃
- 《西門子PLC應用》一體化教案1-20周全篇
- 2.2學會管理情緒 課件 -2024-2025學年統(tǒng)編版道德與法治七年級下冊
- 開展課外讀物負面清單管理的具體實施舉措方案
- 《智能網聯汽車智能傳感器測試與裝調》電子教案
- GB/T 2423.17-2024環(huán)境試驗第2部分:試驗方法試驗Ka:鹽霧
- 2023年蘇州衛(wèi)生職業(yè)技術學院高職單招(英語)試題庫含答案解析
- 手工焊錫知識
- 《采油工程》講義
- 法蘭蝶閥螺栓配用表正式版
- 電子舌技術在普洱茶品質識別中應用的研究
評論
0/150
提交評論