《东南大学C++下期末考试笔试卷.pdf》由会员分享,可在线阅读,更多相关《东南大学C++下期末考试笔试卷.pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、一、选择题(每题一、选择题(每题 1 1 分,共分,共 1010题题,共共 1010 分分)1、在数组 int b4=1,3,4,4,7,9,10,8,5,6中,b2 2的值是D。A0B 4C 7D92、以下关于 this 指针描述正确的是C。A使基类公有成员在子类中可以被访问。Bthis 指针必须写成显式的。Cthis 指针总指向要调用的其成员函数的对象。D静态成员函数也存在 this 指针.3、如果通过 new 运算符动态分配失败,返回结果是B.A-1B0C1D不确定4、D是一种限制存取位置的线性表,元素的存取必须服从先进先出的规则.A顺序表B链表C栈D队列5、下列关于指针运算的描述,错误
2、的是D。A可将一个空指针赋给某个指针。B两个指针在一定条件下,可以进行相等和不等运算。C一个指针可以加上一个整数,指向当前元素后面的若干个位置的元素。D两个指针在一定条件下可以相加。6、实现深复制,下面的类成员函数中,A不是必须自定义的。A 构造函数C 析构函数B 复制构造函数D 复制赋值操作符函数7、设数组 int fibon10,int*pfib=fibon;则访问 fibon 数组第二个元素,以下写法错误的是B.A fibon1B *+fibonC +pfibD*(pfib+1)8、假设Person类包含公有成员name,私有成员id和受保护成员GetID,而Student类私有继承了
3、Person 类,那么 Student 类的成员函数可以直接访问C。APerson 类的所有成员B仅有 Person 类的公有成员 nameC仅有 Person 类的公有成员 name 和受保护成员 GetIDDPerson 类的任何成员都不能访问9、实现多态的派生类函数不必D。A与基类虚函数同名B与基类虚函数同参数表C与基类虚函数同返回类型D用 virtual 修饰10、分析下列代码是否存在问题,选择合适的选项:B。int main(void)int p=new int 10;p=new int 10;delete p;p=NULL;return 0;A没有问题B有内存泄漏C存在空悬指针D存
4、在重复释放同一空间二、填空题二、填空题(每空每空 1 1 分分,共共 2020 空空,共共 2020 分)分)1、有序数组 int B17中存放 17 个元素,用对半查找法查找 B11元素,则进行比较的数组下标值依次是8,12,10,11。2、设整数型指针 P1,P2 分别指向整数型数组 A10=1,2,0,4,5,9,7,8,6,4的第 2 和第 5 个元素,则 P2-P1=3,A5A2=9。3、单链表的结点分为指针域和数据域两部分。4、标明为无具体实现的虚函数是纯虚函数。包含该函数的类称为抽象类,不能用来定义对象.5、C+文件流采用两种格式访问文件:文本格式和二进制格式。前者按字符存取,后
5、者按字节存取.6、重载提取运算符和插入运算符 实现对象的输入和输出,需要将重载的运算符函数声明为该类的友元函数。7指针类型变量用于存贮地址,在内存中它占有 4 个存贮单元.8。设有说明:int a,k,m,*p1=&k,p2=&m;执行 a=p1=&m;后 a 的值是 0。9若有:int i,j=i;i=1;j=i+2;则 i=3。10构造函数是一种特殊的成员函数,它主要用来为对象分配内存空间,对类的数据成员进行初始化并执行对象的其他内部管理操作。11一般情况下,使用系统提供的默认析构函数就可以了,但当对象的成员中使用了new运算符动态分分配内存空间时,就必须定义析构函数以正确释放对象空间.为
6、了对象间能正确赋值,还必须要重载运算符=。12在类的派生过程中,要实现动态多态性,首先在类中必须要定义虚函数,还要在使用对象的函数中定义基类指针,使该指针指向不同类的对象。13.利用成员函数对双目运算符重载,其有1个参数,该参数为运算符的右操作函数。三、阅读程序题(每空三、阅读程序题(每空 1-21-2 分,共分,共 4040 分)分)1、以下程序的输出结果是:(本题 6 分,每空 2 分)include iostreamusing namespace std;void main(void)int a,b,k=4,m=6,*p1=&k,p2=m;int arr=30,25,20,15,10,5
7、,*p=arr;p+;cout(p+3)endl;a=(p1=&m);b=(p1)/(*p2)+7;cout a=”a endl;cout”b=y)return xz?x:z;elsereturn yz?y:z;Sample(int a)value=0;void main(void)Sample s(4);couts.valueendl;s。Max(10,20);以上程序中的错误有:Void 去掉重载产生二义性析构函数不能有参数私有数据成员不可类外访问3、指出程序的运行结果:(本题 8 分,每空 2 分)#include iostreamusing namespace std;class Ve
8、ctorint x,y;public:Vector();Vector(int i,int j)x=i;y=j;void disp()cout (x”,”y)”endl;void operator+=(Vector D)x+=D.x;y+=D。y;void operator-=(Vector D)x-=D。x;y=D.y;void main(void)Vector A(1,2),B(4,2);cout”A:;A.disp();coutB:”;B.disp();A+=B;coutA+=B:;A。disp();A=B;coutA-=B:;A.disp();程序运行结果:A(1,2)B(4,2)A+=
9、B(5,4)A-=B(1,2)4、下面是一个实现类的继承与派生的程序,请写出程序运行结果,并根据主函数中编程者的原意(调用派生类的成员函数),修改类的成员定义,然后写出修改后的运行结果(本题 10 分)#include iostreamusing namespace std;class Apublic:virtual void fun1()cout”A fun1endl;virtual void fun2()cout”A fun2”endl;void fun3()cout”A fun3endl;class B:public Apublic:void fun1()cout B fun1 endl
10、;void fun2(int x)cout ”B fun2”endl;void fun3()cout ”B fun3fun1();pfun2();p-fun3();修改前输出结果如下(每空 1 分):B fun1 B fun2 A fun3纠正错误:(每空 2 分)Fun3 改为虚函数 Fun2 参数 X 去掉修改后的输出结果如下(每空 1 分):B fun1 B fun2 B fun35、指出程序的运行结果:(本题 8 分,每空 1 分)include iostreamusing namespace std;class B1public:B1()coutB1:Constructor”endl
11、;B1()cout”B1:Destructorendl;;class B2public:B2()cout”B2:Constructor”endl;B2()coutB2:Destructorendl;;class B3public:B3()cout B3:Constructorendl;B3()coutB3:Destructorendl;class A:public B2,public B3B1 b1;public:A():B3(),B2(),b1()cout”A:Constructor”endl;A()cout”A:Destructor”endl;void main(void)A a;该程序的
12、执行结果如下:B2 Constructor B3 Constructor B1 Constructor A Constructor A Destructor B1 Destructor B2 Destructor B3 Destructor四、完善程序填空题四、完善程序填空题(每空每空 2 2 分,共分,共 1515 空,共空,共 3030 分)分)1.完成如下程序,要求实现方阵(矩阵行列数目相同)的上三角元素(含对角线元素)的和。includeiostreamusing namespace std;const int n=10;int main(void)int elementsnn=1,1
13、,1,;/*初始化二维数组,首行前三个元素为 1,其他元素为/int sum=0;for(int i=0;in;i+)for(int j=i;jn;j+)sum+=elementsij ;coutsumendl;/输出上三角的和/return 0;2.如下已定义点类 Point,包含x,y 坐标数据成员;再采用聚合和派生两种复合方式定义线段类 Line。完成 Line 类的定义与实现。class Pointfriend class Line;protected:double x,y;public:Point(double xv=0,double yv=0)x=xv;y=yv;double ar
14、ea()return 0;void show()cout点坐标:x=”x y=”y endl;;class Line:public PointPoint end;/终点public:Line(double xv1=0,double yv1=0,double xv2=0,double yv2=0):Point(xv1,yv1),end(xv2,yv2)double getLength()return sqrt((x-end.x)(x end.x)+(y end.y)(y-end。y));double area()return 0;void show()cout起点:n”;Point:show()
15、;coutinclude stdlib。h struct dateint year,month,day;;void main(void)date tt=2009,6,10;ofstream outdate;outdate.open(d:date.txt,ios::binary);if (!outdate)cerr ”n D:write1.dat not open includestringusing namespace std;class fruitstring name;/水果名称string shape;/水果形状string color;/水果颜色double weight;/水果均重d
16、ouble*price;/指向一年中每个季度水果的均价public:fruit(string N,string S,string C,double W,double*p=0):name(N),shape(S),color(C),weight(W),price(P)fruit()if(price)delete price ;fruit(fruit F)name=F。name;shape=F.shape;color=F.color;weight=F.weight;if(F.price)price=new double4;for(int i=0;i4;i+)pricei=F.pricei;else
17、price=F。price;void setprice()if(price)cout请输入每个季度namepricei;int main(void)double price_melon=new double4;fruit strawberry;/运行后 strawberry 中的数据成员依次为:,#,0,NULLFruit melon(”watermelon,sphere”,”black and green,8.5,price_melon);melon.setprice();fruit Dongtai_melon(melon);return 0;5。下面是一个选择排序函数,完成将数组元素值按上升的次序来排序,请完善程序。void sort(int a,int n)for(int i=0;i n;i+)int pos=i;for(int j=i+1;j n;j+)if(aj apos)pos=j;int temp=apos;apos=ai;ai=temp;