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

下载本文档

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

文档简介

国家二级C++机试(操作题)模拟试卷21(共9套)(共27题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,此工程中包含一个源程序文件main.cpp,其中有类Book(“书”)和主函数main的定义。程序中位于每个“//ERROR****found****”下的语句行有错误,请加以改正。改正后程序的输出结果应该是:书名:C++语句程序设计总页数:299已把“C++语言程序设计”翻到第50页已把“C++语言程序设计”翻到第51页已把“C++语言程序设计”翻到第52页已把“C++语言程序设计”翻到第51页已把书合上。当前页:0注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。#includeusingnamespacestd;classBook{char*title;intnum_pages;//页数intcur_page;//当前打开页面的页码,0表示书未打开public://ERROR********found********Book(constchar*theTitle,intpages)num_pages(pages){title=newchar[strlen(theTitle)+1];strcpy(title,theTitle);cout<num_pages){cout<<"无法翻到第"<标准答案:(1)Book(constchar*theTitle,intpages):num_pages(pages)(2)voidopenAtPage(intpage_no){//把书翻到指定页(3)cur_page=0;知识点解析:(1)主要考查考生对构造函数的掌握,构造函数的成员列表初始化法要注意它的格式,即成员列表前要有标识符“:”,因此语句改为:Book(constchar*theTitle,intpages):Bum_pages(pages)。(2)主要考查考生对const函数的掌握,在函数体中可以看到有语句cur_page=page_no,即cur_page的值发生改变,因此该函数不是const函数。(3)主要考查考生对成员函数的掌握,题目要求输出的最后一条是“当前页:0”,可知主函数中调用close函数后当前页为0,因此应该是cur_page=0;。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,该工程中包含程序文件main.cpp,其中有类Mammal(“哺乳动物”)、类Elephant(“大象”)、类Mouse(“老鼠”)的定义和主函数main的定义。请在横线处填写适当的代码并删除横线,以实现上述定义。此程序的正确输出结果应为:ELEPHANTMOUSE注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。#includeusingnamespacestd;enumcategory{EMPTY,ELEPHANT,MOUSE);char*output[]={"EMPTY","ELEPHANT","MOUSE"};classMammal{public:Mammal(char*str){//**********found**********name=new__________strcpy(name,str);}virtualchar*WhoAmI()=0;virtual~Mammal(){delete[]name;}voidPrint(){cout<Print();deletepm;pm=newMouse("Micky");pm->Print();deletepm;return0;}标准答案:(1)char[strlen(str)+1];(2)Mammal(str)(3)returnoutput[MOUSE];(4)Elephant知识点解析:(1)主要考查分配空间,程序要给name分配空间,由下一条语句中strcpy(name,str)可知程序要把字符串str复制给name,因此要分配的空间大小为strlen(str)+1。(2)主要考查考生对构造函数的掌握,因为Elephant类是Mammal类的派生类,所以其构造函数要使用成员列表先对Mammal类初始化。(3)主要考查考生对枚举类型的掌握,先看程序:enumcategory{EMPTY,ELEPHANT,MOUSE}。再参考Elephant类中的WhoAmI函数:char*WhoAmI(){returnoutput[ELEPHANT];}。可知这里要填写的返回语句为:returnoutput[MOUSE];。(4)主要考查考生对派生类的掌握,题目要求输出:ELEPHANTMOUSE可知,要先调用Elephant类的WhoAm1函数,因此给指针pm分配Elephant类空间。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生目录proj3下的工程文件proj3,此工程中包含一个源程序文件proj3.cpp,补充编制c++程序proj3.cpp,其功能是读取文本文件in.dat中的全部内容,将文本存放到doc类的对象myDoc中。然后将myDoc中的字符序列反转,并输出到文件out.dat中。文件in.dat的长度不大于1000字节。要求:补充编制的内容写在“//********333********”与“//********66666********”两行之间。实现将myDoc中的字符序列反转,并将反转后的序列在屏幕上输出。不得修改程序的其他部分。注意:程序最后已将结果输出到文件out.dat中,输出函数writeToFile已经给出并且调用。//proj3.cpp#include#include#includeusingnamespacestd;Classdoc{private:char*str;//文本字符串首地址intlength;//文本字符个数public://构造函数,读取文件内容,用于初始化新对象,filename是文件名字符串首地址doc(char*filename);voidreverse();//将字符序列反转~doc();voidwriteToFile(char*filename);};doc::doc(char*filename){ifstreammyFile(filename);intfen=1001,tmp;str=newchar[len];length=0;while((tmp=myFile.get())!=EOF){str[length++]=tmp;}str[length]=’\0’;myFile.close();}voiddoc::reverse(){//将数组str中的length个字符中的第一个字符与最后一个字符交换,第二个字符与倒数第二个//字符交换……//***************333***************//***************666***************}doc::~doc(){delete[]str;}voiddoc::writeToFile(char*filename){ofstreamoutFile(filename);outFile<标准答案:inti,j;//定义两个整数临时变量i.j.for(i=0,j=length-1;i<j;i++,j--){chartemp=str[i];//把Str[i]中的值保存在临时变量tempstr[i]=str[j];//把Str[j]值赋给Str[i],实现字符前后替换str[j]=temp;//把保存在临时变量temp中的值再赋值给Str[j]}知识点解析:题目要求将myDoc中的字符序列反转,在main函数中我们看到myDoc是doc类,根据doc类的定义可以知道它是把读取文件的字符串存到str动态数组中。reverse函数实现将数组str中的length个字符中的第一个字符与最后一个字符交换,第二个字符与倒数第二个字符交换,依次类推。使用变量i和j,分别表示第一个字符和最后一个字符的下标,定义temp作为中间变量进行交换。国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,此工程包含一个源程序文件proj1.cpp。其中位于每个注释“//ERROR****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:Youareright.注意:只修改注释“//ERROR****found****”的下一行语句,不要改动程序中的其他内容。//proj1.cpp#include<iostream>usingnamespacestd;classMyClass{public:MyClass(intx):number(x){}//ERROR*******found*******~MyClass(intx){}//ERROR*******found*******voidJudge(MyClass&obj);private:intnumber;};voidJudge(MyClass&obj){if(obj.number==10)cout<<"Youareright."<<end1;elsecout<<"Sorry"<<end1;}intmain(){//ERROR*******found*******MyClassobject;Judge(object);return0;}标准答案:(1)~MyClass(){}(2)friendvoidJudge(MyClass&obj);(3)MyClassobject(10);知识点解析:(1)主要考查考生对析构函数的掌握,析构函数是没有形参的,因此把形参去掉即可,因为该类没有动态分配空间,所以不需要使用delete语句释放空间。(2)主要考查考生对友元函数的掌握,在函数定义中有语句voidJudge(MyClass&obj),在main函数中有语句Judge(object);,即Judge函数是可以被类外函数调用的,并且定义时没有加上类名和作用域,因此可以知道Judge函数是友元函数,需要在类型前加上friend。(3)主要考查考生对构造函数调用的掌握,题目要求输出结果为:Youareright,在Judge函数体内有语句:if(obj.number==10)cout<<"Youareright."<<end1;要想使屏幕输出语句:Youareright.,就必须使obj.number的值为10,因此要使用构造函数语句MyClassobject(10);。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,此工程中包含一个头文件shape.h,其中包含了类Shape、Point和Triangle的声明;包含程序文件shape.cpp,其中包含了类Triangle的成员函数和其他函数的定义;还包含程序文件proj2.cpp,其中包含测试类Shape、Point和Triangle的程序语句。请在程序中的横线处填写适当的代码并删除横线,以实现上述功能。此程序的正确输出结果应为:此图形是一个抽象图形,周长=0,面积=0此图形是一个三角形,周长=6.82843,面积=2注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。//shape.hclassShape{public:virtualdoubleperimeter()const{return0;}//返回形状的周长virtualdoublearea()const{return0;}//返回形状的面积virtualconstchar*name()const{return"抽象图形")//返回形状的名称};classPoint{//表示平面坐标系中的点的类doublex;doubley;public://**********found**********Point(doublex0,doubley0):_______{}//用x0、y0初始化数据成员x、ydoublegetX()const{returnx,}doublegety()const{returny;}};classTriangle:publicShape{//**********found**********_______;//定义3个私有数据成员public:Triangle(Pointp1,Pointp2,Pointp3):pointl(p1),point2(p2),point3(p3){)doubleperimeter()const;doublearea()const;constchar*name()const{return"三角形";}};//shape.cpp#include"shape.h"#include<cmath>doublelength(Pointp1,Pointp2){returnsqrt((p1.getX()-p2.getX())*(p1.getX()-p2.getX())+(p1.getY()-p2.getY())*(p1.getY()-p2.getY()));}doubleTriangle∷perimeter()const{//一个return语句,它利用length函数计算并返回三角形的周长//**********found**********_______;}doubleTriangle∷area()const{doubles=perimeter()/2.0;returnsqrt(s*(s-length(point1,point2))*(s-length(point2,point3))*(s-length(point3,point1)));}//proj2.cpp#include"shape.h"#include<iostream>usingnamespacestd;//********found********_______//show函数的函数头(函数体以前的部分){cout<<"此图形是一个"<<shape.name()<<",周长="<<shape.perimeter()<<",面积="<<shape.area()<<end1;}intmain(){Shapes;Triangletri(Point(0,2),Point(2,0),Point(0,0));show(s);show(tri);return0;}标准答案:(1)x(x0),Y(y0)(2)Pointpoint1,point2,point3(3)returnlength(point1,point2)+length(point1,point3)+length(point2,point3)(4)voidshow(Shape&shape)知识点解析:(1)主要考查考生对构造函数的掌握,题目要求用x0、y0初始化数据成员x、y,因此在这里使用成员列表初始化,即Point(doublex0,doubley0):x(x0),y(yo){}。(2)主要考查考生对构造函数的掌握,题目要求定义3个私有数据成员。由构造函数可知3个私有数据成员的类型都是Point,名称分别为point1、point2和point3,因此空格处填写:Pointpoint1,point2,point3。(3)主要考查:考生对成员函数的掌握,题目要求使用return语句,利用length函数计算并返回三角形的周长。length函数返回的是两点间的距离,因此return语句只要返回三角形三条边的距离和,即为三角形的周长。(4)主要考查考生对成员函数的掌握,这里要定义show函数的函数头(函数体以前的部分)。由主函数main中show函数的使用情况show(s)和show(tri)可知,s是Shape类,tri是Triangle类,因为Triangle是Shape类的派生类,所以可知show函数的参数是Shape类型,无返回值,得出语句voidshow(Shape&shape)。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用【答题】菜单命令或直接用VC6打开考生文件夹下的工程proj3,其中声明的是一个人员信息类,补充编制程序,使其功能完整。在main函数中给出了一组测试数据,此种情况下程序的输出应该是:Zhang20Tsinghua。注意:只能在函数address_change的“//********333********”和“********666********”之间填入若干语句,不要改动程序中的其他内容。程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//proj3.h#include<iostream>#include<string>usingnamespacestd;classPerson{charname[20];intage;char*address;public:Person(){age=0;address=0;}voidname_change(char*_name);//名字修改函数voidage_change(int_age);//年龄修改函数voidaddress_change(char*_add);//地址修改函数voidinfodisplay();//人员信息显示~Person();//析构函数};voidwrriteToFile(constchar*path);proj3.cpp#include<iostream>#include<string>#include"proj3.h"usingnamespacestd;voidPerson∷namechange(char*_name1{strcpy(name,name);}voidPeEson∷age_change(int_age){age=_age;}voidPeEson∷address_change(char*_add){if(address!=NULL)delete[]address;//********333********//********666********}voidPerson∷info_display(){cout<<name<<’\t’<<age<<’\t’;if(address!=NULL)cout<<address<<end1;tout<<end1;}Person∷~PeEson(){if(address!=NULL)delete[]address;}voidmain(){PeEsonp1;p1.name_change("Zhang");p1.age_change(20);p1.address_change("TsinghuaUniversity");p1.addresschange("Tsinghua");p1.infodisplay();writeToFile("");}标准答案:address=newchar[strlen(_add)+1];//给类成员变量动态分配空间strcpy(address,_add);//把字符_add复制给address知识点解析:函数address_change(char*_add)的功能是地址修改,也就是说通过该函数把类的地址修改为add字符串。类的私有成员address是字符指针,因此首先要给address分配空间,通过new语句来实现:address=newchar[strlen(_add)+1];。接下来就是要复制字符串,使用系统函数strcpy,其用法为strcpy(参数1,参数2),将参数2的内容复制到参数1中。国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出:number1=4.8number2=93.6number3=0.9PRODUCT=404.352注意:错误的语句在∥********error********的下面。修改该语句即可。其他的语句不能修改。#includeUSingnamespacestd;intmain(){doublenumberl=4.8,number2=93.6,number3=0.9;∥********error********product=numberl*number2*number3;∥********error********cout<<"numberl=”<标准答案:(1)doubleproduct=number1*number2*number3;(2)cout<<“numberl=”<知识点解析:(1)C++要求变量在定义后才能使用,显然product变量没有定义,number1、number2和number3均为double型变量,product是这三个变量的乘积,因此product的数据类型是double型,因此第1个标识下应改为doubleproduct=number1*number2*number3。(2)cout流中的数据是用流插入运算符“<<”顺序加入的,第2个标识下是输出numberl、number2和number3的值,各个数据之间用“<<”顺序加入,不能用“<”,第2个标识下应改为cout<<”numberl=”<二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数fun(intn)的功能是在n行n列的矩阵中,每行都有最大的数,本程序求这n个最大数中的最小一个,并作为参数返回。注意:不能修改程序的其他部分,只能修改fun()函数。#include#defineN100inta[N][N];intfun(intn){}voidmain(){intn;cout<<”pleaseinputN:”<>n;for(inti=0;i>a[i][j];}cout<<”Theminofmaxnumbers—is”(标准答案:introw;intmax;intmin;intcol;for(row=0;row知识点解析:(1)该程序功能是找出矩阵中所有行最大的数中的最小一个。它的解题思路,首先找出每一行的最大值,然后在这些值中进行比较,找出其中的最小值。(2)从已给部分源程序的main主函数开始入手,核心函数intfun(intn)中的n参数为矩阵中的列和行数。解题思路(1)两层循环,内层循环求每一行最大值,外层循环求最小值。(2)求最大值,首先将最大值赋值为每行第一列的元素,然后依次循环比较。(3)将求出的第一个最大值赋值为第一个最小值,然后将以后求得的最大值依次与之比较,求出所有值的最小值。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)在类TestClass中定义name为字符串类型,age为整型,请在注释∥********1********之后添加语句。(2)设置类TestClass0的基类为TestClass类的定义,请在注释∥********2********后添加语句。(3)在类TestClass的派生类TestClass0的公有成员中定义析构函数TestClass0,请在∥********3********后添加。(4)设置类TestClassl的基类为TestClass类的定义,请在∥********4********后实现。本程序输出如下结果:TestClassclassconstructorTestClass0classconstructorTestClassonclassconstructorTcstClasslclassconstructorTestClasslclassconstructorTcstClassclassconstructorTestClass0classconstructorTestClassclassconstructor注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。#includeC1assTestClass{∥********1********public:TestClass(){cout<<“TestClassclassconstructor”<标准答案:(1)添加语句:char*name;intage;(2)添加语句:classTestel.ass0:publicTestclass(3)添加语句:~Testclasso()(4)添加语句:classTestel.assl:publ.icTestelass知识点解析:本题的功能是利用构造函数和析构函数中的输出语句,输出字符串。在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的main主函数开始入手,完成类的定义以及其成员函数。解题思路(1)题目l要求“TestClass中定义name为字符串类型,age为整型”。根据题目要求,在程序TestClass类中定义变量name和age,即“char*name;intage;”。(2)题目2要求“设置类TestClass0的基类为TestClass类的定义”。在C++中,从已有的类产生一个新的子类,称为类的派生。声明派生类的一般形式为:class派生类名:继承方式,基类名。根据声明派生类的一般形式,这里补全“classTestClass0:publicTestClass”。(3)题目3要求“在类TestClass的派生类TestClass0的公有成员中定义析构函数TestClass0”,析构函数也是一个特殊的成员函数,它的作用与构造函数相反,它的名字是类名的前面加一个“~”符号。题目中要求的类名字为“’YestClass0”即这里补全“~1"estClass0()”。(4)题目4要求“设置类TestClassl的基类为TestClassl类的定义”同(2)在第4个标识下补充“classTestClassl:publicTestClass”。国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,但该程序运行有问题,请改正main函数中的错误,使程序的输出结果是:112233445566778899注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//********error********的下面。1#include2#include3voidmain()f4inta[3][3]={{1,2,3),{4,5,6),{7,8,9));5int*p,i;6//********error********7P=a;8for(i=0;i<9;i++){9cout<标准答案:(1)P=&a[0][0];(2)cout<知识点解析:从已给定源程序的main主函数开始入手,可以看出程序是通过数组与指针两种方法输出数组值。[解题思路](1)打开modil.cpp,调试程序,显示错误提示为第一标识下“modi1.cpp(71:errorC2440:’=’:cannotconvefrom’int[3][3]’to’int*’”,a为二维数组型变量,将其值赋值给p,应该是P指向数组a的起始位置,即“p=&a[0][0];”。(2)程序中第2个标识下的“cout<二、简单应用题(本题共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);11cout<<"最小的字母出现在距离头部"<标准答案:1intMinPos=0;//初始化最小值位置2if(data==NULL)//判断输入字符串是否为空3return-1;4charMinData=data[0];//设置字符串第一个字符为最小值5if(MinData==0)//判断第一个字符是否存在6return一1;7for(inti=1;data[i]!=0;i++)8{9if(data[i]<=MinData)10{11iMinData=data[i];//逐个判断每个字母是否小于标记字符12MinPos=i;//最小值位置13}14}15returnMinPos;知识点解析:(1)该程序功能是找出字符串数组中最小的ASCII值。它的解题思路,用最小值变量标记第一个待找字符,把所有待找字符和标记字符逐个进行比较,并标记其当前最小值及其所在位置,从而找出最小值。(2)从已给部分源程序的main主函数开始入手,核心函数intfun(char*data)中的data参数为输入的字符串数组,其中MinPos为最小值位置。[解题思路](1)MinPos变量首先指向字符串data的第一个字符,同时将标志位MinPos初始值赋为0。(2)然后利用for循环对每一个当前字符与MinPos标记的字符进行比较。(3)循环中将求得的最小数据data[i]赋值给MinData,并将该数据项数组标志位赋给标志位MinPos。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)完成构造函数的定义,使得数据成员变量filename和contex为空,内容长度FileLength为0。请在注释//料料********1********后添加适当的语句。(2)完成析构函数,对contex内存的释放。请在注释//********2********后添加适当的语句。(3)完成WriteFile()函数,用来对contex内容进行设置填充内容,如果以前有内容,则删除以前的内容,重新填写。请在注释//********3********后添加适当的语句。(4)完成CopyFile()~数,完成将参数对象的contex的内容拷贝到当前的文件内容中,请在注释//********4********后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。1#include2classMyFileClasS3{4private:5charfilename[64];6char*contex;7intFileLength;8public:9MyFileClasS()10{11//********1********1213contex=NULL;14FileLength=0;15}16~MyFileClasS()17{18if(FileLength)19//********2********2021}22voidOpenFile(char*str,intlen)23{24for(inti=0;i标准答案:(1)添加语句:filename[0]=0;或filename[0]=NULL;(2)添加语句:delete[]contex;(3)添加语句:deletecontex;(4)添加语句:WriteFlie(file.contex,file.FileLength);知识点解析:程序当中定义了类MyFileClass,包含3个成员变量,分别为filename、contex和FileLength,分别表示文件名、文件内容和文件长度,类MyFileClass有多个成员函数:构造函数、析构函数、OpenFile(char*str,intlen)、WriteFlie(char*str,intlen)、CopyFile(MyFileClass&file)和display(),OpenFile()用来给filename赋值,并清空contex内容;WriteFileO函数用来对contex内容进行设置填充内容;CopyFile(MyFileClass&file)函数完成将参数file对象的contex内容拷贝到当前的文件内容中;display()将contex内容打印到屏幕上。[解题思路](1)构造函数MyFileClass()完成类成员变量的初始化,将数据成员变量filename和contex为空,内容长度FileLength为0,因此第1个标识下应添加“filename[0]=0;”或“filename[0]=NULL;”。(2)析构函数用来释放一个对象,在对象删除前,用它来做一些清理工作,WriteFlie()函数会申请内存空间,因此在对象删除的时候必须将这些内存空间释放,这个工作可以放在析构函数中来处理,第2个标识下是释放由new申请的内存空间,因此第2个标识下应添加“delete[]contex;”。(3)WriteFile0函数首先对contex内容清空,第3个标识下应添加“deletecontex;”。(4)CopyFile(MyFileClass&file)函数完成将参数file对象的contex的内容拷贝到当前的文件内容中,可直接调用WriteFlie()函数,因此第4个标识下应添加“WriteFlie(file.contex,file.FileLength);”。国家二级C++机试(操作题)模拟试卷第5套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错误,请改正其中的错误,使程序正确运行。并且使程序输出的结果为:OK注意:错误的语句在//********error********的下面,修改该语句即可。#includeClassCBaSe{public:CBaSe(){a=b=0;)private:inta,b;};classCDerivel:publicCBase{public:CDerivel(){}//********error********virtualvoidfunc();};classCDerive2:publicCDerivel{public:CDerive2(){a=0;b=0;}Voidfunc(){//********error********cout<<"OK"func();}标准答案:(1)virtualvoidfunc()=0;(2)cout<<"OK"<知识点解析:(1)由审题分析可知,CDerivel类中的func()函数是纯虚函数,纯虚函数的定义格式为:virtual<函数类型><函数名>(<参数表>)=0,因此第1个标识下应为“virtualvoidfunc()=0;”。func()函数没有参数表。(2)编译程序后发现第2个标识下有错误,cout流中的数据是用流插入运算符“<<”顺序加入的,因此“<”不正确,应改成“cout<<"OK"<二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,完成空出部分程序。函数fun(int*arr,intn)的功能是将指定的有序数组压缩成各元素互不相同的有序数组,即相同数只保留一个,多余的被删除。并返回互不相同的元素的个数。注意:不能修改程序的其他部分,只能修改fun()函数。#includeintfun(int*a,intn){}Voidmain(){intA[]=(6,6,5,4,4,3,3,2,1);intj=fun(A,sizeof(A)/sizeof(int));for(inti=0;i标准答案:intj;intk=0;//指向数组第一个元素j=1;//指向数组第二个元素while(j知识点解析:(1)首先指向数组第一个元素a[k],然后将第二元素a[j]与它比较,不同存入数组第二个元素(a[++k])。(2)同时,将被比较的位置向后移动一位(j++)。循环直到数组的最后一个元素比较完毕。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)完成类Rect的构造函数,实现对变量left、right、top、bottom的初始化,缺省值都为0,请在注释//********1********后添加适当的语句。(2)完成类Rectangle的构造函数,请在注释//********2********后添加适当的语句。(3)完成计算矩形对角线长度函数Diagonal(),请在注释//********3********后添加适当的语句。(4)完成计算周长函数Girth(),请在注释//********4********后添加适当的语句。程序输出:50140注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。#include#includeclassRectangle{public:intleft,right,top,bottom;//********1********{left=1;right=r;top=t;bottom=b;}//********2********{left=rc.1eft;right=rc.right;top=rc.top;bottom=rc.bottom;}floatDiagonal(){//********3********return}intGirth(){//********4********return}};intmain(){Rectanglerect(20,50,40,80);Rectanglerect2(rect);cout<标准答案:(1)添加语句:Rectangle(int1,intr,intt,intb)(2)添加语句:Rectangle(Rectangle&rc)(3)将“return”补充完整为:returnsqrt((right—left)*(right—left)+(bottom—top)*(bottom—top));(4)将“return”补充完整为:return2*((right—left)+(bottom—top));知识点解析:(1)构造函数函数名和类名一致,构造函数可以重载,即多个构造函数有相同的名字不同的参数,显然题目当中两个构造函数均有参数,由函数体体内“left=1;right=r;top=t;bottom=b;”,说明l,r,t,b为构造函数的参数,因此第1标识处应添加“Rectangle(intl,intr,intt,intb)”。(2)和题目1一样,构造函数名和类名一致,函数体内:“left=rc.left;right=re.right;top=re.top;bottom=rc.bottom;”显然rc是Rect对象,故该构造函数的参数为re对象,故第2标识处应添加“Rectangle(Rectangle&rc)”。(3)由对象的left、fight、top、bottom值可以求得矩形的长和宽,因此可采用勾股定理计算对角线长度,即第3标识处补充完整为:returnsqrt((right.1eft)*(fight—left)+(bottom-top)*(bottom—top))。(4)同样的周长可由长和宽的数值计算得到,长和宽之和的两倍即周长,第4标识处补充完整为:return2*((right—left)+(bottom—top))。国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:将a所指4×3矩阵中第k行的元素与第0行元素交换。例如,有下列矩阵:123456789101112若k为2,程序执行结果为:789456123101112请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。注意:部分源程序在文件BLANKl.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include#defineN3#defineM4/*********found*********/voidfun(int(*a)[N],int【1】){inti,temp;/*********found*********/for(i=0;i<【2】;i++){temp=a[0][i];/*********found*********/a[0][i]=【3】;a[k][i]=temp;}}main(){intx[M][N]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}},i,j;printf("Thearraybeforemoving:\n\n");for(i=0;i标准答案:(1)k(2)N(3)a[k][i]知识点解析:填空1:变量k在函数体fun中已经使用,但在函数体中没有定义,肯定是在函数的形参中定义的,所以应填k。填空2:数组共N列,所以应填N。填空3:这部分语句实现的功能是变量值的交换,所以应填a[k][i]。二、简单应用题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中,函数fun的功能是求矩阵(二维数组)a[N][N]中每行的最小值,结果存放到数组b中。假如:若a=[12*]则结果应为1,5,9,13,请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include#defineN4voidfun(inta[][N],intb[]){inti,j;for(i=0;i标准答案:(1)b[i]=a[i][0];(2)for(j=1;ja[i][j])知识点解析:数组b存放每行的最小值,针对二维数组使用二层循环,在第一层循环的开始将每行的第1个数赋给数组b相应的元素,在第二层循环中,数组b中的元素依次与本行中的每个元素进行比较,找到一行中的最小值存入数组b。(1)b[i]存放二级数组a每一行中第1个元素值,表示为a[i][0]。(2)每行元素的第1个值要和这一行中的每个元素进行比较,条件j三、综合应用题(本题共1题,每题1.0分,共1分。)3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,其功能是:把低于平均分的学生数据放入b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#defineN8typedefstruct{charnum[10];doubles;}STREC;doublefun(STREC*a,STREC*b,int*n){}V0idmain(){STRECs[N]=({"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85),{"GA01",91},{"GA07",72},{"GA08",64),{"GA06",87}};STRECh[N];inti,n;doubleave;aVe=fun(s,h,&n);printf("The%dstudent;datawhichislowerthan%7.3f:\n",n,ave);for(i=0;i标准答案:doublefun(STREC*a,STREC*b,int*n){inti,j=0;doubleav=0.0;for(i=0;i知识点解析:本题使用循环语句和条件判断语句来实现程序操作,第1个循环语句的作用是求出总分,然后求出平均分av。第2个循环的作用是将分数低于平均分的学生记录存入结构体数组b中。国家二级C++机试(操作题)模拟试卷第7套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,但该程序运行时有错,请改正程序中的错误,使该程序的输出结果为:100注意:错误的语句在//********error********的下面,修改该语句即可。#includestaticintx=50;intt=0;int*func(intx,inty,intz){t=t+x+y+z;//********error********returnt;};Voidmain(){inty=30;intx=10;intz=20;//********error********x=x;//********error********cout<标准答案:(1)return&t;(2)X=::x;(3)cout<<*func(x,y,z)<知识点解析:(1)由审题分析可知,函数func(intx,inty,intz)返回的是整型数据指针,而第1个标识下的returnt表示返回一个整型数据,和要求的返回数据类型不匹配,应改为“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),该函数完成以下功能:(1)把s中的大写字母转换成小写字母,把其中的小写字母转换成大写字母。并且在函数中调用写函数WriteFile()将结果输出到modi2.txt文件中。例如:s="helloTEST",则结果为:s="HELLOtest"(2)完成函数WriteFile(char*s),把字符串输入文件中。提示:打开文件使用的第二参数为ios_base::binarylios_base::app。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。#include#include#includeusingnamespacestd;voidWriteFile(char*s){}voidfun(char*s){}voidClearFile(){ofstreamout1;out1.open("modi2.txt");out1.Close();}intmain(){C1earFile();chars[1024];cout<<"pleaseinputastring:"<标准答案:(1)voidWriteFile(char*s)中的命令语句:ofstreamout1,tout1.open("modi2.txt",iosbase::binary|iosbase::app);//打开文件modi2out1<=’A’&&s[i]<=’Z’)//如果是大写字符,转换为小写字符{s[i]=s[i]一’A’+’a’;//’s[i]一’A’+’a’等于字符s[i]+32’}Elseif(S[i]>=’a’&&s[i]<=’z’)//如果是小写字符,转换为大写字符{s[i]=s[i]一’a’+’A’;//’s[i]一’a’+’A’’等于字符s[i]一32}}WriteFile(s);(2)从已给部分源程序的main主函数开始入手,首先实现WriteFile函数,然后再实现fun函数,并在其中调用WriteFile函数。知识点解析:(1)在WriteFile(char*s)函数中,利用标准流ofstream实现字符串写入文件modi2.txt。(2)在fun函数中,利用for循环逐个判断字符是大写还是小写。(3)如果是大写,那么加上32实现大写转换为小写。否则,就减去32,实现小写到大写的转换。最后调用前面实现的WriteFile函数,将字符串写入文件。三、综合应用题(本题共1题,每题1.0分,共1分。)3、用VC6打开考生文件夹下的源程序文件modi3.cpp,其中定义了多个类,但类不能达到输出要求,按照定义的输出修改函数,使得输出如下:TestClass3TestClass2TestClass1其中定义的类并不完整,按照要求完成下列操作,将类的定义补充完整。(1)类TestClass2公共继承于TestClass1,请在注释//********1********后添加适当的语句。(2)print函数为虚函数,请在注释//********2********后添加适当的语句。(3)修改语句,使得P指定对象obj3,请在注释//********3********后添加适当的语句。(4)修改语句,利用P调用print()函数,完成输出信息,注释//********4********后添加适当的语句。注意:仅在函数指定位置添加语句,请勿改动主函数main与其他函数中的任何内容。#includeusingnamespacestd;ClassTestClass1{public:voidprint(){cout<<"TestClass1"<标准答案:(1)将“classTestClass2”补充完整为:ClassTestClass2:publicTestClass1(2)将“voidprint()”补充完整为:virtualvoidprint()(3)将“p=obj3;”修改为:p=&obj3;(4)将“p.print();”修改为:p->print();知识点解析:(1)题目1要求“类TestClass2公共继承于TestClass1”。从已有的类产生一个新的子类,成为类的派生。声明派生类的一般形式为:class派生类名:[继承方式]基类名。根据题目中的要求以及派生类的一般形式,第1个标识下添加语句“classTestClass2:publicTestClass1990(2)题目2要求“print函数为虚函数”。在C++中,用virtual声明的函数为虚函数,因此第2个标识下的语句修改为“virtualvoidprint()”。(3)题目3要求“使得P指定对象obj3”。p为指针变量,obj3为类的对象,将一个指针变量指向另一个变量,只要把被指向的变量的地址赋给指针变量即可。取对象obj3地址的语句为&obj3,所以这里补全“p=&obj3;”。(4)题目4要求“利用P调用print()函数”。C++中用"->"运算符实现成员访问,因此调用print()函数,应将第4个标识下修改为“p->print();”。国家二级C++机试(操作题)模拟试卷第8套一、基本操作题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个数,作为函数值返回。为便于统计,规定各单词之间用空格隔开。例如,形参s所指的字符串为:ThisisaClanguageprogram.,函数的返回值为6。请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。注意:部分源程序在文件BLANKl.C中。不得增行或删行,也不得更改程序的结构!试题程序:#includeintfun(char*s){intn=0,flag=0;while(*s!=’\0’){if(*s!=’’&&flag==0){/*********found*********/【1】;flag=1;)/*********found*********/if(*s==’’)flag=【2】;/*********found*********/【3】;}returnn;}main(){charstr[81];intn;printf("\nEnteralinetext:\n");gets(str);n=fun(str);printf("\nThereare%dwordsinthistext.\n\n",n);}标准答案:(1)n++(2)0(3)s++知识点解析:填空1:单词个数用变量n来统计,当前字母不是空格且flag状态标志为0时,可以划断出现一个新的单词,则单词数就加1,将状态标志flag置为1,所以应填n++。填空2:当前字符是空格时,flag状态标志置0,所以应填0。填空3:判断完一个字符之后,要继续判断字符串的下一个位置,所以应填s++。二、简单应用题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:找出一个大于给定整数m且紧随m的素数,并作为函数值返回。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include#include#includeintfun(intm){inti,k;for(i=m+1;;i++){for(k=2;k标准答案:(1)if(i%k==0)(2)if(k==i)知识点解析:(1)判断当前数是否为素数,若存在一个数(除l和其自身)能整除当前数,则跳出本次循环,所以if条件应为i%k==0。(2)如果i是素数,则循环结束时k==i,将该值返回。三、综合应用题(本题共1题,每题1.0分,共1分。)3、规定输入的字符串中只包含字母和*号。编写函数fun,其功能是:除了字符串前导和尾部的*号外,将串中其他的*号全部删除。形参h已指向字符串中第一个字母,形参p指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。例如,若字符串中的内容为“****A*BC*DEF*G********”,删除后,字符串中的内容应当是“****ABCDEFG********”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#include#includevoidfun(char*a,char*h,char*p){}main(){chars[81],*t,*f;printf("Enterastring:\n");gets(s);t=f=s;while(*t)t++;t--;while(*t==’*’)t--;while(*f==’*’)f++;fun(s,f,t);printf("Thestringafterdeleted:\n");puts(s);}标准答案:voidfun(char*a,char*h,char*p){inti=0;char*q=a;/*将前导*号保存到a中*/while(q知识点解析:本题的重点是要选择好判断条件,首先是需要判断前导*号的结束,然后判断是否指向最后一个字母,最后补充尾部*号,只要思路对了即可正确解答。国家二级C++机试(操作题)模拟试卷第9套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论