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

下载本文档

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

文档简介

国家二级C++机试(操作题)模拟试卷39(共9套)(共26题)国家二级C++机试(操作题)模拟试卷第1套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用菜单命令或直接使用VC6打开考生文件夹下的工程proj1。程序中位于每个//ERROR********found********下的语句行有错误,请加以更正,不得修该程序的其他部分。更正后程序的输出应该是:两点之间的距离为:7.5231注意:只能修改每爪//ERROR********found********下的那一行,不要改动程序中的其他内容:1#include2#include3usingnamespacestd;4classPoint{5private:6doublex,y;7public:8Point(doublexx,doubleyy){x=xx;9y=yy;10}11//ERROR********found********12doubleMyDistance(Point&a,Point&b);13};14doubleMyDistance(Point&a,Point&b){15//ERROR********found********16doubledx=x-b.x;17//ERROR********found********18doubledy=a.y=y;19returnsqrt(dx*dx+dy*dy);20}21intmain()22{23Pointp1(3.6,6.4),p2(8,0.3);24doubled=MyDistance(p1,p2);25cout<<“两点之间的距离为:”<标准答案:(1)frienddoubleMyDistance(Point&a,Point&b);(2)doubledx=a.x-b.x:(3)doubledv=a.y-b.v;知识点解析:(1)主要考查考生对友元函数的掌握,由于MyDistance函数在类定义体外定义时,未加类名Point修饰作用域,可知MyDistance并不是类。Point的成员函数,但是声明是在Point定义体内部,所以应该是友元函数,另外函数MyDistance可以直接操作Point对象的成员变量,所以进一步确定是友元函数,使用friend关键字修饰。(2)主要考查考生对友元函数的掌握和成员变量的访问,在函数MyDistance中,为了计算a、b两点的距离,需要计算两个点的横纵坐标差值,所以需要访问a、b的横纵坐标,将a的横坐标减去b的横坐标,得到差值dx,再计算dy。(3)主要考查考生对友元函数的掌握和成员变量的访问,在函数MyDistance中,为了计算a、b两点的距离,需要计算两个点的横纵坐标差值,所以需要访问a、b的横纵坐标,将a的纵坐标减去b的纵坐标,得到差值dy,再与dx一起计算距离。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用菜单命令或直接用VC6打开考生文件夹下的工程proj2,其中有元素类Element和集合类MySet的定义。请在程序中的横线处填写适当的代码,然后删除横线,以实现上述类定义。此程序的输出结果应为:0358038注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不能删除或移动“//**********found**********”。1#inClude2#include3usingnamespacestd;4#defineMaxElement1005classElement{//“元素”类6public:7intn;8Element(inti=0):n(i){)9};10classMySet{//“集合”类11Element*element;//指向存储元素的数组的指针12intsize;//数组大小13intcounter;//数组中元素的个数14intcurrent;//用于表示扫描位置,及当前被扫描元素在数组中的下标15public:16MySet():element(newElement[100]),size(100),counter(0),cur-rent(0){)17~MySet(){delete[]element;}18voidadd(Elementele);//向集合中添加一个元素,保持由小到大的顺序。19voidremOve(Elementele);//删除集合中指定的元素20voidScanFirst(){current=0;)//将扫描位置定位于首元素21//**********found**********22voidscanNext(){_____;}//将扫描位置定位于下一个元素23Elementget()const{returnele-ment[current];}//返回当前被扫描的元素24boolisEnded()const{returncur-rent>=counter;}//如果已经没有更多的元素可扫描了,返回true。25voidshow();//显示集合中所有元素26};27voidMySet::add(Elementele){28intpos=counter;//pos用于确定元素应插入的位置29while(pos>0){//从后往前寻找该位置30if(ele.n>element[pos-1].n)break;//找到应插入的位置,退出循环31//**********found**********32if(_______)return;//发现相同元素,终止添加过程。33pos--;34}35if(counter>=size){//如果没有足够空间,扩充空间(增加100个元素的容量)36Element木tmp=element;//tmp指向原来的数组37//**********found**********38element=______;//申请一个新的数组,容量扩大100个元素的容量39for(inti=0;ipos;i--)element[i]=element[i-1];//后移相关元素,腾出存放新元素的空间44element[pos]=ele;//插入新元素counter++;45}46voidMySet::show(){47scanFirst();//扫描位置定位于首元素48while(!isEnded()){49cout<=0){//从后往前寻找该位置58if(ele.n>element[pos].n)return;//集合中没有该元素,终止删除过程。59if(ele.n==element[pos].n)break;//找到删除的元素,退出循环。60pos--;61}62if(pos<0)return;//集合中没有该元素,终止删除过程。63for(inti=pos;i标准答案:(1)++current(2)ele.n==element,[pos-1].n(3)newElementl[size+100](4)scanNext()知识点解析:(1)主要考查考生对数组和自增运算符的掌握情况,扫描数组元素,将扫描位置定位到下一个元素,需要将下标加1,使用自增运算符。(2)主要考查考生对数组元素的访问和比较运算符的掌握,pos初值为数组元素个数,所以访问element元素使用pos-1,避免访问数组越界;另外需要判断插入元素与当前元素是否相等来决定程序是否返回,使用相等运算符。(3)主要考查考生对动态内存分配的掌握,题意需要申请一个新的数组,并将当前数组容量size扩大100个,所以答案为newElement[size+100]。(4)主要考查考生对类成员函数的掌握,show函数用来输出数组的所有元素,所以从首元素开始一次输出,输出一个元素需要将扫描定位到下一个元素,对应于前面的scan-First(),使用成员函数scanNext()最合适不过了。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明了SortedList类,是一个用于表示有序数据表的类。其成员函数insert的功能是将一个数据插入到一个有序表中,使得该数据表仍然保持有序。请编写这个insert函数。程序的正确输出应为:插入前:1,2,4,5,7,8,10插人6和3后:1,2,3,4,5,6,7,8,10要求:补充编制的内容写在“//料**********333**********”与“//********666********”之间。不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obi文件,并且在本程序中调用。1//SortedList.h2#include3usingnamespacestd;4classSortedList{//有序数据表类5intlen;6double*d;7public:8SortedList(intlen,doubledata[]=NULL);9~SortedList(){delete{]d;}10intlength()const{returnlen;)//有序数据表长度(即元素的个数)11doublegetElement(inti)const{re-turnd[i];}12voidinsert(doubledata);13voidshow()const;//显示有序数据表14};15voidwriteToFile(char*,constSort-16edList&);1//main.cpp2#include"SortedList.h"34SortedList::SortedList(intlen,5doubledata[]):len(len){6d=rlewdouble[len];7for(intk=0;ki){14doublet=d[m];15d[m]=d[i];16d[i]=t;17}18}19}20voidSortedList::insert(doubleda-21ta){22//********333********232425//********666********26}27voidSortedList::show()const{//显示有序数据表28for(inti=0;i标准答案:1for(inti=0;ii;k--)//在数组d中从k等于fen到i做遍历7dd[k]=d[k-1];//把d[k-1]赋值给dd[k]8dd[i]=data;//把data赋值给dd[i]9for(intj=0;j知识点解析:主要考查考生对插入算法的掌握,题目要求insert函数的功能是将一个数据插入到一个有序表中,使得该数据表仍保持有序。可以知道数据表d是一组有序的数组,那么就采取先比较再插入的步骤完成即可。要注意动态数组d的长度是确定的,要添加元素,就要重新分配空间。国家二级C++机试(操作题)模拟试卷第2套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错误,请改正程序中的错误,使得程序运行后没有内存遗漏。可以在修改处增加或者删除一条语句。本程序完成输入两个字符串,分别存储到s1,s2中。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构,错误的语句在//********error********的下面。1#include2voidmain()3{4char*s1;5chars2[1024];6cout<<"pleaseinputastring:"<标准答案:(1)s1=newchar[1024];(2)delete[]s1;(3)删除“deletes2;”语句知识点解析:本题是主要是处理程序运行后是否有内存遗漏的问题。对于这类问题主要是根据调试环境中的错误提示以及警告提示进行处理。[解题思路](1)sl变量为指针变量,在使用前要对其分配空间,所以第1个标识下添加“s1=newchar[1024];”。(2)为了防止内存空间的泄漏,指针变量使用后,要将其空间释放,第二个标识下“delete[]s1;”。(3)s2是数组变量,空间是在使用前静态分配的,不是使用前动态分配的,所以使用后不用释放内存空间,这里应该删除“deletes2;”。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。请补充完整程序fun(inti),使程序完成以下功能:如果i=5,则输出如下5行井号。###############注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。1#include2voidfun(inti)3{45}6intmain()7{8fun(5);9return0;10}标准答案:1for(intj=0;j知识点解析:(1)该程序功能是输出5行井号。它的解题思路,两层循环,外循环为行,内循环为列。第一行为1列,第二行为两列,同理类推,第11行为n列。(2)从已给部分源程序的main主函数开始入手,核心函数fun(inti)中的i参数为i行#。[解题思路](1)首先,利用for循环进行外层循环,要输出的i行。(2)然后,利用for循环进行内层循环,输出对应i行的i列。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp,通过把类Distance定义为类Point的友元类,来实现计算两点之间距离的功能。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)把类CDistance定义为类CPoint的友元类。请在注释//********1********之后添加适当的语句。(2)定义类CPoint的构造函数,完成给私有数据成员x和y的赋值,并且两个参数的缺省值都为0。请在注释//********2********之后添加适当的语句。(3)完成类CDistance的成员函数length(Point&pPoint,Point&qPoint)~定义,并在其中计算点p、q之间的距离,并且返回结果。假设两点之间的距离distance=sqrt((pPoint.x-qPomt.x)*(pPoint.x-qPoint.x)+(pPoint.y-qPoint.y)*(pPoint.y-qPoint.y))。请在注释//********3********之后添加适当的语句。注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。1#include2#include3usingnamespacestd;4classCPoint5{6public:7//********1********89//定义类Point的构造函数10//********2********1112voiddisplay(){cout<<"x="<标准答案:(1)添加语句:friendC1assCDistance;(2)添加语句:CPoint(floata=0,floatb=0){x=a;y=b;)(3)添加语句:returnsqrt((pPoint.x—qPoint.x)*(pPoint.x—qPoint.x)+(pPoint.y—qPoint.y)*(pPoint.y—qPoint.y));知识点解析:程序当中定义了类CPoint和CDistance,CPoint类含有成员变量x和y,display()函数输出x和y的值;类CDistance只有成员函数length(CPoint&p,CPoint&q),且类CDistance为类CPoint的友元类。[解题思路](1)第1个标识下补充定义类CDistance为类CPoint的友元类,声明友元类的格式为:friend<类名>;,故第1个标识下应添加“friendclassCDistance;”。(2)类CPoint的构造函数完成给私有数据成员x和y的初始化,两个参数的缺省值都为0,因此参数含有默认值0,故第2个标识下应添加“CPoint(floata=O,floatb=0){x=a;y=b;}”。(3)类CDistance的成员函数length(CPoint&pPoint,CPoint&qPoint)返回点P、q之间的距离,可由公式distance=sqrt((pPoint.X-qPoint.X)*(pPoint.X-qPoint.x)+(pPoint.Y-qPoint.y)*(pPoint.y-qPoint.y))计算求得,第3个标识下应添加“returnsqrt((pPoint.x-qPoint.x)*(pPoint.X-qPoint.x)+(pPoint.y-qPoint.y)*(pPoint.Y-qPoint.y));”。国家二级C++机试(操作题)模拟试卷第3套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modil.cpp,该程序运行时有错,请改正其中的错误,使程序正确运行,并且使程序输出的结果为:HelloVisualC++!HelloVisualC++!!注意:错误的语句在∥********error********的下面,修改该语句即可。#includeclassCMyObject{public:CMyObject(){∥********error********cout<<“HellO,”VisualC++!’<标准答案:(1)cout<<“Hello,”(2)cout<<“Helio,\(3)~CMyObject()知识点解析:程序当中定义了类CMyOb]ect,含有两个构造函数和一个析构函数,在构造函数内部均使用cou输出一段字符。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码,补充空出的代码。完成函数ToUpper(char*des.char*str),该函数实现把str字符串中小写字符转换成大写字符,并存发在des中。例如:str=“aBcdrFGHijK”:则:des=“ABCDEFGHIJK”:注意:不能修改程序的其他部分,只能补充ToUpper()函数。#include#defineMAXLEN1024voidToUpper(char*des,char*str){}voidmain(){chardeSt[MAXLEN];char*str=“aBcdrFGHiJK”:ToUpper(dest,Str);cout<标准答案:for(inti=0;Str[i]!=0;i++){if(str[i]>=‘a’&&Str[i]<=’z’)//比较是否是小写字母{des[i]=str[i]一‘a’+‘A’;//替换成大写字母}else{des[i]=str[i];//其他情况不变}deS[i+1]=0;}知识点解析:函数ToUpper(char*des,char*str),该函数实现把str字符串中小写字符转换成大写字符,可利用循环检查字符串str中的每一个字符,判断该字符是不是小写字母,如果是则转换成大写字母。三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)定义复数类CComplex的私有成员变量real和imaginary,分别用来表示复数的实部和虚部,都是double类型的变量。请在注释∥********1********后添加适当的语句。(2)添加复数类CComplex的带一个参数的构造函数,分别将real和imaginary赋值为参数r和0。请在注释∥********2********后添加适当的语句。(3)完成对运算符“+”的重载,分别对复数的实部和虚部相加。请在注释∥********3********后添加适当的语句。(4)完成复数的友元函数Equal(CComplex&c1.CComplex&c2)的定义,如果两个数的实部和虚部都相等,则返回1,否则返回0,请在注释∥********4********后添加适当的语句。注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#includeclassCComplex{private:∥********1********public:CComplex(){real=imaginary:0;}CComplex(doubler){∥********2********}CComplexoperator+(CComplex&c1){∥********3********temp.real=real+cl.real;temp.imaginary=imaginary+c1.imaginary;returntemp;}voidSet(intre,intimag){real=re;imaginary=imag;}friendboolEqual(CComplex&cl,CComplex&c2);};boolEqual(CComplex&cl,CComplex&c2){∥********4********}intmain(){CComplexcOmplexl(5);ccqmplexcomp!ex2;cout<标准答案:(1)添加语句:doublereal,imaginary;(2)添加语句:real=r;imaginary=0;(3)添加语句:CComplextemp;(4)添加语句:return(cl.real==c2.real)&&(c1.imagiI"18ry==c2.imaginary);知识点解析:程序中定义了类CComplex,含有私有成员变量real和imaginary,分别用来表示复数的实部和虚部,CComplex类有两个构造函数、对运算符“+”的重载、Set(intre,intimag)可改变实部和虚都的值、友元Equal(CComplex&c1,CComplex&c2)函数可判断两个CComplex对象是否相等。(1)第1个标识下完成定义复数类CComplex的私有成员变量real和imaginary,均为double类型的变量,因此第1个标识下应添加“doublereal,imaginary;”。(2)构造函数CComplex(doubler)完成类的初始化,该构造函数有一个参数,分别将real和imaginary赋值为参数r和0,因此第2个标识下应添加“real=r;imaginary=0:”。(3)编译程序可知,变量temp没有定义,由operator+(CComplex&c1)函数体的语句可知,temp为函数的返回值,而operator+(CComplex&c1)i~数体函数返回CComplex类对象,故在第3个标识下补充temp定义,即“CComplextemp;”。(4)即判断两个对象c1和c2的实部和虚部是否均相等,两个逻辑结果相与即可,因此第4个标识下应添加“retum(c1.real==c2.real)&&(c1.imaginary==cz.imaginary)。国家二级C++机试(操作题)模拟试卷第4套一、基本操作题(本题共1题,每题1.0分,共1分。)1、下列给定程序中,函数fun的功能是:在带头结点的单向链表中,查找数据域中值为ch的结点。找到后通过函数值返回该结点在链表中所处的顺序号;若不存在值为ch的结点,函数返回0值。请在程序的中括号处填入正确的内容并将中括号删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include#include#defineN8typedefstructlist{intdata;strLlCtlist*next;}SLIST;SLIST*Crearlist(char*);voidoutlist(SLIST*);intfun(SLTST*h,charch){SLIST*p;intn=0;p=h一>next;/*********found*********/while(p!=【1】){n++;/*********found*********/if(p一>data==ch)return【2】;elsep=p一>next;}return0:}main(){SLIST*head;intk;charch;chara[N]={’m’,’p’,’q’,’a’,’w’,’x’,’r’,’d’};head=crearlist(a);outlist(head);print;f(”Enteraletter:”);scarlf("%c",&ch);/*********found*********/k=fun(【3】);if(k==0)printf("\nNotfound!\n");elseprintf("Thesequencenumberis:%d\n",k);}SLIST*creatlist(char*a){SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0;idata=a[i];p->next=q;p=q;}p一>next=0;returnh;}voidoutliSt(SLIST*h){SLIST*p;p=h一>next;if(p==NULL)printf("\nThelistisNULL!\n");else{printf("\nHead");do{printf("一>%c",p一>data);p=p一>next;}while(P!=NULL);printf("一>End\n");}}标准答案:(1)NULL(2)n(3)head,ch知识点解析:填空1:while循环语句用来判断是否到达链表结尾,链表结尾结点指针域是NULL。填空2:若找到指定字符,则通过return语句将该结点在链表的顺序号返回给main函数。填空3:函数调用语句,其形式是:函数名(实际参数表),因此根据函数定义语句,填入head,ch。二、简单应用题(本题共1题,每题1.0分,共1分。)2、下列给定程序的功能是:建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。请改正函数fun中的错误,使它能得出正确的结果。注意:部分源程序在文件NODI1.C中,不要改动main函数。不得增行或删行,也不得更改程序的结构!试题程序:#include#include#includetypedefstructaa{intdata;structaa*next;}NODE;fun(NODE*h){intmax=一1;NODE*p;/*********found*********/p=h;while(p){if(p一>data>max)max=p一>data;/*********found*********/p=h一>next:}returnmax;}outresult(ints,FILE*pf){fprintf(pf,"\nThemaxinlink:%d\n",s);}NODE*creatlink(intn,intm)(NODE*h,*p,*s;inti;h=p=(NODE*)malloc(sizeof(NODE));h一>data=9999;for(i=1;i<=n;i++){s=(NODE*)malloc(sizeof(NODE));s一>data=rand()%m;s一>next=p一>next;p一>next=s;p=p一>next;}p一>next=NULL;returnh;}outlink(NODE*h,FILE*pf){NODE*p;p=h一>next;fprintf(pf,"\nTheLIST:\n\nHEAD");while(P){fprintf(pf,"->%d",p->data);p=p一>next;)fprintf(pf,"\n");}main(){NODE*head;intm;system("CLS");head=creatlink(12,100);outlink(head,stdout);m=fun(head);printf("\nTheRESULT:\n");outresult(m,Stdout);}标准答案:(1)p=h一>next;(2)p=p一>next;知识点解析:(1)因为链表的头结点没有数据域,所以对指针p进行初始化时,要将p指向头结点的下一个结点。(2)通过指针p的移动遍历链表,因此此处应改为p=p->next;。三、综合应用题(本题共1题,每题1.0分,共1分。)3、编写函数fun,其功能是:根据以下公式计算s,并将计算结果作为函数值返回,n通过形参传入。例如,若n的值为11时,函数的值为1.833333。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#include#include#includefloatfun(intn){}voidmain(){intn;floats;system("CLS");printf("\nPleaseenterN:");scanf("%d",&n);s=fun(n);printf("Theresultis:%f\n",s);}标准答案:floatfun(intn){inti,s1=0;floats=0.0;for(i=1;i<=n;i++){s1=s1+i;/*求每一项的分母*/s=s+1.0/s1;/*求多项式的值*/}returns;}知识点解析:此类计算表达式值的程序,首先需要根据题意分析表达式的规律,得出通项,然后再完成程序语句。本题中表达式的规律是1+2+…+n的倒数之和,那么可以通过for循环语句来实现第1项到第n项的变化。其实就是累加算法,方法是先根据题目要求定义变量,注意该变量的数据类型,然后对其进行初始化操作,因为该变量的作用是累加器,所以初始值应为0(或0.0,根据变量数据类型来确定),再通过for循环语句来完成累加过程。本题中sl用来表示每一项的分母,每一项的分母都是由前一项分母加项数。注意,由于sl定义成一个整型,所以在s=s+1.0/s1语句中不能把1.0写成1。国家二级C++机试(操作题)模拟试卷第5套一、基本操作题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:判断形参s所指字符串是否是”回文”(Palindrome),若是,函数返回值为1;不是,函数返回值为0。”回文”是正读和反读都一样的字符串(不区分大小写字母)。例如,LEVEL和Level是”回文”,而LEVLEV不是”回文”。请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。注意:部分源程序在文件BLANKl.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include#include#includeintfun(char*s){char*]p,*rp;/*********found*********/lp=【1】;rp=s+strlen(s)一1;while((toupper(*ip)==toupper(*rp))&&(ip标准答案:(1)s(2)--(3)return0知识点解析:填空1:根据函数体fun中,对变量1p和rp的使用可知,1p应指向形参s的起始地址,rp指向s的结尾地址,所以应填s。填空2:rp是指向字符串的尾指针,当每做一次循环rI)向前移动一个位置,所以应填:--。填空3:当lp和rp相等时,表示字符串是回文并返回1,否则就返回0,所以应填retum0。二、综合应用题(本题共1题,每题1.0分,共1分。)2、请编写函数fun,其功能是:计算并输出下列多项式的值。例如,当n=10时,函数值为0.909091。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#include#includedoublefun(intn){}voidmain(){FILE*wf;system("CLS");printf("%f\n",fun(10));/**********************/wf=fopen("out.dat","w");fprintf(wf,"%f",fun(10));fclose(wf);/**********************/}标准答案:doublefun(intn){inti;doubles=0.0;for(i=1;i<=n;i++)s=s+1.0/(i*(i+1));/*求级数的和*/returns;}知识点解析:本题要求级数的和,由多项式的形式可知,应使用循环语句实现,循环的通项为1/n(n+1)。本程序首先定义了和变量及循环变量,然后运用一个for语句求出级数的和,最后将和变量s返回。国家二级C++机试(操作题)模拟试卷第6套一、基本操作题(本题共1题,每题1.0分,共1分。)1、使用VC6打开考生文件夹下的源程序文件modi1.cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为:150200注意:错误的语句在//********error********的下面,修改该语句即可。提示:定义Numberl为一个整型数据位长的变量。1#include2//******error******3Struct4{5//******error******6intNumberl:1;7intNumber2;8}MyStruct;9voidmein()10{11MyStructmstr;12mstr.Numberl=150;13mstr.Number2=15;14//******error******15int*ptr=&mstr.Numberl;16cout<<*ptr<标准答案:(1)typedefstruct(2)intNumberl:32或intNumberl;(3)int*ptr=(int*)&mstr;知识点解析:结构体MyStruct有两个成员变量Numberl和Number2,主函数中定义结构变量mstr,并通过指针改变变量mstr内Numberl的值。[解题思路](1)第1标识下是定义结构体,结构体定义的一般形式为:struct<结构体名>{<成员列表>}<变量名列表>;程序当中定义结构体名放在后面,MyStruct为结构体变量类型,相当于typedef为已有的类型定义一个新的类型,第1个标识下应改为“typedefstruct”。(2)第2标识下是定义Numberl为一个整型数据变量,整型数据位数为32(4字节),因此第2个标识下应改成“intNumberl:32;”或“intNumberl:”。(3)ptr为整型数据指针,mstr为MyStruct类型结构变量,两者类型不一致应该做强制类型转换,第3个标识下应改成“int*ptr:(int*)&mstr;”,表示将mstr的地址给ptr,ptr指向MyStruct的第一个域Number1,Numberl也是整形,类型一致,故可通过ptr指针来改变Number1的值。二、简单应用题(本题共1题,每题1.0分,共1分。)2、使用VC6打开考生文件夹下的源程序文件modi2.cpp。阅读下列函数说明和代码。函数sort(int&m,int&n,int&1)实现将三个整数m、n、1由大到小输出。m最大,1最小。程序分析:程序实现时,可以把最大的数放到m上,先将n1与n进行比较,如果m2voidsort(int&m,int&n,int&1)3{45}6intmain()7{8intx=9;9inty=13;10intz=一3;iisort(x,y,Z);12cout<标准答案:1intt;2if(m知识点解析:sort函数实现3个参数的从大到小的排序,可以采用很多方法来排序,比如选择法排序、冒泡法排序等,这里要求采用比较的方法来实现排序,由于需要排序的数据较少,只有3个,逐个比较就可以找到最大最值小进行排序。[解题思路](1)由审题分析可知,三次比较便可将m、n、1排序。(2)在实现时,先将m与n进行比较,如果m三、综合应用题(本题共1题,每题1.0分,共1分。)3、使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:(1)基类Person完成打印功能,定义其中的打印函数为虚函数,请在注释//********1********后添加适当的语句。(2)类Man继承于Person,在构造函数中设置性别为1,请在注释//********2********后添加适当的语句。(3)类Woman继承于Person,在构造函数中设置性别为0,请在注释//********3********后添加适当的语句。(4)实现函数fun(),用于传递不同的类型,打印出性别,请在注释//********4********后添加适当的语句。输出的内容如下:Sex=ManSex=Woman注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。1#include2classPerson3{4public:5//********1********6voidprint(){);7intsexj8};9clasSMan:publicPerson10{11public:12Man()13{14//********2********1516}17voidprint()(18cout<<"Man"<标准答案:(1)将“voidprint()();”补充完整为:virtualvoidprint()();(2)添加语句:sex=1;(3)添加语句:sex=0;(4)添加语句:voidfbln(Person&p)知识点解析:在VC环境下打开程序,根据题干给出的几条功能要求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的main主函数开始入手,可以看出程序通过调用类的成员函数实现各种输出操作。[解题思路](1)题目1要求“基类Person完成打印功能,定义其中的打印函数为虚函数”。虚函数是函数的一种,定义虚函数,在函数名前声明virtual就可以了,所以第1个标识下的“voidprint(){);”语句修改为“‘virtualvoidprint(){);”。(2)题目2要求“类Man继承于Person,在构造函数中设置性别为1”。基类Person中变量sex是用来存放性别的,Man继承。Person,所以Man中性别的变量可以使用基类中的sex变量,设置性别为l,即“sex=1:”。(3)题目3要求“类Woman继承于Person,在构造函数中设置性别为0”。同(2),在第三个标识下添加“sex=0;”。(4)题目4要求“实现函数fun(),用于传递不同的类型,打印出性别”。根据“p.print0;”语句知道,fun()函数的形参为指针p,由于它调用了基类Person中的成员函数print(),所以p的基类为:Person,即添加函数fun()的定义为“voidftm(Person&p)”。国家二级C++机试(操作题)模拟试卷第7套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,此工程中含有一个源程序文件proj1.epp。其中位于每个注释“//ERROR****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:Constructorcalled.Thevalueis10Maxnumberis20Destructorcalled.注意:只能修改注释“//ERROR****found****”的下一行语句,不要改动程序中的其他内容。//proj1.cpp#include<iostream>USingnamespacestd;classMyClass{public://ERROR********found********voidMyClasS(inti){value=i;cout<<”Constructorcalled.”<<end1;}intMax(intX,intY){returnX>y?X:y;)//求两个整数的最大值//ERROR*******found*******intMax(intx,intY,intz=0)//求三个整数的最大值{if(x>y)returnx>z?X:z;elsereturnY>z?Y:z;}intGetValue()const{returnvalue;}~MyClass(){cout<<"Destructorcalled."<<end1;}private:intvalue;};intmain(){MyClasSobj(10);//ERROR*******found*******cout<<"Thevalueis"<<value()<<end1;cout<<"Maxnumberis"<<obj.Max(10,20)<<end1;return0;}标准答案:(1)MyClass(inti)(2)intMax(intx,inty,intz)(3)cout<<"Thevalueis"<<obj.GetValue()<<end1:知识点解析:(1)考查构造函数,构造函数前不加void或其他任何类型名,直接使用MyClass(inti)即可。(2)主要考查函数重载,在int:Max(intx,inty){returnx>y?x:y;}中两个形参变量都是int型,而语句intMax(intx,inty,intz=0)的前两个形参也都是int型,第三个形参定义默认值,那么这两个Max函数在调用时它们的参数个数和参数类型都一样,因为函数重载要求形参类型或形参个数不同,所以要把intz=0改为intz,才能构成函数重载。(3)主要考查成员函数的调用,因为value是私有成员,所以不能被类外函数直接调用,而且value()的用法也是错误的,可以使用成员函数obj.GetValue()得到value的值。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,该工程中含有一个源程序文件proj2.epp,请将堆栈类的定义补充完整。使程序的输出结果为:Theelementofstackare:4321注意:请勿修改主函数main和其他函数中的任何内容,只在横线处编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。//proj2.cpp#include<ioStream>USingnamespacestd;constintSize=5;classStack;ClassItem{public://********found********Item(constint&val):_______{}//构造函数对item进行初始化private:intitem;Item*next;friendclasSStack;};classStack{public:Stack():top(NULL){}~Stack();intPop();voidPush(constint&);private:Item*top;};Stack∷~Stack(){Item*P=top,*q;while(P!=NULL){q=P->next;//********found********_______;//释放P所指向的节点p=q;}}intStack∷Pop(){Item*temp;intret;//********found********_______;//使temp指向栈顶节点ret=top->item;top:top->next;deletetemp;returnret;}voidStack∷Push(constint&val){Item*temp=newItem(val);//********found********_______;//使新节点的next指针指向栈顶数据top=temp;}intmain(){Stacks;for(inti=1;i<Size;i++)s.Push(i);cout<<"Theelementofstackare:";for(i=1;i<Size;i++)cout<<s.Pop()<<’t’;return0;}标准答案:(1)item(val)(2)delete[]p(3)temp=top(4)temp->next=top知识点解析:(1)主要考查构造函数,对私有成员进行初始化,即item(val)。(2)主要考查使用delete语句释放指针,一般格式为:delete[]+指针。(3)指向栈顶节点的是top指针,要使temp指向栈顶节点,故使用语句temp=top;。(4)指向栈顶节点的是top指针,要使新节点的next指针指向栈顶数据,故使用语句temp->next=top:o三、综合应用题(本题共1题,每题1.0分,共1分。)3、请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程文件proj3,此工程中包含一个源程序文件proj3.epp,其中定义了用于表示平面坐标系中的点的类MyPoint和表示矩形的类MyRectangle;程序应当显示:(0,2)(2,2)(2,0)(0,0)4但程序中有缺失部分,请按照以下提示,把缺失部分补充完整:(1)在“//**1******found****”的下方是构造函数的定义,它用参数提供的左上角和右下角的坐标对up_left和down_right进行初始化。(2)在“//**2******found****”的下方是成员函数getDownLeft的定义中的一条语句。函数getDownLeft返回用MyPoint对象表示的矩形的左下角。(3)在“//**3******found****”的下方是成员函数area的定义,它返回矩形的面积。注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“****found****”。//proj3.cpp#include<iostream>usingnamespacestd;classMyPoint{//表示平面坐标系中的点的类doublex;doubley;public:MyPoint(doubleX,doubley){this->x=x;this->y=y;)doublegetX()const{returnx;)doublegetY()const{returny;)voidshow()const{cout<<’(’<<X<<’,’<<Y<<’)’;)};classMyRectangle{//示矩形的类MyPointup_left;//矩形的左上角顶点MyPointdown_right;//矩彤的右下角顶点public:MyRectangle(MyPointupleft,MyPointdownright);MyPointgetUpLeft()const{returnup_left;}//返回左上角坐标MyPointgetDownRight()const{returndownright;}/返回右下角坐标MyPointgetUpRight()const;//返回右上角坐标MyPointgetDownLeft()const;//返回左下角坐标doublearea()const;//返回矩形的面积};//**1***********found*********MyRectangle∷MyRectangle(_______):up_left(p1),down_right(p2){}MyPointMyRectangle∷getUpRight()const{returnMyPoint(down_right.getX(),upleft.getY());}MyPointMyRectangle∷getDownLeft()const{//**2*********found*******returnMyPoint(_______);}//**3*********found*******_______area()const{return(getUpLeft().getX()-getDownRight().getX())*(getDownRight().getY()-getUpLeft().getY());}intmain(){MyRectangler(MyPoint(0,2),MyPoint(2,0));r.getUpLeft().show();r.getUpRight().show();r.getDownRight().show();r.getDownLeft().show();cout<<r.area()<<end1;return0;}标准答案:(1)MyPointp1,MyPointp2(2)up_left.getX(),down_right.getY()(3)doubleMyRectangle∷知识点解析:(1)考查构造函数,构造函数中的参数要给私有成员赋值,在下句中up_left(p1),down_right(p2){}指出私有成员赋值要使用形参p1和p2,因此这里参数要定义为MyPointp1,MyPointp2。(2)主要考查成员函数的返回语句,MyPointMyRectangle∷getDownLeft()const函数要求返回一个左下角的点坐标,因此使用语句MyPoint(up_left.getX(),down_right.getY());。(3)主要考查成员函数的定义,在MyRectangle类中已经声明doublearea()const,因此此处只要添加doubleMyRectangle∷即可。国家二级C++机试(操作题)模拟试卷第8套一、基本操作题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:计算下式前11项的和,并作为函数值返回。例如,当形参n的值为10时,函数返回一0.204491。请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。注意:源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#includedoublefun(intn){inti,k;doubles,t;s=0;/*********found*********/k=【1】;for(i=1;i<=n;i++){/*********found*********/t=【2】;s=s+k*(2*i一1)*(2*i+1)/(t*t);/*********found*********/k=k*【3】;}returns;}main(){intn=一1;while(n<0){printf("pleaseinput(n>0):");scanf("%d",&n);)printf("\nTheresultis:%f\n“,fun(n));}标准答案:(1)1(2)2*i(3)(一1)知识点解析:填空1:由fun函数整体结构可以看出k的作用是赋值,并累加各项前边的正负号,由于第一项是正的,因此赋给k的值为1。填空2:此空下一行的表达式k*(2*i—1)*(2*i+1)/(t*t)累加的通项,k为正负号,由题目中的公式可知t=2*i。填空3:由于通项前边的正负号每次都要发生变化,因此k=k*(一1)。二、简单应用题(本题共1题,每题1.0分,共1分。)2、已知一个数列从0项开始的前3项:0、0、1,以后的各项都是其相邻的前3项之和。下列给定的程序中,函数fun的功能是:计算并输出该数列前n项的平方根之和sum。n的值通过形参传入。例如,当n=10时,程序的输出结果应为23.197745。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件NODll.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include#include#include#include/*********found*********/fun(intn){doublesum,s0,s1,s2,s;intk;sum=1.0;if(n<=2)sum=0.0;s0=0.0;s1=0.0;s2=1.0;for(k=4;k<=n;k++){s=sO+sl+s2;sHm+=sqrt(s);s0=s1;s1=s2;s2=s;}/*********found*********/returnsum}voidmain(){intn;system("CLS");printf("InputN=");scanf("%d",&n);printf("%f\n",fun(n));}标准答案:(1)doublefun(intn)(2)returnsum;知识点解析:(1)根据函数的返回值可知函数fun应定义为double类型。(2)语法错误,缺分号。三、综合应用题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。例如,若字符串数组中的M个字符串为{“AAAA”,“BBBBBBB”,“CC”},则合并后的字符串内容应该是“AAAABBBBBBBCC”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include#include#defineM3#defineN20voidfun(chara[M][N],char*b){}voidmain(){charW[M][N]={"AAAA","BBBBBBB","CC"};chara[100]={"#####################");intijprintf("Thestring:\n");for(i=0;i标准答案:voidfun(chara[M][N],char*b){inti,j,k=0;for(i=0;i知识点解析:本题考查:字符串连接操作。本程序中第1个for循环的作用是对二维数组行的控制,第2个循环的作用是从同一行中取出字符并存放到一维数组b中,语句是b[k++]=a[i][j];。国家二级C++机试(操作题)模拟试卷第9套一、基本操作题(本题共1题,每题1.0分,共1分。)1、请使用VC6或使用【答题】菜单打开考生文件夹proj1下的工程proj1,此工程包含有一个源程序文件proj1.cpp。其中位于每个注释“//ERROR****found****”之后的一行语句存在错误。请改正这些错误,使程序的输出结果为:(4,4)注意:只修改注释“//ERROR****found****”的下一行语句,不要改动程序中的其他内容。//proj1.cpp#include<iostream>usingnamespacestd;classPoint{public://ERROR*******found*******Point(doublex,doubley)_x(x),_y(y){)doubleGetX()const{return_x;}doubleGetY()const{return_y;}//ERROR*******found*******voidMove(doublexOff,doubleyOff)const{_x+=xOff;_y+=yOff;}protected:double_X,_y;};intmain(){Pointpt(1.5,2.5);pt.Move(2.5,1.5);//ERROR*******found*******以下语句输出pt成员_x和_y的值cout<<’(’<<pt._X<<’,’<<pt._y<<’)’<<end1;return0;}标准答案:(1)Point(doublex,doubley):_x(x),_y(y){}或Point(doublex,doubley){_x=;_y=y;}(2)voidMove(doublexOff,doubleyOff)(3)cout<<’(’<<pt.GetX()<<’,’<<pt.GetY()<<’)’<<end1:知识点解析:(1)主要考查的是构造函数的成员初始化列表的语法,在成员列表之前必须加“:”。(2)主要考查成员函数中const的使用,先看Move函数的函数体:{_x+=xOff;_y+=yOff;}可以看到Point类的两个私有成员_x和_y的值都发生了变化,因此Move函数不能使用const,因为只有在函数内不改变类的成员的值时才能使用const。(3)主要考查私有成员不能被类外函数调用的知识。题目要求输出pt成员_x和_y的值,从Point类中的函数doubleGetX()const{retum_x;}和doubleGetY()const{retum_y;},可以分别得到_x和_y的值,因此这里使用语句cout<<’(’<<pt.GetX()<<’,’<<pt.GetY()<<’)’<<end1;调用成员函数GetX()和GetY()来实现题目要求。二、简单应用题(本题共1题,每题1.0分,共1分。)2、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,此工程包含有一个源程序文件proj2.cpp。其中定义了Base1类、Base2类和Derived类。Base1是一个抽象类,其类体中声明了纯虚函数Show。Base2类的构造函数负责动态分配一个字符数组,并将形参指向的字符串复制到该数组中,复制功能要求通过调用strcpy函数来实现。Derived类以公有继承方式继承Base1类,以私有继承方式继承Base2类。在Derived类的构造函数的成员初始化列表中调用B鹪e类的构造函数。请在程序中的横线处填写适当的代码,然后删除横线,以完成Base1、B鹪e2和Derived类的功能。此程序的正确输出结果应为:I’maderivedclass.注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。//proj2.cpp#include<iostream>#include<cstring>usingnamespace

温馨提示

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

最新文档

评论

0/150

提交评论