1、二级 C+笔试-303 及答案解析(总分:98.00,做题时间:90 分钟)一、选择题(总题数:30,分数:70.00)1.有如下程序:#include iostreamusing namespace std;class pointint x, y;public:point( int vx, int vy )x = vx;y = vy;point ( )x = 0;y = 0;point operator+( point pl )point p;int px = x + p1.x;int py = y + p1.y;return point( px, py );point operator-(
2、 point p1 )point p;int px = x - p1.x;int py = y - p1.y;return point( px, py );void print()coutx“, “yend1;int main ()point pl ( 10, 10 ), p2 ( 20, 20 );p1 = p1 + p2;p1.print ();return 0;执行后的输出结果是( )。(分数:2.00)A.10,10B.20,20C.10,20D.30,302.有以下程序: #includeiostream#includestringusing namespace std;int ma
3、in()char arr24;strcpy(arr0,“you“);strcpy(arr1,“me“);arr03=;class Derived2 : virtual public Basepublic:Derived2()x=20;class Derived : public Derivedl,protected Derived2;int main ()Derived obj;coutobj.xend1;return 0;该程序运行后的输出结果是( )。(分数:3.00)A.10B.20C.30D.030.下列关于单目运算符+、-的叙述中,正确的是( )。(分数:3.00)A.它们的运算对象
4、可以是任何变量和常量B.它们的运算对象可以是 char 型变量和血型变量,但不能是 float 型变量C.它们的运算对象可以是 int 型变量,但不能是 doule 型变量和 float 型变量D.它们的运算对象可以是 char 型变量、int 型变量和 float 型变量二、填空题(总题数:14,分数:28.00)31.在面向对象方法中,信息隐蔽是通过对象的 【1】 来实现的。(分数:2.00)填空项 1:_32.任何非空树中有且仅有一个结点没有前驱结点,该结点就是树的 【2】 。(分数:2.00)填空项 1:_33.常见的需求分析方法有 【3】 和面向对象的分析方法。(分数:2.00)填空
5、项 1:_34.在关系模型中,把数据看成一个二维表,每一个二维表称为一个 【4】 。(分数:2.00)填空项 1:_35.在数据库应用系统设计的需求分析阶段,需经过收集资料、分析整理、 【5】 、建立数据字典和用户确认等阶段。(分数:2.00)填空项 1:_36.下列程序在输入 m 后,求满足条件“n!=m=(n+1)!”的值 n,请将程序补充完整。#include iostreamusing namespace std;int main()int n,m, jc = 1;cinm;for(n=2;jc=m;n+)jc = jc*n;cout“n=“ 【6】 end1;return 0;(分数
6、:2.00)填空项 1:_37.以下函数的功能是删除字符串 s 中的所有数字字符。请填空。void dele (char *s)int n=O;for(i=0;si;i+)if( 【7】 )sn+=si;sn= /0;(分数:2.00)填空项 1:_38.下面程序的运行结果是 【8】 #include iostreamusing namespace std;int fun(int n)static int m = 2;m=m+n;return m;int main ( )int a = 3, b = 4;int x;x = fun( a );x = fun( b );coutxend1;ret
7、urn O;(分数:2.00)填空项 1:_39.如果类 Alpha 继承了类 Beta,则类 Alpha 称为派生类,类 Beta 称为 【9】 类。(分数:2.00)填空项 1:_40.实现编译时的多态性的机制称为 【10】 ,实现运行时的多态性的机制称为 【11】 。(分数:2.00)填空项 1:_41.下面程序是一个堆栈的类模板,在横线处填上适当语句,完成类模板的定义。#define MAXSIZE 100template class Tclass StackT sMAXSIZE;int top;public:stack()top=1;void push(T newValue)if(t
8、opMAXSIZE)top=top+1;stop=newValue;elsecout“堆栈满,无法进栈“end1;void pop();【12】 if(top1)coutstopend1;top=top-1;elsecout“堆栈空! “end1;(分数:2.00)填空项 1:_42.下面程序的输出结果是 【13】 。#include iostreamusing namespace std;class Aint a, b;public:A()a = b = 0;A(int aa, int bb ) : a(aA) , b(bB) cout “a=“a“,“b=“b“,“;A()cout“D“;
9、int main ( )A x, y(2, 3);return 0;(分数:2.00)填空项 1:_43.若有以下程序:#include iostreamusing namespace std;class Basepublic:void who()cout“class Base“end1;class Derivedl : public Basepublic:void who()cout“class Derivedl“end1;class Derived2 : public Basepublic:void who()cout“class Derived2“end1;int main()Base
10、*p;Derivedl obj1;Derived2 obi2;p=p=p-who ( );return 0;则该程序运行后的输出结果是 【14】 。(分数:2.00)填空项 1:_44.有以下程序:#include fstream#include stringusing namespace std;int main ()char ch = “The end“;ofstream outstr( “d:/put.txt“, ios_base: :app);for (int i = 0; i strlen( ch ); i+ )outstr.put(chi);outstr.close();retur
11、n 0;程序实现的功能是 【15】 。(分数:2.00)填空项 1:_二级 C+笔试-303 答案解析(总分:98.00,做题时间:90 分钟)一、选择题(总题数:30,分数:70.00)1.有如下程序:#include iostreamusing namespace std;class pointint x, y;public:point( int vx, int vy )x = vx;y = vy;point ( )x = 0;y = 0;point operator+( point pl )point p;int px = x + p1.x;int py = y + p1.y;retur
12、n point( px, py );point operator-( point p1 )point p;int px = x - p1.x;int py = y - p1.y;return point( px, py );void print()coutx“, “yend1;int main ()point pl ( 10, 10 ), p2 ( 20, 20 );p1 = p1 + p2;p1.print ();return 0;执行后的输出结果是( )。(分数:2.00)A.10,10B.20,20C.10,20D.30,30 解析:解析 本题主要考察 C+中运算符重载的机制与实现。运算
13、符重载函数一般分为成员函数形式和友元函数形式,这两种形式都可以访问类中的私有成员。本题中的运算符重载形式为成员函数形式。程序在类 point 中声明了私有数据成员 int x 和 int y,并定义了两种形式的构造函数以完成对对象的初始化:之后,程序对运算符“+”进行了重载,令其输入参数为类 point 的对象,输出为操作符“+”右侧该对象的私有数据成员 x 和 y 与操作符“+”左侧同类型对象的私有数据成员 x 和 y 的两数之和;print()函数则输出对象中数据成员的值。主函数中,实例化了类 point 的两个对象 p1 和 p2,并完成对对象的初始化。在语句“p1=p1+p2;”中,由
14、于操作符“+”左右两端的操作数为 point 类的对象,复合类 point 定义中的操作符“+”的重载函数,因此程序将调用重载后的操作符函数,并返回两 point 对象数据成员的加和值,覆盖对象 p1 的数据成员。因此 print()函数输出对象 p1 的数据成员值应该为:x=10+20=30,y=10+20=30。2.有以下程序: #includeiostream#includestringusing namespace std;int main()char arr24;strcpy(arr0,“you“);strcpy(arr1,“me“);arr03=;class Derived2 :
15、virtual public Basepublic:Derived2()x=20;class Derived : public Derivedl,protected Derived2;int main ()Derived obj;coutobj.xend1;return 0;该程序运行后的输出结果是( )。(分数:3.00)A.10B.20 C.30D.0解析:解析 本题中,虽然 Derived1 和 Derived2 都是由共同的基类 x 派生而来的,但由于引入了虚基类,使得它们分别对应基类的不同副本。这时数据成员 x 只存在一份拷贝,不论在类 Derived1 修改,还是在类 Derive
16、d2 中修改,都是直接对这惟一拷贝进行操作。本题程序执行语句“Derived obj”时,就会先调用虚基类 Base 的构造函数,使得 x=O,然后执行类 Derived1 的构造函数使得 x=10,再执行类Derived2 的构造函数,使得 x=20。最后输出 x 的值为 20。30.下列关于单目运算符+、-的叙述中,正确的是( )。(分数:3.00)A.它们的运算对象可以是任何变量和常量B.它们的运算对象可以是 char 型变量和血型变量,但不能是 float 型变量C.它们的运算对象可以是 int 型变量,但不能是 doule 型变量和 float 型变量D.它们的运算对象可以是 cha
17、r 型变量、int 型变量和 float 型变量 解析:解析 本题考核 C+的-和+运算符。在 C+中,-和+这两种运算符是单目运算符,其运算对象可以是整型、字符型、float 型和 double 型等基本数据类型。二、填空题(总题数:14,分数:28.00)31.在面向对象方法中,信息隐蔽是通过对象的 【1】 来实现的。(分数:2.00)填空项 1:_ (正确答案:封装性)解析:解析 封装性是指从外面只能看到对象的外部特性,即只需知道数据的取值范围和可以对该数据施加的操作,根本无须知道数据的具体结构以及实现操作的算法。对象的内部,即处理能力的实现和内部状态,对外是不可见的。因此,可以看出信息
18、隐蔽是通过对象的封装性实现的。32.任何非空树中有且仅有一个结点没有前驱结点,该结点就是树的 【2】 。(分数:2.00)填空项 1:_ (正确答案:根节点)解析:解析 在树结构中,每个节点之前有一个前件,称为父节点,没有前件的节点只有一个,称为树的根节点。33.常见的需求分析方法有 【3】 和面向对象的分析方法。(分数:2.00)填空项 1:_ (正确答案:结构化分析方法)解析:解析 本题是基础题,考核需求分析方法。常见的需求分析方法有结构化分析方法和面向对象的分析方法。34.在关系模型中,把数据看成一个二维表,每一个二维表称为一个 【4】 。(分数:2.00)填空项 1:_ (正确答案:关
19、系)解析:解析 关系数据模型把数据库表示为关系的一个集合。通俗地说,每个关系都类似一张表,或者在某种程度上类似一个“平面”记录文件。35.在数据库应用系统设计的需求分析阶段,需经过收集资料、分析整理、 【5】 、建立数据字典和用户确认等阶段。(分数:2.00)填空项 1:_ (正确答案:数据流图)解析:解析 简单地说,需求分析就是分析用户的要求。需要经过收集资料(信息需求,处理需求,安全性和完整性要求)分析整理数据流图数据字典用户确认四个步骤。36.下列程序在输入 m 后,求满足条件“n!=m=(n+1)!”的值 n,请将程序补充完整。#include iostreamusing namesp
20、ace std;int main()int n,m, jc = 1;cinm;for(n=2;jc=m;n+)jc = jc*n;cout“n=“ 【6】 end1;return 0;(分数:2.00)填空项 1:_ (正确答案:(n-2))解析:解析 研究本题中包含的语句“jc=m;”和“jc=jc*n:”,可发现本题是通过求出“n!”的值jc 并检查该值是否大于 m;如果小于等于,继续循环求出“(n+1)!”直到 jcm。跳出循环后,得到 n 的值并输出。题中要填出 n 的输出值,但应注意:如果直接填 n,是错误的。因为在循环语句中先求出jc=jc*n,如果这时的 jcm,循环还没结束,n
21、 的值就比要求的值大 1,结束循环后,执行 n+后,再判断 jc=m,所以 n 的值比所求的大 2,故应填入 n-2。37.以下函数的功能是删除字符串 s 中的所有数字字符。请填空。void dele (char *s)int n=O;for(i=0;si;i+)if( 【7】 )sn+=si;sn= /0;(分数:2.00)填空项 1:_ (正确答案:si0|si9)解析:解析 从一个字符串中删除某个字符的方法是从字符串的第 1 个字符开始一一判断该字符是否是要删除的字符,若不是,则把它放到结果字符串中;若是,则不放入结果字符串中。由此可知,本题空白处应判断 si是否为数字字符,只有在不是数
22、字字符的情况下才存入结果字符串中,所以应填入:si0|si9。最后应在结果字符串的末尾加上字符结束标识符0。38.下面程序的运行结果是 【8】 #include iostreamusing namespace std;int fun(int n)static int m = 2;m=m+n;return m;int main ( )int a = 3, b = 4;int x;x = fun( a );x = fun( b );coutxend1;return O;(分数:2.00)填空项 1:_ (正确答案:9)解析:解析 本题主要考察 C+中变量的存储类别及其生存周期。函数 fun()中的
23、变量 m 被定义为静态static 变量,即为局部静态变量,其特点是只在函数内部可见,但存储在全局数据区,函数执行过后变量仍存在。主函数第一次调用 fun()函数后,将实参 a=3 赋值给形参 n,因此返回值为:x=m= m+n=2+3=5。主函数再次调用 fun()函数时,由于 m 存储在全局数据区,因此其值仍然为 5,由此得到此次返回值:x=m=m+n=5+4=9。因此程序的最后输出为 9。39.如果类 Alpha 继承了类 Beta,则类 Alpha 称为派生类,类 Beta 称为 【9】 类。(分数:2.00)填空项 1:_ (正确答案:基)解析:解析 在 C+语言中,可以从一个类派生
24、出另一个类。派生其他类的类称为基类(或父类),被派生的类称为派生类(或子类)。一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承,从多个基类派生的继承称为多继承。40.实现编译时的多态性的机制称为 【10】 ,实现运行时的多态性的机制称为 【11】 。(分数:2.00)填空项 1:_ (正确答案:10静态联编(或静态绑定)11动态联编(或动态绑定))解析:解析 本题考核静态联编和动态联编的概念。41.下面程序是一个堆栈的类模板,在横线处填上适当语句,完成类模板的定义。#define MAXSIZE 100template class Tclass StackT
25、sMAXSIZE;int top;public:stack()top=1;void push(T newValue)if(topMAXSIZE)top=top+1;stop=newValue;elsecout“堆栈满,无法进栈“end1;void pop();【12】 if(top1)coutstopend1;top=top-1;elsecout“堆栈空! “end1;(分数:2.00)填空项 1:_ (正确答案:templateclassTvoidstackT:pop())解析:解析 本程序用类模板方式设计一个栈类 stackT,其中有两个私有数据成员 s(存放栈元素)和top(栈顶元素下标
26、),以及两个公有成员函数 push()(元素入栈)、pop()(元素出栈)。42.下面程序的输出结果是 【13】 。#include iostreamusing namespace std;class Aint a, b;public:A()a = b = 0;A(int aa, int bb ) : a(aA) , b(bB) cout “a=“a“,“b=“b“,“;A()cout“D“;int main ( )A x, y(2, 3);return 0;(分数:2.00)填空项 1:_ (正确答案:a=2,b=3DD)解析:解析 本题主要考核构造函数与析构函数的应用。主函数中定义 A 类对象 x 时无输出,定义对象y 时调用构造函数输出 a=2,b=3。在主函数结束前,对象 x,y 都调用各自的析构函数输出 DD。所以最后答案为 a=2,b=3DD。43.若有以下程序:#include iostreamusing namespace std;class Basepublic:void who()cout“class Base“end1;class Derivedl : public Basepublic:void who()cout“class Derivedl“end1;