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

下載本文檔

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

文檔簡介

國家二級C++機試(操作題)模擬試卷7(共9套)(共24題)國家二級C++機試(操作題)模擬試卷第1套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請使用VC6或使用【答題】菜單打開考生文件夾proj1下的工程proj1,此工程中含有一個源程序文件proj1.cpp。其中位于每個注釋“//ERROR****found****”之后的一行語句存在錯誤。請改正這些錯誤,使程序的輸出結果為:Thisobjectisno.1注意:只修改注釋“//ERROR****found****”的下一行語句,不要改動程序中的其他內容。//proj1.cpp#includeusingnamespacestd;classMyClass{public:MyClass():count(0){cout<<"Thisobjectis";}//ERROR*******found********voidInc()const{cout<<"no."<<++count<標準答案:(1)voidInc()(2)intcount;(3)obj->Inc();知識點解析:(1)考查考生對const的掌握,在Inc函數(shù)的函數(shù)體{cout<<"no."<<++count<”,而不能使用“.”。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、請使用VC6或使用【答題】菜單打開考生文件夾proj2下的工程proj2,該工程中包含一個程序文件main.cpp,其中有坐標點類point、線段類Line和三角形類Triangle的定義,還有main函數(shù)的定義。程序中兩點間距離的計算是按公式d=實現(xiàn)的,三角形面積的計算是按公式f=實現(xiàn)的,其中s=。請在程序中的橫線處填寫適當?shù)拇a,然后刪除橫線,以實現(xiàn)上述類定義。此程序的正確輸出結果應為:Side1:9.43398Side2:5Side3:8area:20注意:只在橫線處填寫適當?shù)拇a,不要改動程序中的其他內容,也不要刪除或移動“//****found****”。#include#includeusingnamespacestd;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:constPointp1,p2,p3;//三角形的三個頂點//***********found***********Triangle(_________):p1(p1),p2(p2),p3(p3){)doublelengthl()const{//邊p1,p2的長度returnLine(p1,p2).length();}doublelength2()const{//邊p2,p3的長度returnLine(p2,p3).length(),}doublelength3()const{//邊p3,p1的長度returnLine(p3,p1).length();}doublearea()const{//三角形面積//***********found***********doubles=_________;returnsqrt(s*(s-lengthl())*(S-length2())*(s-length3()));}};intmain(){Triangler(Point(0.0,8.0),Point(5.0,0.0),Point(0.0,0.0));cout<<"Side1:"<標準答案:(1)constPoint&p(2)p1(p1),p2(p2)(3)Pointp1,Pointp2,Pointp3(4)(lengthl()+length2()+length3())/2知識點解析:(1)主要考查考生對函數(shù)形參的掌握,由函數(shù)的注釋可知有本坐標點到達某個坐標點類的距離,再根據(jù)函數(shù)體returnsqrt((x—p.x)*(x—p.x)+(y—p.y)*(y—p.y));可知,該坐標點類名為p,因此可以知道形參為Point&p,為了不改變該坐標點的值,前面要加上const。(2)主要考查考生對構造函數(shù)的掌握,對于常變量型私有成員constPointpl,p2,只能用成員初始化列表進行賦值。(3)主要考查考生對構造函數(shù)的掌握,由空格后面的語句:pl(p1),p2(p2),p3(p3){}可知,該構造函數(shù)需要進行成員列表初始化,再看類的私有成員constPointpl,p2,p3,可知pl,p2,p3是Point類型,因此形參為Pointpl,Pointp2,Pointp3。(4)主要考查考生對成員函數(shù)的掌握,根據(jù)函數(shù)注釋,可知本函數(shù)要求計算三角形面積,再看題目的提示:s=(a+b+c)/2??芍崭裉幰畹氖侨切蔚娜龡l邊之和除以2,而求邊長的函數(shù)已經(jīng)給出,這里直接調用即可。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、請使用VC6或使用【答題】菜單打開考生目錄proj3下的工程文件proj3,此工程包含一個源程序文件proj3.cpp,其功能是從文本文件in.dat中讀取全部整數(shù),將整數(shù)序列存放到intArray類的對象my.Array中,然后對整數(shù)序列按非遞減排序,最后由函數(shù)writeToFile選擇序列中的部分數(shù)據(jù)輸出到文件out.dat中。文件in.dat中的整數(shù)個數(shù)不大于300個。要求:補充編制的內容寫在“//**********333**********”與“//**********666**********”兩行之間。實現(xiàn)對整數(shù)序列按非遞減排序,并將排序結果在屏幕上輸出。不得修改程序的其他部分。注意:程序最后已將結果輸出到文件out.dat中=輸出函數(shù)writeToFile已經(jīng)給出并且調用。//proj3.cpp#include#include#includeusingnamespacestd;classintArray{private:int*array;//整數(shù)序列首地址intlength;//序列中的整數(shù)個數(shù)public://構造函數(shù),從文件中讀取數(shù)據(jù)用于初始化新對象。參數(shù)是文件名intArray(char*filename);voidsort();//對整數(shù)序列按非遞減排序~intArray();voidwriteToFilefchar*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標準答案:for(inti=0;iarray[j])//如果arrag[i]>array[j],把array[i]與array[i]進行對換{inttemp;//定義一個臨時變量temptemp=array[i];//把array[i]值放到變量temparray[i]=array[j];//把array[j]值賦給array[i]array[j]=temp;//把變量temp存放在值array[j]中}for(inta=0;a知識點解析:題目要求對整數(shù)序列按非遞減排序,要排序就必須要有比較,因此定義兩個下標i和j,按題目非遞減排序要求,當array[i]比array[j]大時就交換其值,利用中間變量temp來實現(xiàn)。國家二級C++機試(操作題)模擬試卷第2套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請使用VC6或使用【答題】菜單打開考生文件夾proj1下的工程proj1,該工程中含有一個源程序文件proj1.cpp。其中位于每個注釋“//ERROR****found****”之后的一行語句有錯誤。請改正這些錯誤,使程序的輸出結果為:12345678910注意:只能修改注釋“//ERROR****found****”的下一行語句,不要改動程序中的其他內容。//proj1.cpp#includeusingnamespacestd;classMyClass{public:MyClass(intlen){array=newint[1en];arraySize=len;for(inti=0;i<arraySize;i++)array[i]=i+1;}~MyClass(){//ERROR********found********deletearray[i];}voidPrint()const{for(inti=0;i標準答案:delete[]array;cout<<array[i]<<";MyClassobj(10);知識點解析:(1)語法錯誤,使用delete語句刪除一個指針時,直接把指針變量的名稱放在delete[]后面即可。(2)考查考生對輸入、輸出語句的運用。使用cout進行數(shù)據(jù)輸出操作,一般格式為:cout<<Expr;。其中,Expr代表一個表達式,“<<”稱為插入運算符,該語句的含義是,將表達式Expr的值輸出到屏幕上。使用cin進行數(shù)據(jù)輸入操作,一般格式為:cin<<var;。其中,var代表一個變量,“>>”稱為提取運算符,該語句的含義是,將用戶輸入的數(shù)據(jù)保存到var中。(3)考查語句的初始化,我們來看MyClass類的構造函數(shù):MyClasS(intfen){array=newint[len];//給數(shù)組動態(tài)分配空間,大小為lenarraySize=len;//賦值for(inti=0;i<arraySize;i++)array[i]=i+1;//循環(huán)給數(shù)組賦值,從1到10二、簡單應用題(本題共1題,每題1.0分,共1分。)2、請使用VC6或使用【答題】菜單打開考生文件夾proj2下的工程proj2,此工程中聲明的Array是一個表示數(shù)組的類。一個Array對象可以包含多個整型元素。Array的成員說明如下:成員函數(shù)add用于向數(shù)組的末尾添加一個元素;成員函數(shù)get用于獲取數(shù)組中指定位置的元素;數(shù)據(jù)成員a表示實際用于存儲數(shù)據(jù)的整型數(shù)組;數(shù)據(jù)成員size表示數(shù)組的容量,數(shù)組中的元素個數(shù)最多不能超過size;數(shù)據(jù)成員hum表示當前數(shù)組中的元素個數(shù)。SonedArray是Array的派生類,表示有序數(shù)組。SortedArray重新定義了Array中的add函數(shù),以確保有序數(shù)組中的元素始終按照升序排列。請在程序中的橫線處填寫適當?shù)拇a,然后刪除橫線,以實現(xiàn)上述類定義。此程序的正確輸出結果應為:10,9,8,7,6,5,4,3,2,1,1,2,3,4,5,6,7,8,9,10,注意:只在橫線處填寫適當?shù)拇a,不要改動程序中的其他內容,也不要刪除或移動“//****found****”。#include<iostream>USingnamespacestd;classArray{public:Array(unsignedintS){Size=s;num=0;a=newint[s];}virtual~Array(){delete[]a;}virtualvoidadd(inte){if(num<size){//**********found**********__________num++;}}intget(unsignedinti)const{if(i<size)returna[i];return0;}protected:int,*a;unsignedintsize,num;};classSortedArray:publicArray{public://**********found**********SortedArray(unsignedints):__________{}virtualvoidadd(inte){if(num>=size)retUrn;inti=0,j;while(i<num){if(e<a[i]){for(j=num;j>i;j-){//**********found**********__________;}//**********found**********__________;break;}i++;}if(i=num)a[i]=e;num++;}};voidfun(Array&a){inti;for(i=10;i>=1;i--){a.add(i);}for(i=0;i<10;i++){cout<<a.get(i)<<",";}cout<<end1;}intmain(){Arraya(10);fun(a);SortedArraysa(10);fun(sa);return0;}標準答案:(1)a[num]=e;(2)Array(s)(3)a[j]=a[j-1](4)a[i]=e知識點解析:(1)考查的是虛函數(shù)virtualvoidadd(inte)的定義,即添加一個整型數(shù)e到a[num]中。(2)主要考查的是Array類的派生類SortedArray類的構造函數(shù)的定義,定義之前要對基礎類初始化。(3)因為SortedArray類是排序類,所以數(shù)組a中的元素要從小到大排序。在if(e<a[i])條件下,要把i后的元素逐個往后移一位,因此此處為a[j]=a[j-1]。(4)主要考查虛函數(shù)virtualvoidadd(inte)在派生類SortedArray類中的定義,把插入的數(shù)據(jù)放在數(shù)組a的第i+1個位置,即a[i]=e;。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、請使用VC6或使用【答題】菜單打開考生目錄proj3下的工程文件proj3,此工程包含一個源程序文件proj3.cpp,其中定義了用于表示二維向量的類MyVector;程序應當顯示(6,8)。但程序中有缺失部分,請按照以下提示,把缺失部分補充完整:(1)在“//**1******found****”的下方是構造函數(shù)的定義,它用參數(shù)提供的坐標對χ和y進行初始化。(2)在“//**2******found****”的下方是減法運算符函數(shù)定義中的一條語句。兩個二維向量相減生成另一個二維向量:其X坐標等于兩向量X坐標之差,其Y坐標等于兩向量Y坐標之差。(3)在“//**3******found****”的下方,語句的功能是使變量v3獲得新值,它等于向量v1與向量v2之和。注意:只在指定位置編寫適當代碼,不要改動程序中的其他內容,也不要刪除或移動“****found*****”。//proj3.cpp#include<iostream>usingstd∷ostream;usingstd∷cout;usingstd∷end1;classMyVector{//A示二維向量的類doublex;//X坐標值doubley;//Y坐標值public:MyVector(doublei=0.0,doublej=0.0);//構造函數(shù)MyVectoroperator+(Myvectorj);//重載運算符+friendMyVectoroperator-(MyVectori,MyVectorJ);//重載運算符-friendostream&operator<<(ostream&OS,MyVectorv);//重載運算符<<};//**1*********found*******_______(doublei,doublej):x(i),Y(j){)MyVectorMyvector∷operator+(MyVectorj){returnMyVector(x+j.x,y+j.y);}MyVectoroperator-(MyVectori,MyVectorj){//**2*********found*******returnM:yvector(_______);}ostream&operator<<(ostream&os,MyVectorV){OS<<′(′<<V.X<<′,′<<v.y<<′)′;//輸出向量v的坐標returnos;}intmain(){Myvectorv1(2,3),v2(4,5),v3;//**3*********found*******v3=_______;cout<<v3<<end1;return0;}標準答案:(1)MyVector∷MyVector(2)i.x-j.x,i.y÷j.y(3)v1+v2知識點解析:(1)主要考查的是構造函數(shù),在類外定義構造函數(shù)時要使用類名和作用域,即MyVector∷MyVector。(2)主要考查重載運算符“-”的返回語句,返回值應為向量i和j的差,即MyVector(i.x-j.x,i.y-j.y);。(3)主要考查重載運算符“+”的使用,由題目可知v3是v1和v2的和,前面我們已經(jīng)重新定義了運算符“+”,所以在這里直接使用語句v3=v1+v2:即可。國家二級C++機試(操作題)模擬試卷第3套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modil.cpp,但該程序運行時有錯,請改正程序中的錯誤,使程序輸出的結果為:10注意:錯誤的語句在//********error********的下面,修改該語句即可。1#include2structStruct3{4union5{6inta;7charc[4];8};9intb;10//********error********11}12voidmain()13{14Structm;15//********error********16m.c[0]=0;17m.c[1]=0;18m.c[2]=0;19//********error********20m.c[3]:1;21m.b=m.c[3];22cout<標準答案:(1)};(2)m.c[0]=1;(3)m.C[3]=0;知識點解析:程序當中定義了一個結構體Struct,Struct內含有2個成員變量:共用體和整型變量b,共用體由整型變量a和字符數(shù)組c[4]組成,int型變量32位,而c[4]剛好也是32位,因此a和字符數(shù)組c[4]存放在同一內存單元中。[解題思路](1)第1表示在結構體定義內,結構體定義的一般形式為:struct<結構體名>{<成員列表>}<變量名列表>;這里定義的結構體并沒有變量名列表,但是結構體定義一定是以“;”結束的,因此第1個標識下應改為“};”。(2)根據(jù)題目要求程序輸出結果分別為“1”和“0”,即結構體變量m的成員變量a的值為1,b的值為0,又a和字符數(shù)組c[4]存放在同一段內存單元中,因此a的值可由數(shù)組c[4]決定(兩者使用同一地址單元),故c[0]表示a的低8位,c[1]為a的第二個8位,c[2]為a的第三個8位,c[3]為a的最高8位,a=O,所以c[0]:l,c[1]:c[2]=c[3]=0,故第2個標識下應改為“m.c[01=1;”。(3)由(2)分析可知第3個標識下應改為“rn.c[3]=0;”。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi2.cpp。閱讀下列函數(shù)說明和代碼,完成空出部分程序,使該程序輸出倒9×9口訣。程序分析:分行與列考慮,共9行9列,設置兩個變量i和j,i控制行,j控制列。程序運行結果如下:1*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=811*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*7=72*7=143*7=214*7=285*7=356*7=427*7=491*6=62*6=123*6=184*6=245*6=306*6=361*5=52*5=103*5=154*5=205*5=251*4=42*4=83*4=124*4=161*3=32*3=63*3=91*2=22*2=41*1=1注意:只能補充函數(shù)show(),請勿改動其他部分的內容。1#include2voidshow()3{45}6voidmain()7{8cout<<"9*9倒乘法口訣"<標準答案:1for(inti=9;i>0;i--)2{3for(intj=1;j<=i;j++)4{5cout<知識點解析:本題屬于輸出圖形題,輸出圖形呈規(guī)律變化,橫向看乘號前的數(shù)字逐漸增大,豎向看乘號后的數(shù)字逐漸減小,可以用循環(huán)來實現(xiàn),一重循環(huán)只能控制一個方向,因此可用二重循環(huán)來輸出該圖形。[解題思路](1)由審題分析可知,可利用兩重循環(huán)來實現(xiàn)輸出倒9×9口訣,設置兩個循環(huán)變量,外層循環(huán)變量i從9開始變化至1,循環(huán)9次,代表乘號后面的數(shù)字。(2)內部循環(huán)變量i從1變化到i,代表乘號前面的數(shù)字,輸出一行,i<=i,這樣保證輸出的是倒9×9口訣。在內層循環(huán)體內,利用cout輸出j的值、“*”、i的值、“=”和i*j值,即輸出乘法公式。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的源程序文件modi3.cpp。類Person完成對人的姓名和年齡的綁定。函數(shù)fun()獲得年齡比較大的姓名。然后輸出這個姓名到屏幕。其中定義的類并不完整,按要求完成下列操作,將類的定義補充完整。(1)完成類的構造函數(shù),請在注釋//********1********后添加適當?shù)恼Z句。(2)完成構造函數(shù)對姓名的賦值,請在注釋//********2********后添加適當?shù)恼Z句。(3)定義類的友元函數(shù)fun(),請在注釋//********3********后添加適當?shù)恼Z句。(4)補充函數(shù)fun()的年齡比較,請在注釋//********4********后添加適當?shù)恼Z句。注意:增加代碼,或者修改代碼的位置已經(jīng)用符號表示出來。請不要修改其他的程序代碼。1#include2classPerson3{4public:5//********1********67{8inti;9for(i=0;sUserrName[i]!=0;i++)10{11mUserName[i]=sUserrName[i];12}13//********2********1415m_Old=nOld;16117private:18charmUserName[32];19intmOld;20//********3********2122};23voidfun(char*S,Person&personl,Person&person2)24{25//********4********26if()27{28for(inti=0;personl.m_UserName[i]!=0;i++)29{30S[i]=personl.m_UserName[i];31S[i+1]=0;32}33}34else35{36for(inti=0;person2.m_UserName[i]!=0;i++)37{38S[i]=person2.m_UserName[i];39S[i+1]=0;40}41}42}43Voidmain()44{45charS[32];46Personpl("abc",20);47Personp2("def",30);48fun(S,pl,p2);49cout<標準答案:(1)添加語句:Person(char*sUserrName,intnOld)(2)添加語句:mUserName[i]=0;(3)添加語句:friendvoidfun(char*s,Person&personl,Person&person2);(4)將“if()”補充完整為:if(personl.mOld>person2.re_Old)知識點解析:在VC環(huán)境下打開程序,根據(jù)題干給出的幾條功能要求,對程序中給出注釋下的內容逐個補全或修改。從已定源程序的main主函數(shù)開始入手,函數(shù)fun是輸出年齡較大的姓名,類Person記錄了姓名和年齡。[解題思路](1)題目1要求“完成類的構造函數(shù)”。根據(jù)“classPerson”語句知道Person為類,所以類Person的構造函數(shù)名為Person,根據(jù)第1個標識下的大括弧中的語句知道函數(shù)中的參數(shù)為數(shù)組sUserrName存放姓名,整型nOld存放年齡,所以補充構造函數(shù)定義為“Person(char*sUserrName.intnOld)”。(2)題目2要求“完成構造函數(shù)對姓名的賦值”。根據(jù)(1)中的分析,在第2個標識下補全姓名賦值,即“m_UserName[i]=0;”。(3)題目3要求“定義類的友元函數(shù)fun()”。在C++中,如果在本類以外的其它地方定義了一個函數(shù),在類體中是用friend對該函數(shù)進行聲明的,此函數(shù)稱為本類的友元函數(shù),并且能夠調用本類中的成員變量。程序中的fun函數(shù)定義為“voidfun(char*s,Person&person1,Person&person2)”,所以聲明fun()為類Person的友元函數(shù),即這里補全“friendvoidfun(char幸s,Person&person1.Person&person2);”。(4)題目4要求“補充函數(shù)fun()的年齡比較”。類Person中年齡的變量為mOld,根據(jù)C++中類變量的調用格式補充第4個標識下,if判斷中的條件語句,即“if(personl.mOld>person2.m_Old)”。國家二級C++機試(操作題)模擬試卷第4套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請使用VC6或使用【答題】菜單打開考生文件夾proj1下的工程projl。程序中位于每個“//ERROR****found****”之后的一行語句有錯誤,請加以改正。改正后程序的輸出結果應為:value=63number=1注意:只修改每個“//ERROR****found****”下的那一行,不要改動程序中的其他內容。#includeusingnamespacestd;classMyClasS{int*P;constintN;public://ERROR**********found**********MyClass(intval):N=1{P=newint;*P=val;}//ERROR**********found**********一MyClass(){delete*P;)friendvoidprint(MyClass&obj);};//ERROR**********found**********voidMyClass::print(MyClass&obj){cout<<”value=”<<*(obj.P)<<end1;cout<<”number=”<標準答案:(1)MyClass(intVal):N(1)(2)~MyClass(){delete[]p;}(3)voidprint(MyClass&obj)知識點解析:(1)主要考查考生對構造函數(shù)的掌握,在這里不能使用賦值語句。(2)主要考查考生對析構函數(shù)的掌握,析構函數(shù)的delete語句要使用標識符“[]”,即delete[]p;。(3)主要考查考生對友元函數(shù)的掌握,友元函數(shù)并不屬于類,因此定義時前面不用加類名和作用域符號。二、簡單應用題(本題共2題,每題1.0分,共2分。)2、請使用VC6或使用【答題】菜單打開考生文件夾proj2下的工程proj2。該工程中包含一個程序文件main.cpp,其中有“書”類Book及其派生出的“教材”類TeachingMaterial的定義,還有主函數(shù)main的定義。請在程序中“//********found*******”下的橫線處填寫適當?shù)拇a,然后刪除橫線,以實現(xiàn)上述類定義和函數(shù)定義。此程序的正確輸出結果應為:教材名:C++語言程序設計頁數(shù):299作者:張三相關課程:面向對象的程序設計注意:只能在橫線處填寫適當?shù)拇a,不要改動程序中的其他內容,也不要刪除或移動“//****found****”。#includeusingnamespacestd;claSSBook{//“書”類char*title;//書名intnum_pages;//頁數(shù)char*writer;//作者姓名public:Book(constchar*thetitle,intpages,constchar*the—writer):num_pages(pages){title=newchar[strlen(thetitle)+1];strcpy(title,the_title);//**********found**********strcpy(writer,the_writer);}//**********found**********一Book(){________}intnumOfPages()const{returnnum—paqes;)//返回書的頁數(shù)constchar*theTitle()const{re-turntitle;)//返回書名constchar*theWriter()const{re-turnwriter;}//返回作者名},classTeachingMaterial:publicBook{//“教材”類char*course;public:TeachingMaterial(constchar*thetitle,intpages,constchar*thewriter,constchar*thecourse)//**********found**********:_____{course=newchar[strlen(thecourse)+1];strcpy(course,thecourse);}—TeachingMaterial(){delete[]course;}constchar*theCourse()const{re-turncourse;)//返回相關課程的名稱};intmain(){TeachingMaterialabook(”C++語言程序設計”,299,“張三”,”面向對象的程序設計”);cout<<"教材名:"<3、請使用VC6或使用【答題】菜單打開考生文件夾proj2下的工程proj2,該工程中含有一個源程序文件proj2.cpp,請將堆棧類的定義補充完整。使程序的輸出結果為:Theelementofstackare:4321注意:請勿修改主函數(shù)main和其他函數(shù)中的任何內容,只在橫線處編寫適當代碼,不要改動程序中的其他內容,也不要刪除或移動“//****found****”。//proj2.cpp#include<iostream>usingnamespacestd;constintSize=5;classStack;classItern{public://**********found**********Item(constint&val):_____________;)//構造函數(shù)對item進行初始化private:intitem;Item*next;friendclassStack;};classStack{public:Stack():top(NULL){}一Stack();intPop();voidPush(constint&);private:Item*top;};Stack::一Stack(){Item*P=top,*q;while(P!=NULL){q=P一>next;//********found********__________;//釋放P所指向的節(jié)點p=q;}}intStack::Pop(){Item*temp;intret;//********found********___________;//使temp指向棧頂節(jié)點ret=top一>item;top=top一>next;deletetemp;returnret;}voidStack::Push(constint&val){Item*temp=newItem(val);//********found********__________;//使新節(jié)點的next指針指向棧頂數(shù)據(jù)top=temp;}intmain(){Stacks;for(inti=1;i<Size;i++)s.Push(i);cout<<”Theelementofstackare:”;for(i=1;i<Size;i++)cout<<s.Pop()<<’\t’;return0;}三、綜合應用題(本題共2題,每題1.0分,共2分。)4、請使用VC6或使用【答題】菜單打開考生文件夾proj3下的工程proj3,其中聲明的DataList類,是一個用于表示數(shù)據(jù)表的類。sort成員函數(shù)的功能是將當前數(shù)據(jù)表中的元素升序排列。請編寫這個sort函數(shù)。程序的正確輸出應為:排序前:7,1,3,11,6,9,12,10,8,4,5,2排序后:1,2,3,4,5,6,7,8,9,10,11,12要求:補充編制的內容寫在“//**********333**********”與“**********666**********”兩行之間。不得修改程序的其他部分。注意:程序最后將結果輸出到文件out.dat中。輸出函數(shù)writeToFile已經(jīng)編譯為obj文件,并且在本程序調用。//DataList.h#includeusingnamespacestd;classDataList{//數(shù)據(jù)表類intlen;double*d;public:DataList(intlen,doubledata[]=NULL);一DataList(){delete[]d;)intlength()const{returnlen;)//數(shù)據(jù)表長度(即數(shù)據(jù)元素的個數(shù))doublegetElement(inti)const{re-turnd[i];}voidsort();//數(shù)據(jù)表排序voidshow()const;//顯示數(shù)據(jù)表};voidwriteToFile(char*,constDataList&);//main.cpp#include”DataList.h’’DataList::DataList(intlen,doubledata[]):len(len){d=newdouble[1en];for(inti=0;i5、請使用VC6或使用【答題】菜單打開考生目錄proj3下的工程文件proj3,此工程中包含一個源程序文件proj3.cpp,其功能是從文本文件in.dat中讀取全部整數(shù),將整數(shù)序列存放到intArray類的對象中,然后建立另一對象myArray,將對象內容賦值給myArray。類intArray重載了“=”運算符。程序中給出了一個測試數(shù)據(jù)文件input,不超過300個的整數(shù)。程序的輸出是:1011131620要求:補充編制的內容寫在“//**********333**********”與“//**********666**********”之間。實現(xiàn)重載賦值運算符函數(shù),并將賦值結果在屏幕輸出。格式不限。不得修改程序的其他部分。注意:程序最后將結果輸出到文件out.dat中。輸出函數(shù)writeToFile已經(jīng)編譯為obj文件,并且在本程序中調用。//intArray,hclasSintArray{private:int*array;intlength;public:intArray(char*filename);intArray();intArray&operator=(constintArray&src);一intArray();voidshow();};voidwriteToFile(constchar*path);//main.cpp#include#include#include#include”intArray.h”usingnamespacestd;intArray::intArray(){length=10;array=newint[length];}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.length;array=newint[length];//*************333***********//*************666***********return*thiS;}intArray::一intArray(){delete[]array;}voidintArray::show(){intstep=0;for(inti=0;i國家二級C++機試(操作題)模擬試卷第5套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modil.cpp,該程序運行時有錯誤,請補充程序中的丟失部分,使得程序運行。可以在修改處增加或者刪除一條語句。本程序完成以下功能:(1)獲得輸入的兩個數(shù)字x1,x2(例如x1=4,x2=2);(2)輸出兩個中較小的一個(例如輸出2);(3)計算x1/x2如果x2等于0,返回-1(輸出結果2);(4)輸出x1+x2的結果(輸出結果6):(5)輸出xl+1的結果(輸出結果5);(6)輸出x2-1的結果(輸出結果1)。注意:不要改動main函數(shù),不能增行或刪行,也不能更改程序的結構,錯誤的語句在//******error******的下面。1#include2voidmsin()3{4intxl;5intx2;6intx3;7cout<<"pleaseinputtwonumber:"<>xl>>x2;9//********error********10x3=(xl>x2)?x1:x2;11cout<<"Minnumberis:"<標準答案:(1)x3=(xl知識點解析:本題首先求輸出兩個數(shù)字中的最小值,然后計算兩個數(shù)相除的值,然后求得第一個數(shù)與第二個數(shù)的和,最后輸出“x1+1”和“x2-1”的值。解題思路主要是要從main()主函數(shù)入手,依次完成題干中要求的各個要求。[解題思路](1)第1個標識下“x3=(x1>x2)?x1:x2;”語句是判斷x1與x2其中哪個相對較小,并將其賦值給x3。條件運算符的格式:表達式1?表達式2:表達式3。執(zhí)行順序是先求解表達式1,若非則求解表達式3,此時表達式3的值就作為整個條件表達式值。所以求x1和x2中較小的一個,如果x1二、綜合應用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi3.cpp,其中定義了用于表示矩形的CRect類,但類CRect的定義并不完整。請按要求完成下列操作,將類CRect的定義補充完成。(1)定義私有數(shù)據(jù)成員leftPoint、topPoint、rightPoint、bottomPoint,分別用于表示矩形左上角及右下角的點的坐標,它們都是double型的數(shù)據(jù)。請在注釋//********1********之后添加適當?shù)恼Z句。(2)完成默認構造函數(shù)CRect的定義,指定缺省實參為0,都是double型的數(shù)據(jù)。請在注釋//********2********之后添加適當?shù)恼Z句。(3)定義函數(shù)體為空的析構函數(shù)。請在注釋//********3********之后添加適當?shù)恼Z句。(4)在main()函數(shù)中定義CRect類的實例rect2,并把rect1的值賦給rect2。請在注釋//********4********之后添加適當?shù)恼Z句。注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。1#include2classCRect3{4private:5//********1********67public:8//********2********910//********3********1112voidSetPointS(double,double,double,double);13voidSetLeftPoint(doublem){leftPoint=m;)14voidSetRightPoint(doublem){rightPoint=m;)15voidSetToppoint(doublem){topPoint=mj)16voidSetBottomPoint(doublem){bottomPoint=m;)17voidDisplay();18};1920CRect::CRect(doublel,doublet,doubler,doubleb)21{22leftPoint=1;topPoint=t;23rightPoint=r;bottompoint=b;24}25voidCRect::SetPoints(double1,doublet,doubler,doubleb)26{27leftPoint=1;topPoint=t;28rightPoint=r;bottomPoint=b;29}30voidCRect::Display()31{32cout(<”left-toppointis("<標準答案:(1)添加語句:doubleleftPoint,topPoint,rightpoint,bottompoint;(2)添加語句:CRect(doubleleftPoint=0,doubletopPoint=0,doublerigh七point=0,doublebottomPoint=0);(3)添加語句:~CRect()f);(4)添加語句:CRectrect2(rectl);知識點解析:程序中定義了一個表示矩形的類CRect,該類中定義了私有數(shù)據(jù)成員leflPoint、topPoint、rightPoint、bottomPoint,分別用于表示矩形左上角及右下角的點的坐標且它們的數(shù)據(jù)類型都是double型,類CRect有多個成員函數(shù),SetPoints0,SetLeftPoint()函數(shù)可改變成員變量leflPoint的值,而SetRightPoint()成員函數(shù)可改變rightPoint的值,SetTopPoint()可改變topPoint的值,SetBottomPoint()改變bottomPoint的值,Display()成員函數(shù)顯示成員變量的值。[解題思路](1)第1個標識下完成私有數(shù)據(jù)成員leflPoint、topPoint、rightPoint、bottomPoint的定義,均為double型的變量,故第1個標識下應添加“doubleleftPoint,topPoint,rightPoint,bottomPoint;”。(2)構造函數(shù)完成成員變量的初始化,類CRect的默認構造函數(shù)并初始化double型私有數(shù)據(jù)成員leflPoint、topPoint、rightPoint、bottomPoint為0,故第2個標識下應添加“CRect(doubleleftPoint=0,doubletopPoint=0,doublerightPoint=0,doublebottomPoint=0);”。(3)析構函數(shù)名和類名一致,并在前面加“~”以和構造函數(shù)區(qū)別,該析構函數(shù)體為空,故第3個標識下應添加“~CRect0{};”,雖然該函數(shù)體為空,但是“{}”必須保留。(4)主函數(shù)中類CRect的對象rect2是通過復制構造函數(shù)將rectl的值賦值給它實現(xiàn)初始化的,而rectl的初始化直接調用自定義構造函數(shù),第4個標識下應添加“CReclrect2(rectl);”。國家二級C++機試(操作題)模擬試卷第6套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modi1.cpp,但該程序運行時有錯,請改正程序中的錯誤,使程序輸出的結果為:Thisisagreart!HelloHello注意:錯誤的語句在//******error******的下面,修改該語句即可。#include<lostream.h>classCMyClass{public:voiddisplayl(){cout<<"Thisisgreat!"<<endl;}voiddisplay2(){//******error******charstr[5]="Hello";cout<<str<<endl;}//******error******voiddisplay3(charstring){//******error******cout<<string<<endl}};voidmain(){CMyClassmyclass;myclass.display1();myclass.display2();myclass.display3("Hello");}標準答案:(1)charstr[6]="Hello";或charstr[]="Hello";(2)voiddisplay3(cha*string)或voiddisplay3(charstring[])(3)cout<<String<<endl;知識點解析:(1)”Hello”字符串的長度為5,存放在字符數(shù)組中的話,字符數(shù)組的長度至少為6,因為字符數(shù)組的最后一個字符為NULL,故第1個標識下字符數(shù)組長度為5太短,應改成“charstr[6]="Hello";”或“charstr[]="Hello";”。(2)charstring表示string為一個char變量,代表一個字符而不是一串字符,程序要求輸出一串字符顯然字符變量做不到,應該為字符指針或字符數(shù)組,故第2個標識下應改為“voiddisplay3(char*string)”或“voiddisplay3(charstring[])”。(3)編譯程序發(fā)現(xiàn)第3標識下有錯誤,觀察程序可知第3個標識下語句結束沒有分號,而C++語句必須以分號結束,應加上分號,即第3表示下應改為“cout<<string<<endl;”。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi2.cpp。閱讀下列函數(shù)說明和代碼,補充空出的代碼。函數(shù)convert(cha*des,char*str)實現(xiàn)的功能是:(1)如果字符串最后面有空格,則全部刪除;(2)轉換后的數(shù)據(jù)放到des,并且指針作為返回值返回。注意:不能修改程序的其他部分,只能補充convert()函數(shù)。#include<iostream.h>#include<ctype.h>#defineMAXLEN1024char*convert(char*des,char*str){}voidmain(){chardest[MAXLEN];char*string="abcdef";cout<<string<<"<--"<<endl;cout<<convert(dest,string)<<"<--"<<endl;return;}標準答案:intlength=0;inti;for(length=0;str[length]!=NULL;length++);//求數(shù)組長度length--;//下標從0~len-1,下標減1表示最后一個字符的下標值for(i=length;i>=0;i--){if(str[i]!=’’)//判斷結尾是否有空格,從后往前判斷直到不是不是空格了跳出循環(huán)break;}for(length=0;length<=i;length++){des[length]=str[length];//從前面開始,逐個將str中的字符拷貝到des數(shù)組中,不含最后面的空格}des[length]=NULL;//最后一個字符為NULLreturndes;知識點解析:(1)利用循環(huán)將字符串str的長度求出,然后從字符串的尾部開始檢索,用循環(huán)從字符串的最后一個字符往前面逐個檢查,如果該字符不是空格則退出循環(huán),這個時候就找到了最后一個非空格字符所在的下標位置,然后從下標0開始到該位置,逐個將str里面字符拷貝到des中。(2)程序當中使用了3次循環(huán):計算長度、尋找最后一個非空格字符和拷貝三個過程。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的源程序文件modi3.cpp。學校教務處要為任課老師開發(fā)一個學生管理系統(tǒng),需求如下:(1)學生的信息是要受到嚴密保護和限制的,包括姓名、五個英文字符的學號,以及精確到小數(shù)點后一位的一科成績,只有任課老師可以修改,如果學生升學了,比如由本科升到研究生,原來的信息還有效,而只需添加研究生的必要信息,不過現(xiàn)在不必馬上實現(xiàn),但應當有所考慮。(2)學生的所有信息可以查看,但也只有學生自己才有這個權利。(3)學生的信息可以從文件中讀取來構造信息庫,需要把信息輸出到屏幕以便核實,但這需要任課老師來完成。(4)老師能提供所教學生的完整信息列表,同時可按成績高低排序。(5)為了便于學校評定獎學金,需要單獨查找成績最高的同學(一般不采用把成績單全部排列后來選取,可能這比較耗費時間,雖然要求不太合理,但要按用戶的需求操作,同時需要指出的是,如果成績最高者有數(shù)名,需要一一列出)。(6)由于學校的機器比較老,內存嚴重不足,每個老師帶的學生數(shù)不一樣,但也不會超過50人。以上功能的程序框架已經(jīng)形成,考生需要按照需求來逐個實現(xiàn)。(1)請在注釋//********1********之后添加適當?shù)恼Z句,以便實現(xiàn)功能需求(1)。(2)請在注釋//********2********處添加適當?shù)恼Z句,成績單排序功能。(3)請在注釋//********3********處實現(xiàn)查找成績最高學生名單。無需修改main()主函數(shù),當?shù)玫较旅娴慕Y果,該系統(tǒng)可能被采用。輸入的學生信息:姓名學號成績周華000178.5李強000298劉星000389賀蘭000478周紅000576.5趙邦000685高俊000798排序后的學生信息:姓名學號成績李強000298高俊000798劉星000389趙邦000685周華000178.5賀蘭000478周紅000576.5查詢成績最高的學生信息:高俊000798李強000298注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。#include<fstream.h>#include<assert.h>#include<string.h>#defineNMAX50classTeacher;classstudent{public:Student(char*name="未知",char*number="00000",doublemark=0.0){intlen=strlen(name);m_name=newchar[len+1];strcpy(m_name,name);strcpy(m_number,number),m_mark=mark;}~Student(){delete[]mname;}voidDisplayMsg(){cout<<m_name<<"\t"<<mnumber<<"\t"<<m_mark<<endl;}protected:char*m_name;charm_number[5];doublem_mark;//********1********};classTeacher{public:Teacher(){};~Teacher()(for(inti=0;i<m_count;i++){deletem_pStu[i];m_pStu[i]=NULL;}};intBestScore(Student*pS[]);voidInputScore();voidDisplay();voidSortScore();protected:Student*m_pStu[NMAX];doublem_average;intm_count;};voidTeacher::InputScore(){ifstreamin("data.txt");assert(in);charname[20];charnumber[5];doublemark=0jm_count=0;cout<<"姓名\t"<<"學號\t"<<"成績\t"<<endl;for(int]i=0;!in.eof();i++){in>>name;in>>number;in>>mark;m_c6unt++;m_pStu[i]=newStudent(name,number,mark);cout<<name<<"\t"<<number<<"\t"<<mark<<endl;}}voidTeacher::SortScore(){doublesum=0;for(inti=0;i<m-count;i++){intindex=i;for(intj=i+1;j<m_count;j++){if(m_pStu[j]->m_mark>m_pStu[index]->m_mark)index=j;}//********2********if(){Student*ps=m_pStu[i];m_pStu[i]=mpStu[index];m_pStu[index]=ps;}}}voidTeacher::Display(){cout<<"姓名\t"<<"學號\t"<<"成績\t"<<endl;for(intj=0;j<m_count;J++){m_pStu[j]->DisplayMsg(),}}intTeacher::BestScore(Student*pS[]){intindex=0;intcount=1;//********3********for(intj=1;j<m_count;j++){if(m_pStu[j]>m_mark>m_pStu[index]->m_mark){count=1;index=j;pS[count++]=m_pStu[index];}elseif(mpStu[j]->m_mark==m_pStu[index]->m_mark){index=j;pS[count++=m_pStu[index];}}returncount;}voidmain(){TeacherTeacher;Student*pStudent[NMAX];cout<<"輸入的學生信息:"<<endl;Teacher.InputScore();Teacher.SortScore();cout<<endl(<"排序后的學生信息:"<<endl;Teacher.Display();cout<<endl<<"查詢成績最高的學生信息:"<<endl;intn=Teacher.BeStScore(pStudent);while(n--){pStudent[n]->DisplayMsg();}}標準答案:(1)添加語句:friendelassTeacher;(2)將“if()”補充完整為:if(index!=j)(3)添加語句:pS[0]=m_pStu[0];知識點解析:(1)學生的信息受到嚴密保護和限制,任課老師可以修改學生數(shù)據(jù),比如本科升到研究需要修改學號等信息,因此老師類(Teacher)可以訪問學生類(Student),故老師類是學生類友元類,故第1個標識下應添加“friendclassTeacher;”。(2)SortScore()成員函數(shù)是實現(xiàn)按成績高低的排序,函數(shù)結構是二重循環(huán),采用的是選擇法排序,每次在內層循環(huán)中尋找成績最高的元素的下標,如果找到的最高成績的元素的下標和現(xiàn)在的位置(外層循環(huán)變量i+1的值)不同則兩者交換,故第2個標識下的判斷條件為“if(index!=j)”。(3)BestScore(Student*pS[])實現(xiàn)查找成績最高學生名單,即利用循環(huán)查找數(shù)組中的每個元素的成績值,先假設第一個元素的成績最高,然后再循環(huán)中逐個比較,如果有成績更高的,那么將更高的成績保存下來,搜索整個數(shù)組就能找到成績最高的學生,即第3標識下應添加“pS[0]=m_pStu[0];”。國家二級C++機試(操作題)模擬試卷第7套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請打開考生文件夾下的解決方案文件proj1,該工程中含有一個源程序文件proj1.cpp。其中位于每個注釋“//ERROR****found****”之后的一行語句有錯誤。請改正這些錯誤,使程序的輸出結果為:12345678910注意:只能修改注釋“//ERROR****found****”的下一行語句,不要改動程序中的其他內容。//proj1.cpp#include<iostream>usingnamespacestd;classMyClass{public:MyClasS(intlen){array=newint[len];arraySize=len;for(inti=0;i<arraySize;i++)array[i]=i+1;}~MyClass(){//ERROR******found*******deletearray[i];}voidPrint()const{for(inti=0;i<arraySize;i++)//ERROR********found********cin<<array[i]<<’’;cout<<end1;}private:int*array;intarraysize;};intmain(){//ERROR********found********MyClassobj;obj.Print();return0;}標準答案:delete[]array;cout<<array[i]<<”;MyClassobj(10);知識點解析:(1)語法錯誤,使用delete語句刪除一個指針時,直接把指針變量的名稱放在delete[]后面即可。(2)考查考生對輸入、輸出語句的運用。使用Cc3ut進行數(shù)據(jù)輸出操作,一般格式為:cout<<Expr;。其中,Expr代表一個表達式,“<<”稱為插入運算符,該語句的含義是,將表達式Expr的值輸出到屏幕上。使用cin進行數(shù)據(jù)輸入操作,一般格式為:cin>>var;。其中,var代表一個變量,“>>”稱為提取運算符,該語句的含義是,將用戶輸入的數(shù)據(jù)保存到var中。(3)考查語句的初始化,我們來看MyClass類的構造函數(shù):MyClasS(intlen){array=newint[len];//給數(shù)組動態(tài)分配空間,大小為lenarraySize=len;//賦值for(inti=0;i<arraySize;i++)array[i]=i+1;//循環(huán)給數(shù)組賦值,從1到10請注意:形參len沒有定義默認值,因此要想使array動態(tài)數(shù)組里依次存放1,2,3,4,5,6,7,8,9,10,就是要給len賦值為10。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、請打開考生文件夾下的解決方案文件proj2,其中定義了Component類、Composite類和Leaf類。Component是抽象基類,Composite和Leaf是Component的公有派生類。請在橫線處填寫適當?shù)拇a并刪除橫線,以實現(xiàn)上述類定義。此程序的正確輸出結果應為:LeafNode注意:只能在橫線處填寫適當?shù)拇a,不要改動程序中的其他內容,也不要刪除或移動“//****found****”。#include<ioStream>usingnamespacestd;classComponent{public://聲明純虛函數(shù)print()//

溫馨提示

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

評論

0/150

提交評論