【计算机类职业资格】二级C++笔试-370及答案解析.doc

上传人:王申宇 文档编号:1324608 上传时间:2019-10-17 格式:DOC 页数:32 大小:87KB
下载 相关 举报
【计算机类职业资格】二级C++笔试-370及答案解析.doc_第1页
第1页 / 共32页
【计算机类职业资格】二级C++笔试-370及答案解析.doc_第2页
第2页 / 共32页
【计算机类职业资格】二级C++笔试-370及答案解析.doc_第3页
第3页 / 共32页
【计算机类职业资格】二级C++笔试-370及答案解析.doc_第4页
第4页 / 共32页
【计算机类职业资格】二级C++笔试-370及答案解析.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

1、二级 C+笔试-370 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.关于类模板,下列表述不正确的是(分数:2.00)A.用类模板定义一个对象时,不能省略实参B.类模板只能有虚拟类型参数C.类模板本身在编译中不会生成任何代码D.类模板的成员函数都是模板函数2.下面不属于软件设计原则的是(分数:2.00)A.抽象B.模块化C.自底向上D.信息隐蔽3.有如下函数模板定义:templatetypename T1,typename T2,typename T3T2 plus T1 t1,T3 t3)return t1+t3;则以下调用中正确是(分

2、数:2.00)A.plus(3,5L);B.plus(3,5L);C.plusint(3,5L);D.plusint,double(3,5L);4.下列叙述中正确的是(分数:2.00)A.线性表是线性结构B.栈与队列是非线性结构C.线性链表是非线性结构D.二叉树是线性结构5.下列打开文件的表达式中,错误的是(分数:2.00)A.ofstream ofile;ofileopen(“C:/vc/abc.txt“,ios:binary);B.fstream iofile;iofileopen(“abc.txt“,ios:ate);C.ifstream ifile (“C:/vc /abc.txt“)

3、;D.cout.open(“C:/vc/abc.txt“,ios:binary);6.设有以下程序段:int a5=0,*p,*q;p=a;q=a;则下列选项中,合法的运算是(分数:2.00)A.p+qB.p-qC.p*qD.Pq7.若执行语句:coutsetfill(*)setw(10)123“OK“end1 后将输出(分数:2.00)A.*1230KB.123*OKC.*123*OKD.123*OK*8.用树形结构来表示实体之间联系的模型称为(分数:2.00)A.关系模型B.层次模型C.网状模型D.数据模型9.下列叙述中正确的是(分数:2.00)A.黑箱(盒)测试方法完全不考虑程序的内部结

4、构和内部特征B.黑箱(盒)测试方法主要考虑程序的内部结构和内部特征C.白箱(盒)测试不考虑程序内部的逻辑结构D.上述三种说法都不对10.有以下程序:#includeiostreamusing namespace std;class sampleprivate:int n;public:sample()sample(int m)n=m;sample add(sample s1,sample s2)this-n=s1.n+s2.n;return(*this);void disp()cout“n“nend1;int main()sample s1(10),s2(5),s3;s3add(s1,s2);

5、s3disp();return 0;程序运行后,输出的结果是(分数:2.00)A.n=10B.n=5C.n=20D.n=1511.以下程序执行后的输出结果是#includeiostreamusing namcspace std;void try(int,int,int,int);int main()int x,y,z,r;x=1;y=2;try(x,y,z,r);coutrend1;return 0;void try(int x,int y, int z,int r)z = x+y;x = x*x;y = y*y;r = z+x+y;(分数:2.00)A.18B.9C.10D.不确定12.下列

6、对派生类的描述中,错误的是(分数:2.00)A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类的成员D.派生类中继承的基类成员的访问权限到派生类中保持不变13.设树 T 的度为 4,其中度为 1,2,3,4 的结点个数分别为 4,2,1,1。则 T 中的叶子结点数为(分数:2.00)A.5B.6C.7D.814.假定 MyClass 为一个类,则该类的拷贝构造函数的声明语句为(分数:2.00)A.MyClassint s=O;class samplestatic int n;public:sample(int i)n=i;sta

