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

下載本文檔

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

文檔簡介

國家二級C++機試(操作題)模擬試卷3(共9套)(共25題)國家二級C++機試(操作題)模擬試卷第1套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modi1.cpp,但該程序運行時有錯,請改正程序中的錯誤,使該程序的輸出結(jié)果為:20,1515,20注意:錯誤的語句在//******error******的下面,修改該語句即可。1#include<iostream.h>2//******error******3voidExchangel(intm,intn)4{5intt=m;6m=n;’7n=t;8}9//******error******10voidExchange2(intm,intn)11{12intt=*m;13*m=*n;14*n=t;15}16voidmain()17{18intb=20;19inta=15;20Exchange1(a,b);21cout<<a<<’,’<<b<<end1;22//******error******23Exchange2(a,b);24cout<<a<<’,’<<b<<end1;25}標準答案:(1)voidExchange1(int&m,int&n)(2)voidExchange2(int*m,int*n)(3)Exchange2(&a,&b);知識點解析:程序中定義了兩個交換函數(shù),分別采用傳地址和傳引用的方式來實現(xiàn)交換。(1)由程序的運行結(jié)果可知,分別調(diào)用Exchange1()和Exchange2()后,a和b的值兩次發(fā)生交換,因此Exchange1()函數(shù)和Exchange2()函數(shù)均為實現(xiàn)交換的函數(shù)。參數(shù)傳遞方式有多種,將變量名作為實參和形參、傳遞變量的指針和傳送引用方式,將變量名作為實參和形參方式,這種傳遞是單向的,在函數(shù)執(zhí)行過程中形參的值發(fā)生變化不會傳回實參,而指針和引用方式在函數(shù)執(zhí)行過程中形參會影響實參。顯然這里不是采用變量名作為實參和形參的單向傳遞方式,而是采用的傳地址或傳引用的方式,在Exchange1()體內(nèi)沒有出現(xiàn)指針運算符“*”,因此可知Exchange1()函數(shù)是采用的傳引用的方式,因此第1個標識下應(yīng)改為“voidExchangel(int&m,int&n)”。(2)由1分析可知,Exchange2()函數(shù)內(nèi)有指針運算符“*”,可知其是采用的傳指針的方式作為參數(shù)傳遞,因此第2個標識下應(yīng)改為“voidExchange2(int*m,int*n)”。(3)Exchange2()參數(shù)為int型數(shù)據(jù)指針,因此調(diào)用Exchange2()時應(yīng)傳入指針而不是變量名,故第3個標識下應(yīng)改為“Exchange2(&a,&b);”。二、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi2.cpp。閱讀下列函數(shù)說明和代碼,補充空出的代碼。函數(shù)convert(char*des,char*str)的功能是去掉字符串str中相同的字母,并將處理后的結(jié)果存到des所指的字符串中。例如:輸入:Thisisgreat!輸出:Tllisgrea!注意:不能修改程序的其他部分,只能補充fun()函數(shù)。1#include<iostream.h>2#defineMAXLEN10243voidconvert(char*des,char*str)4{56}7voidmain()8{9charsour[MAXLEN];10chardest[MAXLEN];11cout<<’’Pleaseinputastring:’’<<end1;12cin.getline(sour,MAXLEN);13convert(dest,sour);14cout<<dest<<end1;15return;16}標準答案:1int1,j;2boolToAdd;3des[0]=0;4for(i=0;str[i]!=NULL;i++)5{6ToAdd=true;7for(j=0;des[j]!=NULL;j++)8{9if(str[i]==des[j])10{11ToAdd=false;//des數(shù)組中已存在該元素,將標志位設(shè)置為假,說明不用再添加12break;//des數(shù)組中已存在該元素,跳出循環(huán)13}14}15if(ToAdd)//des數(shù)組中不存在,添加進來16{17des[j]=str[i];18des[j+1]=0;19}20}知識點解析:convert(char*des,char*str)函數(shù)的功能是去掉字符串str中相同的字母,并將處理后的結(jié)果存到des所指的字符串中。原來的字符串存放在str指向的數(shù)組中,新字符串存放在des指向的數(shù)組中,因此可逐個讀取str指向的數(shù)組里面的字符,把不同的字符放入des指向的數(shù)組中,即每次讀str指向的數(shù)組一個字符,就在des指向的數(shù)組里面查找是不是已經(jīng)有該字符了,如果已經(jīng)有了則不添加進來,反之則把該字符加入到des指向的數(shù)組中。(1)由審題分析可知,需要兩重循環(huán),外層循環(huán)不斷讀取str中的元素,內(nèi)循環(huán)在des數(shù)組中查找讀到的str中的字符,如果找到了des數(shù)組中己存在該元素不需要添加,如果沒找到則添加到des數(shù)組中。(2)在外循環(huán)體內(nèi),先設(shè)置bool型的標志變量ToAdd為真,假設(shè)在des數(shù)組中str[i]不存在,然后再內(nèi)循環(huán)中,用str[i]和des[j]比較,如果相同說明已經(jīng)存在了,將ToAdd設(shè)置為假,des[j]后面的元素不需要再比較了,跳出內(nèi)循環(huán)。(3)通過判斷ToAdd可知,str[i]是否存在des數(shù)組中,如果ToAdd為真,則說明des數(shù)組中不存在str[i],將str[i]添加到des數(shù)組中。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的源程序文件modi3.cpp。其中定義的類并不完整,按要求完成下列操作,將類的定義補充完整。完成以下功能:(1)定義復(fù)數(shù)類CComplex的私有成員變量real和imaginary,分別用來表示復(fù)數(shù)的實部和虛部,都是double類型的變量。請在注釋//********1********后添加適當?shù)恼Z句。(2)添加復(fù)數(shù)類CComplex的帶一個參數(shù)的構(gòu)造函數(shù),分別將real和imaginary賦值為參數(shù)r和0。請在注釋//********2********后添加適當?shù)恼Z句。(3)完成對運算符“+”的重載,分別對復(fù)數(shù)的實部和虛部相加。請在注釋//********3********后添加適當?shù)恼Z句。(4)完成復(fù)數(shù)的友元函數(shù)Equal(CComplex&c1,CComplex&c2)的定義,如果兩個數(shù)的實部和虛部都相等,則返回1,否則返回0,請在注釋//********4********后添加適當?shù)恼Z句。注意:除在指定位置添加語句之外,請不要改動程序中的其他內(nèi)容。1#include<iostream.h>2classCComplex3{4private:5//********1********67public:8CComplex()9{10real=imaginary=0;11}12CComplex(doubler){13//********2********1415}16CComplexoperator+(CComplex&c1){17//********3********1819temp.real=real+c1.real;20temp.imaginary=imaginary+c1.imaginary;21returntemp;22}23voidSet(intre,intimag)24{25real=re;26imaginary=imag;27}28friendboolEqual(CComplex&c1,CComplex&c2);29};30boolEqual(CComplex&c1,CComplex&c2)31{32//********4********3334}35intmain()36{37CComplexcomplex1(5);38CComplexcomplex2;39cout<<Equal(complex1,complex2)<<endl;40complex2.Set(5,0);41cout<<Equal(complex1,complex2)<<end1;42return0;43}標準答案:(1)添加語句:doublereal,imaginary;(2)添加語句:real=r;imaginary=0;(3)添加語句:CComplextemp;(4)添加語句:return(c1.real==c2.real)&&(c1.imaginary=c2.imaginary);知識點解析:程序中定義了類CComplex,含有私有成員變量real和imaginary,分別用來表示復(fù)數(shù)的實部和虛部,CComplex類有兩個構(gòu)造函數(shù)、對運算符“+”的重載、Set(intre,intimag)可改變實部和虛部的值、友元Equal(CComplex&c1,CComplex&c2)函數(shù)可判斷兩個CComplex對象是否相等。(1)第1個標識下完成定義復(fù)數(shù)類CComplex的私有成員變量real和imaginary,均為double類型的變量,因此第1個標識下應(yīng)添加“doublereal,imaginary;”。(2)構(gòu)造函數(shù)CComplex(doubler)完成類的初始化,該構(gòu)造函數(shù)有一個參數(shù),分別將real和imaginary賦值為參數(shù)r和0,因此第2個標識下應(yīng)添加“real=r:imaginary=0;”。(3)編譯程序可知,變量temp沒有定義,由operator+(CComplex&c1)函數(shù)體的語句可知,temp為函數(shù)的返回值,而operator+(CComplex&c1)函數(shù)體函數(shù)返回CComplex類對象,故在第3個標識下補充temp定義,即“CComplextemp;”。(4)即判斷兩個對象c1和c2的實部和虛部是否均相等,兩個邏輯結(jié)果相與即可,因此第4個標識下應(yīng)添加“return(c1.real==c2.real)&&(c1.imaginary==c2.imaginary);”。國家二級C++機試(操作題)模擬試卷第2套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請打開考生文件夾下的解決方案文件proj1,此工程中包含程序文件main.cpp,其中有類Book("書")和主函數(shù)main的定義。程序中位于每個//ERROR****found****之后的一行語句行有錯誤,請加以更正。更正后程序的輸出應(yīng)該是:書名:C++語言程序設(shè)計總頁數(shù):299已把"C++語言程序設(shè)計"翻到第50頁已把"C++語言程序設(shè)計"翻到第51頁已把書合上。書是合上的。已把"C++語言程序設(shè)計"翻到第1頁注意:只修改每個//ERROR****found****下的一行,不要改動程序中的其他內(nèi)容。#include<iostream>usingnamespacestd;classBook{char*title;intnum_pages;//頁數(shù)intcur_page;//當前打開頁面的頁碼,0表示書未打開public:Book(constchar*theTitle,intpages):num_pages(pages){//ERROR**********found**********title=newchar[strlen(theTitle)];strcpy(title,theTitle);cout<<endl<<"書名:"<<title<<"總頁數(shù):"<<num_pages;}~Book(){delete[]title;}//ERROR**********found**********boolisOpen()const{returnnum_pages!=0;}//書打開時返回true,否則返回falseintnumOfPages()const{returnnum_pages;}//返回書的頁數(shù)intcurrentPage()const{returncur_page;}//返回打開頁面的頁碼voidopenAtPage(intpage_no){//把書翻到指定頁cout<<endl;if(page_no<1||page_no>num_pages){cout<<"無法翻到第"<<cur_page<<"頁。";close();}else{cur_page=page_no;cout<<"已把“"<<title<<"”翻到第"<<cur_page<<"頁";}}voidopenAtPrevPage(){openAtPage(cur_1);}//把書翻到上一頁voidopenAtNextPage(){openAtPage(cur_page+1);}//把書翻到下一頁voidclose(){//把書合上cout<<endl;if(!isOpen())cout<<"書是合上的。";else{//ERROR**********found**********num_pages=0;cout<<"已把書合上。";}cout<<endl;}};intmain(){Bookbook("C++語言程序設(shè)計",299);book.openAtPage(50);book.openAtNextPage();book.close();book.close();book.openAtNextPage();return0;}標準答案:(1)title=newchar[strlen(theTitle)+1];(2)boolisOpen()const{returncur_page!=0;}(3)curpage=0;知識點解析:(1)主要考查考生對動態(tài)分配的掌握情況,如果要復(fù)制字符串theTitle,就要分配空間空間大小應(yīng)該為theTitle的長度加1。(2)主要考查考生對bool函數(shù)的掌握情況,根據(jù)私有成員定義:intcur_page;//當前打開頁面的頁碼,0表示書未打開??芍獞?yīng)該返回cur_page!=0;。(3)主要考查考生對成員函數(shù)的掌握情況,根據(jù)私有成員定義:intcurpage;//當前打開頁面的頁碼,0表示書未打開??芍獞?yīng)給curpage賦值為0。二、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、請打開考生文件夾下的解決方案文件proj2。此工程中包含一個程序文件main.cpp,其中有類AutoMobile("汽車")及其派生類Car("小轎車")、Truck("卡車")的定義,以及主函數(shù)main的定義。請在橫線處填寫適當?shù)拇a,然后刪除橫線,以實現(xiàn)上述類定義。此程序的正確輸出結(jié)果應(yīng)為:車牌號:冀ABC1234品牌:ForLand類別:卡車當前檔位:0最大載重量:12車牌號:冀ABC1234品牌:ForLand類別:卡車當前檔位:2最大載重量:12車牌號:滬XYZ5678品牌:QQ類別:小轎車當前檔位:0座位數(shù):5車牌號:滬XYZ5678品牌:QQ類別:小轎車當前檔位:-1座位數(shù):5注意:只在橫線處填寫適當?shù)拇a,不要改動程序中的其他內(nèi)容,也不要刪除或移動//****found****。#include<iostream>#include<iomanip>#include<cmath>usingnamespacestd;classAutoMobile{//“汽車”類char*brand;//汽車品牌char*number;//車牌號intspeed;//檔位:1、2、3、4、5,空檔:0,倒檔:-1public:AutoMobile(constchar*the_brand,constchar*the_number):speed(0){//**********found**********__________________________________________;strcpy(brand,the_brand);number=newchar[strlen(the_number)+1];//**********found**********__________________________________________;}~AutoMobile(){delete[]brand;delete[]number;}constchar*theBrand()const{returnbrand;}//返回品牌名稱constchar*theNumber()const{returnnumber;}//返回車牌號intcurrentSpeed()const{returnspeed;}//返回當前檔位voidchangeGearTo(intthe_speed){//換到指定檔位if(speed>=-1&&speed<=5)speed=the_speed;}virtualconstchar*category()const=0;//類別:卡車、小轎車等virtualvoidshow()const{cout<<"車牌號:"<<theNumber()<<"品牌:"<<theBrand()//**********found**********<<"類別:"<<________________<<"當前檔位:"<<currentSpeed();}};classCar:publicAutoMobile{//“小汽車”類intseats;//座位數(shù)public:Car(constchar*the_brand,constchar*the_number,intthe_seats):AutoMobile(the_brand,the_number),seats(the_seats){}intnumberOfSeat()const{returnseats;}//返回座位數(shù)constchar*category()const{return"小轎車";}//返回汽車類別voidshow()const{AutoMobile::show();cout<<"座位數(shù):"<<numberOfSeat()<<endl;}};classTruck:publicAutoMobile{//“卡車”類intmax_load;//最大載重量public:Truck(constchar*the_brand,constchar*the_number,intthe_max_load):AutoMobile(the_brand,the_number),max_load(the_max_load){}intmax1oad()const{returnmax_load;}//返回最大載重量constchar*category()const{return"卡車";}//返回汽車類別voidshow()const{//調(diào)用基類的show()函數(shù)//**********found**********__________________________________________cout<<"最大載重量:"<<max1oad()<<endl;}};intmain(){Trucktruck("ForLand","冀ABC1234",12);truck.show();truck.changeGearTo(2);truck.show();Carcar("QQ","滬XYZ5678",5);car.show();car.changeGearTo(-1);car.show();cout<<endl;return0;}標準答案:(1)brand=newchar[strlen(the_brand)+1];(2)strcpy(number,the_number);(3)category()(4)AutoMobile::show();知識點解析:(1)主要考查考生對動態(tài)分配的掌握情況,要復(fù)制字符串就要先給brand分配空間。(2)主要考查考生對strcpy函數(shù)的掌握情況,該函數(shù)用于復(fù)制字符串。(3)主要考查考生對成員函數(shù)的掌握情況,純虛函數(shù)category()返回汽車類型。(4)主要考查考生對虛函數(shù)的掌握情況,調(diào)用基類的虛函數(shù)show。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、請打開考生文件夾下的解決方案文件prog3,其中聲明的MyString類是一個用于表示字符串的類。成員函數(shù)endsWith的功能是判斷此字符串是否以指定的后綴結(jié)束,其參數(shù)s用于指定后綴字符串。如果參數(shù)s表示的字符串是MyString對象表示的字符串的后綴,則返回true;否則返回false。注意,如果參數(shù)s是空字符串或等于MyString對象表示的字符串,則結(jié)果為true。例如,字符串"cde"是字符串"abcde"的后綴,而字符串"bde"不是字符串"abcde"的后綴。請編寫成員函數(shù)endsWith。在main函數(shù)中給出了一組測試數(shù)據(jù),此種情況下程序的輸出應(yīng)為:s1=abcdes2=cdes3=bdes4=s5=abcdes6=abcdefs1endsWiths2:trues1endsWiths3:falses1endsWiths4:trues1endsWiths5:trues1endsWiths6:false要求:補充編制的內(nèi)容寫在//********333********與//********666********之間。不得修改程序的其他部分。注意:程序最后將結(jié)果輸出到文件out.dat中。//MyString.h#include<iostream>#include<string.h>usingnamespacestd;classMyString{public:MyString(constchar*s){size=strlen(s);str=newchar[size+1];strcpy(str,s);}~MyString(){delete[]str;}boolendsWith(constchar*s)const;private:char*str;intsize;};voidwriteToFile(constchar*);//main.cpp#include"MyString.h"boolMyString::endsWith(constchar*s)const{//********333********//********666********}intmain(){chars1[]="abcde";chars2[]="cde";chars3[]="bde";chars4[]="";chars5[]="abcde";chars6[]="abcdef";MyStringstr(s1);cout<<"s1="<<s1<<endl<<"s2="<<s2<<endl<<"s3="<<s3<<endl<<"s4="<<s4<<endl<<"s5="<<s5<<endl<<"s6="<<s6<<endl;cout<<boolalpha<<"s1endsWiths2:"<<str.endsWith(s2)<<endl<<"s1endsWiths3:"<<str.endsWith(s3)<<endl<<"s1endsWiths4:"<<str.endsWith(s4)<<endl<<"s1endsWiths5:"<<str.endsWith(s5)<<endl<<"s1endsWiths6:"<<str.endsWith(s6)<<endl;writeToFile("");return0;}標準答案:ints_size=strlen(s);for(inti=0;i<s_size;i++)if(str[size-s_size+i]!=s[i])returnfalse;returntrue;知識點解析:主要考查考生對字符串的掌握情況,根據(jù)題目要求可知.函數(shù)用來判斷此字符串是否以指定的后綴結(jié)束。判斷過程是先求形參的長度,從形參的第一個字符開始判斷字符串是否一致。該函數(shù)是bool函數(shù)最后要確定是返回true還是false。國家二級C++機試(操作題)模擬試卷第3套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請打開考生文件夾下的解決方案文件proj1,此工程包含有一個源程序文件proj1.cpp。其中位于每個注釋“//ERROR****found****”之后的一行語句存在錯誤。請改正這些錯誤,使程序的輸出結(jié)果為:(4,4)注意:只修改注釋“//ERROR****found****”的下一行語句,不要改動程序中的其他內(nèi)容。//proj1.cpp#include<iostream>usingnamespacestd;classPoint{public://ERROR*******found*******Point(doubleX,doubleY)_x(x),_y(y){}doubleGetX()const{returnx;doubleGetY()const{Eeturn_y;}//ERROR**********found**********voidNove(doublexOff,doubleyoff)const{x+=xOff;y+=yOff;}protected:doublex,y;};intmain(){Pointpt(1.5,2.5);pt.Nove(2.5,1.5);//ERROR*******found*******以下語句輸出pt成員x和y的值tout<<’(’<<pt.-X<<’,’<<pt._y<<’)’<<endl;return0;}標準答案:(1)Point(doublex,doubley):_x(x),_y(y){}或Point(doublex,doubley){_x=x;_y=y;}(2)voidMove(doublexOff,doubleyOff)(3)cout<<’(<<pt.GetX(<<’,<<pt.GetY()<<’)’<<endl;知識點解析:(1)主要考查的是構(gòu)造函數(shù)的成員初始化列表的語法,在成員列表之前必須加’:’。(2)主要考查成員函數(shù)中const的使用,先看Move函數(shù)的函數(shù)體:{x+=xOff;y+=yOff;}可以看到Point類的兩個私有成員x和y的值都發(fā)生了變化,因此Move函數(shù)不能使用const,因為只有在函數(shù)內(nèi)不改變類的成員的值時才能使用const。(3)主要考查私有成員不能被類外函數(shù)調(diào)用的知識。題目要求輸出pt成員_x和_y的值,從Point類中的函數(shù)doubleGetX()const{retur_x;}和doubleGetY()const{retun_y;},可以分別得到_x和_y的值,因此這里使用語句cout<<’(<<pt.GetX()<<’,<?<pt.GetY(<<’)’<<endl;調(diào)用成員函數(shù)GetX(和GetY(x)來實現(xiàn)題目要求。二、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、請打開考生文件夾下的解決方案文件proj2,此工程包含有一個源程序文件proj2.cpp。其中定義了Basel類、Base2類和Derived類。Basel是一個抽象類,其類體中聲明了純虛函數(shù)Show。Base2類的構(gòu)造函數(shù)負責動態(tài)分配一個字符數(shù)組,并將形參指向的字符串復(fù)制到該數(shù)組中,復(fù)制功能要求通過調(diào)用strcpy函數(shù)來實現(xiàn)。Derived類以公有繼承方式繼承Basel類,以私有繼承方式繼承Base2類。在Derived類的構(gòu)造函數(shù)的成員初始化列表中調(diào)用Base類的構(gòu)造函數(shù)。請在程序中的橫線處填寫適當?shù)拇a,然后刪除橫線,以完成Basel、Base2和Derived類的功能。此程序的正確輸出結(jié)果應(yīng)為:I’maderivedclass.注意:只在指定位置編寫適當代碼,不要改動程序中的其他內(nèi)容,也不要刪除或移動“//****found****”。//proj2.cpp#include<iostream>#include<cstring>usingnamespacestd;classBase1{public://*******found*******下列語句需要聲明純虛函數(shù)Show________;};classBase2{protected:char*p;Base2(constchar*S){_p=newChar[stolen(s)+1];//*******found*******下列語句將形參指向的字符串常量復(fù)制到該類的字符數(shù)組中________;}~Base2(){delete[]_p;}};//*******found*******Derived類公有繼承Basel,私有繼承Base2類classDerived:________{public://*******found*******以下構(gòu)造函數(shù)調(diào)用Base2類構(gòu)造函數(shù)Derived(constchar*s):________{}voidShow(){cout<<.p<<endl;)};intmain(){Base1*pb=newDerived(”I’maderivedclass.”);pb->Show();deletepb;return0;}標準答案:(1)virtualvoidShow()=0(2)strcpy(_p,s)(3)publicBase1,privateBase2(4)Base2(s)知識點解析:(1)主要考查的是純虛函數(shù)的定義。題目要求聲明純虛函數(shù)Show,所以首先看Base1類的派生類Derived類中Show函數(shù)的定義:voidShow){cout<<_p<<endl;}這時就可以得出答案了,只要在void前加上virtual,在0后加上=0;,再把函數(shù)體去掉就可以了,即virtualvoidShow()=0;。特別注意純虛函數(shù)和虛函數(shù)的區(qū)別,虛函數(shù)不能用添加=0。(2)主要考查的是字符串賦值語句,題目要求將形參指向的字符串常量復(fù)制到該類的字符數(shù)組中。即把s復(fù)制給p,直接使用語句strcpy(_p,s);就可以了,strcpy為系統(tǒng)提供的字符串復(fù)制函數(shù)。(3)主要考查的是派生類的聲明。題目要求Derived類公有繼承Base1.私有繼承Base2類。公有繼承使用public,保護繼承使用protected.私有繼承使用private。如果一個類同時繼承多個基類時,各個基類之間用“,”分開。(4)主要考查的是派生類的構(gòu)造函數(shù),定義派生類的構(gòu)造函數(shù)時要使用成員列表對基類初始化。基類一:Base1類,沒有構(gòu)造函數(shù),不需要使用參數(shù)。基類二:Base2類,有構(gòu)造函數(shù):Base2(constchar*s),因此需要成員列表:Derived(constchar*s):Base2(s)。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、請打開考生文件夾下的解決方案文件proj3,此工程包含一個源程序文件proj3.cpp,其功能是從文本文件in.dat中讀取全部整數(shù),將整數(shù)序列存放到intArray類的對象myArray中,然后對整數(shù)序列按非遞減排序,最后由函數(shù)writeToFile選擇序列中的部分數(shù)據(jù)輸出到文件out.dat中。文件in.dat中的整數(shù)個數(shù)不大于300個。要求:補充編制的內(nèi)容寫在“//*******333*******”與“//*******666*******”兩行之間。實現(xiàn)對整數(shù)序列按非遞減排序,并將排序結(jié)果在屏幕上輸出。不得修改程序的其他部分。注意:程序最后已將結(jié)果輸出到文件out.dat中。輸出函數(shù)writeToFile已經(jīng)給出并且調(diào)用。//proj3.cpp#include<iostream>#include<fstream>#include<cstring>usingnamespacestd;classintArray{private:int*array;//整數(shù)序列首地址intlength;//序列中的整數(shù)個數(shù)public://構(gòu)造函數(shù),從文件中讀取數(shù)據(jù)用于初始化新對象。參數(shù)是文件名intArray(char*filename);voidsort();//對整數(shù)序列按非遞減排序~intArray();voidwriteToFile(char*filename);};intArray::intArray(char*filename){ifstreammyFile(filename);intlen=300,array=newint[len];length:0;while(myFile>>array[length++]);length--;myFile.close();}voidintArray::sort(){//*******333*******//*******666*******}intArray::~intArray(){delete[]array;}voidintArray::writeToFile(char*filename){intstep=0;OfstreamoutFile(filename);for(inti=0;i<length;i=i+step){outFile<<array[i]<<endl;step++;}outFile.close();}voidmain(){intArraymyArray(”in.dat”);myArray.sort();myArray.writeToFile(”out.dat”);}標準答案:for(inti=0;i<length;++i)//遍歷整個數(shù)組for(intj=i;j<length;++j)if(array[i]>array[i]){inttemp;//定義一個臨時變量temptemp=array[i];//存放變量值array[i]=array[j];//賦值array[j]=temp;//變量存放}for(inta=0;a<length;++a)//遍歷數(shù)組,把數(shù)組中的所有元素打印到控制臺cout<<array[a]<<"";知識點解析:題目要求對整數(shù)序列按非遞減排序要排序就必須要有比較,所以定義兩個下標i和j,按題目非遞減排序要求,當array[i]比array[j]大時就交換其值,利用中間變量temp來實現(xiàn)。國家二級C++機試(操作題)模擬試卷第4套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請打開考生文件夾下的解決方案文件proj1,其中有線段類Line的定義。程序中位于每個“//ERROR****found****”之后的一行語句有錯誤,請加以改正。改正后程序的輸出結(jié)果應(yīng)該是:Endpoint1=(1,8),Endpoint2=(5,2),length=7.2111。注意:只修改每個“//ERROR****found****”下的那一行,不要改動程序中的其他內(nèi)容。#include#includeusingnamespacestd;ClassLine;doublelength(Line);classLine{//線段類doublex1,y1;//線段端點1doublex2,y2;//線段端點2public://ERROR*******found*******Line(doublex1,doubley1,doublex2,doubley2)const{this->xl=xl:this->yl=yl;this->x2=x2;this->y2=y2;}doublegetXl()const{returnx1;}doublegetYl()const{returny1;}doublegetX2()const{returnx2;}doublegetY2()const{returny2;}voidshow()const{cout<<"Endpoint1=("<標準答案:(1)Line(doublex1,doubley1,doublex2,doubley2){(2)cout<<"),length="<知識點解析:(1)主要考查考生對構(gòu)造函數(shù)的掌握,構(gòu)造函數(shù)要給私有成員賦初始值,因此不能使用const來限制。(2)主要考查考生對this指針的掌握,由函數(shù)length的聲明doublelength(Line);可知,length函數(shù)的形參是Line類,在wildshow()eunst函數(shù)里,this指針指向的足當前Line類,因此可以用*this表示當前Line類。(3)主要考查考生對成員函數(shù)的掌握,length函數(shù)是類外函數(shù),不能直接調(diào)用類的私有成員,因此要通過成員函數(shù)取得對應(yīng)的值。二、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、請打開考生文件夾下的解決方案文件proj2,該工程中包含一個程序文件main.cpp,其中有“書”類Book及其派生出的“教材”類TeachingMaterial的定義,還有主函數(shù)main的定義。請在程序中“//********found********”下的橫線處填寫適當?shù)拇a,然后刪除橫線,以實現(xiàn)上述類定義和函數(shù)定義。此程序的正確輸出結(jié)果應(yīng)為:教材名:C++語言程序設(shè)計頁數(shù):299作者:張三相關(guān)課程:面向?qū)ο蟮某绦蛟O(shè)計注意:只能在橫線處填寫適當?shù)拇a,不要改動程序中的其他內(nèi)容,也不要刪除或移動“//********found********”。#includeusingnamespacestd;classBook{//“書”類char*title;//書名intnumpages;//頁數(shù)char*writer;//作者姓名public:Book(constchar*the_title,intpages,constchar*the_writer):numpages(pages){title=newchar[strlen(thetitie)+1];strcpy(title,thetitle);//********found********strcpy(writer,thewriter);}//********found********~Book(){__________}intnumOfPages()const{returnnumpages;}//返回書的頁數(shù)constchar*theTitle()const{returntitle;}//返回書名constchar*theWriter()const{returnwriter;}//返回作者名};classTeachingMaterial:publicBook{//“教材”類char*course;public:TeachingMaterial(constchar*the_title,intpages,constchar*thewriter,constchar*thecourse)//********found********:______________{course=newchar[strlen(thecourse)+1];strcpy(course,thecourse);}~TeachingMaterial(){delete[]course;)constchar*theCourse()const{returncourse;}//返回相關(guān)課程的名稱};intmain(){TeachingMaterialabook("C++語言程序設(shè)計",299,"張三","面向?qū)ο蟮某绦蛟O(shè)計");cout<<"教材名:"<三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、請打開考生文件夾下的解決方案文件proj3,其中包含了類TaxCalculator(“個稅計算器”)和主函數(shù)main的定義。創(chuàng)建“個稅計算器”需要接收稅率表信息和起征額信息。在main函數(shù)中,通過兩個數(shù)組創(chuàng)建了如下的稅率表:利用這個稅率表創(chuàng)建“個稅計算器”時,假定起征額為2000元(即不超過2000元的所得不征收個人所得稅)。請補充完成計算應(yīng)納個人所得稅額的成員函數(shù)getTaxPayable,其中的參數(shù)income為月收入。此程序的正確輸出結(jié)果應(yīng)為:月收入為800元時應(yīng)繳納個人所得稅0元月收入為1800元時應(yīng)繳納個人所得稅0元月收入為2800元時應(yīng)繳納個人所得稅55元月收入為3800元時應(yīng)繳納個人所得稅155元月收人為4800元時應(yīng)繳納個人所得稅295元月收人為5800元時應(yīng)繳納個人所得稅455元注意:只能在函數(shù)getTaxPayable中的“//***********333***********”和“//***********666***********”之間填入若干語句,不要改動程序中的其他內(nèi)容。//TaxCalCulator.h#inClude#includeusingnamespacestd;classTaxCalCUlator{public:TaxCalculator(doublethelimits[],doubletherates[],intthelength,doublethethreshoid):lower1imitS(newdouble[thelength]),rates(newdouble[thelength]),listlen(thelength),threshold(thethreshoid){for(inti=0;i=0){//**********333**********//**********666**********___________i;}returntax_payable;}voidTaxCalculator::showTaxPayable(doubleincome)const{cout<<"月收入為"<國家二級C++機試(操作題)模擬試卷第5套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請打開考生文件夾下的解決方案文件proj1,此工程中包含程序文件main.epp,其中有類Score(“成績”)和主函數(shù)main的定義。程序中位于每個“//ERROR****found****”之后的一行語句有錯誤,請加以改正。改正后程序的輸出結(jié)果應(yīng)為:學號:12345678課程:英語總評成績:85注意:只修改每個“//ERROR****found****”下的一行,不要改動程序中的其他內(nèi)容。#include<iostream>usingnamespaceStd;classScore{public:Score(constchar*the_course,constchar*the_id,intthe_normal,intthemidterm,intthe_endof_term):course(the_course),normal(the_normal),midteEm(the_midterm),end_of_term(the_end_of_term){//ERROR*******found*******strcpy(the_id,student_id);}constchar*get;Course()const{returncourse;}//返回課程名稱//ERROR*******found*******constchar*getTD()const{return&student_id;}//返回學號intgetNormal()const{returnnormal;}//返回平時成績intgetMidterm()const{returnmidterm;}//返回期中考試成績intgetEndOfTerm()const{returnend_of_term;}//返回期末考試成績intget;Final()const;//返回總評成績private:constchar*course;//課程名稱charstudent_id[12];//學號int;normal;//平時戍績intmidterm;//期中考試成績intend_of_term;//期末考試成績};//總評成績中平時成績占20%,期中考試占30%,期末考試占50%,最后結(jié)果四舍五入為一個整數(shù)//ERROR*******found*******intgetFinal()const{returnnormal*0.2+midterm*0.3+end_of_term*0.5+0.5;}intmain(){charEnglish[]="英語";Scorescore(English,"12345678",68,83,92);cout<<"學號:"<<score.getTD()<<"";cout<<"課程:"<<score.getCouEse()<<"";cout<<"總評成績:"<<score.getFinal()<<endl;return0;}標準答案:(1)strcpy(student_id,the_id);(2)coastchar*getID()coast{returnstudent_jd;}(3)intScore::getFinal()const{知識點解析:(1)主要考查考生對strcpy()函數(shù)的掌握情況,strcpy(參數(shù)一,參數(shù)二)函數(shù)的功能是將參數(shù)二的字符串復(fù)制給參數(shù)一,因此在這里student_id應(yīng)該位于參數(shù)一的位置,即strcpy(student_id,the_id);。(2)主要考查考生對函數(shù)返回值的掌握情況,根據(jù)注釋:返回學號可知學號應(yīng)該由一個字符串組成。再看函數(shù)要返回的類型:constchar*,可知要返回一個char型指針,也就是一個char型數(shù)組,而&student_id是一個char型數(shù)組指針,因此直接寫studentjd即可。(3)主要考查考生對類的成員函數(shù)的掌握情況,因為getFinal函數(shù)是Score類的成員函數(shù),所以在定義時要加上類名和作用域符,即Score::。二、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、請打開考生文件夾下的解決方案文件proj2,該工程中包含一個程序文件main.cpp,其中有坐標點類point、線段類Line和三角形類Triangle的定義,還有main函數(shù)的定義。程序中兩點間距離的計算是按公式實現(xiàn)的,三角形面積的計算是按公式實現(xiàn)的,其中請在程序中的橫線處填寫適當?shù)拇a,然后刪除橫線,以實現(xiàn)上述類定義。此程序的正確輸出結(jié)果應(yīng)為:Side1:9.43398Side2:5Side3:8area:20注意:只在橫線處填寫適當?shù)拇a,不要改動程序中的其他內(nèi)容,也不要刪除或移動“//****found****”。#iticlude<iostream>#include<cmath>usingnamespacestd;classPoint{//坐標點類public:constdoublex,y;Point(doublex=0.0,doubley=0.0):x(x),y(y){}//**********found**********doubledistanceTo(_________)const{//到指定點的距離returnsqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));}};classLine{//線段類public:constPointp1,p2;//線段的兩,個端點//**********found**********Line(Pointp1,Pointp2):___________{}doublelength()const{returnp1.distanceTo(p2);}//線段的長度};classTriangle{//三角形類public:constPointp1tp2lp3;//三角形的三個頂點//**********found**********Triangle(________):p1(p1),p2(p2),p3(p3){}doublelength1()const{//邊p1,p2的長度returnLine(p1,p2).length();}doublelength2()const{//邊p2,p3的長度returnLine(p2,p3).length();};doublelength3()const{//邊p3,p1的長度returnLime(p3,p1).length();}doublearea()const{//三角形面積//**********found**********doubles=________;returnsqrt(s*(s—length1())*(s-length2())*(s-length3()));}};intmain(){Triangler(Point(0.0,8.0),Point(5.0,0.0),Point(0.0,0.0));cout<<"Side1:"<<r.lengthl()<<endl;cout<<"Side2:"<<r.length2()<<endl;cout<<"Side3:"<<r.length3()<<endl;cout<<"area:"<<r.a(chǎn)rea()<<endl;return();}標準答案:(1)constPoint&p(2)pl(p1),p2(p2)(3)Pointp1,Pointp2,Pointp3(4)(1engthl()+Length2()+length3())/2知識點解析:(1)主要考查考生對函數(shù)形參的掌握,由函數(shù)的注釋可知有本坐標點到達某個坐標點類的距離,再根據(jù)函數(shù)體returnsqrt((x—p.x)*(x—p.x)+(y—p.y)*(y—p.y));可知,該坐標點類名為p,因此可以知道形參為Point&p,為了不改變該坐標點的值,前面要加上eonst。(2)主要考查考生對構(gòu)造函數(shù)的掌握,對于常變量型私有成員constPointp1,p2,只能用成員初始化列表進行賦值。(3)主要考查考生對構(gòu)造函數(shù)的掌握,由空格后面的語句:p1(p1),p2(p2),p3(p3){}可知,該構(gòu)造函數(shù)需要進行成員列表初始化,再看類的私有成員constPointp1,p2,p3,可知p1,p2,p3是Point類型,因此形參為Pointp1,Pointp2,Pointp3。(4)主要考查考生對成員函數(shù)的掌握,根據(jù)函數(shù)注釋,可知本函數(shù)要求計算三角形面積,再看題目的提示:s=(a+b+c)/2??芍崭裉幰畹氖侨切蔚娜龡l邊之和除以2,而求邊長的函數(shù)已經(jīng)給出,這里直接調(diào)用即可。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、請打開考生文件夾下的解決方案文件proj3,其中使用友元函數(shù)訪問類的私有數(shù)據(jù)成員,求出兩個數(shù)據(jù)成員的大于1的最小公因子。請編寫友員函數(shù)FriFun,使其輸出結(jié)果為:Commondenominatoris2要求:補充編制的內(nèi)容寫在“//********333********”與“//********666********”之間,不得修改程序的其他部分。注意:程序最后將結(jié)果輸出到文件out.dat中。輸出函數(shù)writeToFile已經(jīng)編譯為obj文件,并且在本程序中調(diào)用。//proj3.hclassFriFunClass{inta,b;public:FriFunClass(inti,intj){a=i;b=j;}friendintFriFun(FriFunClassx);//友元函數(shù)};voidwriteToFile(constchar*);//proj3.cpp#include<iostream>usingnamespacestd;#include”prj3.h”intFriFun(FriFunClassx){//********333********//由于函數(shù)FriFun()是類FriFunClass的友元函數(shù),所以它可以直接訪問a和b//********666********}intmain(){FriFunClassn(10,20);if(FriFun(n))cout<<"Commondenominatoris"<<FriFun(n)<<"\n";elsecout<<"NOcommondenominator.\n";writeToFile("");return0;}標準答案:1intmin=x.a(chǎn)<x.b?x.a(chǎn):x.b;//此處為取出x.a(chǎn)與x.b中的最小值2for(inti=2;i<=min;i++)//從i到min遍歷數(shù)組3if(x.a(chǎn)%i==0&&x.b%i==0)4//如i能同時整除x.a(chǎn)來的x.b,則僅回ireturni;5return-1;知識點解析:主要考查考生對友元函數(shù)的掌握情況,友元函數(shù)可以訪問類的私有數(shù)據(jù)成員,題目要求函數(shù)求出兩個數(shù)據(jù)成員的大于1的最小公因子,從2開始往上算,因此要同時可以被兩個私有成員整除,這里用取余符號完成,取余為0即為整除。國家二級C++機試(操作題)模擬試卷第6套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請打開考生文件夾下的解決方案文件proj1。此工程定義了StopWatch(秒表)類,用于表示時、分、秒信息,有構(gòu)造函數(shù)StopWatch()、設(shè)置時間函數(shù)reset(),并且重載了前置和后置++運算符,實現(xiàn)增加1秒的功能。程序中位于每個//ERROR****found****下一行的語句有錯誤,請加以更正。更正后程序的輸出應(yīng)該是:00:00:0000:01:00注意:只修改每個//ERROR****found****下的那一行,不要改動程序中的其他內(nèi)容。#include<iostream>#include<iomanip>usingnamespacestd;classStopWatch//"秒表"類{inthours;//小時intminutes;//分鐘intseconds;//秒public:StopWatch():hours(0),minutes(0),seconds(0){}voidreset(){hours=minutes=seconds=0;}StopWatchoperator++(int)//后置++{StopWatchold=*this;++(*this);returnold;}//前進1秒StopWatch&operator++()//前置++{//ERROR*********found*********if(seconds++==60){seconds=0;minutes++;if(minutes==60){minutes=0;hours++;}}//ERROR*********found*********returnthis;}friendvoidshow(StopWatch);};voidshow(StopWatchwatch){cout<<setfill(’0’);cout<<setw(2)<<watch.hours<<’:’<<setw(2)<<watch.minutes<<’:’<<setw(2)<<watch.seconds<<endl;}intmain(){StopWatchsw;show(sw);for(inti=0;i<59;i++)sw++;//ERROR*********found*********show(sw++);return0;}標準答案:(1)if((++seconds)==60)(2)return*this;(3)show(++sw);知識點解析:(1)主要考查考生對’++"運算符的掌握結(jié)合程序可知,應(yīng)先使seconds加1,再判斷是否需要進位,因此為++second。(2)主要考查考生對this指針的掌握,應(yīng)返回this指針指向的類。(3)主要考查考生對’++’運算符的掌握,判斷sw是要先取值再自加1還是先自加1再取值。二、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、請打開考生文件夾下的解決方案文件proj2。此工程中定義了一個人員類Person,然后派生出學生類Student和教授類Professor。請在橫線處填寫適當?shù)拇a,然后刪除橫線,以實現(xiàn)上述類定義。此程序的正確輸出結(jié)果應(yīng)為:MynameisZhang.mynameisWangandmyG.P.A.is3.88.MynameisLi,Ihave8publications.注意:只在橫線處填寫適當?shù)拇a,不要改動程序中的其他內(nèi)容,也不要刪除或移動"//**********found********"。#include<iostream>usingnamespacestd;classPerson{public://**********found**********_______________{name=NULL;}Person(char*s){name=newchar[strlen(s)+1];strcpy(name,s);}~Person(){if(name!=NULL)delete[]name;}//**********found**********____________Disp()//聲明虛函數(shù){cout<<"Mynameis"<<name<<".\n";}voidsetName(char*s){name=newchar[strlen(s)+1];strcpy(name,s);}protected:char*name;};classStudent:publicPerson{public://**********found**********Student(char*s,doubleg)_____________________{}voidDisp(){cout<<"mynameis"<<name<<"andmyG.P.A.is"<<gpa<<".\n";}private:floatgpa;};classProfessor:publicPerson{public:voidsetPubls(intn){publs=n;}voidDisp(){cout<<"Mynameis"<<name<<",Ihave"<<publs<<"publications.\n";}private:intpubls;};intmain(){//**********found**********_________________;Personx("Zhang");p=&x;p->Disp();Studenty("Wang",3.88);p=&y;p->Disp();Professorz;z.setName("Li");z.setPubls(8);p=&z;p->Disp();return0;}標準答案:(1)Person()(2)virtualvoid(3):Person(s),gpa(g)(4)Person*p知識點解析:(1)主要考查考生對構(gòu)造函數(shù)的掌握情況,構(gòu)造函數(shù)使用成員列表初始化name。(2)主要考查考生對虛函數(shù)的掌握情況,虛函數(shù)使用關(guān)鍵字virtual,參考派生類中Disp函數(shù)可知函數(shù)返回類型為void。(3)主要考查考生對構(gòu)造函數(shù)的掌握情況,使用成員列表初始化。(4)主要考查考生對指針的掌握情況,由語句:p=&x;p->DispO;可知,要定義p為Person類的指針。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、請打開考生文件夾下的解決方案文件prog3,其中聲明了MyString類。MyString是一個用于表示字符串的類。成員函數(shù)startsWith的功能是判斷此字符串是否以指定的前綴開始,其參數(shù)s用于指定前綴字符串。如果參數(shù)s表示的字符串,是MyString對象表示的字符串的前綴,則返回true;否則返回false。注意,如果參數(shù)s是空字符串或等于MyString對象表示的字符串,則結(jié)果為true。例如,字符串"abc"是字符串"abcde"的前綴,而字符串"abd"不是字符串"abcde"的前綴。請編寫成員函數(shù)startsWith。在main函數(shù)中給出了一組測試數(shù)據(jù),此種情況下程序的輸出應(yīng)為:s1=abcdes2=abcs3=abds4=s5=abcdes6=abcdefs1startsWiths2:trues1startsWiths3:falses1startsWiths4:trues1startsWiths5

溫馨提示

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

評論

0/150

提交評論