1、二级 C+笔试-381 及答案解析(总分:98.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.在 E-R 图中,用来表示实体的图形是( )。(分数:2.00)A.矩形B.椭圆形C.菱形D.三角形2.假定其中的 x 的单位是角度且不考虑 的值的精度,则与数学公式 (分数:2.00)A.sqrt(cos()B.sqrt(abs(cos(x*3.14/180)C.sqrt(abs(cos(x*(/180)D.sqrt(fabs(cos(x*3.14/180)3.从工程管理角度,软件设计一般分为两步完成,它们是( )。(分数:2.00)A.概要设计与详细设计B.数据
2、设计与接口设计C.软件结构设计与数据设计D.过程设计与数据设计4.下列关于完全二叉树的叙述中,错误的是( )。(分数:2.00)A.除了最后一层外,每一层上的结点数均达到最大值B.可能缺少若干个左右叶子结点C.完全二叉树一般不是满二叉树D.具有结点的完全二叉树的深度为1og2+15.以下循环体的执行次数是( )。 main() int i,j; for(i0,j1;ij+1;i+2,j-)coutiendl; (分数:2.00)A.3B.2C.1D.06.下列关于 C+函数的说明中,正确的是( )。(分数:2.00)A.内联函数就是定义在另一个函数体内部的函数B.函数体的最后+条语句必须是 r
3、eturn 语句C.标准 C+要求在调用一个函数之前,必须先声明其原型D.编译器会根据函数的返回值数型和参数表来区分函数的不同重载形式7.若有如下语句 #includeiostream.h) void main() int x3; do XX-2; coutx; while(!(-x); 则上面程序段( )。(分数:2.00)A.输出的是 1B.输出的是 1 和-2C.输出的是 3 和 0D.是死循环8.有以下程序: #includeiostream using namespace std; Class A public: A()tout(“A“ ;classBpublic:B()cout“B
4、“; classC:public A B b; public: C()cout“C“; ;int main()C obj;return 0; 执行后的输出结果是( )。(分数:2.00)A.CBAB.BACC.ACBD.ABC9.若已定义 int a1,2,3,4,5,6,7,8,9,10,pa,i5; 则对数组元素的不正确的引用是( )。(分数:2.00)A.ap-B.*( void main() int x10,y20,z30; fun(x,y,z); coutx,y,zendl; 输出结果是( )。(分数:2.00)A.30,20,10B.10,20,30C.456,567,678D.6
5、78,567,456二、B填空题/B(总题数:14,分数:28.00)36.在面向对象方法中,类的实例称为 1。(分数:2.00)填空项 1:_37.一个算法通常由两种基本要素组成:一是对数据对象的运算和操作,二是 1。(分数:2.00)填空项 1:_38.关系操作的特点是 1 操作。(分数:2.00)填空项 1:_39.数据库保护分为安全性控制、 1、并发性控制和数据的恢复。(分数:2.00)填空项 1:_40.全面支持软件开发过程的软工具集合被称为 1。(分数:2.00)填空项 1:_41.将 xy*z 中的“+”用成员函数重载,“*”用友元函数重载应写为 1。(分数:2.00)填空项 1
6、:_42.指针变量所保存的不是一般的数据值,而是程序中另一个对象的 1。(分数:2.00)填空项 1:_43.下面程序的运行结果是_和_。 #includeiostream.h) #define N 10 #define s(x)x*x #define f(x)(x*x) void main() int i1,i2; i11000/s(N);i21000/f(N); couti1“i2; (分数:2.00)填空项 1:_44.根据输出结果填空完成下面程序。 #includeiostream.h class Test private: static int val; int a; public:
7、 static int func() void sfunc(Test ; class Derived:public Base public: void fun() _/显示调用基类的 fun 函数 cout“Derived:fun“endl; ;(分数:2.00)填空项 1:_46._是实现 C+语言编译时多态性的机制,_是实现 C+语言运行时多态性的机制。(分数:2.00)填空项 1:_47.下列程序的运行结果是_。 #includeiostream.h) class test private: int num; public: test(); int TEST()return num+10
8、0; test(); ; test:test()num0; test:test()cout“Destructor is active“endl; void main() test x3; coutx1.TEST()end1; (分数:2.00)填空项 1:_48.若下列程序运行时输出结果为 1,A,101 2,B,35 请将程序补充完整。 #includeiostream using namespace std; int main() void test(mt,char,double_); test(1,A,10.1); test(2,B); return 0; void test(int a
9、,char b,double c) couta,b,cendl; (分数:2.00)填空项 1:_49.友元类的所有成员函数都是另一个类的 1。(分数:2.00)填空项 1:_二级 C+笔试-381 答案解析(总分:98.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.在 E-R 图中,用来表示实体的图形是( )。(分数:2.00)A.矩形 B.椭圆形C.菱形D.三角形解析:解析 在 E-R 图中,矩形表示实体,菱形表示联系名,椭圆形表示实体的属性。2.假定其中的 x 的单位是角度且不考虑 的值的精度,则与数学公式 (分数:2.00)A.sqrt(cos()B
10、.sqrt(abs(cos(x*3.14/180)C.sqrt(abs(cos(x*(/180)D.sqrt(fabs(cos(x*3.14/180) 解析:解析 本题考查数学表达式的掌握,首先应转换为弧度,然后作为 COS 函数的参数,求绝对值,最后是开方函数。考生需要掌握的是常用的数学函数。3.从工程管理角度,软件设计一般分为两步完成,它们是( )。(分数:2.00)A.概要设计与详细设计 B.数据设计与接口设计C.软件结构设计与数据设计D.过程设计与数据设计解析:解析 从软件工程角度看,软件设计分为概要设计和详细设计。概要设计就是结构设计,其主要目标就是给出软件的模块结构。详细设计的首要
11、任务就是设计模块的程序流程、算法和数据结构,次要任务就是设计数据库。4.下列关于完全二叉树的叙述中,错误的是( )。(分数:2.00)A.除了最后一层外,每一层上的结点数均达到最大值B.可能缺少若干个左右叶子结点 C.完全二叉树一般不是满二叉树D.具有结点的完全二叉树的深度为1og2+1解析:解析 满二叉树指除最后一层外,每一层上所有结点都有两个子结点的二叉树。完全二叉树指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干叶子结点的二叉树。因此选项 A 叙述正确,而选项 B 叙述错误。由定义可知,满二叉树肯定是完全二叉树,而完全二叉树一般不是满二叉树。5.以下循环体的执行
12、次数是( )。 main() int i,j; for(i0,j1;ij+1;i+2,j-)coutiendl; (分数:2.00)A.3B.2C.1D.0 解析:解析 本题考查考生对 for 循环中三个表达式的执行顺序及使用方法。首先执行第一个表达式,然后判断第二个表达式是否成立,如果成立则执行循环体,然后执行第三个表达式,随后再去判断第二个表达式。根据这个顺序,可以委有容易的判断出,循环体只执行了一次。6.下列关于 C+函数的说明中,正确的是( )。(分数:2.00)A.内联函数就是定义在另一个函数体内部的函数B.函数体的最后+条语句必须是 return 语句C.标准 C+要求在调用一个函
13、数之前,必须先声明其原型 D.编译器会根据函数的返回值数型和参数表来区分函数的不同重载形式解析:解析 内联函数不是定义在另一个函数体内部的函数;而是将 incline 放在函数定义中函数类型之前;函数体的最后一条语句可以是任意的语句;编译器不会根据函数返回值的类型来区分重载形式,选项 D 错误。标准 C+要求在调用一个函数之前,必须先声明其原型。7.若有如下语句 #includeiostream.h) void main() int x3; do XX-2; coutx; while(!(-x); 则上面程序段( )。(分数:2.00)A.输出的是 1B.输出的是 1 和-2 C.输出的是 3
14、 和 0D.是死循环解析:解析 do-while 语句的一般格式为 do 循环体语句 while(表达式);,先执行循环体语句一次,再判断表达式的值,若为真则继续执行循环,否则终止循环。本题中,先执行 xx-2,即为 l。判断表达式的值,!(-x)为真,x=0,继续循环。再次执行循环体语句后,x-2,此时表达式的值为 0,结束循环。8.有以下程序: #includeiostream using namespace std; Class A public: A()tout(“A“ ;classBpublic:B()cout“B“; classC:public A B b; public: C()
15、cout“C“; ;int main()C obj;return 0; 执行后的输出结果是( )。(分数:2.00)A.CBAB.BACC.ACBD.ABC 解析:解析 本题考查的是类的继承和派生。系统首先要通过派生类的构造函数调用基类的构造函数,对基类成员初始化,然后对派生类中的新增成员初始化。9.若已定义 int a1,2,3,4,5,6,7,8,9,10,pa,i5; 则对数组元素的不正确的引用是( )。(分数:2.00)A.ap-B.*(是只能改变*p 的内容,constmt*const p;是指针的地址和*p 的内容都不能改变,Int *ps 是两者都能改变。30.如果表达式-x/y
16、 中的“-”和“/”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可以表示为( )。(分数:2.00)A.operator/(operator-(),;B.operator/(operator-(,; C.operator-().operator/(;D.operator/operator-();解析:解析 本题考查运算符的重载。假定已经作为某个类的成员函数重载了二元运算符+,且 c1、c2都是该类的对象,则 c1.operator+(c2)与 c1+c2 含义相同。如果+作为该类的非成员函数重载,则operator+(cl,c2)与 cl+c2 含义相同。同理,运算符“/”作
17、为友元函数重载,则(-x)/y 与表达式operator/(-x),y)相同。前缀运算符“-”作为友元函数重载,则-x 与 operator-(x)相同,所以组合起来是 operator/(operator-(x),y);,即 B 选项。31.下列叙述中正确的是( )。(分数:2.00)A.一个逻辑数据结构只能有一种存储结构B.数据的逻辑结构属于线性结构,存储结构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.一个逻辑数据结构可有多种存储结构,且各种存储结构影响数据处理的效率 解析:解析 数据的存储结构是指数据结构(数据的逻辑结构)在计算机中的表示,
18、又称物理结构。数据的存储结构有顺序存储结构和链式存储结构两种。不同存储结构的数据处理效率不同。根据以上分析可知,D 选项为正确答案。32.原因排除法属于( )。(分数:2.00)A.软件调试方法 B.黑盒测试方法C.白盒测试方法D.动态测试方法解析:解析 软件调试方法有:强行排错法;回塑法,原因排除法。33.对长度为 n 的线性表进行顺序查找,在最坏情况下所需要的比较次数为( )。(分数:2.00)A.10g2nB.n/2C.n D.n+l解析:解析 对线性表进行顺序查找,最坏情况下,如果从表头进行查找,要查找到表尾才能得出结果,因此需要比较 n 次。34.以下程序中调用 cin 函数给变量
19、a 输入数值的方法是错误的,其错误原是( )。 #includeiostream.h void main() int*p,*q,a,b; p void main() int x10,y20,z30; fun(x,y,z); coutx,y,zendl; 输出结果是( )。(分数:2.00)A.30,20,10B.10,20,30 C.456,567,678D.678,567,456解析:解析 本题考查函数中变量的作用范围,在主函数中给变量 x,y,z 赋值,然后将其作为实参传递给了函数 fun (),虽然在函数 fun()中改变了这 3 个变量的值,但只是同名的局部变量,不影响函数中变量的值,
20、所以在调用函数 fun()结束后,主函数 3 个变量的值未改变。二、B填空题/B(总题数:14,分数:28.00)36.在面向对象方法中,类的实例称为 1。(分数:2.00)填空项 1:_ (正确答案:对象。)解析:解析 类是具有具有相同特征的对象的抽象,对象是类的实例。37.一个算法通常由两种基本要素组成:一是对数据对象的运算和操作,二是 1。(分数:2.00)填空项 1:_ (正确答案:算法的控制结构。)解析:解析 算法的两个基本要素是:数据对象的运算和操作及算法的控制结构。38.关系操作的特点是 1 操作。(分数:2.00)填空项 1:_ (正确答案:集合。)解析:解析 在关系数据库中,
21、把数据表示成二维表,每一个二维表称为关系,因此关系其实是数据的集合,对关系的操作其实就是对数据组成的集合之间的操作。39.数据库保护分为安全性控制、 1、并发性控制和数据的恢复。(分数:2.00)填空项 1:_ (正确答案:完整性控制。)解析:解析 安全性控制:防止未经授权的用户有意或无意存取数据库中的数据,以免数据被泄露、更改或破坏,完整性控制:保证数据库中数据及语义的正确性和有效性,防止任何对数据造成错误的操作;并发性控制:正确处理好多用户、多任务环境下的并发操作,防止错误发生,数据的恢复:当数据库被破坏或数据不正确时,使数据库能恢复到正确的状态。40.全面支持软件开发过程的软工具集合被称
22、为 1。(分数:2.00)填空项 1:_ (正确答案:软件工程过程。)解析:解析 软件开发环境或称软件工程环境,它是全面支持软件开发过程的软件工具集合。41.将 xy*z 中的“+”用成员函数重载,“*”用友元函数重载应写为 1。(分数:2.00)填空项 1:_ (正确答案:x.operator+(operator*(y,z)。)解析:解析 运算符重载为成员函数的形式:函数类型 operator 运算符(形参表)函数体;运算符重载为友元函数的形式:friend 函数类型 operator 运算符(形参表)函数体;。一般来讲,单目运算符最好重载为成员函数,双目运算符最好重载为友元函数。运算符函数
23、有两种调用形式,第一种是像一般函数那样用函数名调用,即 y.operator*(z)或者 operator*(y,z);另一种是通过运算符构成表达式,即y*z。42.指针变量所保存的不是一般的数据值,而是程序中另一个对象的 1。(分数:2.00)填空项 1:_ (正确答案:内存地址。)解析:解析 指针变量指向的不是变量保存的数据值,而是变量的地址,所以指针变量保存的是对象的内存地址。43.下面程序的运行结果是_和_。 #includeiostream.h) #define N 10 #define s(x)x*x #define f(x)(x*x) void main() int i1,i2;
24、 i11000/s(N);i21000/f(N); couti1“i2; (分数:2.00)填空项 1:_ (正确答案:1000 10。)解析:解析 对于 define 宏定义语句,系统会在编译前进行替换。本题替换过程如下: i11000/s(N) i1=1000/s(10) i1=1000/10*10 i11000 i21000/f(N) i2=1000/(10) i2=1000/(10*10) i2=1044.根据输出结果填空完成下面程序。 #includeiostream.h class Test private: static int val; int a; public: stati
25、c int func() void sfunc(Test ; class Derived:public Base public: void fun() _/显示调用基类的 fun 函数 cout“Derived:fun“endl; ;(分数:2.00)填空项 1:_ (正确答案:Base:fun();。)解析:解析 本题考查的是成员函数的调用。 因为横线处的作用是调用基类的 fun 函数,又因为派生类也碉 tun()函数,所以必须对 fun()函数加以限定,即 Base:fun();。46._是实现 C+语言编译时多态性的机制,_是实现 C+语言运行时多态性的机制。(分数:2.00)填空项 1
26、:_ (正确答案:静态联编、静态绑定 动态联编、动态绑定。)解析:解析 C+语言编译时多态性的机制是静态绑定,实现 C+语言行时多态性的机制是动态绑定。47.下列程序的运行结果是_。 #includeiostream.h) class test private: int num; public: test(); int TEST()return num+100; test(); ; test:test()num0; test:test()cout“Destructor is active“endl; void main() test x3; coutx1.TEST()end1; (分数:2.0
27、0)填空项 1:_ (正确答案:100)解析:Destructor is active Destructor is active Destructor is active。 解析 本题考查考生基本的类的定义,构造函数以及对象数组的概念。48.若下列程序运行时输出结果为 1,A,101 2,B,35 请将程序补充完整。 #includeiostream using namespace std; int main() void test(mt,char,double_); test(1,A,10.1); test(2,B); return 0; void test(int a,char b,double c) couta,b,cendl; (分数:2.00)填空项 1:_ (正确答案:=3.5。)解析:解析 本题考查了函数默认参数的应用。本题中第一次调用 test()函数数值 1,A,10.11 第二次调用少了个实参:却要求输出 2,B,3.5,由此分析,应将 test()函数的第三个参数声明为默认参数。且默认为 3.5,才能达到要求输出结果。故应填入=3.5 或者 c=3.5。49.友元类的所有成员函数都是另一个类的 1。(分数:2.00)填空项 1:_ (正确答案:友元函数。)解析:解析 C+语言中友元类中的函数都是另一个类的友元函数。