【计算机类职业资格】二级C++笔试-18及答案解析.doc
《【计算机类职业资格】二级C++笔试-18及答案解析.doc》由会员分享,可在线阅读,更多相关《【计算机类职业资格】二级C++笔试-18及答案解析.doc(28页珍藏版)》请在麦多课文档分享上搜索。
1、二级 C+笔试-18 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.在 E-R 图中,用来表示实体之间是联系的图形是(分数:2.00)A.矩形B.椭圆形C.菱形D.平行四边形2.有如下程序: #include iostream using namespace std; class A public: A(int i)X=i; void dispa( )coutx,; private: int x; ; class B:public A public: B(int i):A(i+10)x=i; void dispb( )dispa( );c
2、outxendl; private: int x; ; int main( ) B b(2); b.dispb( ); return 0; 程序的输出结果是(分数:2.00)_3.下列关于虚函数的描述中,正确的是(分数:2.00)A.虚函数是一个 static 类型的成员函数B.虚函数是一个非成员函数C.基类中采用 virtual 说明一个虚函数后,派生类中定义相同类型的函数时可不必加 virtualD.派生类中的虚函数与基类中相同原型的虚函数具有不同的参数个数或类型4.有如下语句序列: int k=0: d0k+=5;cout$;wbile(k19); while(k-0)cout*; 执行
3、上面的语句后,序列输出字符$和*的个数分别是(分数:2.00)_5.下列函数中对调用它的函数没有起到任何作用的是(分数:2.00)A.void f1(double x)-x;B.double f2(double x)return x-1.5;C.void f3(double x)-x;D.double f4(double *x)-*x;return*x;6.有如下程序: #include iostream using namespaee std; class Point public: static int number; Point( )number+; Point( )number-; ;
4、 int Point:number=0; void main( ) Point*ptr; Point A,B; Point*ptr_point=new Point3; ptr=ptr_point; Point C; coutPoint:numberendl; delete ptr; 程序的输出结果是(分数:2.00)A.3B.4C.6D.77.已知 n 是一个 int 型变量,下列语句中错误的是(分数:2.00)A.long*p=new longn;B.long pn;C.long*p=new long(n);D.long p10;8.有如下函数模板声明: templatetypename T
5、 T Max(T a,T B) return(a=B) ?a:b; 下列对函数模板 Max 的调用中错误的是(分数:2.00)A.Max(3.5,4.5)B.Max(3.5,4);C.Maxdouble(3.5,4.5)D.Maxdouble(3.5,4)9.在 C+中,实现封装性需借助于(分数:2.00)A.枚举B.类C.数组D.函数10.针对数组定义 int data10;,下列叙述中错误的是(分数:2.00)A.用*data 可访问到数组的首元素B.用 data9可访问到数组的末元素C.用 data10访问数组元素会超出数组的边界D.data 共有 10 个元素,其首元素是 data11
6、1.在下列关系运算中,不改变关系表中的属性个数,但能减少元组个数的是(分数:2.00)A.并B.交C.投影D.笛卡儿乘积12.若有类声明: class MyClass public: MyClass( )cout1; ; 执行下列语句 MyClass a,b2,*P2; 以后,程序的输出结果是(分数:2.00)A.11B.111C.1111D.1111113.要定义数组 A,使得其中每个元素的数据依次为 3、9、4、8、0、0、0,错误的定义语句是(分数:2.00)_14.有如下程序: #include iostream using namespace std; class test priv
7、ate: int a; public: test( )cout“constructor“endl; test(int(分数:2.00)A.coutaendl; test(const test _test) a=_testa; cout“copy constructor“endl; test()cout“destructor“endl; ; int main( ) test A(3) return 0; 程序的输出结果是 A) 3destructorB.constructordestructorC.copy constructordestructorD.315.虚函数支持多态调用,一个基类的指针
8、可以指向派生类的对象,而且通过这样的指针调用虚函数时,被调用的是指针所指的实际对象的虚函数,而非虚函数不支持多态调用。有如下程序: #include iostream using namespaee std; class Base public: virtual void f( )cout“f0+“; void g( )cout“gO+“; ; class Derived:public Base public: void f( )cout“f+“; void g( )cout“g+“; ; int main( ) Derived d; Base*P=d: p-f( );p-g( ); retu
9、rn 0; 程序的输出结果是(分数:2.00)A.f+g+B.f0+g+C.f+g0+D.f0+g0+16.如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。有如下程序,没有使用多态机制: #include iostream using namespace std; class Base int a,b; public: Base(int x,inty)a=x;b=y; void show( )couta,bendl; ; class Derived:public Base int C,d; public: Derived(int x,int y,in
10、t z,intm):Base(x,y)c=z;d=m; void show( )coutc,dendl; int main( ) Base BI(50,50),*pb; Derived D1(10,20,30,40); pb= Point C; coutPoint:numberendl; delete ptr; 程序的输出结果是(分数:2.00)A.3B.4C.6 D.7解析:解析 只有在创建对象时才会调用类的构造函数,在定义指针时不会调用构造函数,只有给指针new 一个地址时会调用构造函数,所以本程序中一共生成了 6 个 Point 对象(A,B,C,newPoint3)。number 作为
11、静态数据成员,被同一类的不同对象所共享,故结果为 6。7.已知 n 是一个 int 型变量,下列语句中错误的是(分数:2.00)A.long*p=new longn;B.long pn; C.long*p=new long(n);D.long p10;解析:解析 对数组定义为普通数组时,要求数组的下标是常表达式,若定义成数组指针则不需要指定数组的大小。8.有如下函数模板声明: templatetypename T T Max(T a,T B) return(a=B) ?a:b; 下列对函数模板 Max 的调用中错误的是(分数:2.00)A.Max(3.5,4.5)B.Max(3.5,4); C
12、.Maxdouble(3.5,4.5)D.Maxdouble(3.5,4)解析:解析 在引用函数模板时,如果没在函数名和参数之间加上类型参数,就默认表示参数类型严格按照模板定义的类型匹配;如果在函数名和参数之间加上了类型参数,则对实参自动进行类型转换。9.在 C+中,实现封装性需借助于(分数:2.00)A.枚举B.类 C.数组D.函数解析:解析 类的三大特性是:封装、继承、多态。C+中实现信息的封装主要靠类的封装特性来实现。10.针对数组定义 int data10;,下列叙述中错误的是(分数:2.00)A.用*data 可访问到数组的首元素B.用 data9可访问到数组的末元素C.用 data
13、10访问数组元素会超出数组的边界D.data 共有 10 个元素,其首元素是 data1 解析:解析 在 C+中,数组的下标为 0-1,如果定义数组指针,则指针刚开始时是指向数组的头元素。11.在下列关系运算中,不改变关系表中的属性个数,但能减少元组个数的是(分数:2.00)A.并B.交 C.投影D.笛卡儿乘积解析:解析 本题考查数据库的关系运算。两个关系的并运算是指将第一个关系的元组加到第二个关系中,生成新的关系。因此,并运算不改变关系表中的属性个数,也不能减少元组个数。两个关系的交运算是包含同时出现在第一和第二个关系中的元组的新关系。因此,交运算不改变关系表中的属性个数,但能减少元组个数。
14、投影是一元关系操作。投影操作选取关系的某些属性,这个操作是对一个关系进行垂直分割,消去某些属性,并重新安排属性的顺序,再删除重复的元组。因此,投影运算既可以减少关系表中的属性个数,也可以减少元组个数。两个关系的笛卡儿积是指一个关系中的每个元组和第二个关系的每个元组连接。因此,笛卡儿积运算能够增加元组属性的个数。在上述 4 种运算中,交运算不改变关系表中的属性个数但能减少元组个数。12.若有类声明: class MyClass public: MyClass( )cout1; ; 执行下列语句 MyClass a,b2,*P2; 以后,程序的输出结果是(分数:2.00)A.11B.111 C.1
15、111D.11111解析:解析 只有在创建对象时才会调用类的构造函数,在定义指针时不会调用构造函数,本程序共生成了 3 个同类对象 a,b2。13.要定义数组 A,使得其中每个元素的数据依次为 3、9、4、8、0、0、0,错误的定义语句是(分数:2.00)_解析:解析 采用 int A =3,4,9,814.有如下程序: #include iostream using namespace std; class test private: int a; public: test( )cout“constructor“endl; test(int(分数:2.00)A.coutaendl; test
16、(const test _test) a=_testa; cout“copy constructor“endl; test()cout“destructor“endl; ; int main( ) test A(3) return 0; 程序的输出结果是 A) 3destructor B.constructordestructorC.copy constructordestructorD.3解析:解析 test 的构造函数重载,test A3调用 test(int A) 函数,然后删除时调用析构函数,故输出选项 A。15.虚函数支持多态调用,一个基类的指针可以指向派生类的对象,而且通过这样的指
17、针调用虚函数时,被调用的是指针所指的实际对象的虚函数,而非虚函数不支持多态调用。有如下程序: #include iostream using namespaee std; class Base public: virtual void f( )cout“f0+“; void g( )cout“gO+“; ; class Derived:public Base public: void f( )cout“f+“; void g( )cout“g+“; ; int main( ) Derived d; Base*P=d: p-f( );p-g( ); return 0; 程序的输出结果是(分数:2
18、.00)A.f+g+B.f0+g+C.f+g0+ D.f0+g0+解析:解析 类指针可以指向派生类对象,但是只能访问基类的数据成员和成员函数。f( )作为虚函数,在派生类中被重新定义,可以通过基类指针或者引用来访问基类和派生类中的同名函数。16.如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。有如下程序,没有使用多态机制: #include iostream using namespace std; class Base int a,b; public: Base(int x,inty)a=x;b=y; void show( )couta,bendl
19、; ; class Derived:public Base int C,d; public: Derived(int x,int y,int z,intm):Base(x,y)c=z;d=m; void show( )coutc,dendl; int main( ) Base BI(50,50),*pb; Derived D1(10,20,30,40); pb=&D1; pb-show( ); return 0; 程序的输出结果是(分数:2.00)A.10,20 B.30,40C.20,30D.50,50解析:解析 pb 作为基类指针,可以指向派生类对象,但是它只能访问基类的成员函数,而不能访
20、问派生类的成员函数,所以 pb-show( );访问的是基类的 show( )函数,故打印 10,20。17.下列函数模板的定义中,合法的是(分数:2.00)_解析:解析 函数模板定义的一般格式为: Templatetypename 类型参数 返回类型 函数名(模板形参表) 函数体18.下列对列的叙述中,正确的是(分数:2.00)A.队列属于非线性表B.队列按“先进后出”的原则组织数据C.队列在队尾删除数据D.队列按“先进先出”原则组织数据 解析:解析 本题考查数据结构中队列的基本知识。队列是一种限定性的线性表,它只允许在表的一端插入元素,而在另一端删除元素,所以队列具有先进先出的特性。在队列
21、中,允许插入元素的一端叫做队尾,允许删除元素的一端则称为队头。19.某二叉树中有 n 个度为 2 的结点,则该二叉树中的叶子结点数为(分数:2.00)A.n+1 B.n-1C.2nD.n/2解析:解析 本题考查数据结构中二又树的性质。二叉树满足如下一条性质,即:对任意一棵二叉树,若终端结点(即叶子结点)数为 n0,而其度数为 2 的结点数为 n2,则 n0=n2+1。根据这条性质可知,若二叉树中有 n 个度为 2 的结点,则该二叉树中的叶子结点数为 n+1。20.对如图所示二叉树进行前序遍历的结果为 (分数:2.00)A.B.C. D.解析:解析 根据对二叉树根的访问先后顺序不同,分别称为前序
22、遍历、中序遍历和后序遍历。这 3 种遍历都是递归定义的,即在其子树中也按照同样的规律进行遍历。下面就是前序遍历方法的递归定义。当二叉树的根不为空时,依次执行如下 3 个操作:访问根结点,按前序遍历左子树,按前序遍历右子树。根据如上前序遍历规则来遍历本题中的二叉树。首先访问根结点,即 A,然后遍历 A 的左子树。遍历左子树同样按照相同的规则首先访问根结点 B,然后遍历 B 的左子树。遍历 B 的左子树,首先访问 D,然后访问 D 的左子树,D 的左子树为空,接下来访问 D 的右子树,即 Y。遍历完 B 的左子树后,再遍历 B 的右子树,即 E。到此遍历完 A 的左子树,接下来遍历 A 的右子树。
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 职业资格 二级 笔试 18 答案 解析 DOC
