1、C+程序设计真题 2016年 04月及答案解析(总分:100.00,做题时间:90 分钟)一、第部分 选择题(总题数:20,分数:20.00)1.要求指针 p既不可修改其本身的内容,也不可修改其所指向地址的内容,定义正确的是_(分数:1.00)A.const chai * p=“ABCD“;B.char * const p=“ABCD“;C.char const * p=“ABCD“;D.const char * const p=“ABCD“;2.在 C+中,类与类之间的继承关系具有_(分数:1.00)A.自反性B.对称性C.传递性D.反对称性3.下列关于对静态数据成员的描述中,正确的是_(分
2、数:1.00)A.静态数据成员不能用 public控制符修饰B.静态数据成员可以直接用类名或者对象名来调用C.静态数据成员不可以被类的对象调用D.静态数据成员不能用 private控制符修饰4.适宜采用 inline定义函数情况是_(分数:1.00)A.函数体含有循环语句B.函数体含有递归语句C.函数代码多、不常调用D.函数代码少、频繁调用5.通常拷贝构造函数的参数是_(分数:1.00)A.某个对象的成员名B.某个对象的指针名C.某个对象的引用名D.某个对象名6.下列不是类的成员函数的是_(分数:1.00)A.友元函数B.构造函数C.析构函数D.拷贝构造函数7.类 Cat是类 Animal的公
3、有派生类,类 Animal和类 Cat 中都定义了虚函数 func(),p 是一个指向类Animal对象的指针,则 p-Animal:func()将_(分数:1.00)A.调用类 Animal中的函数 func()B.调用类 Cat中的函数 func()C.根据 p所指的对象类型而确定调用类 Animal中或类 Cat中的函数 func()D.既调用类 Animal中函数,也调用类 Cat中的函数8.如果表达式+a 中的“+”是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为_(分数:1.00)A.operator+(1)B.operator+(a)C.operator+(a,1
4、)D.operator+()9.实现两个相同类型数加法的函数模板的声明是_(分数:1.00)A.add(T x,T y)B.T add(x,y)C.T add(T x,y)D.T add(T x,T y)10.以下基类中的成员函数表示纯虚函数的是_(分数:1.00)A.virtual void vf(int)B.void vf(int)=0C.virtual void vf()=0D.virtual void yf(int)11.假定一个类的构造函数为 A(int aa,int bb)a=aa+;b=a*+bb;,则执行 A x(4,5);语句后,x.a 和x.b的值分别为_(分数:1.00)
5、A.4和 5B.4和 20C.4和 24D.20和 512.下列运算符中,在 C+语言中不能重载的是_(分数:1.00)A.*B.=C.:D./13.在编译指令中,宏定义使用哪个指令_(分数:1.00)A.#ifB.#includeC.#defineD.#error14.以下能正确定义数组并正确赋初值的语句是_(分数:1.00)A.int N=5,bNN;B.int a2=1,3,4,5;C.int c2=1,2,3,4;D.int d32=1,2,3,4;15.关于函数模板,描述错误的是_(分数:1.00)A.函数模板必须由程序员实例化为可执行的函数模板B.函数模板的实例化由编译器实现C.一
6、个类定义中,只要有一个函数模板,则这个类是类模板D.类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化16.按照标识符的要求,不能组成标识符的是_(分数:1.00)A.连接符B.下划线C.大小写字母D.数字字母17.已知类 A是类 B的友元,类 B是类 C的友元,则_(分数:1.00)A.类 A一定是类 C的友元B.类 C一定是类 A的友元C.类 C的成员函数可以访问类 B的对象的任何成员D.类 A的成员函数可以访问类 B的对象的任何成员18.已知:p 是一个指向类 A数据成员 m的指针,A1 是类 A的一个对象。如果要给 m赋值为 5,正确的是_(分数:1.00)A.A1.p
7、=5;B.A1-p=5;C.A1.*p=5;D.*A1.p=5;19.关于 this指针的说法错误的是_(分数:1.00)A.this指针必须显式声明B.当创建一个对象后,this 指针就指向该对象C.动态成员函数拥有 this指针D.静态成员函数不拥有 this指针20.已知:func()函数是一个类的常成员函数,它无返回值,下列表示中,是正确的是_(分数:1.00)A.void func()const;B.const void func();C.void const func();D.void func(const);二、第部分 非选择题(总题数:20,分数:20.00)21. 1通常使用
8、对象的引用来初始化创建中的对象。 (分数:1.00)22.抽象类中至少要有一个 1 函数。 (分数:1.00)23.vector类中用于删除向量中的所有对象的函数是 1。 (分数:1.00)24.重载的运算符保持其原有的操作数、 1 和结合性不变。 (分数:1.00)25.执行下列代码 string str(“NihaoC+“); cout scorei; cout scorei; cout “average:“ average(score) endl; float average(float a) float sum=0; for(int i=0;i10;i+) _; return(sum/
9、10); (分数:4.00)_正确答案:()解析:int i=0;i10;i+ sum+=ai49.下面程序中 Base是抽象类。请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:Der1 called! Der2 called! #include iostream.h class Base public: _; ; class Der1:public Base public: void display()cout “Der1 called!“ endl; ; class Der2:public Base public: void display()cout “Der2 cal
10、led!“ endl; ; void fun(_) P-display(); void main() Der1 b1; Der2 b2; Base *p= fun(p); p= fun(p); (分数:4.00)_正确答案:()解析:virtual void display()=0; Base *p 解析 抽象类有纯虚函数,派生类为 display。结果 fun函数用指针做参数。50.#includeiostream using namespace std; int a=2,4,6,7,10; int void main() int i; _/调用 index函数,将数组 a中的元素 7替换为
11、 8。 for(_)/输出数组 a cout ai “ “; (分数:4.00)_正确答案:()解析:index(3)=8; i=0;i=4;i+或 i=0;i5;i+五、程序分析题(总题数:2,分数:10.00)51.#includeiostream using namespace std; class CBase public: void fun(); ; void CBase:fun() cout “调用基类类的函数 fun()/n“; class CDerived:public CBase public: void fun(); ; void CDerived:fun() cout “
12、调用派生类的函数 fun()/n“; void main() CDerived d1; CBase *pb= CBase d1.fun(); pb-fun(); pd.fun(); (分数:5.00)_正确答案:()解析:运行结果: 调用派生类的函数 fun() 调用基类类的函数 fun() 调用基类类的函数 fun()52.#include lostream #include string #include iomanip using namespace std; class student char name8; int deg; char level7; friend class pro
13、cess;/说明友元类 public: student(char na,int d) strcpy(name,na); deg=d; ; class process public: void trans(student switch(i) case 9: strcpy(s.level,“优“);break; case 8: strcpy(s.level,“良“);break; case 7: strcpy(s.level,“中“);break; case 6: strcpy(s.level,“及格“);break; default: strcpy(s.level,“不及格“); void sh
14、ow(student ; void main() student st=student(“Jack“,78),student(“Lucy“,92), student(“Lily“,62),student(“Tom“,99); process p; cout “结果:“ “姓名“ setw(6) “成绩“ setw(8) “等级“ endl; for(int i=0;i4;i+) p.trans(sti); p.show(sti); (分数:5.00)_正确答案:()解析:结果:姓名 成绩 等级 Jack Lucy Lily Tom 78 92 62 99 中 优 及格 优 六、程序设计题(总题
15、数:1,分数:10.00)53.定义一个图形类(figure),其中有保护类型的成员数据:高度(height)和宽度(width),一个公有的构造函数。由该图形类建立两个派生类:矩形类和等腰三角形类。在每个派生类中都包含一个函数 area(),分别用来计算矩形和等腰三角形的面积。其中,主函数已给出,请完成其他部分的代码。 int main() triangle tri(2,3); rectangle rec(2,3); cout “The area of triangle is:“ tri.area() endl; cout “The area of rectangle is:“ rec.ar
16、ea() endl; return 0; (分数:10.00)_正确答案:()解析:(答案不唯一) #include iostream using namespace std; class figure protected: double height,width; public: figure(double=0,double=0); ; figure:figure(double h,double w) height=h; width=w; class triangle:public figure public: double area(); triangle(double=0,double=
17、0); ; triangle:triangle(double h,double w):figure(h,w) height=h;width=w; double triangle:area() return 0.5 * height * width; class rectangle:public figure public: double area(); rectangle(double=0,double=0); ; rectangle:rectangle(double h,double w):figure(h,w) height=h; width=w; double rectangle:area() return height * width;