您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 东南大学C++下期末考试笔试卷
一、选择题(每题1分,共10题,共10分)1、在数组intb[][4]={{1},{3,4},{4,7,9,10},{8,5,6}}中,b[2][2]的值是D。A.0B.4C.7D.92、以下关于this指针描述正确的是C。A.使基类公有成员在子类中可以被访问。B.this指针必须写成显式的。C.this指针总指向要调用的其成员函数的对象。D.静态成员函数也存在this指针。3、如果通过new运算符动态分配失败,返回结果是B。A.-1B.0C.1D.不确定4、D是一种限制存取位置的线性表,元素的存取必须服从先进先出的规则。A.顺序表B.链表C.栈D.队列5、下列关于指针运算的描述,错误的是D。A.可将一个空指针赋给某个指针。B.两个指针在一定条件下,可以进行相等和不等运算。C.一个指针可以加上一个整数,指向当前元素后面的若干个位置的元素。D.两个指针在一定条件下可以相加。6、实现深复制,下面的类成员函数中,A不是必须自定义的。A.构造函数B.复制构造函数C.析构函数D.复制赋值操作符函数7、设数组intfibon[10],int*pfib=fibon;则访问fibon数组第二个元素,以下写法错误的是B。A.fibon[1]B.*++fibonC.*++pfibD.*(pfib+1)8、假设Person类包含公有成员name,私有成员id和受保护成员GetID,而Student类私有继承了Person类,那么Student类的成员函数可以直接访问C。A.Person类的所有成员B.仅有Person类的公有成员nameC.仅有Person类的公有成员name和受保护成员GetIDD.Person类的任何成员都不能访问9、实现多态的派生类函数不必D。A.与基类虚函数同名B.与基类虚函数同参数表C.与基类虚函数同返回类型D.用virtual修饰10、分析下列代码是否存在问题,选择合适的选项:B。intmain(void){int*p=newint[10];p=newint[10];delete[]p;p=NULL;return0;}A.没有问题B.有内存泄漏C.存在空悬指针D.存在重复释放同一空间二、填空题(每空1分,共20空,共20分)1、有序数组intB[17]中存放17个元素,用对半查找法查找B[11]元素,则进行比较的数组下标值依次是8,12,10,11。2、设整数型指针P1,P2分别指向整数型数组A[10]={1,2,0,4,5,9,7,8,6,4}的第2和第5个元素,则P2-P1=3,A[5]-A[2]=9。3、单链表的结点分为指针域和数据域两部分。4、标明为无具体实现的虚函数是纯虚函数。包含该函数的类称为抽象类,不能用来定义对象。5、C++文件流采用两种格式访问文件:文本格式和二进制格式。前者按字符存取,后者按字节存取。6、重载提取运算符和插入运算符实现对象的输入和输出,需要将重载的运算符函数声明为该类的友元函数。7.指针类型变量用于存贮地址,在内存中它占有4个存贮单元。8.设有说明:inta,k,m,*p1=&k,*p2=&m;执行a=p1==&m;后a的值是0。9.若有:inti,&j=i;i=1;j=i+2;则i=3。10.构造函数是一种特殊的成员函数,它主要用来为对象分配内存空间,对类的数据成员进行初始化并执行对象的其他内部管理操作。11.一般情况下,使用系统提供的默认析构函数就可以了,但当对象的成员中使用了new运算符动态分分配内存空间时,就必须定义析构函数以正确释放对象空间。为了对象间能正确赋值,还必须要重载运算符=。12.在类的派生过程中,要实现动态多态性,首先在类中必须要定义虚函数,还要在使用对象的函数中定义基类指针,使该指针指向不同类的对象。13.利用成员函数对双目运算符重载,其有1个参数,该参数为运算符的右操作函数。三、阅读程序题(每空1-2分,共40分)1、以下程序的输出结果是:(本题6分,每空2分)#includeiostreamusingnamespacestd;voidmain(void){inta,b,k=4,m=6,*p1=&k,*p2=&m;intarr[]={30,25,20,15,10,5},*p=arr;p++;cout*(p+3)endl;a=(p1==&m);b=(*p1)/(*p2)+7;couta=aendl;coutb=bendl;}程序运行结果:10a=0b=72、改正以下程序的错误:(本题8分,每空2分)#includeiostreamusingnamespacestd;classSample{intvalue;public:voidSample(inta){value=a;}intMax(intx,inty){returnxy?x:y;}intMax(intx,inty,intz=0){if(xy)returnxz?x:z;elsereturnyz?y:z;}~Sample(inta){value=0;}};voidmain(void){Samples(4);couts.valueendl;s.Max(10,20);}以上程序中的错误有:Void去掉重载产生二义性析构函数不能有参数私有数据成员不可类外访问3、指出程序的运行结果:(本题8分,每空2分)#includeiostreamusingnamespacestd;classVector{intx,y;public:Vector(){};Vector(inti,intj){x=i;y=j;}voiddisp(){cout(x,y)endl;}voidoperator+=(VectorD){x+=D.x;y+=D.y;}voidoperator-=(VectorD){x-=D.x;y-=D.y;}};voidmain(void){VectorA(1,2),B(4,2);coutA:;A.disp();coutB:;B.disp();A+=B;coutA+=B:;A.disp();A-=B;coutA-=B:;A.disp();}程序运行结果:A(1,2)B(4,2)A+=B(5,4)A-=B(1,2)4、下面是一个实现类的继承与派生的程序,请写出程序运行结果,并根据主函数中编程者的原意(调用派生类的成员函数),修改类的成员定义,然后写出修改后的运行结果(本题10分)#includeiostreamusingnamespacestd;classA{public:virtualvoidfun1(){coutAfun1endl;}virtualvoidfun2(){coutAfun2endl;}voidfun3(){coutAfun3endl;}};classB:publicA{public:voidfun1(){coutBfun1endl;}voidfun2(intx){coutBfun2endl;}voidfun3(){coutBfun3endl;}};voidmain(void){A*p;Bb;p=&b;p-fun1();p-fun2();p-fun3();}修改前输出结果如下(每空1分):Bfun1Bfun2Afun3纠正错误:(每空2分)Fun3改为虚函数Fun2参数X去掉修改后的输出结果如下(每空1分):Bfun1Bfun2Bfun35、指出程序的运行结果:(本题8分,每空1分)#includeiostreamusingnamespacestd;classB1{public:B1(){coutB1:Constructorendl;}~B1(){coutB1:Destructorendl;}};classB2{public:B2(){coutB2:Constructorendl;}~B2(){coutB2:Destructorendl;}};classB3{public:B3(){coutB3:Constructorendl;}~B3(){coutB3:Destructorendl;}};classA:publicB2,publicB3{B1b1;public:A():B3(),B2(),b1(){coutA:Constructorendl;}~A(){coutA:Destructorendl;}};voidmain(void){Aa;}该程序的执行结果如下:B2ConstructorB3ConstructorB1ConstructorAConstructorADestructorB1DestructorB2DestructorB3Destructor四、完善程序填空题(每空2分,共15空,共30分)1.完成如下程序,要求实现方阵(矩阵行列数目相同)的上三角元素(含对角线元素)的和。#includeiostreamusingnamespacestd;constintn=10;intmain(void){intelements[n][n]={1,1,1,};/*初始化二维数组,首行前三个元素为1,其他元素为*/intsum=0;for(inti=0;in;i++)for(intj=i;jn;j++)sum+=elements[i][j];coutsumendl;/*输出上三角的和*/return0;}2.如下已定义点类Point,包含x,y坐标数据成员;再采用聚合和派生两种复合方式定义线段类Line。完成Line类的定义与实现。classPoint{friendclassLine;protected:doublex,y;public:Point(doublexv=0,doubleyv=0){x=xv;y=yv;}doublearea(){return0;}voidshow(){cout点坐标:x=x''y=yendl;}};classLine:publicPoint{Pointend;//终点public:Line(doublexv1=0,doubleyv1=0,doublexv2=0,doubleyv2=0):Point(xv1,yv1),end(xv2,yv2){}doublegetLength(){returnsqrt((x-end.x)*(x-end.x)+(y-end.y)*(y-end.y));}doublearea(){return0;}voidshow(){cout起点:\n;Point::show();cout终点:\n;end.show();}};3.下列程序将结构体变量tt中的内容写入D盘上的date.txt文件。#includefstream.h#includestdlib.hstructdate{intyear,month,day;};voidmain(void){datett={2009,6,10};ofstreamoutdate;outdate.open(d:\\date.txt,ios::binary);if(!outdate){cerr\nD:\\write1.datnotopenendl;exit(-1);}outdate.write((char*)&tt,sizeof(tt));outdata.close();}4.完善fruit类的构造函数、析构函数、深拷贝构造函数#includeiostream#includestringusingnamespacestd;classfruit{stringname;//水果名称stringshape;//水果形状stringcolor;//水果颜色doubleweight;//水果均重double*price;//指向一年中每个季度水果的均价public:fruit(stringN,stringS,stringC,dou
本文标题:东南大学C++下期末考试笔试卷
链接地址:https://www.777doc.com/doc-6310697 .html