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

下載本文檔

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

文檔簡介

國家二級C++機試(操作題)模擬試卷19(共9套)(共25題)國家二級C++機試(操作題)模擬試卷第1套一、基本操作題(本題共1題,每題1.0分,共1分。)1、下列給定程序中,函數(shù)fun的功能是計算下式并將計算結(jié)果作為函數(shù)值返回。例如,若形參e的值為1e一3,函數(shù)的返回值為2.985678。請在程序的中括號處填入正確的內(nèi)容并將中括號刪除,使程序得出正確的結(jié)果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#includedoub2efun(doublee){inti;doubles,x;/*********found*********/s=0;i=【1】;x=1.0;while(x>e){/*********found*********/【2】;/*********found*********/x=(2.0*i一1)/((【3】)*(2.0*i));s=s+x;}returns;}main(){doublee=1e一3;printf("\nTheresultis:%f\n",fun(e));}標準答案:(1)0(2)i++或++i或i+=1或i=i+1(3)2.0*i知識點解析:填空1:循環(huán)變量i從1開始參加運算,但是在每次循環(huán)的開始i都進行自加1操作,故i應(yīng)賦初值為0。填空2:循環(huán)變量i自增1運算。填空3:根據(jù)公式確定表達式通項。注意x為double型,故應(yīng)將i變?yōu)閐ouble型再進行運算。二、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數(shù)fun的功能是:先從鍵盤上輸入一個3行、3列的矩陣的各個元素的值,然后輸出主對角線元素之和。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:部分源程序在文件MODI1.C中,不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#includevoidfun(){inta[3][3],sum;inti,j;/*********found*********/sum=1;for(i=0;i<3;i++){for(j=0;j<3;j++)/*********found*********/scanf("%d",a[i][J]);}for(i=0;i<3;i++)sum=sum+a[i][i];printf("Sum=%d\n",sum);}voidmain(){fun();}標準答案:(1)sum=0;(2)scanf("%d.t,&a[i][j]);知識點解析:該題考查對循環(huán)語句的掌握和對數(shù)組概念的理解。本題的解題思路為:先從鍵盤輸入一個3×3矩陣,然后循環(huán)累加,執(zhí)行循環(huán)語句中的sum=sum+a[i][i];。因為變量sum用來存放累加后的結(jié)果,所以應(yīng)對其初始化為0。第二處錯誤考查標準輸入函數(shù)scanf的格式,被賦值的變量前要加上取地址符"&"。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、編寫函數(shù)fun,其功能是:將ss所指字符串中所有下標為奇數(shù)位上的字母轉(zhuǎn)換為大寫(若該位置上不是字母,則不轉(zhuǎn)換)。例如,若輸入“abc4EFg”,則應(yīng)輸出“aBc4EFg”。注意:部分源程序給出如下。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include#include#includevoidfun(char*ss){}voidmain(void){chartt[51];printf("\nPleaseenterancharacterstringwithin50characters:\n");gets(tt);printf("\n\nAfterchanging,thestring\n%s",tt);fun(tt);printf("\nbecomes\n%s",tt);}標準答案:voidfun(char*ss){inti;for(i=0;ss[i]!=’\0’;i++)/*將ss所指字符串中所有下標為奇數(shù)位置的字母轉(zhuǎn)換為大寫*/if(i%2==1&&ss[i]>=’a’&&ss[i]<=’z’)ss[i]=ss[i]一32;}知識點解析:將指定字符串中奇數(shù)位置的字母轉(zhuǎn)換為大寫,首先需要判斷奇數(shù)位置,再判斷該位置字符是不是小寫字母,如果是小寫字母,則將小寫字母轉(zhuǎn)換為大寫字母。字母大小寫轉(zhuǎn)換操作中,只要將小寫字母減去32即可轉(zhuǎn)換為大寫字母。國家二級C++機試(操作題)模擬試卷第2套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modi1.cpp,但該程序運行有問題,請改正main函數(shù)中的錯誤,使程序的輸出結(jié)果是:112233445566778899注意:不要改動main函數(shù),不能增行或刪行,也不能更改程序的結(jié)構(gòu),錯誤的語句在//******error******的下面。#include<iostream.h>#include<iomanip.h>voidmain(){inta[3][3]={{1,2,3),{4,5,6},{7,8,9}};int*p,i;//********error********p=a;for(i=0;i<9;i++){cout<<setw(2)<<*(p+i);//********error********cout<<setw(2)<<*(a+i);if(i%3==2)cout<<endl;}}標準答案:(1)p=&a[0][0];(2)tout<<setw(2)<<*(*a+i);知識點解析:(1)打開modi1.cpp,調(diào)試程序,顯示錯誤提示為第一標識下“modil.cpp(7):errorC2440:’=’:cannotconvertfrom’int[3][3]’to’int*’”,a為二維數(shù)組型變量,將其值賦值給p,應(yīng)該是p指向數(shù)組a的起始位置,即“p=&a[0][0];”。(2)程序中第2個標識下的“cout<<setw(2)<<*(a+i);”語句應(yīng)該是輸出數(shù)組a中元素的值,而該語句是*(a+i)指向數(shù)組第i個位置,要指向其值應(yīng)該是*(*a+i),所以第2個標識下的語句改為“cout<<setw(2<<*(*a+i):”。二、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi2.cpp。完成空出的函數(shù)fun(inta[],int*index),使函數(shù)輸入n(<100)個整數(shù)到指定數(shù)組,求該數(shù)組中最大元素的值和此元素的下標,最大元素值以函數(shù)值返回,此元素的下標通過指針形參帶回調(diào)用函數(shù)。要求函數(shù)實現(xiàn)以下的功能:(1)獲得輸入的n個整數(shù);(2)把最大的數(shù)字的下標在第二個參數(shù)中輸出;(3)把最大的數(shù)字作為返回值。注意:不能修改程序的其他部分,只能修改fun()函數(shù)。#include<iostream.h>#defineMAXLINE100intfun(inta[],int*index){}voidmain(){intA[MAXLINE];intindex;intmaxdata;maxdata=fun(A,&index);cout<<"themaxdatais:"<<maxdata<<""<<"theposionis:"<<index<<endl;return;}標準答案:inti,n;do//輸入數(shù)組的大小{cout<<"Pleaseinputn\";cin>>n;}while(n>99);tout<<"Pleaseinputa[n]\n";for(i=0;i<n;i++)//輸入數(shù)組中元素的值{cin>>a[i];}*index=0;//元素下標值初始化for(i=1;i<n;i++)//循環(huán)找出最大值{if(a[*index]<a[i])*index=i;//記錄比較大元素的下標}returna[*index];//返回最大的元素值,其中index為最大值的下標知識點解析:(1)首先輸入數(shù)組大小,然后利用循環(huán)輸入數(shù)組元素。(2)利用for循環(huán)對每一個當前數(shù)組元素與index標記的元素進行大小比較。(3)循環(huán)中將求得的最大數(shù)據(jù)a[i]的下標標志位賦給標志位index。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、用VC6打開考生文件夾下的源程序文件modi.3.cpp。其中定義的類并不完整,按照要求完成下列操作,將類的定義補充完整。在屏幕和程序modi3.txt文件中輸出以下結(jié)果:HelloTest出現(xiàn)異常情況其中定義的類并不完整,按要求完成下列操作,將類的定義補充完整:(1)以追加的方式打開文件modi3.txt,請在注釋//********1********后添加適當?shù)恼Z句。(2)定義一個類對象S,請在注釋//********2********后添加適當?shù)恼Z句。注意:僅在函數(shù)指定位置添加語句,請勿改動主函數(shù)main與其他函數(shù)中的任何內(nèi)容。#include<iostream.h>#include<fstream>usingnamespacestd;voidWriteFile(char*x){ofstreamout1;//********1********out1.open("modi3.txt",);out1<<x<<’’;out1.close();}voidClearFile(){ofstreamout1;out1.open("modi3.txt");out1.close();}classTestClass{public:TestClasS(){cout<<"Hello"<<endl;WriteFile("Hello");}~TestClasS(){cout<<"Test"<<endl;WriteFile("Test");}};voidmain(){ClearFile();try{//********2********throw1;}catch(int){cout<<"出現(xiàn)異常情況"<<endl;WriteFile("出現(xiàn)異常情況");}}標準答案:(1)將“out1.open("modi3.txt",);”補充完整為:out1.open("modi3.txt",ios_base::app);(2)添加語句:TestClasss;知識點解析:(1)題目1要求“以追加的方式打開文件modi3.txt”。文件輸出輸入方式的設(shè)置值,以ios::app方式是以輸出方式打開文件,寫入的數(shù)據(jù)添加在文件末尾,即第1個標識下語句補全為“out1.open("modi3.txt",iosbase::app);”。(2)題目2要求“定義一個類對象s”。C++中,在聲明了類類型后,定義對象的一般形式:類名對象名。所以這里添加“TestClasss;”。國家二級C++機試(操作題)模擬試卷第3套一、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modi2.cpp。閱讀下列函數(shù)說明和代碼,完成空出部分程序。函數(shù)fun(intn)的功能是在n行n列的矩陣中,每行都有最大的數(shù),本程序求這n個最大數(shù)中的最小一個,并作為參數(shù)返回。注意:不能修改程序的其他部分,只能修改fun()函數(shù)。#include#defineN100inta[N][N];intfun(intn){}voidmain(){intn;cout<<“pleaseinputN:”<>n;for(inti=0;i>a[i][j];}cout<<“Theminofmaxnumbersis”<標準答案:introw;intmax;intmin;intcol;for(row=0;row知識點解析:(1)該程序功能是找出矩陣中所有行最大的數(shù)中的最小一個。它的解題思路,首先找出每一行的最大值,然后在這些值中進行比較,找出其中的最小值。(2)從己給部分源程序的main主函數(shù)開始入手,核心函數(shù)intfun(intn)中的n參數(shù)為矩陣中的列和行數(shù)。二、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi3.cpp。其中定義的類并不完整,按要求完成下列操作,將類的定義補充完整。完成以下功能:(1)定義類的私有變量a、b,請在注釋∥********1********后添加適當?shù)恼Z句。(2)完成類的構(gòu)造函數(shù),對變量a、b賦值,缺省兩個變量值為1,在注釋∥********2********之后添加語句。(3)完成打印函數(shù)display(),打印出“a*b=c”格式的一個乘法算式,在注釋∥********3********之后添加語句。(4)補充主函數(shù),使得打印9×9的乘法口訣。在注釋∥********4********后添加語句。注意:除在指定位置添加語句之外,請不要改動程序中的其他內(nèi)容。#includeclassCMyFormula{private:∥********1********public:∥********2********{this->a=a;this一>b=b;}voidset(intX,intY){a=x;b=y;}voiddisplay(){∥********3********}};intmain(){CMyFormulaformular(1,1);for(inti=1;i<=9;i++){∥********4********for(intj=1;j++){formular.set(j,i);formular.display();cout<<“”;}cout<標準答案:(1)添加語句:inta,b;(2)添加語句:CMyFormula(inta=l,int,b=1)(3)添加語句:cout<知識點解析:程序當中定義了類CMyFormula,含有a和b兩個成員變量,一個構(gòu)造函數(shù),改變成員變量a和b的值得set(intx,inty)函數(shù),打印a和b的乘積的display()函數(shù)。在主函數(shù)中定義了一個CMyFormula對象,然后不斷改變該對象的a和b的值,然后調(diào)用display()顯示,如此完成打印9×9的乘法口訣。國家二級C++機試(操作題)模擬試卷第4套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modil.cpp,但該程序運行有問題,請改正main函數(shù)中的錯誤,使程序的輸出結(jié)果是:nember=1nember=10nember=100注意:不要改動main函數(shù),不能增行或刪行,也不能更改程序的結(jié)構(gòu),錯誤的語句在//******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);知識點解析:(1)第1個標識下,“TestClassobj1;”語句是聲明TestClass類的對象obj1,根據(jù)TestClass類構(gòu)造函數(shù)的定義TestClass(inti),存在整型參數(shù),并且題目要求第一個輸出結(jié)果為1,所以補全參數(shù)1,即第1個標識下的“TestClassobj1(1);”。(2)第2個標識下的“obj1.nember=10;”應(yīng)該是調(diào)用成員函數(shù)SetNember賦值。在C++中成員函數(shù)的使用形式應(yīng)該是:對象名.成員函數(shù),所以修改為“obj1.SetNember(10);”。(3)類是對象的抽象,而對象是類的具體實例。第3個標識下“TestClass.SetNember(100);”語句中的TestClass為類,并不是對象,這里應(yīng)該是使用定義的對象,即obj2,修改為“obj2.SetNember(100);”。二、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi2.cpp。完成fun()函數(shù),其功能是:求出M行N列二維數(shù)組每行元素中的最小值,并計算它們的和值。和值通過形參傳回主函數(shù)輸出。注意:不能修改程序的其他部分,只能修改fun()函數(shù)。#include#defineM2#defineN4voidfun(inta[M][N],int*sum){}voidmain(){intx[M][N]={7,6,5,2,4,2,8,3};ints;fun(x,&s);cout<標準答案:inti,j,k,s=0;for(i=0;ia[i][j])k=j;//求得每一行的最小值s+=a[i][k];//最小值求和}*sum=s;//返回求和值知識點解析:(1)依次訪問每一行的元素。(2)在對每一行的訪問過程中選出最小數(shù)。(3)將選出的最小數(shù)求和。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的源程序文件modi3.cpp。其中定義的類并不完整,按要求完成下列操作,將類的定義補充完整。(1)完成類TestClass1的成員函數(shù)seta定義,定義seta對象x為int類型,請在注釋//********1********后添加適當?shù)恼Z句。(2)完成類TestClass1(共有)和類TestClass2(私有)派生類TestClass3的定義,請在注釋//********2********后添加適當?shù)恼Z句。(3)定義類TestClass3中的私有成員C為int,請在注釋//********3********后添加適當?shù)恼Z句。(4)完成setc中對基類的變量a的賦值,請在注釋//********4********后添加適當?shù)恼Z句。注意:增加代碼,或者修改代碼的位置已經(jīng)用符號表示出來。請不要修改其他的程序代碼。#includeclassTestClass1{inta;public://********1********{returna=x;}voidshowa(){cout<標準答案:(1)添加語句:intseta(intx)(2)添加語句:classTestClass3:publicTestClass1,privateTestClass2(3)添加語句:intc;(4)添加語句:seta(x);知識點解析:(1)題目1要求“完成類TestClass1的成員函數(shù)seta定義,定義seta對象X為int類型”。類的成員函數(shù)是函數(shù)的一種,它與一般函數(shù)的區(qū)別只是,它是一個類的成員,出現(xiàn)在類體中。所以類TestClassl中的成員函數(shù),就是在TestClassl中定義題目中要求的參數(shù)為intx的seta函數(shù),即“intseta(intx)”。(2)題目2要求“完成類TestClass1(公有)和類TestClass2(私有)派生類TestClass3的定義”。從已有的類產(chǎn)生一個新的子類,稱為類的派生。聲明派生類的一般形式為:class派生類名:[繼承方式】基類名。根據(jù)聲明派生類的一般形式,這里補全“classTestClass3:publicTestClass1,privateTestClass2”。(3)題目3要求“定義類TestClass3中的私有成員c為int”。在類TestClass3中的pfivme數(shù)據(jù)成員區(qū)域,定義intc,即在第3個標識下補全“intc:”。(4)題目4要求“完成setc中對基類的變量a的賦值"。基類為TestClass1,setc對于該類a的賦值,是hatseta(intx)函數(shù)的賦值,即“seta(x);”國家二級C++機試(操作題)模擬試卷第5套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請使用VC6或使用【答題】菜單打開考生文件夾proj1下的工程proj1。其中有線段類Line的定義。程序中位于每個“//ERROR****found****”之后的一行語句有錯誤,請加以改正。改正后程序的輸出結(jié)果應(yīng)該是:Endpoint1=(1,8),Endpoint2=(5,2),lenth=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->x1=x1;this->y1=y1;this->x2=x2;this->y2=y2;}doubleqetX1()const{returnx1;}doublegetY1()const{returny1;}doubleqetX2()const{returnx2;}doublegetY2()const{returny2;}voidshow()const{cout<<"Endpoint1=("<標準答案:(1)Line(doublex1,doubley1,doublex2,doubley2){(2)tout<<"),length="<知識點解析:(1)主要考查考生對構(gòu)造函數(shù)的掌握,構(gòu)造函數(shù)要給私有成員賦初始值,因此不能使用const來限制。(2)主要考查考生對this指針的掌握,由函數(shù)length的聲明doublelength(Line);可知,length函數(shù)的形參是Line類,在voidshow()const函數(shù)里,this指針指向的是當前Line類,因此可以用*this表示當前Line類。(3)主要考查考生對成員函數(shù)的掌握,length函數(shù)是類外函數(shù),不能直接調(diào)用類的私有成員,因此要通過成員函數(shù)取得對應(yīng)的值。二、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、請使用VC6或使用【答題】菜單打開考生文件夾proj2下的工程proj2,其中定義了Component類、Composite類和Leaf類。Component是抽象基類,Composite和Leaf是Component的公有派生類。請在橫線處填寫適當?shù)拇a并刪除橫線,以實現(xiàn)上述類定義。此程序的正確輸出結(jié)果應(yīng)為:LeafNode注意:只能在橫線處填寫適當?shù)拇a,不要改動程序中的其他內(nèi)容,也不要刪除或移動“//****found****”。#includeusingnamespacestd;classComponent{public://聲明純虛函數(shù)print()//********found********};classComposite:publicComponent{public://********found********voidsetChiid(__________){m_chiid=chiid;}virtualvoidprint()const{m_child->print();}private:Component*mchiid;};classLeaf:publicComponent{public:virtualvoidprint()const{//**********found**********}};intmain(){Leafnode;Compositecomp;comp.setChiid(&node);Component*p=&comp;p->print();return0;}標準答案:(1)virtualvoidprint()const=0;(2)Component*child(3)cout<<"LealfNode"<知識點解析:(1)主要考查考生對純虛函數(shù)的掌握,題目要求聲明純虛函數(shù)print()。在其派生類中print()函數(shù)的定義為virtualvoidprint()const,由此可知純虛函數(shù)為virtualvoidprint()const=0。(2)主要考查考生對成員函數(shù)的掌握,題目要求填寫函數(shù)voidsetChild的形參,由setChild的函數(shù)體可知形參為child,再看類的私有成員m_child的定義:Component*m_child;。由此可知形參為:Component*child。(3)主要考查考生對純虛函數(shù)的掌握,先看主函數(shù)的程序:Leafnode;Compositecomp;comp.setChild(&node);Component*p=&comp;p->print();第一條和第二條語句都是定義語句,第三條語句調(diào)用函數(shù)setChild,由setChild函數(shù)的定義可知,comp中的m_child等于node,第四條語句定義了個指針p指向comp的地址,也就是node,最后一條語句通過指針p調(diào)用函數(shù)print,也就是調(diào)用類Leaf的函數(shù)print,因為題目要求輸出:LeafNode,因此在這里添加語句:cout<<"LeafNode"<三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾proj3下的工程proj3,其中定義了一個字符串變量類StringVar。類成員的說明在程序注釋中。請在//**********333**********和//*****666*****之間填寫StringVar成員函數(shù)和友元函數(shù)的實現(xiàn)代碼。在main函數(shù)中給出了一組測試數(shù)據(jù),運行時輸入:HelloKitty此情況下程序的輸出應(yīng)該是:HelloKittyBorgBorg注意:只需在//**********333**********和//**********666**********之間填入所編寫的若干語句,不要改動程序中的其他內(nèi)容。//StringVar.h#include#include#include#includeusingnamespacestd;voidwriteToFile(constchar*path);classStringVar{public:StringVar(intsize);//構(gòu)造函數(shù),size為字符串長度(字符個數(shù))初始值;字符串內(nèi)容初始化為空串StringVar(constchara[]);//構(gòu)造函數(shù),用參數(shù)數(shù)組a的內(nèi)容初始化當前對象StringVar(constStringVar&strobj);//復(fù)制構(gòu)造函數(shù)~StringVar(){delete[]value;);//析構(gòu)函數(shù)intlength()const{returnstrlen(value);}//從輸入流ins輸入一個字符串,其中可以包括空格voidinputline(istream&ins);//返回字符串首地址char*getValue()const{returnvalue;}private:char*value;//字符串首地址intmax_length;//字符串最大長度(字符個數(shù)最大值)};//將the_string通過輸出流outs輸出ostream&operator<<(ostream&outs,constStringVarthe_string);//main.cpp#include#include#include"StringVar.h"//**********333**********//**********666**********intmain(){StringVarname1(30),name2("Borg");namel.input_line(cin);StringVarname3(name2);cout<#include#include#includeusingnamespacestd;#include"StringVar.h"voidwriteToFile(constchar*path){charfilename[30];strcpy(filename,path);strcat(filename,"out.dat");ofstreamfout(filename);istringstreamis(string("JennyZheng"));StringVarnamel(40),name2("John");namel.inputline(is);StringVarname3(name2);fout<標準答案:StringVar::StringVar(intsize):maxlength(size)//使用成員初始化列表初始化max_length{value=newchar[size];value[0]=‘\0’;}StringVar::StringVar(constchara[]){max_length=strlen(a)+1;value=newchar[maxlength];Strcpy(value,a);}StringVar::StringVar(constStringVar&strobj){max_length=strobj.max_length;value=newchar[strlen(strobj.value)+1];strcpy(value,strobj.value);}voidStringVar::inputline(istream&ins){inti=0;charch;while(i知識點解析:由StringVar.h這個頭文件可知:頭文件中定義了StringVar類,它包含的成員信息如下:兩個數(shù)據(jù)成員:char*類型的value,指向字符串的首地址;int類型的max_length,表示字符串的最大長度。兩個構(gòu)造函數(shù):接收int類型的構(gòu)造函數(shù)和接收constchara[]的構(gòu)造函數(shù)。一個復(fù)制構(gòu)造函數(shù):用參數(shù)strobj對象的成員值給當前對象的成員賦值;析構(gòu)函數(shù):使用delete[]釋放value指向的地址空間;length()成員函數(shù):返回成員value指向的字符串長度;input_line()成員函數(shù):使用輸入流參數(shù)輸入一個字符串,保存到value指向的內(nèi)存空間;getValue()成員函數(shù):常成員函數(shù),返回value的值。另外類定義體外部還聲明一個重載“<<”運算符函數(shù),將StringVar對象中value指向的字符串輸出,:并返回輸出流outs的引用StringVar.h中,已經(jīng)給出的定義有:析構(gòu)函數(shù)、length()函數(shù)和getValue()函數(shù),所以需要我們完成的函數(shù)定義有:構(gòu)造函數(shù)、復(fù)制構(gòu)造函數(shù)、input_line()函數(shù)和重載的“<<”運算符函數(shù)①StringVar(intsize);題意指出,size為字符串長度(字符個數(shù))初始值,字符串內(nèi)容初始化為空串,所以需要使用size設(shè)置成員max—length,為value申請size個字符的存儲空間,并把value的第一個字符設(shè)置為’\0’表示空串,這樣保證析構(gòu)函數(shù)的delete[]也是正確的。②StringVar(constchara[]);題意指出,使用參數(shù)數(shù)組a的內(nèi)容初始化對象的成員,即將數(shù)組a中的內(nèi)容,存放到value指向的內(nèi)存空間,由于value是使用new分配的(保證析構(gòu)函數(shù)的delete[]是正確的),所以不能簡單的把數(shù)組a的首地址賦給value,需要將數(shù)組a的內(nèi)容復(fù)制到value指向的內(nèi)存空間中,另外成員max_length,初值最小必須是value指向的內(nèi)存空間長度,即value指向的字符串長度+1(題意中max_length表示字符個數(shù)的最大值,所以需要包含字符串結(jié)束符’\0’)(此構(gòu)造函數(shù)的形參必須傳人的是字符串,如果是字符數(shù)組,必須傳入數(shù)組的長度,以防數(shù)組a的最后一個字符不是結(jié)束符’\0’,此時strlen()函數(shù)獲取的長度,就不是字符數(shù)組a的字符個數(shù))③StringVar(constStringVar&strobj);復(fù)制構(gòu)造函數(shù)需要將形參strobj的成員賦給當前調(diào)用該復(fù)制構(gòu)造函數(shù)的對象成員,在賦值value時,同樣需要為value分配足夠的內(nèi)存空間。④inputjine(istream&ins);input_line()函數(shù)需要使用形參ins輸入流,輸入一個字符串存放到value中,題意要求可以輸入空格,所以我們不能直接用輸入流ins和輸入運算符,因為輸入運算符會丟棄空白符、空格符和制表符,可以使用輸入流ins的成員函數(shù):get()和while循環(huán),逐個輸入字符存放到value下標i的字符中,直到輸入的字符為換行符或value存滿(i=max_length)為止,當這兩個條件滿足其一,那么就應(yīng)該停止輸入,另外需要注意:value指向的字符串結(jié)尾,必須包含空字符’\0’,所以下標max_length-1必須是空字符,循環(huán)輸入時,i取值最大為max_length-2。⑤ostream&operator<<(ostream&outs,constStringVarthe_string);輸出運算符重載函數(shù),題意要求將the_string通過輸出流outs輸出,由于the_string是StringVar對象,所以輸出的應(yīng)該是對象的成員value指向的字符串,根據(jù)返回值可知,函數(shù)必須返回輸入流ostream的引用;另外由于第一形參是輸入流outs,所以無法通過StringVar對象來調(diào)用,該函數(shù)不是類的成員函數(shù),函數(shù)定義時,不能限定StringVar作用域,由于該函數(shù)不是類的成員函數(shù),所以使用輸出流outs輸出value指向的字符串時,不能直接使用私有成員value,而是應(yīng)該使用getValue()公有成員函數(shù),返回value的值,再輸出。國家二級C++機試(操作題)模擬試卷第6套一、基本操作題(本題共1題,每題1.0分,共1分。)1、下列給定程序中,函數(shù)fun的功能是:計算N×N矩陣的主對角線元素和反向?qū)蔷€元素之和,并作為函數(shù)值返回。要求先累加主對角線元素中的值,再累加反向?qū)蔷€元素中的值。例如,若N=3,有下列矩陣:123456789首先累加1、5、9,然后累加3、5、7,函數(shù)返回值為30。請在程序的中括號處填入正確的內(nèi)容并將中括號刪除,使程序得出正確的結(jié)果。注意:部分源程序給出如下。不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include#defitieN4fun(intt[][N],intn){inti,sum;/*********found*********/【1】;for(i=0;i標準答案:(1)sunl=0(2)t[i][i](3)1知識點解析:填空1:變量SHill用來儲存“和”結(jié)果,所以將其初始化為0。填空2:從題目中可以了解到,主對角線元素的行和列下標是相同的,所以應(yīng)填入t[i][i]。填空3:對于反向?qū)蔷€元素的行和列的下標,它們的關(guān)系是相加和為n—1,所以應(yīng)填入1。二、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、下列給定程序中,函數(shù)fun的功能是:將s所指字符串中的字母轉(zhuǎn)換為按字母序列的后續(xù)字母(如“Z”轉(zhuǎn)化為“A”,“z”轉(zhuǎn)化為“a”),其他字符不變。請改正程序中的錯誤,使它能得出正確的結(jié)果。注意:不要改動main函數(shù),不得增行或刪行,也不得更改程序的結(jié)構(gòu)!試題程序:#include#include#include#includevoidfun(char*s){/*********found*********/while(*s!=’@’){if(*s>=’A’&&*s<=’Z’||*s>=’a’&&*s<=’z’){if(*s==’Z’)*s=’A’;elseif(*s=’z’)*s=’a’;else*s+=1;}/*********found*********/(*s)++;}}voidmain(){chars[80];system("CLS");printf("\nEnterastringwithlength<80:\n\n");gets(s);printf("\nThestring:\n\n");puts(s);fun(s);printf("\n、nTheCords:\n\n");puts(s);}標準答案:(1)while(*s)或while(*s!=’\0’)(2)s++;知識點解析:(1)通過wh兒e語句可對字符串所有字符進行遍歷,循環(huán)條件是對當前字符進行判斷,若當前字符不是字符串結(jié)尾,則對其進行其他操作。(2)因為該循環(huán)通過指針s的移動遍歷字符串,所以每循環(huán)一次要使指針向后移動一個位置,而不是將指針所指的元素加1。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、編寫函數(shù)intfun(intlim,intaa[MAX]),其功能是求出小于或等于lim的所有素數(shù)并放在aa數(shù)組中,并返回所求出的素數(shù)的個數(shù)。注意:部分源程序在文件PROGl.C中。請勿改動主函數(shù)main和其他函數(shù)中的任何內(nèi)容.僅在函數(shù)fun的花括號中填入你編寫的若干語句。試題程序:#include#include#include#defineMAX100intfun(intlim,intaa[MAx]){}voidmain(){FILE*wf;intlimit,i,sum;intaa[NAX];system("CLS");printf("輸入一個整數(shù):");Scanf("%d",&limit);sum=fun(limit,aa);for(i=0;i標準答案:intfun(intlim,intaa[MAX]){inti,j,k=0;for(i=2;i<=lim;i++)/*求出小于或等于lim的全部素數(shù)*/{for(j=2;j=i)aa[k++]=i;/*將求出的素數(shù)放入數(shù)組aa中木/}returnk;/*返回所求出的素數(shù)的個數(shù)*/}知識點解析:本程序如果一個數(shù)是合數(shù),那么它的最小質(zhì)因數(shù)肯定小于等于他的平方根。使用for循環(huán)語句查找小于lim的所有數(shù),使用內(nèi)嵌的循環(huán)判斷語句判斷該數(shù)是否為素數(shù)。在做這道題時,需要重點掌握素數(shù)的判定方法:for(j=2;j國家二級C++機試(操作題)模擬試卷第7套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modil.cpp,該程序運行時有錯,請改正其中的錯誤,使程序正常運行,并使程序的執(zhí)行結(jié)果為:1234543211234321123211211注意:錯誤的語句在∥********error********的下面,修改該語句即可。#include#includevoidmain(){inti,j,k;for(i=5;i>=lji一一){∥********error********for(j=1;j<=i;J++)cout<<“”:∥********error********for(k=1;k>=i;k++)cout(0;k++)cout<標準答案:(1)for(j=1;j<=5一i;J++)(2)for(k=1;k<=i;k++)(3)for(k=i一1;k>0;k一一)知識點解析:暫無解析二、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi2.cpp。請完成函數(shù)fun(char*s1,char*s2),此函數(shù)的功能是計算s1中出現(xiàn)s2的個數(shù),當不出現(xiàn)時,則返回0。如:s1為“1112223333aaaaeeffd”s2為“11”則返回1s2為”aa”則返回2注意:請勿改動主函數(shù)main與其他函數(shù)中的任何內(nèi)容,僅在函數(shù)fun的花括號中填入所編寫的若干語句。#include//注意只能使用int類型,不能類型轉(zhuǎn)換intfun(char*S1,char*s2){)voidmain(){chars1[1024];chars2[256];cout<<“pleaseinputastring:”<標準答案:intsize=0;//初始化字符串統(tǒng)計變量個數(shù)intsllen;ints2len;for(sllen=0;s1[sllen]!=0;sllen++);//第一個字符串循環(huán)for(s21en=0;s2[s21en]!=0;s21en++);//第二個字符串循環(huán)for(inti=0;i知識點解析:(1)該程序功能是計算s1中出現(xiàn)s2的個數(shù)。它的解題思路是兩個字符串逐個比較其中的字符,從而統(tǒng)計符合的字符串個數(shù)。(2)從已給部分源程序的main主函數(shù)開始入手,核心函數(shù)intfun(char*sl,char*s2)中的s1,s2參數(shù)為輸入的字符串。解題思路(1)size變量用來存放s1中出現(xiàn)s2的個數(shù),初始值賦為0。(2)然后利用for循環(huán)對s2中的每一個字符與s1中的字符進行比較。(3)如果循環(huán)中有符合條件的字符串,就將變量size個數(shù)加1。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的源程序文件modi3.cpp。其中定義的類并不完整,按要求完成下列操作,將類的定義補充完整,使得程序輸出21到屏幕。完成以下功能:(1)增加靜態(tài)私有變量mNumber,類型為int,請在注釋∥********1********后添加適當?shù)恼Z句。(2)增加靜態(tài)變量mNumber并初始化為10,請在注釋∥********2********后添加適當?shù)恼Z句。(3)完成靜態(tài)函數(shù)get的定義,請在注釋∥********3********后添加適當?shù)恼Z句。(4)完成對象obj對靜態(tài)函數(shù)get的調(diào)用,使得輸出2l到屏幕上,請在注釋∥********4********后添加適當?shù)恼Z句。注意:增加代碼,或者修改代碼的位置已經(jīng)用符號表示出來。請不要修改其他的程序代碼。#lncludeC1assTestClass{∥********1********intmOther;public:TestClass(inti){mOther=i;}∥********3********{returnm—Number+obj一>m_Other;}},∥********2********intmain(){TestClassobj(11);∥********4********cout<<<標準答案:(1)添加語句:staticintmNumber;(2)添加語句:intTestClass::mNumber=10;(3)添加語句:staticintget(TestClass*obj)(4)將“cout<<<知識點解析:暫無解析國家二級C++機試(操作題)模擬試卷第8套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modil.cpp,該程序運行時有錯,請改正其中的錯誤,使程序正常運行,并且使程序輸出的結(jié)果為:a=7,b=0a=8,b=10注意:錯誤的語句在∥********error********的下面,修改該語句即可。#includeclasscobj{public:∥********error********friendvoidfunc(CObj&,int,int);voiddisplay(){∥********error********cout<<¨a=¨<標準答案:(1)添加語句:friendvoidfunc(CObj&,int);(2)cout<<“a=lI<知識點解析:(1)標識1處是聲明一個友元函數(shù),友元函數(shù)是在類聲明中由關(guān)鍵字friend修飾的非成員函數(shù),由friendvoidfunc(CObj&,int,int)可知,函數(shù)func0是CObj類的友元,由程序后面的具體實現(xiàn)可知該函數(shù)重載了,已經(jīng)聲明了友元函數(shù)friendvoidfunc(CObj&,int,int),另外一個友元函數(shù)func(CObj&obj,intt)沒有聲明,因此第1個標識下應(yīng)添加“friendvoidfunc(CObj&,int);”。(2)display()函數(shù)打印類成員變量a和b的值,cout流中的數(shù)據(jù)是用流插入運算符“<<”順序加入的,因此“<<<<”不正確,第2個標識下應(yīng)改為“cout<<“a=”<<對象名>(<參數(shù)表>);,對象聲明語句是一個完整的語句,應(yīng)該以“:”結(jié)尾,因此第3個標識下應(yīng)改為“CObjobjl;”。二、簡單應(yīng)用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi2.cpp。閱讀下列函數(shù)說明和代碼,補充空出的代碼。函數(shù)DecToBin(char*des,intn)的功能是將十進制數(shù)據(jù)n轉(zhuǎn)換成二進制數(shù)據(jù),并將轉(zhuǎn)換結(jié)果存放在des中。如:120的二進制數(shù)據(jù)為1111000例:DecToBin(char*des,120);cout<#defineMAXLEN1024voidDecToBin(char*des,intn){}voidmain(){chardes[MAXLEN];intn=120;DecToBin(des,n);cout<標準答案:intj,i=0;chartemp;while(n!=0){des[i]=n%2+’0’;n=n/2;i++;}//轉(zhuǎn)化結(jié)果為2進制最高位在des的下標最低處,順序剛好反了des[i]=NULL;for(j=o;j知識點解析:(1)本題為將十進制數(shù)轉(zhuǎn)換成二進制數(shù),因此采用除2求余法,通過該方法最終可以將一個十進制數(shù)轉(zhuǎn)換成一個只包含1和0的數(shù)組。(2)除2求余法得到的是0和1的數(shù)值,不是“0”和“1”字符,還需將數(shù)字轉(zhuǎn)化成字符,0和1通過加上“0”的ASCII碼便可得到0和1的ASCII碼字符。(3)因為除2求余法得到的字符數(shù)組是從低位到高位保存的,因此需要先倒序后再輸出,可利用循環(huán)方式將順序調(diào)轉(zhuǎn)過來。三、綜合應(yīng)用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的源程序文件modi3.cpp。其中定義的類并不完整,按要求完成下列操作,將類的定義補充完整。完成以下功能:(1)定義私有常量PI,請在注釋∥********1********后添加適當?shù)恼Z句。(2)完成類的私有常量PI的賦值,以及完成對半徑radius的賦值。請在注釋∥********2********后添加適當?shù)恼Z句。(3)完成計算圓面積的函數(shù)GetArea()。請在注釋∥********3********后添加適當?shù)恼Z句。(4)完成計算圓周長的函數(shù)GetGirth()。請在注釋∥********4********后添加適當?shù)恼Z句。注意:除在指定位置添加語句之外,請不要改動程序中的其他內(nèi)容。#include#defineCONSTpI3.141592C1assCCircle{private:doubleradius;∥********1********public:∥********2********CCircle(intradius){this一>radius=radius;)doubleGetArea(){∥********3********}doubleGetGirth(){∥********4********}voidsetRadius(intm){radius=m;}};intmain(){CCircleCircle(5);cout<標準答案:(1)添加語句:constdoublePI;(2)將“CCircle(intradius)”補充完整為:CCircle(intradius).PI(CONST—PI)(3)添加語句:returnradius*radius*PI;(4)添加語句:return2*radius*PI;知識點解析:(1)第1個標識下定義私有常量PI,常數(shù)據(jù)成員是使用const說明的數(shù)據(jù)成員,因此第1個標識下應(yīng)添加“constdoublePI;”0(2)常數(shù)據(jù)成員的初始化只能通過構(gòu)造函數(shù)的成員初始化列表進行,構(gòu)造函數(shù)CCircle(intradius)應(yīng)對常數(shù)據(jù)成員PI進行初始化,

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論