版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
國家二級C++機試(操作題)模擬試卷2(共9套)(共27題)國家二級C++機試(操作題)模擬試卷第1套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modil.epp,但該程序運行時有錯,請改正程序中的錯誤,使程序輸出的結果為:1063022注意:錯誤的語句在//********error********的下面,修改該語句即可。1#include2classCMyClass3{4private:5intnumber;6intAdd(inti)7{8returnnumber+=i;9}10intSub(inti)11{12returnnumber-=i;13}14intMul(inti)15{16returnnumber*=i;17}18intDiv(inti)19i20if(i!=0)21{22returnnumber/=i;23}24else25returnnumber;26}27//******error******28typedefint(FUNC)(int);29//******error******30FUNCfunc[];31public:32CMyClass()33{34func[0]=CMyClass::Add;35func[1]=CMyClass::Sub;36func[2]=CMyClass::Mul;37func[3]=CMyClass::Div;38number=0;39}40intCallFunction(inti,intJ)41{42//******error******43return(func[i])(J);44}45};46voidmain()47{48CMyClassmyobj;49cout<標準答案:(1)typedefint(CMyClass::*FUNC)(int);(2)FUNCfunc[4];(3)return(this->*func[i])(j);知識點解析:CMyClass類有一個成員變量number,多個成員函數分別實現(xiàn)加減乘除功能。使用typedef定義了一個返回值是整型并帶有一個整型參數的函數指針,并通過實例化一個容量為4的函數指針數組實現(xiàn)對類中定義的方法的調用。[解題思路](1)在類中定義函數指針須指定類名及指針定義運算符*,因此第1個標識下函數指針正確的定義為“typedefintrCMyClass::*FUNC)(int);”。(2)函數指針數組本身是數組類型,因此在定義時如果沒有初始化,就必須指定數組大小,在本題中因為指針數組包含的指針變量需要指向四種算數運算,因此定義指針數組大小為4,即第2個標識下應改為“FUNCfunc[4];”。(3)func是指針數組,因此訪問的時候需要有指針運算符“*”,第3個標識下應改成“retum(this->*func[i])(j);”。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi2.cpp。閱讀下列函數說明和代碼,完成空出部分的程序。函數func(intA[NUM],intn)實現(xiàn)的功能是將數組的內容進行一次重新排序。排序的方法是:給定n,則下標為i的數字與下標為n.i的數字交換。從0開始,交換N/2次,則最后的內容為排序后的結果。如果:A[8]={1,2,3,4,5,6,7,8},n=6,則結果:A[8]={7,6,5,4,3,2,1,8}。注意:不能修改其他代碼。1#include2#defineNUM83voidfunc(intA[NUM],intn)4{56j7intmain()8{9intA[NUM]=(1,2,3,4,5,6,7,8);10func(A,6);11for(inti=0;i標準答案:1for(inti=0;i知識點解析:func()函數完成對數組內容的重排,下標為i的數字與下標為n.i的數字交換,可以用循環(huán)來實現(xiàn)。[解題思路](1)用循環(huán)來實現(xiàn)該過程,題目要求從0開始,交換N/2次,因此循環(huán)變量i的范圍從0變化到N/2。(2)下標為0的元素與下標為n的元素交換,下標為1的元素與下標為n.1的元素交換,依此類推,在循環(huán)體內,用一個臨時變量記錄第一個元素,然后將第二個元素賦值給第一個元素,臨時變量值賦給第二個元素,如此完成兩個元素的交換。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的源程序文件modi3.cpp。其中定義的類并不完整,按要求完成下列操作,將類的定義補充完整。其中:定義了類circle和column,column類由circle類protected派生,但是兩個類的定義并不完整,請按照以下的要求,將程序補充完整。(1)定義類circle的保護數據成員函數r和area,它們都是double型的數據,請在注釋//********1********后完成。(2)添加類circle的無參數的構造函數,使得類circle對象的r默認值為0,請在注釋//********2********后完成。(3)添加派生類column的構造函數的定義,使得參數為double型的height和radius并將其分別賦給數據成員h和基類的r請在注釋//********3********之后完成。(4)完成派生類column的成員函數print()的定義,請在注釋//********4********之后完成,使得輸出為:radius=5area=78.54height=10vol=785.4注意:增加代碼,或者修改代碼的位置已經用符號表示出來。請不要修改其他的程序代碼。1#include2constdoublepi=3.1416;3classcircle4{5protected:6//********1********78public:9//********2********1011{12r=0.0;13}14circle(doubleradius)15{16r=radius;17}18voidprint()19{20area=r*r*pi;21cout<<"radius="<標準答案:(1)添加語句:doubler,area;(2)添加語句:Circle()(3)添加語句:column(doubleradius,doubleheight)(4)添加語句:cout<<"height="<國家二級C++機試(操作題)模擬試卷第2套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請使用VC6或使用【答題】菜單打開考生文件夾proj1下的工程proj1,此工程中包含了類Pets(“寵物”)和主函數main的定義。程序中位于每個“//ERROR****found****”之后的一行語句有錯誤,請加以改正。改正后程序的輸出結果應為:Name:sonnyType:dogName:JohnType:dogName:DannyType:catName:JohnType:dog注意:只修改每個“//ERROR****found****”下的那一行,不要改動程序中的其他內容。#include<lostream>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<<end1;}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(this->name,s.name);知識點解析:(1)主要考查考生對構造函數的掌握情況,因為形參名和類的私有成員名稱都是type,為了避免混淆,所以規(guī)定類的私有成員使用this指針調用,即:this->type=type;。(2)主要考查考生對析構函數的掌握情況,題目中要求,釋放name所指向的字符串。要釋放name指針用delete語句,即delete[]name;。(3)主要考查考生對sineW函數的掌握情況,strcpy函數的形參為兩個字符串,而name為指向字符串的指針,因此使用語句:strcpy(this->name,s.name);。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、請使用VC6或使用【答題】菜單打開考生文件夾proj2下的工程proj2,該工程中包含一個程序文件main.cpp,其中有類CPolygon(“多邊形”)、CRectangle(“矩形”)、CTfiange(“三角形”)的定義。請在橫線處填寫適當的代碼并刪除橫線,以實現(xiàn)上述類定義。該程序的正確輸出結果應為:2010注意:只能在橫線處填寫適當的代碼,不要改動程序中的其他內容,也不要刪除或移動“//****found****”。#include<iostream>usingnamespacestd;classCPolygon{public://**********found**********_______//純虛函數area聲明voidprintarea(void)//**********found**********{cout<<_______<<end1,}};classCRectangle:publicCPolygon{intwidth;//長方形寬intheight;//長方形高public:CRectangle(intW,inth):width(w),height(h){}intarea(void){return(width*height);}};classCTriangle:publicCPolygon{intlength;//三角形一邊長intheight;//該邊上的高public:CTriangle(int1,inth):length(1),height(h){}//**********found**********intarea(void){return(_______)/2;}};intmain()fCRectanglerect(4,5);CTriangletrgl(4,5);//**********found**********_______*ppoly1,*ppoly2;ppoly1=&rect;ppoly2=&trg1;ppoly1->printarea();ppoly2->printarea();retumR0;}標準答案:(1)viauMintarea(void)=0;(2)area()(3)length*height(4)Cpolygon知識點解析:(1)主要考查考生對純虛函數的掌握,在定義純虛函數時要看在派生類中函數的定義:intarea(void)。由此可知純虛函數應該為:viauMintarea(void)=0;。(2)主要考查考生對純虛函數的掌握情況,由voidprintarea(void)可知,該函數要打印面積,因此在此要調用純虛函數area,即cont<<area()。(3)主要考查考生對數學公式的掌握,該函數要返回三角形面積,三角形的面積公式為長乘以該邊上的高除以2,即return(length*height)/2;。(4)主要考查考生對抽象類的掌握情況,根據程序段:ppoly1=&rect;ppoly2=&trg1;可知指針ppoly1指向CReetangle類,而指針ppoly2指向CTfiangle類,因此在這里只能填這兩種類的基類CPolygon類。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、請使用【答題】菜單命令或直接用VC6打開考生文件夾下的工程prog3,其中聲明了ValArray類,該類在內部維護一個動態(tài)分配的整型數組。ValArray類的復制構造函數應實現(xiàn)對象的深層復制。請編寫ValArray類的復制構造函數。在main函數中給出了一組測試數據,此種隋況下程序的輸出應該是:ValArrayv1={1,2,3,4,5}ValArrayv2={1,2,3,4,5}要求:補充編制的內容寫在“//********333********”與“********666********”之間,不得修改程序的其他部分。注意:程序最后將結果輸出到文件out.dat中。輸出函數writeToFile已經編譯為boj文件,并且在本程序中調用。//ValArray.h#include<iostream>usingnamespacestd;classValArray{int*v;intsize;public:ValArray(constint*P,intn):size(n){v=newint[size];for(inti=0;i<size;i++)v[i]=P[i];}ValArray(constValArray&other);~ValArray()fdelete[]v;}voidprint(ostream&out)const{out<<’{’;for(inti=0j<size-1;i++)out<<v[i]<<",";out<<v[size-1]<<’)’;}voidsetArray(inti,intval){v[i]=val;}};voidwriteToFile(constchar*);//main.cpp#include"ValArray.h"ValArray∷ValArray(constValArray&other){//********333********//********666********}intmain(){constinta[]={1,2,3,4,5};ValArrayvl(a,5);cout<<"ValArrayv1=";v1.print(cout);cout<<end1;ValArrayV2(V1);cout<<"ValArrayV2=";v2.print(cout);cout<<end1;writeTOFile(“”);return0;}標準答案:size=other.size;v=newint[size];for(inti=0;i<size;i++)setArray(i,other.v[i]);知識點解析:主要考查考生對復制構造函數的掌握,ValArray類的復制構造函數應實現(xiàn)對象的深層復制。由ValArray類的構造函數:ValArray(constint*p,intn):size(n){v=newint[size];//給v分配大小為size的空間for(inti=0;i<size;i++)//遍歷pv[i]=p[i];//把p[i]賦值給v[i]}可知類中v是動態(tài)數組,size表示數組長度,因此要先給v分配空間為size,再逐個元素復制以達到對象的深層復制。國家二級C++機試(操作題)模擬試卷第3套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modi1.cpp,該程序運行時有錯,請改正錯誤,使得程序正確執(zhí)行,并且輸出以下語句:TestClass1:0TestClass2注意:不要改動main函數,不能增行或刪行,也不能更改程序的結構,錯誤的語句在//********error********的下面。#inCludestructTestClass1{TestClass1(inti=0){mi=i;}Voidprint(){cout<<"TestClass1:"<標準答案:(1)public:(2)TestClass1obj1(0);或TestClass1obj1;(3)TestClass2obj2;知識點解析:(1)第1個標識下的“private:~TestClass20”是析構函數,它不是私有的,所以這里應該為“刪除private:或修改為public:”。(2)第2個標識下的“TestClass1obj1();”語句是定義一個TestClass1類型的對象obj1(),根據類TestClass1構造函數的定義“TestClass1(inti=0)”,知道存在整型參數,應該補充參數,或者只是先定義一個對象名,然后在使用時補充參數,即修改為“TestClass1obj1(0);或TestClass1obj1;”。(3)同理第3個標識下的“TestClass2obj2)_;”語句修改為“TestClass2obj2;”。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi2.cpp。請完成函數fun(char*data),此函數的功能是,找出字符串數組中最小的ASCII值,如果有相同變量,則輸出最后一個所在的位置;如果字符串為空,則返回-1;或者不存在時也返回-1。注意:請勿改動主函數main與其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。計算數字如果第一個字母最小,則返回0。依次增加。#includeintfun(char*data){}voidmain(){charstr[1024];cout<<"請輸入一行英文字符串:\n";cin.getline(str,1024);cout<<"最小的字母出現(xiàn)在距離頭部"<標準答案:intMinPos=0;//初始化最小值位置if(data==NULL)//判斷輸入字符串是否為空return-1;charMinData=data[0];//設置字符串第一個字符為最小值if(MinData==0)//判斷第一個字符是否存在return-1;for(inti=1;data[i]!=0;i++){if(data[i]<=MinData){MinData=data[i];//逐個判斷每個字母是否小于標記字符MinPos=i;//最小值位置}}returnMinPos;知識點解析:(1)MinPos變量首先指向字符串data的第一個字符,同時將標志位MinPos初始值賦為0。(2)然后利用for循環(huán)對每一個當前字符與MinPos標記的字符進行比較。(3)循環(huán)中將求得的最小數據data[i]賦值給MinData,并將該數據項數組標志位賦給標志位MinPos。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生:丈件夾下的源程序文件modi3.cpp。學校教務處要為任課老師開發(fā)一個學生管理系統(tǒng),需求如下:(1)學生的信息是要受到嚴密保護和限制的,包括姓名、五個英文字符的學號,以及精確到小數點后一位的一科成績,只有任課老師可以修改,如果學生升學了,比如由本科升到研究生,原來的信息還有效,而只需添加研究生的必要信息,不過現(xiàn)在不必馬上實現(xiàn),但應當有所考慮。(2)學生的所有信息可以查看,但也只有學生自己才有這個權利。(3)學生的信息可以從文件中讀取來構造信息庫,需要把信息輸出到屏幕以便核實,但這需要任課老師來完成。(4)老師能提供所教學生的完整信息列表,同時可按成績高低排序。(5)為了便于學校評定獎學金,需要單獨查找成績最高的同學(一般不采用把成績單全部排列后來選取,可能這比較耗費時間,雖然要求不太合理,但要按用戶的需求操作,同時需要指出的是,如果成績最高者有數名,需要一一列出)。(6)由于學校的機器比較老,內存嚴重不足,每個老師帶的學生數不一樣,但也不會超過50人。以上功能的程序框架已經形成,考生需要按照需求來逐個實現(xiàn)。(1)請在注釋//********1********之后添加適當的語句,以便實現(xiàn)功能需求(1)。(2)請在注釋//********2********處添加適當的語句,成績單排序功能。(3)請在注釋//********3********處實現(xiàn)奩找成績最高學生名單。無需修改main()主函數,當得到下面的結果,該系統(tǒng)可能被采用。輸入的學生信息:姓名學號成績周華000178.5李強000298劉星000389賀蘭000478周紅000576.5趙邦000685高俊000798排序后的學生信息:姓名學號成績李強000298高俊000798劉星000389趙邦000685周華000178.5賀蘭000478周紅000576.5查詢成績最高的學生信息:高俊000798李強000298注意:除在指定位置添加語句之外,請不要改動程序中的其他內容。#include#include#include#defineNMAX50classTeacher;classStudent{public:Student(char*name=“未知”,char*number=“00000”,doublemark=0.01{intlen=strien(name);mname:newchar[len+1];strcpy(mname,name);strcpy(mnumber,number);mmark=mark;}~Student(){delete[]mname;)voidDisplayMsg(){cout<>name;in>>number;in>>mark;m_count++;m_pStu[i]=newStudent(name,number,mark);cout<m_mark>mpStu[index]->m_mark)index=j;}//********2********if(){Student*ps=mpStu[i];mpStu[i]=mpStu[index];m_pStu[index]=ps;}}}voidTeacher::Display(){cout<<"姓名\t"<<"學號\t"<<"成績\t"<DisplayMsg();}}intTeacher::BestScore(Student*pS[]){intindex=0;intcount=1;//********3********for(intj=1;jmmark>mpStu[index]_>mmark){count=1;index=j;pSpcount++]=mpStu[index];}elseif(mpStu[j]->mmark==m_pStu[index]->m_mark){index=j;pS[count++]=m_pStu[index];}}returncount;}Voidmain(){TeacherTeacher;Student*pStudent[NMAX];cout<<"輸入的學生信息:"<DisplayMsg();}}標準答案:(1)添加語句:friendclassTeacher;(2)將“if()”補充完整為:if(index!=j)(3)添加語句:ps[0]=mpStu[0];知識點解析:(1)學生的信息受到嚴密保護和限制,任課老師可以修改學生數據,比如本科升到研究需要修改學號等信息,因此老師類(Teacher)可以訪問學生類(Student),故老師類是學生類友元類,故第1個標識下應添加“friendclassTeacher;”。(2)SortScore()成員函數是實現(xiàn)按成績高低的排序,函數結構是二重循環(huán),采用的是選擇法排序,每次在內層循環(huán)中尋找成績最高的元素的下標,如果找到的最高成績的元素的下標和現(xiàn)在的位置(外層循環(huán)變量i+1的值)不同則兩者交換,故第2個標識下的判斷條件為“if(index!=j)”。(3)BestScore(Student*pS[])實現(xiàn)查找成績最高學生名單,即利用循環(huán)查找數組中的每個元素的成績值,先假設第一個元素的成績最高,然后再循環(huán)中逐個比較,如果有成績更高的,那么將更高的成績保存下來,搜索整個數組就能找到成績最高的學生,即第3標識下應添加“ps[0]=mpStu[0];”。國家二級C++機試(操作題)模擬試卷第4套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modi1.cpp。本程序要求輸入一字符串,然后將其中的小寫字母改變成大寫字母,字符可能輸入多行,當輸入字符“?”時,默認字符輸入結束,最后把結果輸出到界面。注意:不要改動main函數,不能增行或刪行,也不能更改程序的結構,錯誤的語句在//******error******的下面。#include<iostream.h>voidmain(){inti=0;charstr[120];cout<<"Enterastringendwith’?’."<<endl;//********error********cin.getline(str,120);//********error********while(Str){//********error********if(str[i]>=’a’)str[i]=str[i]-’a’+’A’;i++;}cout<<Str<<endl;return;}標準答案:(1)cin.getline(str,120,’?’);(2)while(str[i])(3)if(str[i]>=’a’&&str[i]<=’z’)知識點解析:(1)題目中要求以輸入字符“?”為結束,用于字符輸入的流成員函數getline函數讀入一行字符,格式cin.getline(字符數組,字符個數,終止標志字符),所以第1個標識下為“cin.getline(str,120,’?’);”。(2)第2個標識下的“while(str)”語句應該是判斷字符串str中的每一個字符是否為尾符,若不是尾符在循環(huán)中判斷每一個字符是否為小寫,若為小寫,轉換。所以應該修改為“while(str[i])”。(3)第3個標識下的“if(str[i]>=’a’)”語句是判斷字符str[i]是否為小寫字符,而現(xiàn)有的語句只是判斷字符是否大于’a’,但是小寫字符應該是’a’到’z’,所以修改為“if(str[i]>=’a’&&str[i]<=’z’)”。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi2.cpp。完成函數fun(char*str,char*s)空出部分。函數fun(char*str,char*s)的功能是:將在字符串str中下標為偶數位置上的字符,緊隨其后重復出現(xiàn)一次,放在一個新串S中,S中字符按原字符串中字符的順序排列。(注意0為偶數)例如:當str中的字符串為:"abcdef"時,s中的字符串應為:"aaccee"。注意:不要改動main()函數,不得增行或刪行,也不得更改程序的結構。#include<iostream.h>voidfun(char*str,char*s){}voidmain(){charstr[100],s[100];cout<<"Pleaseenterstringstring:"<<endl;cin.getline(str,100);fun(Str,s);cout<<"Theresultis:"<<s<<endl;return;}標準答案:inti;for(i=0;str[i]!=0;i++)//循環(huán)判斷每一個字符{if(i%2==0)//判斷字符串中下標為偶數位置{s[i]=str[i];s[i+1]=str[i];s[i+2]=’0’;//新串添加尾符}}知識點解析:(1)判斷一個字符串中的某一字符下標i是否為偶數,可用“i%2==0”來判斷。(2)對串str中各個字符串逐個進行考查,滿足條件的字符就順序放在新串s中,否則就不存放。(3)所有字符處理完后,記得在新串S的末尾加上結束符“’\0’。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的源程序文件modi3.cpp,其中定義了用于表示日期的類Date,但類Date的定義并不完整,按要求完成下列操作,將類的定義補充完整。(1)定義私有成員變量year、month、day,分別表示年、月、目,類型為int。請在注釋//********1********后添加適當的語句。(2)完成構造函數,分別給year、month、day賦值,請在注釋//********2********后添加適當的語句。(3)完成重載符號“+=”的定義,請在注釋//********3********后添加適當的語句。(4)完成print()打印函數,如2008年8月8日到屏幕和文件modi3.txt格式相同,請在注釋//********4********后添加適當的語句。注意:僅在函數指定位置添加語句,請勿改動主函數main與其他函數中的任何內容。#include<iostream.h>#include<fStream>#include<iomanip>#include<cmath>USingnamespacestd;voidWriteFile(intc){ofStreamout1;out1.open("modi3.txt",ios_base::app);out1<(c<<’’;out1.close();}voidWriteFile(char*str){ofstreamout1;out1.open("modi3.txt",iosbase::app);out1<<str:out1.close():}voidClearFile(){ofstreamout1;out1.open("modi3.txt");out1.close();}classDate{public:Date(inty,intm,intd){//********2********}voidprint()const;//********3********{month+=m;inti=month/12;intj=month%12;if(i==0){year+=(i-1),month=12;}else{year+=i;month=j;}return*this;}private://********1********};voidDate::Print()const{//********4********WriteFile(year);WriteFile("年");WriteFile(month);WriteFile("月");WriteFile(day);WriteFile("日");}intmain(){clearFile();Dateoly_day(2008,8,8);oly_day+=3;oly_day.print();return0;}標準答案:(1)添加語句:intyear,month,day;(2)添加語句:year=y;month=m;day=d;(3)添加語句:Date&operator+=(intm)(4)添加語句:cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;知識點解析:(1)題目1要求“定義私有成員變量year、month、day”。在C++程序的private區(qū)域中添加變量year、month、day的定義,即在第1個標識下添加“intyear,month,day;”。(2)題目2要求“完成構造函數,分別給year、month、day賦值”。在程序中“Date(inty,intm,intd)”的構造函數中添加給year、month、day賦值的語句,即在第2個標識下添加“year=y;month=m;day=d;”。(3)題目3要求“完成重載符號“+=”的定義”。在C++中,運算符重載的定義方法是定義一個重載運算符的函數,格式為函數operator+~載運算符號+,所以這里補全“Date&operator+=(intm)”。(4)題目4要求“完成函數print()打印函數”。在C++中的print()函數中補全其打印功能,即在第四個標識下添加“cout<<year<<"年"<<month<<"月"<<daV<<"日"<<endl;”。國家二級C++機試(操作題)模擬試卷第5套一、基本操作題(本題共1題,每題1.0分,共1分。)1、給定程序中,函數fun的功能是將帶頭結點的單向鏈表結點數據域中的數據從小到大排序。即若原鏈表結點數據域從頭至尾的數據為:10、4、2、8、6,排序后鏈表結點數據域從頭至尾的數據為:2、4、6、8、10。請在程序的中括號處填入正確的內容并把中括號刪除,使程序得出正確的結果。注意:部分源程序在文件BLANKl.C中。不得增行或刪行,也不得更改程序的結構!試題程序:#include#include#defineN6typedefstructnode{intdata;structnode*next;}NODE;voidfun(NODE*h){NODE*p,*q;intt;/*********found*********/p=【1】;while(p){/*********found*********/q=【2】,while(q){/*********found*********/if(p一>data—【3】q一>data){t=p一>data;p一>data=q一>data;q一>data=t;)q=q一>next;}p=p一>next;}}NODE*creatlist(inta[]){NODE*h,*p,*q;inti;h=(NODE*)malloc(sizeof(NODE));h一>next=NULL;for(i=0;idata=a[i];q一>next=NULL;if(h一>next==NULL)h一>next=p=q;else(p一>next=q;p=q;)}returnh;}voidoutlist(NODE*h){NODE*p;p=h一>next;if(P==NULL)printf("ThelistisNULL!\n");else{printf("\nHead");do{printf("一>%d",p一>data);p=p一>next;)while(p!=NULL);printf("一>End\n");}}main(){NODE*head;inta[N]={0,10,4,2,8,6};head=creatlist(a);printf("\nTheoriginallist:\n");outlist(head);fun(head);printf("\nThelistaftersorting:\n");outliSt(head);}標準答案:(1)h一>next(2)p一>next(3)>知識點解析:填空1:本題考查了指針變量p賦初值,使p指向鏈表的頭結點的下一個結點,因此本空應該填寫h一>next。填空2:本空考查了q的作用,q代表p的下一個數,因此次空應該填寫p一>next。填空3:if判斷句是比較鏈表中相鄰兩個數的大小,如果p一>data>q一>data就交換這兩個數的值,因而此空填寫>。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、在主函數中從鍵盤輸入若干個數放入數組中,用0結束輸入并放在最后一個元素中。下列給定程序中,函數fun的功能是:計算數組元素中所有值為正數的平均值(不包括0)。例如,數組中元素的值依次為:39、一47、21、2、一8、15、0,則程序的運行結果為19.250000。請改正程序中的錯誤,使它能得出正確的結果。注意:不要改動main函數。不得增行或刪行,也不得更改程序的結構!試題程序:#include#includedoublefun(intx[]){/*********found*********/intsum=0.0;intc=0,i=0;while(x[i]!=0){if(x[i]>一0){sum+=x[i];c++;}i++;)/*********found*********/sum\=c;returnsum;}main(){intx[1000];inti=0;printf("\nPleaseentersomedata(endwith0):");do{scanf("%d",&x[i]);}while(x[i++]!=0);printf("%1f\n",fun(x));}標準答案:(1)doublesum=0.0;(2)sum/=c;知識點解析:(1)變量定義錯誤,變量sum存放所有數據的和,應定義為double型。(2)C語言中的除法運算符是“/”。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、編寫函數fun,其功能是:求Fibonacei數列中大于t的最小的數,結果由函數返回。Fibonacci數列F(n)的定義為:F(0)=0,F(xiàn)(1)=1F(n)=F(n一1)+F(n一2)例如,當t=1000時,函數值為1597。注意:部分源程序給出如下。請勿改動主函數main和其他函數中的任何內容,僅在函數fun的花括號中填入你編寫的若干語句。試題程序:#include#include#includeintfun(intt){}main(){intn;n=1000;printf("n=%d,f=%d\n",n,fun(n));}標準答案:intfun(intt){intf0=0,f1=1,f;do{/*根據Fibonacci數列的定義求數值*/f=f0+f1;f0=f1;f1=f;)while(f知識點解析:根據所給數列定義不難發(fā)現(xiàn),該數列最終的結果是由兩個數列之和組成,所以可以在循環(huán)內部始終把f看成是前兩項之和,而f0始終代表第n一2項,n代表第n一1項。退出循環(huán)時得到的數f,就是大于指定數的最小的數。國家二級C++機試(操作題)模擬試卷第6套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請使用VC6或使用【答題】菜單打開考生文件夾proj1下的工程proj1,此工程包含一個源程序文件proj1.cpp。文件中將表示數組元素個數的常量Size定義為4,并用int類型對類模板進行了實例化。文件中位于每個注釋“//ERROR****found****”之后的一行語句存在錯誤。請改正這些錯誤,使程序的輸出結果為:1234注意:模板參數名用T。只修改注釋“//ERROR*******found*******”的下一行語句,不要改動程序中的其他內容。//proj1.cpp#includeusingnamespacestd;//將數組元素個數Size定義為4//ERROR*******found*******constintSize;templateclassMyClass{public:MyClass(T*P){for(inti=0;i//ERROR*******found*******voidMyClass::Print(){for(inti=0;iobj(intArray);obj.Print();cout<標準答案:(1)constintSize=4;(2)voidMyClass::Print()(3)MyClassobj(intArray);知識點解析:(1)主要考查考生對const變量的掌握,因為const變量不能修改,所以在定義的同時必須初始化。(2)主要考查考生對模板類的成員函數定義的掌握,因為MyClass類是模板類,所以在定義該函數時要加上模板標識符“”,即語句voidMyClass::Print()。(3)主要考查考生對模板類構造函數的調用的理解,從上一條語句intintArray[Size]={1,2,3,4};中可以知道intArray為int型,因此定義obj時要使用,即MyClassobj(intArray);。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、請使用VC6或使用【答題】菜單打開考生文件夾proj2下的工程proj2,該工程中含有一個源程序文件proj2.cpp,其中定義了CharShape類、Triangle類和Rectangle類。CharShape是一個抽象基類,它表示由字符組成的圖形(簡稱字符圖形),純虛函數Show用于顯示不同字符圖形的相同操作接口。Triangle和Rectangle是CharShape的派生類,它們分別用于表示字符三角形和字符矩形,并且都定義了成員函數Show,用于實現(xiàn)各自的顯示操作。程序的正確輸出結果應為:****************########################請閱讀程序,分析輸出結果,然后根據以下要求在橫線處填寫適當的代碼并刪除橫線。(1)將Triangle類的成員函數Show補充完整,使字符三角形的顯示符合輸出結果。(2)將Rectangle類的成員函數Show補充完整,使字符矩形的顯示符合輸出結果。(3)為類外函數fun添加合適的形參。注意:只在指定位置編寫適當代碼,不要改動程序中的其他內容,也不要刪除或移動“//****found****”。//proj2.cpp#includeusingnamespacestd;classCharShape{public:CharShape(charch):ch(ch){);virtualvoidShow()=0;protected:charch;//組成圖形的字符};classTriangle:publicCharShape{public:Triangle(charch,intr):CharShape(ch),rows(r){}voidShow();private:introws;//行數};classRectangle:publicChar-Shape{public:Rectangle(charch,intr,intc):CharShape(ch),_rows(r),cols(c){)voidShow();private:introwstcols;//行數和列數};voidTriangle::Show()//輸出字符組成的三角形{for(inti=1;i<=rows;i++){//**********found**********for(intj=1;j<=__________;j++)cout<<_ch;cout<標準答案:(1)i*2-1(2)_rows(3)_cols(4)CharShape&cs知識點解析:(1)考查for循環(huán)語句,該語句所在的函數的功能是輸出字符組成的三角形。從外層循環(huán)中可以看出下標i代表行數,那么下標j就代表每一行字符的個數,因為要輸出的是三角形,所以每一行的個數與該行的行數相關,即j<=i*2-1;。(2)考查for循環(huán)語句,該語句所在的函數的功能是輸出字符組成的矩形?;氐絉ectangle類中可以知道矩形的長和寬就是類中私有成員的行數和列數,因此在這里只要要求下標i不大于行數即可。(3)考查for循環(huán)語句,該語句所在的函數的功能是輸出字符組成的矩形?;氐絉ectangle類中可以知道矩形的長和寬就是類中私有成員的行數和列數,因此在這里只要要求下標j不大于列數即可。(4)主要考查考生對虛函數的掌握,該語句所在的函數是普通函數fun,題目要求為fun函數添加形參。從函數體中可以知道形參名為cs,那么形參的類型是什么呢?就是抽象類CharShape,因此要使用CharShape&es才可以實現(xiàn)題目要求輸出的內容。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、請使用VC6或使用【答題】菜單打開考生文件夾proj3下的工程oroj3,其中聲明IntSet是一個用于表示正整數集合的類。IntSet的成員函數Intersection的功能是求當前集合與另一個集合的交集。請完成成員函數Intersection。在main函數中給出了一組測試數據,此時程序的輸出應該是:求交集前:123581028911305667求交集后:12358102891130566728要求:補充編制的內容寫在“//**********333**********”與“//**********666**********”之間,不得修改程序的其他部分。注意:程序最后將結果輸出到文件out.dat中。輸出函數writeToFile已經編譯為obj文件,并且在本程序中調用。//Intset.h#includeusingnamespacestd;constintMax=100;classIntSet{public:IntSet()//構造一個空集合{end=-1;}IntSet(inta[],intsize)//構造一個包含數組a中size個元素的集合{if(size>=Max)end=Max-1;elseend=size-1;for(inti=0;i<=end;i++)element[i]=a[i];}boolIsMemberOf(inta)//判斷a是否為集合中的一個元素{for(inti=0;i<=end;i++)if(element[i]==a)returntrue;returnfalse;}intGetEnd(){returnend;}//返回最后一個元素的下標intGetElement(inti){returnelement[i];}//返回下標為i的元素IntSetIntersection(IntSet&set);//求當前集合與集合set的交voidPrint()//輸出集合中的所有元素{for(inti=0;i<=end;i++)if((i+1)%20==0)cout<標準答案:for(inti=0;i<=set.GetEnd();i++)//遍對象set數組if(IsMemberOf(set.GetElement(i)))//判斷對象Set數組第i個值是不是集合中的值,如果是則把它插入到a中a[size++]=set.GetElement(i);知識點解析:主要考查考生對數組的掌握,根據IntSet類的構造函數:IntSet(inta[],intsize)//構造一個包含數組a中size個元素的集合{if(Size>=Max)end=Max-1;elseend=Size-1;for(inti=0;i<=end;i++)element[i]=a[i];}可知數組element用來裝載集合,end表示數組長度,因此調用函數IsMemberOf來判斷set中的元素是否存在于集合中,如果存在則放人數組a中。國家二級C++機試(操作題)模擬試卷第7套一、基本操作題(本題共1題,每題1.0分,共1分。)1、使用VC6打開考生文件夾下的源程序文件modil.cpp,但該程序運行時有錯,請改正程序中的錯誤,使程序輸出的結果為:1063022注意:錯誤的語句在∥********error********的下面,修改該語句即可。#includeclassCMyClass{private:intnumber;intAdd(inti){returnnumber+=i;}intSub(inti){returnnumber一=i;}intMul(inti){returnnumber*=i;}intDiv(inti){if(i!=0){returnnumber/=i;}elsereturnnumber;}∥********error********typedefint(FUNC)(int);∥********error********FUNCfunc[];public:CMyClass(){func[0]=CMyClass::Add;func[1]=CMyClass::Sub;func[2]=CMyClass::Mul;func[3]=CMyClass::Div;number=0;}intCallFunction(inti,intj){∥********error********return(func[i])(j);}};voidmain(){CMyClassmyobj;cout<標準答案:(I)typedefint(CMyClass::*FUNC)(int);(2)FUNCfunc[4];(3)return(this一>*func[i])(j);知識點解析:(1)在類中定義函數指針須指定類名及指針定義運算符幸,因此第1個標識下函數指針正確的定義為“typedefint(CMyClass::*FUNC)(int);”。(2)函數指針數組本身是數組類型,因此在定義時如果沒有初始化,就必須指定數組大小,在本題中因為指針數組包含的指針變量需要指向四種算數運算,因此定義指針數組大小為4,即第2個標識下應改為“FUNCfunc[4];”。(3)func是指針數組,因此訪問的時候需要有指針運算符“*”,第3個標識下應改成“return(this一>*func[i])(j);”。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、使用VC6打開考生文件夾下的源程序文件modi2.cpp。請完成函數fun(char*data),此函數的功能是,找出字符串數組中最小的ASCII值,如果有相同變量,則輸出最后一個所在的位置;如果字符串為空,則返回一1;或者不存在時也返回一1。注意:請勿改動主函數main與其他函數中的任何內容,僅在函數fun的花括號中填入所編寫的若干語句。計算數字如果第一個字母最小,則返回0。依次增加。1#include2intfun(char*data)3{45}6voidmain()7{8charStr[1024];9cout<<”請輸入一行英文字符串:\n”;10cin.getline(str,1024);iicout<<”最小的字母出現(xiàn)在距離頭部"<標準答案:intMinPos=0;//初始化最小值位置if(data==NULL)//判斷輸入字符串是否為空return一1;charMinData=data[0];//設置字符串第一個字符為最小值if(MinData==0)//判斷第一個字符是否存在return一1;for(inti=1;data[i]!=0;i++){if(data[i]<=MinData){MinData=data[i];//逐個判斷每個字母是否小于標記字符MinPos=i;//最小值位置}}returnMinPos;知識點解析:(1)該程序功能是找出字符串數組中最小的ASCII值。它的解題思路,用最小值變量標記第一個待找字符,把所有待找字符和標記字符逐個進行比較,并標記其當前最小值及其所在位置,從而找出最小值。(2)從已給部分源程序的main主函數開始入手,核心函數intfun(char*data)gO的data參數為輸入的字符串數組,其中MinPos為最小值位置。解題思路(1)MinPos變量首先指向字符串data的第一個字符,同時將標志位MinPos初始值賦為0。(2)然后利用for循環(huán)對每一個當前字符與MinPos標記的字符進行比較。(3)循環(huán)中將求得的最小數據data[i]賦值給MinData,并將該數據項數組標志位賦給標志位MinPos。三、綜合應用題(本題共1題,每題1.0分,共1分。)3、使用VC6打開考生文件夾下的源程序文件modi3.cpp,閱讀下列程序說明和代碼,功能如下:從屏幕輸入數字,然后由大到小插入指定的鏈中。當輸入0時,表示輸出的數據已經輸入完成,然后把數據打印到屏幕,然后釋放內存。其中定義的類并不完整,按要求完成下列操作,將類的定義補充完整。(1)在父節(jié)點的Next中保存新插入的節(jié)點的指針,請在注釋∥********1********后添加適當的語句。(2)把pNext的子節(jié)點賦給pNext本身,請在注釋//料料料料2料料料料后添加適當的語句。(3)判定P的子節(jié)點不為空,如果不為空,則打印p其中的數據到屏幕,請在注釋∥********3********后添加適當的語句。(4)用templ保存動態(tài)申請內存節(jié)點的鏈表頭,請在注釋∥********4********后添加適當的語句。注意:僅在函數指定位置添加語句,請勿改動主函數main與其他函數中的任何內容。#includeclasSTestClasS{public:TestClass(intdata=0){this一>data=data;this一>next=NULL;};intdata;TestClass*next;};voidInsert(TestClass*P,intdata){TestClass*temp=newTestClass(data);TestClass*pParent=p;TestClass*pNext=p一>next;while(pNext){if(data>pNext一>data){∥********1********temp一>next=pNext;return,}E1se{pParent=pNext;∥********2********}}if(pNext==NULL){PParent一>next=temp;return;}}voidprintf(TestClass*P){∥********3********while(){cout<next一>data<<””;P=P一>next;}cout<next;deletetempl;templ=temp2;}}voidmain(){inti=0;TestClasshead;do{intdata;cout<<“請輸入一個數字:”<>data;if(data==0)break;Insert(&head,data);}while(1);printf(&head);Delete(&head);return,}標準答案:(1)添加語句:pParent一>next:temp;(2)添加語句:pNext=pNext一>next;(3)將“while()”補充完整為:while(p一>next!=NULL)(4)將“TestClass*templ:;”補充完整為:TestClass*templ=p一>next;知識點解析:在VC環(huán)境下打開程序,根據題干給出的幾條功能要求,對程序中給出注釋下的內容逐個補全或修改。從已給定源程序的math主函數開始入手,可以看出程序通過調用類TestClass實現(xiàn)各種輸出操作。解題思路(1)題目1要求“在父節(jié)點的Next中保存新插入的節(jié)點的指針”。對于指針的操作pParent->next為pParent的子結點,在父節(jié)點的Next中保存新插入的節(jié)點的指針,即“pParent->next=temp;"。(2)題目2要求“把pNext的子節(jié)點賦給pNext本身"。pNe~->next為pNext的子結點,把pNext的子節(jié)點賦給pNext本身,即“pNext=pNext->next;”。(3)注釋∥*******3********下是判定P的子節(jié)點不為空。P的子節(jié)點是p->next。程序中的“while()”缺乏P的子節(jié)點不為空的判斷條件,所以修改為“while(p.>next!=NULL)”。(4)題目4要求“用tempi保存動態(tài)申請內存節(jié)點的鏈表頭”。P為鏈表,p->next為鏈表頭。程序中的語句“TestClass*templ=;”中templ沒有被賦值,所以修改為“TestClass*templ=p->next;”。國家二級C++機試(操作題)模擬試卷第8套一、基本操作題(本題共1題,每題1.0分,共1分。)1、請打開考生文件夾下的解決方案文件proj1,程序中位于每個“//ERROR****found****”之后的一行語句有錯誤,請加以改正。改正后程序的輸出結果應為:Name:SmithAge:21ID:99999CourseNum:12Record:970注意:只修改每個“//ERROR****found****”下的那一行,不要改動程序中的其他內容。#include<iostream>usingnamespacestd;classStudentInfo{protected://ERROR*******found*******charName;intAge;intID;intCourseNum;floatRecord;public:StudentInfo(char*name,intAge,intID,intcourseNum,floatrecord);//ERROR*******found*******VOid~StudentInfo(){}floatAVerageRecord(){returnRecord/CourseNum;}voidshow()const{cout<<"Name:"<<Name<<"Age:"<<Age<<"ID:"<<ID<<"CourSeNum:"<<CourSeNum<<"ReCOrd:"<<Re-cord<<endl;}};//ERROR*******found*******StudentInfoStudentInfo(char*Name,intAge,intID,intCourseNum,floatRecord){Name=name;Age=age;this->ID=ID;CourSeNum=courSeNum;Record=record;}intmain(){StudentInfost("Smith",21,99999,12,970);st.show();return0;}標準答案:(1)char*Name;(2)~StudentInfo(){}(3)Studentlnfo::Studentlnfo(char*name,intage,intID,intcourseNum,floatrecord)知識點解析:(1)主要考查考生對動態(tài)數組的掌握,由題目可知Name應該指向一個動態(tài)數組,而不是一個有效char型字符,因此要定義成char型指針。(2)主要考查考生對析構函數的掌握,析構函數不需要函數返回類型,應把void去掉。(3)主要考查考生對構造函數定義的掌握,構造函數也要使用作用域符號“::”。二、簡單應用題(本題共1題,每題1.0分,共1分。)2、請打開考生文件夾下的解決方案文件proj2,其中有矩陣基類MatrixBase、矩陣類Matrix和單位陣UnitMatrix的定義,還有main函數的定義。請在橫線處填寫適當的代碼并刪除橫線,以實現(xiàn)上述類定義。此程序的正確輸出結果應為:123452345634567100000010000001000000100000010000001注意:只能在橫線處填寫適當的代碼,不要改動程序中的其他內容,也不要刪除或移動“//****found****”。#include<iostream>usingnamespacestd;//矩陣基礎類,一個抽象類classMatrixBase{introws,cols;public:MatrixBase(introws,intcols):rows(rows),cols(cols){)intgetRows()const{returnroows}//矩陣行數intgetC
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 化妝品前臺工作總結
- 家電行業(yè)助理的崗位職責
- 藥房職位工作總結
- 安徽省阜陽市2023~2024學年九年級上學期期末質量檢測化學試題
- 鐵路行業(yè)安全管理工作總結
- 工藝制造行業(yè)行政后勤工作總結
- 廣東省深圳市羅湖區(qū)2023-2024學年六年級上學期英語期末試卷
- 《如何提升招聘效能》課件
- 《汽車銷售整套資料》課件
- 《暴發(fā)性肝衰竭》課件
- 湘教文藝版小學五年級音樂上冊期末測試題
- 老化箱點檢表A4版本
- 略說魯迅全集的五種版本
- 2022年110接警員業(yè)務測試題庫及答案
- 中聯(lián)16T吊車參數
- DB44∕T 115-2000 中央空調循環(huán)水及循環(huán)冷卻水水質標準
- 嵌入式軟件架構設計
- 《石油天然氣地質與勘探》第3章儲集層和蓋層
- 航道整治課程設計--
- 超星爾雅學習通《科學計算與MATLAB語言》章節(jié)測試含答案
- 2022逆轉和消退動脈粥樣硬化斑塊的現(xiàn)實:來自IVUS試驗的證據(全文)
評論
0/150
提交評論