7、tic void add()s+=n;int sample:s=O;int main()sample a(2),b(5);sample: :add();coutsend1;return 0;程序运行后的输出结果是(分数:2.00)A.2B.5C.7D.331.下面关于虚函数的描述中正确的是(分数:2.00)A.虚函数是一个静态成员函数B.虚函数是一个非成员函数C.虚函数既可以在函数说明时定义,也可以在函数实现时定义D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型32.下列叙述中正确的是(分数:2.00)A.数据的逻辑结构与存储结构必定一一对应B.由于计算机存储空间是向量式的存储结

8、构,因此,数据的存储结构一定是线性结构C.程序设计语言中的数组一般是顺序存储结构,因此,利用数组只能处理线性结构D.以上三种说法都不对33.下列类的定义中,有( ) 处语法错误。class Basepublic:Base()Base(int i)data=i;private:int data;class Derive: public Basepublic:Derive(): Base(O) Derive(int x)d=x;void setvalue(int i)data=i;private:d;(分数:2.00)A.1B.2C.3D.434.若有以下程序:#include iostreamu

9、sing namespace std;class Basepublic:Base()x=0;int x;class Derivedl: virtual public Basepublic:Derived1()x=10;class Derived2: virtual public Base publiciDerived2()x=20;class Derived :public Derived1,protected Derived2 ;int main()Derived obj;coutobj.xend1;return 0;该程序运行后的输出结果是(分数:2.00)A.20B.30C.10D.03

10、5.如果表达式 y*x+中,“*”是作为成员函数重载的运算符,“+”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可表示为(分数:2.00)A.operator+(0).operator*(y);B.operator*(x.operator+(0),y);C.operator*(operator+(x,O)D.operator*(operator+(x,0),y)二、填空题(总题数:14,分数:30.00)36.在一个容量为 25 的循环队列中,若头指针 front=16,尾指针 rear=9,则该循环队列中共有 【1】 个元素。(分数:2.00)填空项 1:_37.在面向对象

11、方法中,属性与操作相似的一组对象称为 【2】 。(分数:2.00)填空项 1:_38.Jackson 方法是一种面向 【3】 的结构化方法。(分数:2.00)填空项 1:_39.一个项目具有一个项目主管,一个项目主管可管理多个项目。则实体集“项目主管”与实体集“项目”的联系属于 【4】 的联系。(分数:2.00)填空项 1:_40.数据独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,所以,基于逻辑结构的应用程序不必修改,称为 【5】 。(分数:2.00)填空项 1:_41.假设 a、b 均是整型变量,则表达式 a=2,b=5,a+,b+,a+b 值为 【6】 。(

12、分数:2.00)填空项 1:_42.设在主函数中有以下定义和函数调用语句,且 fun()函数为 void 类型,请写出 fun()函数的首部 【7】 。int main()double s1022;int n;fun(s);return 0;(分数:2.00)填空项 1:_43.若有如下程序段:#includeiostreamusing namespace std;int main()char*p=“abcdefgh“,*r;long*q;q=(long*)p;q+;r=(char*)q; coutrendl;return 0;该程序的输出结果是 【8】 。(分数:2.00)填空项 1:_44

13、.表达式 c3=c1operator+(c2)或 c3=operator+(c1,c2)还可以表示为 【9】 。(分数:2.00)填空项 1:_45.下列程序的输出结果是 【10】 。#includeiostreamusing namespace std;void fun (int y=2;try(x,y,z,r);coutrend1;return 0;void try(int x,int y, int z,int r)z = x+y;x = x*x;y = y*y;r = z+x+y;(分数:2.00)A.18B.9C.10D.不确定 解析:解析 本题考核函数调用(参数的传递)。本题常见的错

14、误解答是:把 x=1,y=2 代入到函数 try 中,逐步计算出 r=8。最后得到 r 的输出值是 8。以下是正确解答,根据程序逐步分析:程序中定义了一个名为 try 的 void 型函数,即函数 try 没有任何返回值。而 try 函数在 main 函数中是以一条独立语句的方式被调用的,且 main 函数最后输出变量 r 的值。但在 main 函数中,并没有对变量 r 赋值。在 C语言中,数据只能从实参单向传递给形参,称为按值传递。也就是说,当简单变量作为实参时,用户不能在函数中改变对应实参的值。所以虽然在函数 try 中,r 的值为 8,但它并不能传递给实参,当然最终的输出肯定是不确定的随

15、机数了。12.下列对派生类的描述中,错误的是(分数:2.00)A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类的成员D.派生类中继承的基类成员的访问权限到派生类中保持不变 解析:解析 本题考核继承与派生。基类与,派生类的关系为:基类是对派生类的抽象,派生类是对基类的具体化。基类抽取了它的派生类的公共特征,而派生类通过增加信息将抽象的基类变为某种有用的类型,派生类是基类定义的延续。派生类是基类的组合。公有派生类的对象可以作为基类的对象处理。由此可知 A) 、B) 和 C) 选项都是正确的。而在继承中,采用不同的继承方式,将限制派

