自考C++程序设计2013年10月试题
自考C++程序设计2013年10月试题及答案解析
自考C++程序设计2013年10月试题及答案解析,该试卷为自考C++程序设计历年真题试卷,包含答案及详细解析。
一、单项选择题(本大题共20小题,每小题1分,共20分。)在每小题列出的备选项中只有一项是最符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均不得分。
1.下列不属于C++关键字的是( )
A.extern
B.goto
C.free
D.default
2.C++中定义标准输入的库为( )
A.stdio
B.math
C.istream
D.stdlib
3.My是一个类,则执行语句My a[3], *[2]; 之后,自动调用构造函数次数为( )
A.2
B.3
C.4
D.5
4.下列语句错误的是( )
A.int val(20);
B.extern int val(20);
C.const int val;
D.extern const int val;
5.下列说法中,有关构造函数是正确的是( )
A.任何一类必定有构造函数
B.可定义没有构造函数的类
C.构造函数不能重载
D.任何一类必定有缺省的构造函数
6.下面关于类和对象说法不正确是( )
A.类由数据与函数组成
B.一个对象必属于某个类
C.对象是类的实例
D.一个类的对象只有一个
7.下面选项中不是类成员函数的是( )
A.构造函数
B.析构函数
C.友元函数
D.静态函数
8.在C++中类之间的继承关系具有( )
A.自反性
B.对称性
C.传递性
D.反对称性
9.C++中类的成员默认为( )
A.public
B.private
C.protected
D.static
10.C++中要实现动态联编,调用虚函数时必须使用( )
A.基类指针
B.类名
C.派生类指针
D.对象名
11.下面对析构函数的正确描述是( )
A.系统不能提供默认的析构函数
B.析构函数必须由用户定义
C.析构函数没有参数
D.析构函数可以设置默认参数
12.在下面的二维数定义正确的是( )
A.int ary[5][ ];
B.int ary[ ][5]={{0,1,2}};
C.int ary[ ][5];
D.int ary[5,5];
13.以下说法中正确的是( )
A.C++程序总是从第一个定义的函数开始执行
B.C++程序总是从main函数开始执行
C.C++中函数必须有返回值
D.C++中函数名必须唯一
14.对C++中主函数描述正确的是( )
A.名称为main,可为多个
B.名称不限,可为多个
C.名称为main,必须有且只能有—个
D.名称不限,必须有且只能有—个
15.下面声明纯虚函数语句正确的是( )
A.void fun( )=0;
B.virtual void fun( )=0;
C.virtual void fun( );
D.virtual void fun( ){ };
16.对于拷贝构造函数和赋值操作的关系,正确的描述是( )
A.拷贝构造函数和赋值操作是完全一样的操作
B.进行赋值操作时,不会调用类的构造函数
C.当调用拷贝构造函数时,类的对象正在被建立并被初始化
D.拷贝构造函数和赋值操作不能在同一个类中被同时定义
17.使用重载函数的目的是( )
A.共享函数数据
B.减少代码量
C.优化运行效率
D.提高可读性
18.C++语言对C语言做了很多改进,C++语言相对于C语言的最根本的变化是( )
A.增加了一些新的运算符
B.允许函数重载,并允许设置缺省参数
C.规定函数说明符必须用原型
D.引进了类和对象的概念
19.假定有“char *p="Hello";”,若要输出这个字符串的地址值正确的写法为( )
A.cout﹤﹤*p;
B.cout﹤﹤p;
C.cout﹤﹤&p;
D.cout﹤﹤(void*)p;
20.从本质上看,引用变量是被引用变量的( )
A.拷贝
B.别名
C.复制
D.克隆
二、填空题(本大题共20小题,每小题1分,共20分)请在每小题的空格中填上正确答案。错填、不填均无分。
11.C++程序的编译是以_________为单位进行的。
12.C++语言支持的两种多态性分别是编译时的多态性和_________的多态性。
13.重载的运算符保持其原有的操作符个数、_________和结合性不变。
14.在C++中,函数的参数有两种传递方式,它们分别是值传递和_________。
15.含有_________的类称为抽象类。
16.C++程序运行时的内存空间可以分成全局数据区,堆区,栈区和_________。
17.对于无返回值函数,定义函数时要用_________修饰函数类型。
18.定义重载函数必须在参数的个数或参数的_________上与其它同名函数不同。
19.拷贝构造函数是在用一个对象初始化另一个对象时被调用,系统缺省的拷贝构造函数的工作方法是_________。
110.以面向对象方法构造的系统,其基本单位是_________。
111.C++中定义友元函数使用的关键字为_________。
112.当一个成员函数被调用时,该成员函数的_________指向调用它的对象。
113.类可将实现细节隐藏起来,这种机制称为_________。
114.在面向对象的程序设计中,通过封装实现数据隐藏;通过_________实现代码的复用。
115.在公有继承的中基类数据成员在派生类中的访问权限_________。
116.复杂对象可以由简单对象构成,这种现象称为_________。
117.如有“char *p="Hello";”,则语句“cout﹤﹤*(p+1);”输出值是_________。
118.基类和派生类的关系称为_________。
119.C++对其对象的数据成员和成员函数的访问是通过_________来限制的。
120.假定x=10,则表达式x﹤=10?20:30的值为_________。
三、改错题(本大题共5小题,每小题2分,共10分)
21.#include ﹤iostream.h﹥ class point { private: float x, y; public: point(float a, float b){x=a; y=b;} void f( ){x=0; y=0;} void getx( ){cout﹤﹤x﹤﹤endl; void gety( ){cout﹤﹤y﹤﹤endl; }; main( ) { point a( 3.5); a.getx( ); }
22.#include ﹤iostream.h﹥ main( ){ int x=7; const int *p=&x; *p=99; cout﹤﹤*p﹤﹤endl; }
23.#include ﹤iostream.h﹥ class test{ private: int x; y; public: void f(int a, int b){x=a; y=b;} int max( ){return(x﹥y)?x:y;} }; main( ){ test a; a.f(1,3); cout﹤﹤a.max( )﹤﹤endl; }
24.#include ﹤iostream.h﹥ class test{ private: int x; public: test(int a){x=a;} void set(int a){x=a;} void get( ){cout﹤﹤x﹤﹤endl; }; class test1: public test{ private: int x; public: test1(int a){x=a;} void set(int a){x=a;} void get( ){cout﹤﹤′ ′﹤﹤endl; };
25.#include ﹤iostream.h﹥ class f{ private: int x,y; public: f1(int a, int b){x=a; y=b;} void print( ){cout﹤﹤x--﹤﹤y﹤﹤endl; }; main( ){ f a; float x= 1.0, y= 2.0; a.f1(x,y); a.print( ); }
四、完成程序题(本大题共5小题,每小题4分,共20分)
31.在答题纸上填上缺少的部分。源程序如下: #include ﹤iostream﹥ using namespace std; class base { int a, b; public: base(int x, int y){a=x; b=y;} void show( _________ ) { cout﹤﹤p.a﹤﹤″,″﹤﹤p.b﹤﹤endl; } }_________ void main( ) { base b(78,87); b.show(b); }
32.在答题纸上填上缺少的部分。源程序如下: #include ﹤iostream﹥ #include ﹤fstream﹥ using namespace std; void main( ) { _________ myf("aB.txt"); //定义输出流文件,并初始化 _________﹤﹤"This ia a TXT file"; //向文件输入字符串 myf.close( ); }
33.在下面程序中的答题纸上填上适当的程序,使程序的输出结果如下: 67,90 源程序如下: #include ﹤iostream﹥ using namespace std; class base { pnvate: int x,y; priblic: void initxy(int a,int b){x=a;y=b;} void show(base *p); }; inline void base::show( _________ ) { cout﹤﹤p-﹥x﹤﹤" "﹤﹤p-﹥y﹤﹤endl; } void print(base *p) { p-﹥show(p); } void main( ) { base a; a.initxy(67,90); print( _________ ); }
34.下面程序给出了一个从普通的基类派生出一个模板类的方法,在答题纸上填上缺少的部分。 #include ﹤iostream﹥ using namespace std; class Base { public: Base(int a){x=a;} int Getx( ){return x; void showb( ){cout﹤﹤x﹤﹤endl; private: int x; }; template﹤class T﹥ class derived: public Base { public: derived(T a, int b): _________ { y=a; } T Gety( ){ return y; } void showd( ){cout﹤﹤y﹤﹤" "﹤﹤Gets( )﹤﹤endl; private: _________ }; void main( ) { Base A(458); A. showb( ); derived ﹤char *﹥B("It is",1357); B.showd( ); }
35.下面程序的运行结果如下: 20,22 60,22 在答题纸上填上缺少的部分。源程序如下: #include ﹤iostream﹥ using namespace std; class base { private: const int a; static const int b; public: base(int); void Show( ); }; _________=22; _________ : a(i){ } //初始化 void base:: Show( ) { cout﹤﹤a﹤﹤","﹤﹤b﹤﹤endl; } void main( ) { base a1(20), a2(60); a 1.Show( ); a 2.Show( ); }
五、程序分析题(本大题共2小题,每小题10分,共20分)
41.给出下面程序的输出结果 #include ﹤iostream﹥ using namespace std; class base { int x; public: void setx(int a){x=a;} int getx( ){return x;} }; void main( ) { int *p; base a; a.setx(15); p=new int(a.getx( )); cout﹤﹤*p; }
42.给出下面程序的输出结果 #include ﹤iostream﹥ using namespace std; class base { private: int x; public: void setx(int a){x=a;} int getx( ){return x;} }; void main( ) { base a, b; a.setx(89); b=a; cout﹤﹤a.getx( )﹤﹤endl; cout﹤﹤b.getx( )﹤﹤endl; }
六、程序设计题(本大题共1小题,共10分)
51.在字符串类string中实现一个判断函数,该函数功能是统计某一字符串类对象(仅有单词和空格组成)有多少个单词,同时保存所有单词在字符串中的起始地址(设该字符串不超过100个单词) #include ﹤iostream﹥ #include ﹤string﹥ class str{ string s; int n, a[100], j, l; public: str(string &a){s=a; n=0; j=0; l=0;} ....test(....); int *geta( ){return a;} }; 请写出test函数的过程(如果需要形式参数,请给出形参类型和数量,以及返回值类型)
