![国家二级C++机试(操作题)模拟试卷13(共26题)_第1页](http://file4.renrendoc.com/view14/M07/10/1F/wKhkGWbCjjeAW-TaAAMELckzxVA322.jpg)
![国家二级C++机试(操作题)模拟试卷13(共26题)_第2页](http://file4.renrendoc.com/view14/M07/10/1F/wKhkGWbCjjeAW-TaAAMELckzxVA3222.jpg)
![国家二级C++机试(操作题)模拟试卷13(共26题)_第3页](http://file4.renrendoc.com/view14/M07/10/1F/wKhkGWbCjjeAW-TaAAMELckzxVA3223.jpg)
![国家二级C++机试(操作题)模拟试卷13(共26题)_第4页](http://file4.renrendoc.com/view14/M07/10/1F/wKhkGWbCjjeAW-TaAAMELckzxVA3224.jpg)
![国家二级C++机试(操作题)模拟试卷13(共26题)_第5页](http://file4.renrendoc.com/view14/M07/10/1F/wKhkGWbCjjeAW-TaAAMELckzxVA3225.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级C++机试(操作题)模拟试卷13(共9套)(共26题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错,请改正其中的错误,使得程序正常运行,并使程序输出的结果为:initTestClassdelTestClass注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//********error********的下面。1#include2classTeStClass3{4//********error********56//********error********7intTestClass()fcout<<"initTestClass"<标准答案:(1)添加语句:plablic:(2)Testclass(){COl]t<<"intTestclass"<知识点解析:本题的功能是分别利用构造函数和析构函数中的输出语句,输出“initTestClass”和“delTestClass”字符串。从已定源程序的main主函数开始入手,可以看出程序首先通过类TestClass中的TestClass构造函数实现各种输出。[解题思路](1)打开modil.cpp,调试程序,显示错误提示为第一标识下“modil.cpp(13):errorC2248:’TestClass::TestClass’:cannotaccessprivate:member。declaredinclass’TestClass’”,构造函数由于是私有的,无法获得,所以应该定义为public型,即第1个标识下添加“public:”。(2)构造函数首部的一般形式为:构造函数名(形参列表),构造函数没有返回值,所以定义构造函数时不需要声明类型,所以“intTestClass()fcout<<"initTestClass"<二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,实现函数sort(intA[],intn),用选择排序法把数组从大到小排序。提示:选择排序法的思想是:(1)反复从还未排好的那部分线性表中选择出关键字最小的节点;(2)按照从线性表中选择出的顺序排列节点,重新组成线性表;(3)直到未排序的那部分为空,则重新形成的线性表是一个有序的线性表。补充函数sort(intA[],intn),实现选择排序。注意:请勿改动主函数。1#include2#defineN103voidsort(intA[N],intn)4{56}7intmain()8{9intA[N]={1,2,10,5,7,19,34,78,-3,8};10sort(A,10);Iifor(inti=0;i标准答案:1inti,j;2for(i=0;iA[j+1])//如果前面的数比后面的大则进行交换7{8intt=A[j];//做交换9A[j]=A[j+1];10A[j+1]=t;11}12}13}知识点解析:选择法的思路是:将相邻两个数比较,将小的调到前头。这样下标从0到n-1的数与其后面相邻的数交换,可以把最大的数交换到数组的末端。进行n次下标从0到n-1的交换,则数组则会变成有序的,而且是由小到大的顺序。[解题思路](1)数组A[N]中有n个数,进行n-1趟比较,在每一趟比较中两两比较的次数逐渐减少,比如若有6个数9,8,5,4,2,0。第一次将8和9对调,第二次将第2和第3个数(9和5)对调,……,如此共进行5次,得到8-5-4-2-0-9的顺序,可以看到:最大的数9已“沉底”,成为最下面一个数,而小的数“上升”。最小的数0已向上“浮起”一个位置。经第一趟(共5次)后,已得到最大的数。然后进行第二趟比较,对余下的前面5个数按上法进行比较,经过4次比较,得到次大的数8。如此进行下去。可以推知,6个数要比较5趟。在第一趟中要进行两两比较5次,在第二趟中比4次,……第5趟比1次。因此设置两层循环,外层循环变量i从0变化大到n-1,内层循环变量j从0到n-j,在内层循环体内,比较相邻两数,如果前面比后面的大则交换。(2)在内层循环体内,如果前面的元素比后面的元素大,则用一个临时变量记录前面的第i个元素,然后将第i+1个元素赋值给第j个元素,临时变量值赋给第j+1个元素,如此完成两个元素的交换。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成列操作,将类的定义补充完整,实现以下功能:(1)完成CBook类构造函数,对整型变量ID和作者Author进行赋值,请在注释//********1********后添加适当的语句。(2)完成类CBooks的析构函数,释放申请的内存,请在注释//********2********后添加适当的语句。(3)完成类CBooks的AddBookMember函数,请在注释//********3********后添加适当的语句。(4)完成CBooks类,用于由书的ID检索到作者的函数char*GetBookAuthor(intnlD),请在注释//********4********后添加适当的语句。(5)程序的输出结果为:TomHarry注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。1#include2#include3classCBook4{5public:6intID;7charAuthor[32];8public:9CBook(intID_Number,char*Author_Name)10{11this->ID=ID_Number;12//********1********1314}15};16classCBooks17{18private:19C1assNode20{21public:22Node*next;23CBook*book;24}*m_pBook;25public:26CBooks()27{28m_pBook=NULL;29}30~CBooks()31{32//********2********33while()34{35Node*p=m_pBook->next;36deletem_pBook->book;37deletem_pBook;38m_pBook=p;39}40}41intAddBookMenber(intnID,char*Author)42{43Node*p=m_pBook;44Node*q=NULL;45//*********3********46while()47{48if(nlD==p->book->ID)49{50return0;5152q=p;53p=p->next;54}55if(p==NULL)56{57p=newNode;58p->next=NULL;59p->book=newCBook(nID,Author);60}61if(q==NULL)62{63m_pBook=p;64}65else66{67q->next=P;68}69return1;70}71Char*GetBookAuthor(intnID)72{73Node*p=m_pBook;74//********4********75while()76{77if(P->book->ID==nID)78{79returnP->book->Author;80}81p=p->next;82}83return0;84}85};86intmain()87{88CBooksbooksl;89books1.AddBookMenber(1,"Tom");90books1.AddBookMenber(3,"Lee");91books1.AddBookMenber(4,"Lily");92books1.AddBookMenber(5,"Harry");93cout<标准答案:(1)添加语句:strcpy(Author,AuthorName);(2)将“while()”补充完整为:while(mpBook!=NULL)(3)将“while()”补充完整为:while(p!=NULL)(4)将“while()”补充完整为:while(p!=NULL)知识点解析:程序当中定义了CBook类和CBooks类,CBook类描述书的基本信息,包含ID和Author数组两个成员变量,CBooks类描述由Node对象组成的链表,每个Node对象包含指向CBook对象的指针和下一个Node对象的指针。第一个Node对象的next指针指向第二个Node对象,同样第二个Node对象的next指针指向第三个Node对象,如此形成一个链表结构。成员函数AddBookMenber(intnID,char*Author)实现向链表中添加一个Node节点,成员函数GetBookAuthor(intnlD)返回某个Node节点的CBook对象的ID为nlD的CBook对象的Author数组名。[解题思路](1)第1个标识下完成CBook类的构造函数,对成员变量整ID和作者Author进行初始化,因此第1个标识下应添加“strcpy(Author,AuthorName);”,利用strcpy函数,将Author_Name数组内容拷贝到Author数组中。(2)~CBooksO为CBooks类的析构函数,由于CBooks类在运行过程中会动态申请内存空间,因此在析构函数中必须将这些内存释放。CBooks类是由Node对象组成的链表,因此可利用循环逐个搜索这个链表,逐个释放内存空间,故第2个标识下应改为while(mpBook!=NULL),在while循环体不断的搜索下一个节点直到mpBook为空为止,删除所以节点。(3)AddBookMenber(intnlD,char*Author)函数在链表的最后添加一个新的节点,因此必须先找到最后一个节点,同样利用循环寻找最后一个节点,故第3个标识下为while(p!=NULL)。(4)GetBookAuthor(intnlD)返回某个Node节点的CBook对象的1D为nlD的CBook对象的Author数组名,同样需要利用循环来查找各个节点CBook对象的ID是否为nlD,故第4个标识下应为while(p!=NULL)。国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,此工程中含有一个源程序文件proj1.cpp。其中位于每个注释“//ERROR****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:Constructorcalled.Thevalueis10Copyconstructorcalled.Thevalueis10Destructorcalled.Destructorcalled.注意:只修改注释“//ERROR****found****”的下一行语句,不要改动程序中的其他内容。//proj1.cpp#include<iostream>usingnamespacestd;classMyClass{public://ERROR*******found*******MyClass(inti){value=i;cout<<"Constructorcalled."<<end1;}//ERROR*******found*******MyClass(constMyClassP){value=P.value;cout<<"Copyconstructorcalled."<<end1;}voidPrint(){cout<<"Thevalueis"<<value<<end1;)//ERROR*******found*******void~MyClass(){cout<<"Destructorcalled."<<end1;}private:intvalue;},intmain(){MyClassobj1;obj1.Print();MyClasSobj2(obj1);obj2.Print();return0;}标准答案:(1)MyClass(inti=10)(2)MyClass(constMyClass&p)(3)~MyClass()知识点解析:(1)考查构造函数参数默认值,题目要求输出语句:Thevalueis10,从主函数中可以看出,obj1并没有初始化,但是obj1调用Print()函数时它的值为10,由此可知构造函数的形参有默认值,且值为10,因此得出语句MyClass(inti=10)。(2)主要考查考生对复制构造函数的掌握,复制构造函数的形参都为引用,同时为了不改变形参的值要加上const,因此得出语句MyClass(constMyClass&p)。(3)主要考查考生对析构函数的掌握,析构函数和构造函数一样,前面不能添加任何类型,要把void去掉。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,其中有矩阵基类MatrixBase、矩阵类Matrix和单位阵UnitMatrix的定义,还有main函数的定义。请在横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:123452345634567100000010000001000000100000010000001注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#include<iostream>usingnamespacestd;//矩阵基础类,一个抽象类classMatrixBase{introwsrcols;public:MatrixBase(introws,intcols):rows(rows),cols(cols){}intgetRows()const{returnrows;}//矩阵行数intgetCols()const{returncols;}//矩阵列数virtualdoublegetElement(intr,intc)const=0;//取第i个元素的值voidshow()const{//分行显示矩阵中所有元素for(inti=0;i<rows;i++){cout<<end1;for(intj=0;j<cols;j++)//**********found**********cout<<_______<<"";}}};//矩阵类classMatrix:publicMatrix--Base{double*val;public://**********found**********Matrix(introws,intcols,doublem[]=NULL):_______{//**********found**********val=_______;for(inti=0;i<rows*cols;i++)val[i]=(m==NULL?0.0:m[i]);}~Matrix(){delete[]val;}doublegetElement(intr,intc)const{returnval[r*getCols()+c];)};//单位阵(主对角线元素都是1,其余元素都是0的方阵)类classUnitMatrix:publicMatrixBase(public:UnitMatrix(introws):MatrixBase(rows,rows){}//单位阵行数列数相同doublegetElement(intr,intc)const{//**********found**********if(_______)return1.0;return0.0;}};intmain()fMatrixBase*m;doubled[][5]={1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7}};m=newMatrix(3,5,(double*)d);m->show();deletem;cout<<end1;m=newUnitMatrix(6);m->show();deletem;return0;}标准答案:(1)getElement(i,j)(2)MatrixBase(rows,cols)(3)newdouble[rows*cols](4)r==c知识点解析:(1)主要考查考生对纯虚函数的掌握,函数功能是分行显示矩阵中所有元素。因此在这里要输出行为i、列为j的元素,使用纯虚函数getElement(i,j)实现,输出语句为cout<<getElement(i,j)<<"";。(2)主要考查考生对派生类的构造函数的掌握,派生类的构造函数使用成员列表初始化法,先对基类初始化。(3)主要考查考生对动态数组的掌握,val是double型指针,要给val赋值,就要先给它分配空间,应使用new来完成。(4)主要考查考生对成员函数的掌握,因为要输出单位矩阵,只有满足条件r==c的元素为1.0,所以填写语句if(r==c)return1.0;。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明的DataList类,是一个用于表示数据表的类。DataList的重载运算符函数operator+,其功能是求当前数据表与另一个相同长度的数据表之和;即它返回一个数据表,其每个元素等于相应两个数据表对应元素之和。请编写这个operator+函数。程序的正确输出应该是:两个数据表:1,2,3,4,5,63,4,5,6,7,8两个数据表之和:4,6,8,10,12,14要求:补充编制的内容写在“//********333********”与“//********666********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//DataList.h#include<iostream>usingnamespacestd;classDataList{//数据表类intlen;double*d;public:DataList(intlen,doubledata[]=NULL);DataList(DataList&data);intlength()const{returnlen;}doublegetElement(inti)const{returnd[i];)DataListoperator+(constDataList&list)const;//两个数据表求和voidshow()const;//显示数据表};voidwriteToFile(char*,constDataList&);//main.cpp#include"DataList.h"DataList∷DataList(intlen,doubledata[]):len(1en){d=newdouble[len];for(inti=0;i<len;i++)d[i]=(data==NULL?0.0:data[i]);}DataList∷DataList(DataList&data):fen(data.fen){d=newdouble[len];for(inti=0;i<len;i++)d[i]=data.d[i];}DataListDataList∷operator+(constDataList&list)const{//两个数据表求和double*dd=newdouble[list.1ength()];//********333********//********666********returnDataList(list.length(),dd);}voidDataList∷show()const{//显示数据表for(inti=0;i<len-1;i++)cout<<d[i]<<",";cout<<d[len-1]<<end1;}intmain(){doublesl[]=(1,2,3,4,5,6};doubles2[]={3,4,5,6,7,8);DataListlistl(6,s1),list2(6,s2);//定义两个数据表对象cout<<"两个数据表:"<<end1;list1.show();list2.show();cout<<end1<<"两个数据表之和:"<<end1;(list1+list2).show();writeToFile("",listl+list2);return0;}标准答案:for(inti=0;i<len;++i)//遍历对象list中的数组和d数组,把对应的值相加后放到数组dd中。dd[i]=d[i]+list.d[i];知识点解析:暂无解析国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错误,请改正程序中的错误。本题的功能是:从键盘输入字符串S,然后输出字符串s,中的字符个数。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//********error********的下面。#include<iostream>intmain(){//********error********cout<<"pleaseinputastring:"<<endl;//********error********namespacestd;chars[256];cin.getline(s,256);cout<<strlen(S)<<endl;return0;}标准答案:(1)std::cout<<"pleaseinputastring:"<<std::endl;(2)usingnamespacestd;知识点解析:(1)第1个标识下实现在屏幕上输出“pleaseinputastring:”提示语句。在程序中用到C++标准库时,要使用std标准命名空间进行限定。cout为标准库函数,所以要声明cout是在命名空间std中定义的流对象,即第1个标识下的“std::cout<<"pleaseinputastring:"<<std::endl;”。(2)第2个标识下的“namespacestd;”‘语句是使用了标准命名空间std,正确语句应该是“usingnamespacestd;”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。请完成函数fun(char*data),此函数的功能是,找出字符串数组中最小的ASCII值,如果有相同变量,则输出最后一个所在的位置;如果字符串为空,则返回-1;或者不存在时也返回-1。注意:请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。计算数字如果第一个字母最小,则返回0。依次增加。#include<iostream.h>intfun(char*data){}voidmain(){charstr[1024];cout<<"请输入一行英文字符串:\n";cin.getline(str,1024);cout<<"最小的字母出现在距离头部"<<fun(str)<<"个字母处"<<endl;}标准答案: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。请完成以下部分,实现在屏幕上输出为:TestClass3TestClass2这个程序需要修改的部分,请按照以下部分实现。(1)类TestClass0不能被实例化,请定义一个纯虚函数print,在注释//********1********后添加适当的语句。(2)类TestClass1私有虚继承类TestClass0,请在注释//********2********后添加适当的语句。(3)类TestClass2公有继承类TestClass0,请在注释//********3********后添加适当的语句。(4)类TestClass3公有继承类TestClass2与TestClass1,请在注释//********4********后添加适当的语句。注意:仅在函数指定位置添加语句,请勿改动主函数main与其他函数中的任何内容。#include<ioStream.h>C1assTestClass0{//********1********};//********2********classTestClass1:{public:voidprint(){cout<<"TestClass1"<<endl;}};//********3********classTestClass2:{public:voidprint(){cout<<"TestClass2"<<endl;}};//********4********ClassTestClass3:{public:voidprint(){cout<<"TestClass3"<<endl;}};voidmain(){TestClass3c3;TestClass2c2;c3.print();c2.print();return;}标准答案:(1)添加语句:virtualvoidprint()=0;(2)将“classTestClass1:”补充完整为:classTestClass1:virtualprivateTestClass0(3)将“classTestClass2:”补充完整为:classTestClass2:publicTestClass0(4)将“classTestClass3:”补充完整为:classTestClass3:publicTestClass2,publicTestClass1知识点解析:(1)题目1要求“请定义一个纯虚函数print”。在C++中,虚函数在基类中用virtual声明成员函数为虚函数。纯虚函数是在声明虚函数时被“初始化”为0的函数,即“virtualvoidprint()=0;”。(12)题目2要求“类TestClass1私有虚继承类TestClass0”。在C++中声明一个派生类时将基类的继承方式指定为private的,称为私有继承。同(1),声明TestClass1虚继承类“:virtualTestClass0”,题目要求为私有,即“classTestClass1:virtualprivateTestClass0”。(3)题目3要求“类TestClass2公有继承类TestClass0。”同(2),公有继承是在定义一个派生类时将基类的继承方式指定为public的,称为公用继承。所以这里补全“classTestClass2:publicTestClass0”。(4)题目4要求“类TestClass3公有继承类TestClass2与TestClass1。”同(3),所以这里补全“classTestClass3:publicTestClass2,publicTestClass1”。国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为:i=5i=10i=15i=20注意:错误的语句在//********error********的下面,修改该语句即可。1#include2clasSCMyClasS3{4publiC:5template6voidfunc(Tx,Ty)7{8/********error********/9Ti=0;10if(x>=i)11{12i=i+x;13}14else15{16i=i+y,17}18cout<<"i="<标准答案:(1)staticTi=0;(2)t.func((char)68,(char)1);(3)t.func((int)i,1);知识点解析:程序当中定义了类CMyClass,含有一个成员函数模板func(Tx,Ty),在函数内定义一个变量i,如果参数X大于i,则i和X的和赋值给i,否则i和y的和赋值给i。[解题思路](1)在主函数内定义了类CMyClass对象t,第一次调用func0函数传入整型参数5和0,此时T表示整型(int),5>0,此时i和X的和为5,故屏幕输出i的值为i=5;第二次调用func0函数,传入参数为char型数据,此时T表示字符型(char),chari=0,68>0,故i为68,屏幕输出ASCII码为68的字符,即i=D;第三次调用func()函数,传入整型数据10和l,此时T表示整型(int),输出为i=15,显然如果i为一般的局部变量,输出应该是i=10(10>0,i=10+0=10),这里i记忆了第一次调用funcO函数后的值(i=5,10>5,10+5=15),故i为静态变量,因此第1个标识下应改为“staticTi=0:”。(2)func()函数两个参数类型一致,从输出结果看,第二次调用func()传入的参数均是char型的,故第2个标识下应改为“t.func((char)68,(char)1);”,(char)68和(char)1含义是做强制类型转换,将整型转换成char型。(3)第3个标识下传入参数l为整型,局部变量i为float型,由输出结果可知,第四次调用func0函数也改变了静态变量i(staticinti)的值,故传入的参数均为整型,因第3个标识下的局部变量i(float型)也要强制类型转换,故第3个标识下应改为“t.func((int)i,1);”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp,阅读下列函数说明和代码,补充空出的代码。函数sum(intn)计算在n范围内,能被7和11整除的所有整数的和(包括n在内)。注意:不能修改程序的其他部分,只能补充sum()函数。1#include2doublesum(intn)3{45}6voidmain()7{8cout<标准答案:1intresult=0;2for(inti=11;i<=n;i++)3{4if((i%7==0)&&(i%11==0))5{6result+=i;7}8}9returnresult;知识点解析:函数sum(intn)的功能是实现计算在n范围内,能被7和11整除的所有整数的和(包括n在内),可采用循环的方式从11开始到n逐个寻找能被7和11整除的数,如果能同时被7和1l整除则加到累加变量中。[解题思路](1)利用循环查找能所有小于等于n的能被7和ll整除的数,循环变量i从最小值11开始,到n结束,即11<=i<=n。(2)在函数中定义累加变量result用来保存求和结果,在循环体内,逐个判断每个i是否能被7和11整除,即(i%7==0)和(i%11==0)都满足的话,说明i能同时被7和11整除,将该值加到result上,循环结束返回result。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp,其中定义了用于表示学生学号的类CStudentlD,但类CStudentlD的定义并不完整。运行结果为:学生的学号为:200805学生名为:李伟删除学生学号为:200805请按要求完成下列操作,将类CStudentID的定义补充完成:(1)定义classCStudentID类的私有数据成员IDvalue表示学生的学号,为long型的数据。请在注释//********1********之后添加适当的语句。(2)完成默认构造函数CStudentlD的定义,使CStudentID对象的默认值为:id=0,并把学生的学号赋给IDvalue,并输出“赋给学生的学号:”及学号。请在注释//********2********之后添加适当的语句。(3)完成默认析构函数CStudentlD的定义,使CStudentID析构时输出“删除学号:”及学号。请在注释//********3********之后添加适当的语句。(4)完成默认构造函数CStudentlnfo的定义。对应两个默认参数:要求定义charstName[],其默认值为“noname”,定义longstID,其默认值设为0,并使它们赋值给相应的类数据成员。请在注释//********4********之后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。1#include2#include3C1assCStudentID4{5//********1********定义私有数据成员67public:8//********2********定义默认构造函数910{11IDvalue=id;12cout<<"学生的学号为:"<标准答案:(1)添加语句:longIDvalue;(2)添加语句:CStudentID(10ngid=0)(3)添加语句:~CStudentID()(4)添加语句:CStudentInfo(charstName[]="noname",longstID=O):id(stID)知识点解析:程序中定义了两个类CStudentID和CStudentlnfo,其中类CStudentID包含学生的学号信息的成员变量,有自定义构造函数和默认析构函数,而类CStudentlnfo不仅包含学生的学号还包括对应的姓名信息的成员变量,还实现了自定义构造函数。[解题思路](1)第1个标识下完成CStudentID类的私有数据成员IDvalue的定义,为long型的数据,因此第1个标识下应添加“longI:Dvalue;”。(2)构造函数完成类成员变量的初始化,构造函数名和类名一致,该构造函数带有一个参数id,其默认值为id=0,因此第2个标识下应添加“CStudentlD(10ng。id=0)”。(3)析构函数也和类名一致,并且在前面加“~”以和构造函数区分,析构函数没有参数,故第3个标识下应添加“~CStudentID()”。(4)CStudentlnfo包含的学生学号信息保存在类CStudentID的实例中,可通过调用类CSmdentlD的自定义构造函数初始化,第4个标识下应添加“CStudentlnfo(charstName[]=”noname",longstID=0):id(stlD)”。国家二级C++机试(操作题)模拟试卷第5套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,但该程序运行时有错,请改正程序中的错误,使该程序的输出结果为:100注意:错误的语句在//********error********的下面,修改该语句即可。1#include2statiCintx=50;3intt=0;4int*func(intx,inty,intz)s{6t=t+x+y+Z;7//********error********8returnt;9};10voidmain()11{12inty=30;13intx=10:。14intz=20;15//********error********16X=X;17//********error********18cout<标准答案:(1)return&t;(2)x=::x;(3)Cout<<*fune(x,y,z)<知识点解析:程序当中定义了全局静态变量x,主函数内又定义了一个和静态变量x重名的变量x,在使用时需要注意区分这两个变量。函数func(intx,inty,intz)返回一个整型数据指针,功能是将参数x,y,z三者求和,通过指针返回运算结果。[解题思路](1)由审题分析可知,函数func(intx,inty,intz)返回的是整型数据指针,而第1个标识下的retumt表示返回一个整型数据,和要求的返回数据类型不匹配,应改为“return&t:”。(2)第2个标识下x=x表示局部变量x自己给自己赋值,调用func(x,y,z)函数后,返回的运算结果是30+10+20=60,与输出100不同,而全局静态变量x值为50,30+50+20=100,刚好满足条件,因此第2个标识下是将全局静态变量x的值赋给局部变量x,即第2个标识下应该为“x=::x:”,“::”表示的是引用全局变量。(3)func(x,y,z)返回一个整型数据指针,通过该指针可以得到运算结果,而cout<二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。完成函数fun(char*S,inta[]),其功能是把S中出现的数字转换成数字存储在a[]中,然后返回转换的个数。例如:S="1234abcdef567":则:a[]qb存储着1234567返回:7注意:不能修改程序的其他部分,只能修改fun()函数。1#include2intfun(char*S,inta[])3{45}6intmain()7{8inta[1024];9intlen=fun("1234abcdef567",a);10for(inti=0;i标准答案:1intJ=0;2for(inti=0;S[i]!=0;i++)//字符串内循环3{4if(S[i]>=’0’&&s[i]<=’9’)//判断字符是否为0~9的字符5{6a[j++]=S[i]一’0’;//如果为0~9的字符,转换为整型7}8}9returnj;//返回数字个数知识点解析:(1)该程序功能是把字符串中出现的数字转换成数字存储在数组中,然后返回转换的个数。其中,字符和整型的ASCII差为96,即为’0’的ASCII码值。(2)从已给部分源程序的main主函数开始入手,核心函数fun实现题目中要求的功能,其中intfun(char*s,inta[])中的S为要转换的字符串,a为存放转换为数字的数组,返回值为转换的个数。[解题思路](1)i变量用来记录转换的个数,首先初始化为0。(2)然后利用for循环对每一个当前字符进行判断是否为数字字符。(3)如果为数字字符,就将其减去字符‘0’,即实现字符和整型的转换。并且,将i的变量值加1。三、综合应用题(本题共1题,每题1.0分,共1分。)3、用VC6打开考生文件夹下的源程序文件modi3.cpp,这个程序完成输出到屏幕一些特定的信息,但工程有错误或者不完整,请完成以下功能:(1)初始化mNum2的值为j,请在注释//********1********后添加适当的语句。(2)补充全局函数fun()使之能够调用类TestClass的成员变量,请在注释//********2********后添加适当的语句。(3)初始化静态变量,请在注释//********3********后添加适当的语句。(4)修改注释//********4********后的语句。使得程序输出以下内容:m_Num1=1m_Num2=2m_Num3=lm_Num1=4m_Num2=2m_Num3=1注意:仅在函数指定位置添加语句,请勿改动主函数main与其他函数中的任何内容。1#include2ClaSSTestClasS3{4publiC:s//********1********67TestClasS(inti,intJ)8{9m_Numl=i;i0m_Num3+=i;11}12VOidPrint()13{14cout<<"m_Numl="<标准答案:(1)添加语句:TestClasS(inti,intJ):mNum2(j)(2)添加语句:friendvoidfun();(3)添加语句:intTestClass::m_Num3:0;(4)将“Num.Add();”补充完整为:Num.Add(5);知识点解析:在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已给定源程序的main主函数开始入手,可以看出程序通过调用类TestClass和函数fun实现各种输出操作。[解题思路](1)根据“constintmNum2;”语句知道m_Num2为类TestClass中的私有数据,另外,C++定义构造函数的初始化数据成员的方法中可以在原有函数末尾加一个冒号,然后列出参数的初始化表实现,即“TestClass(inti,intj):m_Num2(j)”。(2)在C++中,如果在本类以外的其他地方定义了一个函数,在类体中是用friend对该函数进行声明的,此函数称为本类的友元函数,并且能够调用本类中的成员变量。程序中fun()在类TestClass以外的地方定义的,为了实现其对类TestClass中成员变量的调用,在类TestClass中补全“friendvoidfun();”,即声明胁()为类TestClass的友元函数。(3)在C++中,初始化类中数据成员的格式可以是“<类型>类名class::参数=”,其中<类型>为要初始化参数的类型,“::”为作用域符号,说明参数是class中的参数,所以这里补全“intTestClass::m_Num3=0;”。(4)函数fun()中“Num.Add();”语句应该是调用类“TestClass”中的成员函数“voidAdd(inti)”。其定义中存在参数inti,所以注释下修改的语句缺少参数。主函数首先调用“Num.Print();”,即实现题目中输出的前三条语句,而“fun();”语句实现后面三条语句的输出,即“mNum3=7”才是调用Num.Add的输出结果,即“mNum3+=i;”的计算结果。“TestClassNum(1,2);”中将i的值初始化为1,“mNum3”的值在上一次“Num.Print();”调用中为1,如果计算结果为7,那么Add(inti)中i的初始化值为5,即“Num.Add(5);”。国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错,请改正其中的错误,使得程序正常运行,并使程序输出的结果为:Hello注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在∥********error********的下面。{}includevoidmain()f∥********error********typedefBOOLbool;∥********error********BOOLa=FALSE;inti=0X80000000;∥********error********a=!i;if(a){cout<<“Hello”<标准答案:(1)typedefboolBOOL;(2)BOOLa=false;(3)a=(i!=0);知识点解析:程序要求输出Hello。本题程序中不存在复杂的结构,从己定源程序的main主函数依次处理错误提示下的语句即可。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。请完成函数fun(inti),实现以下功能:当i等于5时,则打印如下内容。###############注意:不能修改程序的其他部分,只能修改fun()函数。#includevoidfun(intn){}voidmain(){intn;cout<<“请输入打印的行数:”<>n;if(n<1){cout<<“输入的行数必须大于0”<标准答案:inti;for(i=0;i知识点解析:(1)该程序功能是打印题目中要求的#字形状。它的解题思路,在不显示#字地方,用空格占位。(2)从己给部分源程序的main主函数开始入手,核心函数voidfun(intn)中的n参数为输入的要打印的行数。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开源程序文件modi3.cpp。其中类TcstClass用于把文件输出到屏幕,然后进行文件的分割。分割的方法如下:第一个文件的大小是文件的前一半,另外一个文件的大小是剩余部分。此程序将int.txt文件中的内容输出到屏幕,并且将文件按照以上方式分割,存于文件out1.txt和out2.txt中。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)从输入文件中获得一个字符,并判断是否到文件结尾,如果到文件结尾,则退出循环。请在注释∥********1********后添加适当的语句。(2)把获得的输入文件的内容存储到buf中,并且用len记录下文件的长度。请在注释∥********2********后添加适当的语句。(3)将输入文件的后一半内容存储在第二个文件中,请在注释∥********3********后添加适当的语句。(4)使用文件流对象打开输入文件in.txt,请在注释∥********4********后添加适当的语句。注意:仅在函数指定位置添加语句,请勿改动主函数main与其他函数中的任何内容。#include#include#includeclassTestClass{public:TestClaSS(char*fileName){len=0;fStreaminfile;infile.open(fileName,ios::in);charch;∥********1********while(){cout<标准答案:(1)将“while()”完整为:while(infile.get(ch))(2)添加语句:buf[1en++]=ch;(3)添加语句:outfile2<知识点解析:在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已给定源程序的main主函数开始入手,可以看出程序通过调用类TcstClass及其成员函数实现各种输出操作。国家二级C++机试(操作题)模拟试卷第7套一、简单应用题(本题共1题,每题1.0分,共1分。)1、给定程序NODll.C中,fun函数的功能是:删除b所指数组中小于10的数据。主函数中输出删除后数组中余下的数据。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include#include#defineN20intfun(int*b){/*********found*********/intt[N],i,numfor(i=0;i=10)/*********found*********/t[++num]=b[i];/*********found*********/for(i=0;i标准答案:(1)intt[N],i,num:0;(2)t[num++]=b[i];或{t[num]=b[i];num++;}(3)for(i=0;i知识点解析:要删除数组b中小于10的数,应依次取出数组数组b中的元素与10进行比较,若不小于10,则将其存入数组t中,遍历完成后,数组t中的元素即为所求,再将数组t中的元素保存到数组b中即可。(1)元素。num存放不小于10的元素的个数,应将其初始化为0。(2)将数组b中不小于10的元素存入数组t中,同时使数组t的下标加1。(3)语法错误,没有nun这个变量,应该为num。二、综合应用题(本题共1题,每题1.0分,共1分。)2、编写函数fun,其功能是:将两个两位数的正整数a、b合并成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在C数的十位和千位上。例如,当a=45,b=12时,调用该函数后c=2514。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容.仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#includevoidfun(inta,intb,long*c){}main(){inta,b;longc;printf("Inputa,b:");scarlf("%d%d",&a,&b);fun(a,b,&c);printf("Theresultis:%1d\n",c);}标准答案:voidfun(inta,intb,long*c){/*b%10获取b的个位,a/10获取a的十位,a%10获取a的个位,b/10获取b的十位*/*c=a/10+(b/10)*10+(a%10)*100+(b%10)*1000;}知识点解析:本题的主要问题是如何取出a和b的个位数和十位数,取出后如何表示成c中相应的位数。由于a和b都是只有两位的整数,所以分别对它们除10可得到它们的十位数,分别用10对它们求余可得到它们的个位数。得到后对应乘以1000、100、10、l,就可得到c的千位数、百位数、十位数和个位数。注意使用c时要进行指针运算。国家二级C++机试(操作题)模拟试卷第8套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,其中在编辑窗口内显示的主程序文件中定义有类ABC和主函数main。程序文本中位于每行“//ERROR****found****”之后的一行语句有错误,请加以改正。改正后程序的输出结果应该是:2123注意:只修改每个“//ERROR****found****”下面的一行,不要改动程序中的其他任何内容。#include<iostream>usingnamespacestd;classABC(public://ERROR*******found*******ABC(){a=0;b=0;c=0;}ABC(intaa,intbb,intcc);voidSetab(){++a,++b;}intSum(){returna+b+c;}private:inta,b;constintc;};ABC∷ABC(intaa,intbb,intcc):c(cc){a=aa;b=bb;}intmain(){ABCx(1,2,3),y(4,5,6);ABCz,*w=&z;w->Setab();//ERROR*******found*******ints1=x.Sum()+y->Sum();cout:<<s1<<";//ERROR*******found*******ints2=s1+w.Sum();cout<<s2<<end1;return0;}标准答案:(1)ABC():a(0),b(0),c(0){}(2)ints1=x.Sum()+y.Sum();(3)ints2=s1+w->Sum():知识点解析:(1)主要考查考生对构造函数的掌握情况,根据私有成员的定义:constintc;可知,c为常变量,因此构造函数必须使用成员列表初始化来给c赋初始值。(2)主要考查考生对类的指针的掌握情况,根据主函数的第一条语句:ABCx(1,2,3),y(4,5,6);可知,x和y都是ABC类,但不是指针,因此它们调用ABC类的成员函数要使用标识符“.”,而不是“->”。(3)主要考查考生对类的指针的掌握情况,根据主函数的第二条语句:ABCz,*w=&z;可知,w是ABC类的指针,指向z,因此w调用ABC类的成员函数时要使用标识符“->”,而不是“.”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,其中在编辑窗口内显示的主程序文件中定义有类Base和Derived,以及主函数main。程序文本中位于每行“//****found****”下面的一行内有一处或多处下画线标记,请在每个下画线标记处填写合适的内容,并删除下画线标记。经修改后运行程序,得到的输出应为:sum=55。注意:只在横线处填写适当的代码,不要改动程序中的其他内容。#include<iostream>usingnamespacestd;classBase{public:Base(intm1,int;m2){metal=m1;mem2=m2j}intsum(){returnmeta1+mera2;}private:intmeta1,merm2;//基类的数据成员};//派生类Derived从基类Base公有继承//**********found**********ClassDerived:_________{public://构造函数声明Derived(intm1,int:m2,intm3);//sum函数定义,要求返回mem1、mem2和mere3之和//**********found**********int:sum(){return_______+mem3;}private:intmere3;//派生类本身的数据成员};//构造函数的类外定义,要求由m1和m2分别初始化mem1和mem2,由m3初始化mem3//**********found**********_______Derived(intm1,intm2,intm3)://**********found**********_______,mem3(m3){}intmain(){Basea(4,6);Derivedb(10,15,20);intsum=a.sum()+b.sum();cout<<"sum="<<sum<<end1;return0;}标准答案:(1)publicBase(2)Base∷sum()(3)Derived∷(4)Base(m1,m2)知识点解析:(1)主要考查考生对公有继承的掌握情况,根据题目要求:派生类Derived从基类Base公有继承,因此这里使用public来公有继承。(2)主要考查考生对成员函数的掌握情况,根据题目对sum函数的要求:sum函数定义,要求返回mem1、mem2和mem3之和,因此这里直接调用基类的sum函数,再加上mem3就满足题目要求。(3)主要考查考生对构造函数的掌握情况,由于Derived的构造函数在类外定义,因此要加上类名和作用域符,即Derived∷。(4)主要考查考生对构造函数的掌握情况,因为Derived是Base类的派生类,所以其构造函数要使用成员列表初始化先给Base初始化。面加上基类名和作用域符,从而防止派生类中也有相同函数时产生的二义性。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中包含主程序文件main.cpp和用户定义的头文件Array.h,整个程序包含有类Array的定义和主函数main的定义。请把主程序文件中的Array类的成员函数Contrary()的定义补充完整,经补充后运行程序,得到的输出结果应该是:585,4,3,2,10,0,8.4,5.6,4.5,3.4,2.3,1.2注意:只允许在“********333********”和“//********666********”之间填写内容,不允许修改其他任何地方的内容。//Array.h#include<iostream>usingnamespacestd;template<classType,intm>classArray(//数组类public:Array(Typeb[],intmm){//构造函数for(inti=0;i<m;i++)if(i<mm)a[i]=b[i];elsea[i]=0;}voidContrary();//交换数组a中前后位置对称的元素的值intLength()const{returnm;}//返回数组长度Typeoperator[](inti)const{//下标运算符重载为成员函数if(i<0‖i>=m){cout<<"下标越界!"<<end1;exit(1);}returna[i];}private:Typea[m];};voidwriteToFile(constchar*);//不用考虑此语句的作用//main.cpp#include"Array.h"//交换数组a中前后位置对称的元素的值template<classType,intm>voidArray<Type,m>∷Contrary(){//补充函数体//********333********//********666********}intmein(){intsl[5]={1,2,3,4,5};doubles2[6]={1.2,2.3,3.4,4.5,5.6,8.4);Array<int,5>d1(s1,5);Array<double,8>d2(s2,6);inti;d1.Contrary();d2.Contrary();cout<<d1.Length()<<"<<d2.Length()<<end1;for(i=0;i<4;i++)cout<<d1[i]<<",";cout<<d1[4]<<end1;for(i=0;i<7;i++)cout<<d2[i]<<"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沟通与协调打造和谐职场环境
- 生态建筑引领未来商业趋势
- 现代科技在股票市场分析中的应用
- 校园餐饮消费大数据洞察学生消费习惯
- 2024年八年级生物下册 6.2.1遗传说课稿 (新版)冀教版
- 2024年八年级物理下册 8.1认识压强说课稿 (新版)粤教沪版
- 14《普罗米修斯》(说课稿)2024-2025学年-统编版语文四年级上册
- 2024年五年级数学下册 五 分数除法练习五说课稿 北师大版
- 2024-2025学年高中历史 专题1 中国传统文化主流思想的演变 3 宋明理学说课稿 人民版必修3
- 2024-2025学年八年级物理下册 第十章 从粒子到宇宙 10.1 认识分子说课稿 (新版)粤教沪版
- 圆筒混料机-设计说明书
- 盖板涵施工工艺流程配图丰富
- 中央导管相关血流感染防控
- 混合动力汽车发动机检测与维修中职PPT完整全套教学课件
- 2023年副主任医师(副高)-肿瘤内科学(副高)考试历年真题荟萃带答案
- 产时子痫应急演练文档
- 小学美术-《神奇的肥皂粉》教学设计学情分析教材分析课后反思
- 测量管理体系内审检查表
- 信号与系统复习题及答案
- 班组月度考核评分表
- 部编版一年级下册《道德与法治》教学工作计划及全册教案
评论
0/150
提交评论