国家二级C++机试(操作题)模拟试卷2(共27题)_第1页
国家二级C++机试(操作题)模拟试卷2(共27题)_第2页
国家二级C++机试(操作题)模拟试卷2(共27题)_第3页
国家二级C++机试(操作题)模拟试卷2(共27题)_第4页
国家二级C++机试(操作题)模拟试卷2(共27题)_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

国家二级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,多个成员函数分别实现加减乘除功能。使用typedef定义了一个返回值是整型并带有一个整型参数的函数指针,并通过实例化一个容量为4的函数指针数组实现对类中定义的方法的调用。[解题思路](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)实现的功能是将数组的内容进行一次重新排序。排序的方法是:给定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的数字交换,可以用循环来实现。[解题思路](1)用循环来实现该过程,题目要求从0开始,交换N/2次,因此循环变量i的范围从0变化到N/2。(2)下标为0的元素与下标为n的元素交换,下标为1的元素与下标为n.1的元素交换,依此类推,在循环体内,用一个临时变量记录第一个元素,然后将第二个元素赋值给第一个元素,临时变量值赋给第二个元素,如此完成两个元素的交换。三、综合应用题(本题共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,为了避免混淆,所以规定类的私有成员使用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(“三角形”)的定义。请在横线处填写适当的代码并删除横线,以实现上述类定义。该程序的正确输出结果应为: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类,该类在内部维护一个动态分配的整型数组。ValArray类的复制构造函数应实现对象的深层复制。请编写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类的复制构造函数应实现对象的深层复制。由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是动态数组,size表示数组长度,因此要先给v分配空间为size,再逐个元素复制以达到对象的深层复制。国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错,请改正错误,使得程序正确执行,并且输出以下语句: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<<"最小的字母出现在距离头部"<标准答案: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循环对每一个当前字符与MinPos标记的字符进行比较。(3)循环中将求得的最小数据data[i]赋值给MinData,并将该数据项数组标志位赋给标志位MinPos。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生:丈件夹下的源程序文件modi3.cpp。学校教务处要为任课老师开发一个学生管理系统,需求如下:(1)学生的信息是要受到严密保护和限制的,包括姓名、五个英文字符的学号,以及精确到小数点后一位的一科成绩,只有任课老师可以修改,如果学生升学了,比如由本科升到研究生,原来的信息还有效,而只需添加研究生的必要信息,不过现在不必马上实现,但应当有所考虑。(2)学生的所有信息可以查看,但也只有学生自己才有这个权利。(3)学生的信息可以从文件中读取来构造信息库,需要把信息输出到屏幕以便核实,但这需要任课老师来完成。(4)老师能提供所教学生的完整信息列表,同时可按成绩高低排序。(5)为了便于学校评定奖学金,需要单独查找成绩最高的同学(一般不采用把成绩单全部排列后来选取,可能这比较耗费时间,虽然要求不太合理,但要按用户的需求操作,同时需要指出的是,如果成绩最高者有数名,需要一一列出)。(6)由于学校的机器比较老,内存严重不足,每个老师带的学生数不一样,但也不会超过50人。以上功能的程序框架已经形成,考生需要按照需求来逐个实现。(1)请在注释//********1********之后添加适当的语句,以便实现功能需求(1)。(2)请在注释//********2********处添加适当的语句,成绩单排序功能。(3)请在注释//********3********处实现奁找成绩最高学生名单。无需修改main()主函数,当得到下面的结果,该系统可能被采用。输入的学生信息:姓名学号成绩周华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()成员函数是实现按成绩高低的排序,函数结构是二重循环,采用的是选择法排序,每次在内层循环中寻找成绩最高的元素的下标,如果找到的最高成绩的元素的下标和现在的位置(外层循环变量i+1的值)不同则两者交换,故第2个标识下的判断条件为“if(index!=j)”。(3)BestScore(Student*pS[])实现查找成绩最高学生名单,即利用循环查找数组中的每个元素的成绩值,先假设第一个元素的成绩最高,然后再循环中逐个比较,如果有成绩更高的,那么将更高的成绩保存下来,搜索整个数组就能找到成绩最高的学生,即第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中的每一个字符是否为尾符,若不是尾符在循环中判断每一个字符是否为小写,若为小写,转换。所以应该修改为“while(str[i])”。(3)第3个标识下的“if(str[i]>=’a’)”语句是判断字符str[i]是否为小写字符,而现有的语句只是判断字符是否大于’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中下标为偶数位置上的字符,紧随其后重复出现一次,放在一个新串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++)//循环判断每一个字符{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区域中添加变量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(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看成是前两项之和,而f0始终代表第n一2项,n代表第n一1项。退出循环时得到的数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,用于实现各自的显示操作。程序的正确输出结果应为:****************########################请阅读程序,分析输出结果,然后根据以下要求在横线处填写适当的代码并删除横线。(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循环语句,该语句所在的函数的功能是输出字符组成的三角形。从外层循环中可以看出下标i代表行数,那么下标j就代表每一行字符的个数,因为要输出的是三角形,所以每一行的个数与该行的行数相关,即j<=i*2-1;。(2)考查for循环语句,该语句所在的函数的功能是输出字符组成的矩形。回到Rectangle类中可以知道矩形的长和宽就是类中私有成员的行数和列数,因此在这里只要要求下标i不大于行数即可。(3)考查for循环语句,该语句所在的函数的功能是输出字符组成的矩形。回到Rectangle类中可以知道矩形的长和宽就是类中私有成员的行数和列数,因此在这里只要要求下标j不大于列数即可。(4)主要考查考生对虚函数的掌握,该语句所在的函数是普通函数fun,题目要求为fun函数添加形参。从函数体中可以知道形参名为cs,那么形参的类型是什么呢?就是抽象类CharShape,因此要使用CharShape&es才可以实现题目要求输出的内容。三、综合应用题(本题共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<<”最小的字母出现在距离头部"<标准答案: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循环对每一个当前字符与MinPos标记的字符进行比较。(3)循环中将求得的最小数据data[i]赋值给MinData,并将该数据项数组标志位赋给标志位MinPos。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp,阅读下列程序说明和代码,功能如下:从屏幕输入数字,然后由大到小插入指定的链中。当输入0时,表示输出的数据已经输入完成,然后把数据打印到屏幕,然后释放内存。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)在父节点的Next中保存新插入的节点的指针,请在注释∥********1********后添加适当的语句。(2)把pNext的子节点赋给pNext本身,请在注释//料料料料2料料料料后添加适当的语句。(3)判定P的子节点不为空,如果不为空,则打印p其中的数据到屏幕,请在注释∥********3********后添加适当的语句。(4)用templ保存动态申请内存节点的链表头,请在注释∥********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环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已给定源程序的math主函数开始入手,可以看出程序通过调用类TestClass实现各种输出操作。解题思路(1)题目1要求“在父节点的Next中保存新插入的节点的指针”。对于指针的操作pParent->next为pParent的子结点,在父节点的Next中保存新插入的节点的指针,即“pParent->next=temp;"。(2)题目2要求“把pNext的子节点赋给pNext本身"。pNe~->next为pNext的子结点,把pNext的子节点赋给pNext本身,即“pNext=pNext->next;”。(3)注释∥*******3********下是判定P的子节点不为空。P的子节点是p->next。程序中的“while()”缺乏P的子节点不为空的判断条件,所以修改为“while(p.>next!=NULL)”。(4)题目4要求“用tempi保存动态申请内存节点的链表头”。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)主要考查考生对动态数组的掌握,由题目可知Name应该指向一个动态数组,而不是一个有效char型字符,因此要定义成char型指针。(2)主要考查考生对析构函数的掌握,析构函数不需要函数返回类型,应把void去掉。(3)主要考查考生对构造函数定义的掌握,构造函数也要使用作用域符号“::”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请打开考生文件夹下的解决方案文件proj2,其中有矩阵基类MatrixBase、矩阵类Matrix和单位阵UnitMatrix的定义,还有main函数的定义。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为: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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论