自考C++程序设计2018年10月试题
自考C++程序设计2018年10月试题及答案解析
自考C++程序设计2018年10月试题及答案解析,该试卷为自考C++程序设计历年真题试卷,包含答案及详细解析。
一、单项选择题(本大题共20小题,每小题1分,共20分。)在每小题列出的备选项中只有一项是最符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均不得分。
1.若有以下类型标识符定义:char c="c"; int a=4; float f=3.14; double d=1.212; 则表达式C+a/(int)d+f的结果类型是( )
A.float
B.char
C.int
D.double
2.设x和y均为bool量,则x&&y为真的条件是( )
A.它们均为真
B.其中一个为真
C.它们均为假
D.其中一个为假
3.拷贝构造函数应该是( )
A.不带参数的构造函数
B.带有一个参数的构造函数
C.带有两个参数的构造函数
D.缺省构造函数
4.以下说法中正确的是( )
A.C++程序总是从第一个定义的函数开始执行
B.C++程序总是从main函数开始执行
C.C++中函数必须有返回值
D.C++中函数名必须唯一
5.下列虚基类的声明中,正确的是( )
A.class virtual B:public A
B.class B:virtual public A
C.class B:public A virtual
D.virtual class B:public A
6.下列哪个类型函数不适合声明为内联函数( )
A.函数体语句较多
B.函数体语句较少
C.函数执行时间较短
D.函数被频繁调用
7.以下类模板定义正确的为( )
A.template﹤class T﹥
B.template﹤class T, class int i﹥
C.template﹤class T, typename T﹥
D.template﹤class T1,T2﹥
8.C++中要实现动态联编,调用虚函数时必须使用( )
A.基类指针
B.类名
C.派生类指针
D.对象名
9.下列对静态成员的描述中,不正确的是( )
A.静态成员不属于对象,是类的共享成员
B.静态数据成员要在类外定义和初始化
C.调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针
D.非静态成员函数也可以操作静态数据成员
10.下列对派生类的描述中,错误的是( )
A.一个派生类可以作为另一个派生类的基类
B.派生类至少有一个基类
C.派生类的成员除了它自己的成员外,还包含了它的基类的成员
D.派生类中继承的基类成员的访问权限到派生类保持不变
11.下列函数原型声明语句中,错误的是( )
A.int f(void);
B.void f(hat);
C.int f(a);
D.void f(double a);
12.如果有int型变量a,则定义指向变量a的指针p正确的写法是( )
A.int p=&a
B.int * P=&a
C.int&p=*a
D.int*p = a
13.假定指针变量P定义为“int *P=new int(100);”,要释放P所指向的动态内存,应使用语句( )
A.delete p;
B.delete* p;
C.delete&p;
D.delete[ ]p;
14.假定A为一个类,则执行“A a[3], b(3);”语句时调用该类构造函数的次数为( )
A.3
B.4
C.5
D.9
15.C++中定义标准输入输出的库为( )
A.stdio
B.math
C.iostream
D.stdlib
16.允许用户为类定义一种模式,使得类中的某些数据成员及某些成员函数的返函值能取任意类型,这是一个( )
A.类模板
B.模板类
C.函数模板
D.模板函数
17.下列关于运算符重载的叙述中,正确的是( )
A.通过运算符重载,可以定义新的运算符
B.有的运算符只能作为成员函数重载
C.若重载运算符+,则相应的运算符函数名是+
D.重载一个二元运算符时,必须声明两个形参
18.当使用ofstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为( )
A.ios::out | ios::binary
B.ios::in | ios::binary
C.ios::out
D.ios::in
19.有关函数模板和模板函数说法错误的是( )
A.函数模板只是对函数的描述,编译器不为其产生任何执行代码,所以它不是一个实实在在的函数
B.模板函数是实实在在的函数,它由编译系统在遇到具体函数调用时所生成,并调用执行
C.函数模板需要实例化为模板函数后才能执行
D.当函数模板和一般函数同名时,系统先去匹配函数模板,将其实例化后进行调用
20.对类的构造函数和析构函数描述正确的是( )
A.构造函数可以重载,析构函数不能重载
B.构造函数不能重载,析构函数可以重载
C.构造函数可以重载,析构函数也可以重载
D.构造函数不能重载,析构函数也不能重载
二、填空题(本大题共20小题,每小题1分,共20分)请在每小题的空格中填上正确答案。错填、不填均无分。
11.将int类型指针p转换为char类型指针,则强制转换语句为_________。
12.当一个成员函数被调用时,该成员函数的_________指向调用它的对象。
13.在_________继承的情况下,基类数据成员在派生类中的访问权限保持不变。
14. Windows环境下,由C++源程序文件编译而成的目标文件的扩展名是_________。
15.具有至少一个纯虚函数的类是_________。
16. C++中字符串是通过字符数组来表示的,每一个字符串都有一个结尾字符_________。
17.C++中定义重载函数时,应至少使重载函数的参数个数或_________不同。
18.假定x=15,则表达式X﹤=10?20:30的值为_________。
19.不同对象可以调用相同名称的函数,但执行完全不同行为的现象称为_________。
110.假设类F的对象f是类A的成员对象,则“A a”语句执行时,先调用类_________的构造函数。
111.设"int a=3,b=4,C=5;",表达式“(a+b)﹥c&&b==c”的值是_________。
112.描述命题“A小于8或小于C”的表达式为_________。
113.C++中字符串"a+b=12 "的长度为_________。
114.C++类中构造函数的个数最多是无限个,析构函数的个数最多是_________个。
115.C++的静态数据成员需要在_________进行初始化,可以被该类的所有对象共享。
116.C++中一般的程序都要有两条语句,包含头文件“#include ﹤iostream﹥”语句和使用命名空间“_________”语句。
117.用new申请某一个类的动态对象数组时,在该类中必须能够匹配到没有形参的或缺省参数的_________,否则应用程序会产生一个编译错误。
118.C++中解决命名冲突的机制是_________。
119.拷贝构造函数使_________作为参数初始化创建中的对象。
120.假如一个类的名称为F,使用这个类的一个对象初始化该类的另一个对象时,可以调用_________构造函数来完成此功能。
三、改错题(本大题共5小题,每小题2分,共10分)
21.#include ﹤iostream.h﹥using namespace std;void setzero(int &a) {a=0; }int main( ){int x1=10; setzero(&x1);cout ﹤﹤x1﹤﹤ endl;return 0;}
22.改正后程序输出结果为2 5 8 11 14#include ﹤iostream. h﹥using namespace std;void main( ){int i=1;while(i﹤=15){i++; if(i%3==2) continue;else cout ﹤﹤1﹤﹤" ";}}
23.#include ﹤iostream. h﹥using namespace std;class Point{public: void init( ) { }static void output( ) { }};void main( ){Point P;Point:: init( );P. output( );}
24.#include ﹤iostream. h﹥using namespace std;class A{int x, y; public: void set(int a, int b){ x=a; y=b;}int getx( ){return x; }int gety( ){return y;}int sum( ){return x+y;}}; int main( ) {A a; a. set(3, 4);cout﹤﹤a.x﹤﹤a.y﹤﹤ a.sum( )﹤﹤ endl;return 0;}
25.申请一个长度为10的int型空间,之后释放该空间。#include ﹤iostream. h﹥using namespace std;int main( ){int *p=new int[ 10];delete p;return 0;}
四、完成程序题(本大题共5小题,每小题4分,共20分)
31.把从键盘上输入的一批整数(以-1作为终止输入的标志)保存到文本文件“a:xxk1.dat”中。#include ﹤iostream﹥#include ﹤fstream.h﹥#include ﹤stdlib. h﹥void main( ){ofstream fout("a: xxk1.dat");if( _____________ ) {cout﹤﹤"文件没有打开!"﹤﹤end;exit(1);}int x; cin﹥﹥x;while(x! =-1){fout ﹤﹤x﹤﹤' ';cin ﹥﹥x;}_____________; //关闭文件}
32.#include ﹤iostream. h﹥using namespace std;_____________;_____________;{T tmp =x*x+y*y+x*y; return tmp;}int main( ){int x1=1, y1 =4;float x2=1.1, y2=2.2;double x3=2.0, y3=3.1;cout﹤﹤fun(x1, y1)﹤﹤endl;cout ﹤﹤fun(x2, y2)﹤﹤endl;cout ﹤﹤fun(x3, y3)﹤﹤ endl;return 0;}
33.完成程序,使其输出结果为79#include ﹤iostream. h﹥using namespace std;int main( ){int a[6]={23,15,64,33,40,58};_____________;s1=s2=a[0];for(int *p=a+1; p﹤a+6; p++) {if(s1﹥*p) s1=*p;if _____________;}cout ﹤﹤s1 +s2 ﹤﹤endl;return 0;}
34.#include ﹤iostream.h﹥class Point{int X,Y;public:Point(int x=0, int y=0){ X=x; Y=y; Countp ++;}Point( point &p){X=p. X; Y=p.Y; }~Point( ){ Countp--; }_____________;static int Countp; void display( ){ cout ﹤﹤X﹤﹤", "﹤﹤Y﹤﹤", "; }};Point myfun( Point p1, Point p2, Point p3){ Point tmp(p1. X+p2. X+P3. X, p1. Y+p2.Y+p3. Y);return tmp;}int Point:: Countp =0;void main( ){ Point pp,p1(1,2),p2(1);Point p=myfun(pp0, pp1, pp2);p. display ( );_____________; //输出Countp的值}
35.完成程序,使其结果为 x=6,y=10 x=11,y=10#include ﹤iostream.h﹥using namespace std;class Sample{private: int x;_____________;public:Sample (int a);void print( );};Sample:Sample( _____________ ){ x=a; y=x++;}void Sample:: print( ){cout ﹤﹤"x="﹤﹤x﹤﹤",y="﹤﹤y﹤﹤end;}int Sample: : y =25;void main( ){ Sample s1(5);Sample s2(10);s1. print( );s2. print( );}
五、程序分析题(本大题共2小题,每小题10分,共20分)
41.#include ﹤iostream﹥using namespace std;void Result(char ch){switch(ch){case 'A':case 'a': cout ﹤﹤"well!";break;case 'B': case 'b':cout ﹤﹤"good!"; break;case 'C':case 'c':cout ﹤﹤"pass!";break;default:cout ﹤﹤"bad!"; break;}}void main( ){char a1='b', a2='C', a3='f';cout ﹤﹤"Results:"﹤ endl;Result(a1);Result(a2 );Result(a3);Result('A');}
42.#include ﹤iostream.h﹥using namespace std;class Sample {protected:int x;public:Sample( ) {x=0; }Sample(int val) { x=val;}void operator++( ){ x++;}};class Derived:public Sample{int y;public:Derived( ):Sample( ) { y=0;}Derived ( int val1, int val2):Sample(val1 ) { y=val2;}void operator--( ) {x--; y--;}void disp( ){cout﹤﹤"x="﹤﹤x﹤﹤",y="﹤﹤y﹤﹤ endl;}};void main( ) {Derived d(3, 5);D. disp( ); d++;D. disp( ); d--; d--;D. disp( );}
六、程序设计题(本大题共1小题,共10分)
51.设计一个圆类circle和一个桌子类table。circle类包含私有数据成员radius和求圆面积的成员函数getarea( );table类包含私有数据成员height和返回高度的成员函数getheight( )。roundtable类继承所有上述类的数据成员和成员函数,添加了私有数据成员color和相应的成员函数。其中,main函数已给出。请完成程序的其他部分。void main( ) { roundtable rt(0.8,1.2,"黑色");cout﹤"圆桌属性数据"﹤endl; cout﹤﹤"高度:"﹤﹤rt.getheight( )﹤"米"﹤﹤endl;cout﹤"面积:"﹤﹤tr. geared( )﹤"平方米"﹤﹤endl;cout﹤﹤"颜色"﹤﹤rt. getcolor( )﹤﹤endl; }
