C++程序设计试题
课程代码:04737
一、单项选择题(本大题共20小题,每小题1分,共20分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。
1.在C++中,头文件扩展名为( )
A..cpp B..h
C..1ib D..obj
2.下列符号中,不属于分隔符的是( )
A., B./
C.; D.{}
3.可替换#definePI3.1415926的语句是( )
A.float PI 3.1415926; B.const float PI=3.1415926;
C.const PI(3.1415926); D.const 3.1415926;
4.布尔类型标识符是( )
A.void B.short
C.long D.bool
5.下列不是C++语言的基本数据类型的是( )
A.字符类型 B.整数类型
C.逻辑类型 D.枚举类型
6.C++允许在结构中定义函数,这些函数称为( )
A.静态函数 B.构造函数
C.析构函数 D.成员函数
7.设函数void inc(int)将形参加1,如有整型变量int i=10;则执行inc(i);后,i的值为( )
A.9 B.10
C.11 D.未知
8.下列哪种默认参数的声明是不正确的( )
A. int max(int a,int b,int c,int d=0);
B. int max(int a,int b,int c=0,int d=0);
C. int max(int a=0,int b,int c=0,int d=0);
D. int max(int a,int b=0,int c=0,int d=0);
9.设int &max(int &,int &)返回两参数中较大者,如有两整型变量int a=10;int b=15;在执行max(a,b)++后,a,b值分别为( )
A.10,15 B.11,15
C.10,16 D.1l,16
10.包含哪种语句的函数不能声明为内联函数( )
A.循环 B.变量自增自减
C.if...else… D.变量声明
11.定义函数模板中使用的参数类型标识符需使用下列哪组符号括起来( )
A.<> B.“”
C.() D.{}
12.一个类拥有多个构造函数,则这些构造函数间为( )
A.重载关系 B.重复关系
C.拷贝关系 D.无关系
13.对于拷贝构造函数point::point(point& p),下列说明正确的是( )
A.该函数只能访问P的私有成员 B.该函数不能访问P的公有成员
C.该函数可以访问P的私有和公有成员 D.该函数不能访问P的成员
14.使用delete[]删除对象数组时,描述正确的是( )
A.数组中各元素都调用析构函数 B.数组中各元素都调用构造函数
C.不调用析构函数 D.只有首元素调用析构函数
15.下列哪个指令属于条件编译指令( )
A. #elif B. #error
C. #pragma D. #include
16.设类Test中存在成员static int x,则下列哪种初始化方式是正确的( )
A.Test::int x=25; B.int x=25;
C.int Test::x=25; D.int Test x=25;
17.下列关于友元的描述错误的是( )
A.成员函数不可作友元 B.类可以作友元
C.普通函数可以作友元 D.静态函数可以作友元
18.在继承中,派生类拥有的基类个数为( )
A.0个 B.1个
C.多个 D.至少1个
19.基类中的protected成员,通过public派生,其在派生类中的可见性为( )
A.不可访问 B.private
C.protected D.public
20.下列哪个不是面向对象的关键要素( )
A.抽象性 B.结构性
C.封装性 D.多态性
二、填空题(本大题共20小题,每小题1分,共20分)
请在每小题的空格中填上正确答案。错填、不填均无分。
21.在STL库中用于实现数组内容反转的函数是______。
22.若要使用C++标准类库,需要指定相应的命名空间,所用的语句是______。
23.C++语言中的整数常量有4种描述类型:十进制常量、长整型常量、八进制常量和______。
24.声明一个名为a的整型引用变量所使用的语句是______。
25.重载的运算符仍保留原有的优先级、______和语法结构。
26.执行代码
int b=100;
cout< 27.带有纯虚函数的类称为抽象类,它只能作为______来使用。 28.使用______作为函数参数,实参对象和形参对象代表同一对象,改变形参对象的值就是改变实参对象的值。 29.UML中对象之间的静态关系是通过对象属性之间的连接反映的,称之为______。 30.如果一个模板声明列出多个参数,则多个参数之间必须使用逗号隔开,每个参数都必须重复使用关键字______。 31.C++类的构造函数名与______名称一样,且没有返回值。 32.C++规定,当一个成员函数被调用时,系统自动向它传递一个隐含的参数,该参数是一个指向调用该函数的对象的指针,该指针被称为______指针。 33.声明一个常成员函数Fun,其返回类型为char,第一个参数类型为int,第二个参数类型为double,函数Fun的声明原型是______。 34.C++语言中的“聚合”隐含了两种实现方式,一种是______,另一种是用一个类的对象作为一种广义的数据类型来定义整体对象的一个属性。 35.简单成员函数是指声明中不含const、______和static关键字的函数。 36.在派生类中继承的基类成员的初始化,需要由派生类的构造函数调用基类的______来完成。 37.在C++中,利用向量类模板定义一个具有20个int的向量,其所有元素被置为1,实现此操作的语句是______。 38.vector类中用于获取无需再次分配内存就能容纳的对象个数的方法是______。 39.动态联编是程序运行到需要的语句处才动态确定的,这称为______多态性。 40.C++重载“=”运算符的函数名是______。 三、改错题(本大题共5小题,每小题4分,共20分) 下面的每题中有一处错误,请用下横线标出错误所在行并给出修改意见 41.#include #define PI 3.14; void main() { double i; int r; cout<<″输入圆形半径:″; cin>>r; i=2 * PI * r; cout<<″圆形周长=″< i=PI * r * r; cout<<″圆形面积=″< } 42.#include class A { private: int x,y; public: A(int a=0,b=1); void Show(); }; A::A(int a,int b) { x=a; y=b; } void A::Show() { cout<<″x=″< 43.#include class A { unsigned char var; public: A(unsigned char x){ var=x: } void print(){ cout<<″var=″< } }; void main() { A a(″x″) ; a. print (); } 44. #include < iostream. h> class Class { public: void print(int a,int b) { cout< < ″int:″ < < a < < endl; cout < < ″int:″ < < b < < endl; } void print(char * a,char * b) { cout< < ″string:″ < < a < < endl; cout < <″ string:″ < < b < < endl; } void print(char * a,unsigned int b){ cout < < ″string:″ < < a < < endl; cout < < ″int:″ < < b < < endl; } }; void main() { Class cls; cls. print(10,20); cls. print(′c′,1); cls. print(′x′,′y′); cls. print(″Hello!″,0); } 45. #include < iostream. h > class Class { private: int val; public: void func( int a) { val = a; } }; void main() { Class * cls ; cls - > func(10) ; } 四、完成程序题(本大题共5小题,每题4分,共20分) 46.将下面程序补充完整,使程序计算100以内所有可被7整除的自然数之和。 #include void main() { int x=1; int sum=0; while(true) { if(x>100){ ______; } if(______){ sum=sum+x; } x++; } cout< 47.将下面程序补充完整,使程序执行结果为9。 #include class Class{ public: ______{ x=a; } ______{ return x * x; } private: int x; }; void main() { Class a(3); cout< 48.将下面程序补充完整,使程序正确的初始化私有变量var及释放资源。 class Class { private: int * var; public: Class(int num); ~Class(); }; Class::Class(int num) { _______; } Class::~Class() { _______; } 49.将下面程序补充完整,使程序的输出结果为: ClassA::Print ClassB::Print 程序如下: #include class Base { public: virtual void Print() const { cout<<″Base::Print″< }; class ClassA:public Base { public: void Print()const{cout<<″ClassA::Print″< class ClassB:public Base { public: void Print()const{cout<<″ClassB::Print″< void Print(______) { ______; } void main() { ClassA a; ClassB b; Print(a); Print(b); } 50.下列程序的运行结果如下: x=22,y=22 根据结果将程序补充完整。 #include template <______> void f(______) { if(sizeof(T1)>sizeof(T2)) x=(T1)y; else y=(T2)x; } void main(){ double x=134.2; int y=22; f(x,y); cout<<″x=″< 五、程序分析题(本大题共2小题,每小题5分,共10分) 请给出下面程序的输出结果 51. #include < iostream. h > class Class { public: static int var; Class() { var+ +; } }; int Class::var = 0; void main() { cout < < ″Class::var =″ < < Class: : var < < endl; Class cl ; cout < <″cl. var=″ < cout < < ″c2. var =″ < < c2. var < < endl; } 52. #include < iostream. h > class A { public: A(); void Show() ; ~A(); private: static int c; }; int A::c =0; A::A() { cout < < ″constructor.″ < < endl; c+ =10; } void A: :Show() { cout< < ″c=″ < A::~A() { cout < < ″destructor. ″ < < endl; } void main() { A a,b; a. Show(); b. Show(); } 六、程序设计题(本大题共l小题,共10分) 53.利用LOCATION类,使用继承定义圆类CIRCLE,圆由圆心和半径构成。提供得到圆心坐标和半径的成员函数、以及计算圆的周长和面积的成员函数。在主程序中创建两个圆A和B,圆心坐标分别为(0,3)、(3,7),按如下格式输出两个圆的圆心坐标、周长和面积,并计算和输出两个圆的圆心之间的距离。 A:(xl,y1,r1),Girth=g1,Area=a1 B:(x2,y2,r2),Girth=g2,Area=a2 A(xl,y1),B(x2,y2),Distance=d 定义LOCATION类,该类没有“继承”等现象。注意二维坐标点之间的距离公式。 class LOCATION{ double x,y; public: virtual double getx()const{return x;}; virtual double gety()const{return y;}; virtual double dist(LOCATION &s)const; LOCATION(double x,double y):x(x),y(y){};}; double LOCATION::dist(LOCATION &s)const{ double xd=s.x — x,yd=s.y — y; return sqrt(xd*xd+yd*yd);}