16、生类对基类成员的访问。所以 D) 选项是错误的。13.设树 T 的度为 4,其中度为 1,2,3,4 的结点个数分别为 4,2,1,1。则 T 中的叶子结点数为(分数:2.00)A.5B.6C.7D.8 解析:解析 根据给定的条件,在树中,各结点的分支总数为:41+22+13+41=15:树中的总结点数为:15(各结点的分支总数)+1(根结点)=16:非叶子结点总数为: 4+2+1+1=8。因此,叶子结点数为16(总结点数)-8(非叶子结点总数)=8。因此,本题的正确答案为 D。14.假定 MyClass 为一个类,则该类的拷贝构造函数的声明语句为(分数:2.00)A.MyClassint s

17、=O;class samplestatic int n;public:sample(int i)n=i;static void add()s+=n;int sample:s=O;int main()sample a(2),b(5);sample: :add();coutsend1;return 0;程序运行后的输出结果是(分数:2.00)A.2B.5 C.7D.3解析:解析 本题考核静态数据成员和静态成员函数的应用。程序中定义一个类 sample,它包括一个静态数据成员 n 和一个静态成员函数 add,并在类的构造函数中给类私有静态数据成员 n 赋值。在主函数 main 中,定义对象 a(2)

18、时,通过构造函数使静态数据成员 n 的值变为 2,在定义对象 b(5)时,通过构造函数使静态数据成员 n=5(覆盖了前面的 n=2),再执行 sample:add()使全局变量 s=5。31.下面关于虚函数的描述中正确的是(分数:2.00)A.虚函数是一个静态成员函数B.虚函数是一个非成员函数C.虚函数既可以在函数说明时定义,也可以在函数实现时定义D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型 解析:解析 本题考核虚函数的概念。虚函数是非静态的成员函数,它不能是友元函数,但可以在另一个类中被声明为友元函数。所以 A) 选项不正确;虚函数必须是类的成员函数,所以 B) 选项是错误

19、的:虚函数声明只能出现在类定义的函数原型声明中,而不能在成员函数的函数体实现的地方,所以 C) 选项是不正确的:一般要求基类中说明了虚函数后,派生类说明的虚函数应该与基类中虚函数的参数个数相等,对应参数的类型相同。如果不相同,则将派生类虚函数的参数类型强制转换为基类中虚函数的参数类型。故 D) 选项的说法是正确的。32.下列叙述中正确的是(分数:2.00)A.数据的逻辑结构与存储结构必定一一对应B.由于计算机存储空间是向量式的存储结构,因此,数据的存储结构一定是线性结构C.程序设计语言中的数组一般是顺序存储结构,因此,利用数组只能处理线性结构D.以上三种说法都不对 解析:解析 一种数据的逻辑结

20、构根据需要可以表示成多种存储结构,因此,数据的逻辑结构与存储结构不一定是一一对应的,因此选项 A 错误。计算机的存储空间是向量式的存储结构,但一种数据的逻辑结构根据需要可以表示成多种存储结构,如线性链表是线性表的链式存储结构,数据的存储结构不一定是线性结构,因此选项 B 错误。数组一般是顺序存储结构,但利用数组也能处理非线性结构。选项 C 错误。只有选项 D 的说法正确。33.下列类的定义中,有( ) 处语法错误。class Basepublic:Base()Base(int i)data=i;private:int data;class Derive: public Basepublic:D

21、erive(): Base(O) Derive(int x)d=x;void setvalue(int i)data=i;private:d;(分数:2.00)A.1B.2 C.3D.4解析:解析 本题考核派生类的定义和成员的访问权限。第一处错误:在派生类的构造函数 Derive(int x)中没有调用基类的构造函数对基类对象初始化:第二处错误:数据 data 是基类 Base 的私有成员,派生类 Derive 不能访问,所以在函数 setvalue 中对 data 的赋值是错误的。34.若有以下程序:#include iostreamusing namespace std;class Bas

22、epublic:Base()x=0;int x;class Derivedl: virtual public Basepublic:Derived1()x=10;class Derived2: virtual public Base publiciDerived2()x=20;class Derived :public Derived1,protected Derived2 ;int main()Derived obj;coutobj.xend1;return 0;该程序运行后的输出结果是(分数:2.00)A.20 B.30C.10D.0解析:解析 本题考核虚基类的应用。本题中,虽然 Deri

23、ved1 和 Derived2 都是由共同的基类 x 派生而来的,但山于引入了虚基类,使得它们分别对应基类的不同副本。这时数据成员 x 只存在一份拷贝,不论在类 Derived1 修改,还是在类 Derived2 中修改,都是直接对这惟一拷贝进行操作。本题程序执行语句“Derived obj”时,就会先调用虚基类 Base 的构造函数,使得 x=0,然后执行类 Derived1 的构造函数使得 x=10,再执行类 Derived2 的构造函数,使得x=20。最后输出 x 的值为 20。35.如果表达式 y*x+中,“*”是作为成员函数重载的运算符,“+”是作为友元函数重载的运算符,采用运算符函

24、数调用格式,该表达式还可表示为(分数:2.00)A.operator+(0).operator*(y);B.operator*(x.operator+(0),y);C.operator*(operator+(x,O) D.operator*(operator+(x,0),y)解析:解析 本题考核运算符的重载。假定已经作为某个类的成员函数重载了二元运算符 +,且 c1、c2都是该类的对象,则 c1operator+(c2)与 c1+c2 含义相同。如果十作为该类的非成员函数重载,则operator+(c1,c2)与 c1+c2 含义相同。同理,运算符*作为成员函数重载,则 y*(x+)与 y.o

25、perator*(x+)含义相同,后缀+作为友元函数重载,那么 x+与 operator+(x,O)含义相同,所以选项 C 是正确的。二、填空题(总题数:14,分数:30.00)36.在一个容量为 25 的循环队列中,若头指针 front=16,尾指针 rear=9,则该循环队列中共有 【1】 个元素。(分数:2.00)填空项 1:_ (正确答案:18)解析:解析 设循环队列的容量为 n。若 rearfront,则循环队列中的元素个数为 rear-front:若 rearfront,则循环队列中的元素个数为 n+(rear-front)。题中, fiont=16,rear=9, 即 rearf

26、ront, 所以, 循环队列中的元素个数为 m+(rear-front)=25+(9-16)=18。37.在面向对象方法中,属性与操作相似的一组对象称为 【2】 。(分数:2.00)填空项 1:_ (正确答案:类)解析:解析 在面向对象方法中,类描述的是具有相似性质的一组对象。所以,属性与操作相似的一组对象称为类。38.Jackson 方法是一种面向 【3】 的结构化方法。(分数:2.00)填空项 1:_ (正确答案:数据结构)解析:解析 Jackson 方法是一种面向数据结构的结构化方法。39.一个项目具有一个项目主管,一个项目主管可管理多个项目。则实体集“项目主管”与实体集“项目”的联系属

27、于 【4】 的联系。(分数:2.00)填空项 1:_ (正确答案:一对多)解析:解析 实体集“项目主管”与实体集“项目”的联系属于一对多的联系。40.数据独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,所以,基于逻辑结构的应用程序不必修改,称为 【5】 。(分数:2.00)填空项 1:_ (正确答案:物理独立性)解析:解析 逻辑独立性是指,由于数据的局部逻辑结构与总体逻辑结构之间也由系统提供映像,使得当总体逻辑结构改变时,其局部逻辑结构可以不变,从而根据局部逻辑结构编写的应用程序也可以不必修改。物理独立性是指,由于数据的存储结构与逻辑结构之间由系统提供映像,使得当

28、数据的存储结构改变时,其逻辑结构可以不变,所以,基于逻辑结构的应用程序不必修改。41.假设 a、b 均是整型变量,则表达式 a=2,b=5,a+,b+,a+b 值为 【6】 。(分数:2.00)填空项 1:_ (正确答案:9)解析:解析 本题考核运算符的应用,题中的逗号运算符用于将多个表达式串在一起,逗号运算符的左边总是不返回的,这就是说,逗号右边表达式的值才是整个表达式的值。逗号运算符的结合性为从左到右。所以从左开始计算,a 被赋值为 2,b 被赋值为 5,然后 a 和 b 分别自增 1,最后返回 a+b,即 9。42.设在主函数中有以下定义和函数调用语句,且 fun()函数为 void 类

29、型,请写出 fun()函数的首部 【7】 。int main()double s1022;int n;fun(s);return 0;(分数:2.00)填空项 1:_ (正确答案:void fun(b22))解析:解析 此题考核的知识点是函数的定义形式与数组名作为函数的参数。函数头的定义形式是“存储类型说明符数据类型说明符函数名(形参列表)”,此题没有涉及到函数的存储类别。如果函数的参数是数组,其第 1 维的长度可以省略。因此本题的函数首部可以写成:void fun(b22)。43.若有如下程序段:#includeiostreamusing namespace std;int main()ch

30、ar*p=“abcdefgh“,*r;long*q;q=(long*)p;q+;r=(char*)q; coutrendl;return 0;该程序的输出结果是 【8】 。(分数:2.00)填空项 1:_ (正确答案:efgh)解析:解析 本题定义了一个字符型指针变量 p,并通过赋初值让它指向了一个字符串,还定义了另一个字符型指针变量 r 和一个长整型指针变量 q。首先通过语句“a=(long*)p;”,把 p 的地址值强制转换为长整型地址值并赋值给 q,然后执行“q+:”,地址值增加了 4,执行语句“r=(char*)q;”,把长整型指针变量 q 的值再强制转换成字符型地址值并赋给 r,r

31、的值应为字符串中字符“e”的地址。最后输出r 指向的字符串。44.表达式 c3=c1operator+(c2)或 c3=operator+(c1,c2)还可以表示为 【9】 。(分数:2.00)填空项 1:_ (正确答案:c3=c1+c2)解析:解析 本题考核运算符的重载。这是运算符重载应用的两种形式。45.下列程序的输出结果是 【10】 。#includeiostreamusing namespace std;void fun (int &rf)rf*=2;int main()int num:500;fun(num);coutnumendl;return 0;(分数:2.00)填空项 1:_ (正确答案:1000)解析:解析 本题考核引用作为函数参数的使用。引用作为形参,它实际上就是实参,函数对形参的访问和修改就是对实参的访问和修改,题中函数 fun 对形参的操作是自增 2 倍,所以经过函数调用后,实参的值自增 2 倍,即输出 1000。46.在下面的程序的横线处填上适当的语句,是该程序的输出为 12。#includeiostreamusing namespace std;class Basepublic:int a;Base(int i)a=i;class Derived:public Baseint a;public:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1