1、二级 C+笔试 359 及答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.有如下程序: #includeiostream.h using namespace std; class Demo public: Demo() cout“default constructor/n“; Demo(const Demo ; Demo userCode (Demo b)Demo c(b);return c; int main() Demo a,d; cout“calling userCode()/n“; d=userCode(a); return 0
2、; 执行上面程序的过程中,构造函数 Demo()和Demo(const Demo double image()constreturn im; Complex im+=a.im; return *this; ; ostream int main() Complex x(1,2),y(2,3); tout(x+=y)endl; return 0; 执行这个程序的输出结果是( )。(分数:2.00)A.(1,-2)B.(2,3)C.(3,5)D.(3,1)3.将 E-R 图转换到关系模式时,实体与实体间的联系可以表示成( )。(分数:2.00)A.属性B.关系C.键D.域4.下列描述中正确的是( )
3、。(分数:2.00)A.程序就是软件B.软件开发不受计算机系统的限制C.软件既是逻辑实体,又是物理实体D.软件是程序、数据和相关文档的集合5.算法的空间复杂度是指( )。(分数:2.00)A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.算法执行过程中所需要的存储空间6.两个或两个以上模块之间联系的紧密程度称为( )。(分数:2.00)A.耦合性B.内聚性C.复杂性D.数据传输特性7.下列选项中合法的用户标识符是( )。(分数:2.00)A.10ngB._2TestC.3DmaxD.dat8.设计数据库的存储结构属于( )。(分数:2.00)A.需求分析B.概念设计C.逻
4、辑设计D.物理设计9.若有以下定义和语句: int s45,(*p)5; p=s; 则指针对 s 数组中第三个元素的正确引用形式是( )。(分数:2.00)A.p03B.p12C.p02D.p1310.下列对重载函数的描述中,错误的是( )。(分数:2.00)A.重载函数中不允许使用默认参数B.重载函数中编译是根据参数表进行选择的C.不要使用重载函数来描述毫不相干的函数D.构造函数重载将会给初始化带来多种方式11.有如下语句序列: int k=0; dok+=5;cout; while(k19); while(k-0)cout*; 执行上面的语句序列输出字符“”和“*”的个数分别是( )。(分
5、数:2.00)A.4 和 20B.5 和 20C.4 和 21D.5 和 2112.下列函数中,对调用它的函数没有起到任何作用的是( )。(分数:2.00)A.void f1(double B.double f2(double return x-1.5;C.void f3(double -x;D.double f4(double *-*x;return*x;13.假定 MyClass 为一个类,则执行 MyClass a b(2),*p;语句时,自动调用该类构造函娄( )次。(分数:2.00)A.2B.3C.4D.514.下列程序的执行结果是( )。 #includeiostream.h #i
6、ncludestdlib.h Class TestClass public: int x,y; TestClass()x=y=0; TestClass(int a,int b)x=a;y=b; void disp() cout“x=“x“,y=“yend1; ; void main() TestClass s1(2,3); s1.disp();(分数:2.00)A.x=2,y=2B.x=3,y=3C.x=2,y=3D.x=3,y=215.下列程序的输出结果是( )。 #includeiostream using namespace std; int main() char a=“Hello,T
7、est“; char *p=a; while(*p) if(*p=a protected: unsigned len; char*data; ; MyString:MyString(const char*s) len=strlen(s); data=new charlen+1); strcpy(data,s); int main() MyString a(“C+Programing“); MyString b(a); return 0; 在运行上面的程序时出错,出错的原因是( )。(分数:2.00)A.构造函数的实参不允许是本类的对象B.没有定义实现深层复制(深拷贝)的复制构造函数C.构造对象
8、 a 时实参与形参类型不符D.系统不能生成默认的复制构造函数18.对下列程序段的描述正确的是( )。 #includeiostream.h int fun(int,int); void main() coutfun(1,2)endl; int fun(int x,int y) return x+y; (分数:2.00)A.该函数定义正确,但函数调用方式错误B.该函数调用方式正确,但函数定义错误C.该函数定义和调用方式都正确D.该函数定义和调用方式都错误19.数据库技术的根本目标是要解决数据的( )。(分数:2.00)A.存储问题B.共享问题C.安全问题D.保护问题20.下列关于 getline
9、()函数的描述中,错误的是( )。(分数:2.00)A.该函数可以用来从键盘上读取字符串B.该函数读取的字符串长度是受限制的C.该函数读取字符串时,遇到终止符时便停止D.该函数中所使用的终止符只能是换行符21.对于拷贝初始化构造函数,正确的描述是( )。(分数:2.00)A.在 C+语言中,如果不自定义类的拷贝初始化构造函数,则每个类都有默认的拷贝初始化构造函数B.必须为每个类定义拷贝初始化构造函数C.如果要使用拷贝初始化构造函数,则必须在类中先定义D.当定义了类的构造函数时,如果要使用拷贝初始化构造函数,则必须定义拷贝初始化构造函数22.( )是以一种完全通用的方法来设计函数或类而不必预先说
10、明将被使用的每个对象的类型。(分数:2.00)A.模板B.类C.对象D.函数23.下列关于 C+函数的说明中,正确的是( )。(分数:2.00)A.内联函数就是定义在另一个函数体内部的函数B.函数体的最后一条语句必须是 return 语句C.标准 C+要求在调用一个函数之前,必须先声明其原型D.编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式24.关于运算符重载,下列表述中正确的是( )。(分数:2.00)A.C+已有的任何运算符都可以重载B.运算符函数的返回类型不能声明为基本数据类型C.在类型转换符函数的定义中不需要声明返回类型D.可以通过运算符重载来创建 C+中原来没有的运算符
11、25.有下列二叉树,对此二叉树前序遍历的结果为( )。 (分数:2.00)A.ACFHIBEDGB.ABCDEFGHIC.ABDEGCFHID.ABCDEFHGI26.下面有关重载函数的描述中,正确的是( )。(分数:2.00)A.重载函数必须具有不同的返回值类型B.重载函数形参个数必须不同C.重载函数必须具有不同的形参列表D.重载函数名可以不同27.程序中有如下语句 for(int i=0;i5;i+)cout*(p+i)“,“;能够依次输出 int 型一维数组 a的前 5 个元素。由此可知,变量 P 的定义及初始化语句是( )。(分数:2.00)A.int *p=a;B.int p=a;C
12、.*p=a;D.p=a;28.有如下的运算符重载函数定义:double operator+(int i,int k)return double(i+k);但定义有错误,对这个错误最准确的描述是( )。(分数:2.00)A.+只能作为成员函数重载,而这里的+是作为非成员函数重载的B.两个 int 型参数的和也应该是 int 型,而这里将+的返回类型声明为 doubleC.没有将运算符重载函数声明为某个类的友元D.C+已经提供了求两个 int 型数据之和的运算符+,不能再定义同样的运算符29.已知在函数 func()中语句 this-ff=0;与语句 ff=0;的效果完全相同。对于这一现象,下列表
13、述中错误的是( )。(分数:2.00)A.ff 是某个类的数据成员,func()是该类的友元函数B.ff 是某个类的数据成员,func()是该类的成员函数C.this-ff 和 ff 是同一个变量D.func 不是一个静态成员函数30.若有以下变量定义和函数调用语句: int a=5; fun( Test() n-=3; static int getNum()return n; private: static int n; ; int Test:n=1; int main() Test*p=new Test; delete p; cout“n=“Test:getNum()endl; retur
14、n 0; 执行后的输出结果是( )。(分数:2.00)A.n=0B.n=1C.n=2D.n=334.下列不属于软件工程 3 个要素的是( )。(分数:2.00)A.工具B.过程C.方法D.环境35.假定 MyClass 为一个类,那么下列的函数说明中,( )为该类的析构函数。(分数:2.00)A.voidMyClass();B.MyClass(int ;C.MyClass();D.MyClass();二、B填空题/B(总题数:15,分数:30.00)36.数据结构分为逻辑结构和存储结构,循环队列属于 1 结构。(分数:2.00)填空项 1:_37.队列是限定在表的一端进行插入和在另一端进行删除
15、操作的线性表。允许插入的一端称作 1。(分数:2.00)填空项 1:_38.在一个容量为 32 的循环队列中,若头指针 front=3,尾指针 rear=2,则该循环队列中共有 1 个元素。(分数:2.00)填空项 1:_39.一棵二叉树第 6 层(根结点为第一层)的结点最多为 1 个。(分数:2.00)填空项 1:_40.度为 10 的线性表进行冒泡排序,在最坏情况下需要比较的次数为 1。(分数:2.00)填空项 1:_41.表达式 x=operator-(y,z)可以表示为 1。(分数:2.00)填空项 1:_42.以下函数模板 max()的功能是返回数组 a 中最大元素的值。请将横线处缺
16、失部分补充完整。 templatetypename TT max(T a,int n) T m=a0 for(int i=1;in;i+) if(aim)_; return m; (分数:2.00)填空项 1:_43.重载的关系运算符和逻辑运算符的返回类型应当是 1。(分数:2.00)填空项 1:_44.如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问从基类继承的成员。下列程序没有使用多态机制,其输出结果是_。 #includeiostream using namespace std; class Base public: void print()coutB;; cl
17、ass Derived:public Base public: void print()coutD; int main() Derived* pd=new Derived(); Base* pb=pd; pb-print(); pd-print(); delete pd; return 0; (分数:2.00)填空项 1:_45.对于派生类的构造函数,在定义对象时构造函数的执行顺序为:先执行调用 1 的构造函数,再执行调用子对象类的构造函数,最后执行派生类的构造函数体中的内容。(分数:2.00)填空项 1:_46.动态多态性通过 1 实现。(分数:2.00)填空项 1:_47.执行下列程序的输
18、出结果是_: #includeiostream using namespace std; class TestClass1 public: void fun1()cout“TestClass1/n“; virtual void fun2()cout“TestClass1/n“; ; class TestClass2:public TestClass1 public: void fun1()cout“TestClass2/n“; void fun2()cout“TestClass2/n“; ; void f(TestClass1b.fun2(); int main() TestClass2 ob
19、j; f(obj); return 0; (分数:2.00)填空项 1:_48.定义一个函数名为 fun,返回值为 int,没有参数的纯虚函数的定义是 1。(分数:2.00)填空项 1:_49.重新定义标识符的作用域规定是外层变量被隐藏, 1 变量是可见的。(分数:2.00)填空项 1:_50.如果表达式 x=y*z 中的“*”是作为成员函数重的运算符,采用运算符函数调用格式,该表达式还可以表示为 1。(分数:2.00)填空项 1:_二级 C+笔试 359 答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.有如下程序: #includei
20、ostream.h using namespace std; class Demo public: Demo() cout“default constructor/n“; Demo(const Demo ; Demo userCode (Demo b)Demo c(b);return c; int main() Demo a,d; cout“calling userCode()/n“; d=userCode(a); return 0; 执行上面程序的过程中,构造函数 Demo()和Demo(const Demo ”将调用函数 Demo()两次。当一个对象作为实参传递给函数时,为初始化形参,要调
21、用复制构造函数:在函数返回一个对象时调用复制构造函数。所以语句“d=userCode(a);”调用复制构造函数 3 次。2.有如下程序: #includeiostream using namespace std; class Complex double re,im; public: Complex(double r,double i):re(r),im(i) double real()constreturn re; double image()constreturn im; Complex im+=a.im; return *this; ; ostream int main() Comple
22、x x(1,2),y(2,3); tout(x+=y)endl; return 0; 执行这个程序的输出结果是( )。(分数:2.00)A.(1,-2)B.(2,3)C.(3,5) D.(3,1)解析:解析 此题考查的是“+”运算符的重载。重载后的“+”运算符的功能是对参数的两部分分别进行加法运算,然后返回复数值。所以 x+=y 使得对象 x(1,2)与 y(2,3)的 re 和 im 分别相加,最后输出结果(3,5)。3.将 E-R 图转换到关系模式时,实体与实体间的联系可以表示成( )。(分数:2.00)A.属性B.关系 C.键D.域解析:解析 将 E-R 图转换成指定 RDBMS 中的关
23、系模式是数据库逻辑设计的主要工作。从 E-R 图到关系模式的转换是比较直接的,实体和联系都可以表示成关系。4.下列描述中正确的是( )。(分数:2.00)A.程序就是软件B.软件开发不受计算机系统的限制C.软件既是逻辑实体,又是物理实体D.软件是程序、数据和相关文档的集合 解析:解析 软件是运行在计算机硬件之上的逻辑实体,包括程序、数据和相关的文档,软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制。5.算法的空间复杂度是指( )。(分数:2.00)A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.算法执行过程中所需要的存储空间 解析:解析 一个算法的空间复杂度,
24、一般是指执行这个算法所需的存储空间。一个算法所占用的存储空间包括算法程序所占用的空间、输入的初始数据所占用的存储空间及算法执行过程中所需要的额外空间。6.两个或两个以上模块之间联系的紧密程度称为( )。(分数:2.00)A.耦合性 B.内聚性C.复杂性D.数据传输特性解析:解析 耦合性是模块间互相连接的紧密程度的度量,取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口。7.下列选项中合法的用户标识符是( )。(分数:2.00)A.10ngB._2Test C.3DmaxD.dat解析:解析 此题考查的是标识符。标识符是由数字、字母以及下划线构成,其第一个字符必须是字母或下划线,中间不
25、能有空格;标识符的长度是任意的,但由于编译系统的限制一般不超过 31 个字符;标识符中的大小写字母是不同的;定义标识符时不能采用系统的保留字。符合这些要求的只有选项 B)。8.设计数据库的存储结构属于( )。(分数:2.00)A.需求分析B.概念设计C.逻辑设计D.物理设计 解析:解析 物理设计阶段主要解决选择文件存储结构和确定文件存取方法的问题,包括选择存储结构、确定存取方法、选择存取路径、确定数据的存放位置。9.若有以下定义和语句: int s45,(*p)5; p=s; 则指针对 s 数组中第三个元素的正确引用形式是( )。(分数:2.00)A.p03B.p12C.p02 D.p13解析
26、:解析 “p=s;”语句将指针 p 指向数组 s。而数组为二维数组,下标标识由 0 开始,所以第二个元素是下标为 0 行的 2 列元素,即 p02。10.下列对重载函数的描述中,错误的是( )。(分数:2.00)A.重载函数中不允许使用默认参数 B.重载函数中编译是根据参数表进行选择的C.不要使用重载函数来描述毫不相干的函数D.构造函数重载将会给初始化带来多种方式解析:解析 选项 A)中,重载函数中是允许使用默认参数的;为了使重载函数有意义,不要使用重载函数来描述毫不相干的函数;重载函数中编译是根据参数表进行选择的,包括参数的个数和类型。11.有如下语句序列: int k=0; dok+=5;
27、cout; while(k19); while(k-0)cout*; 执行上面的语句序列输出字符“”和“*”的个数分别是( )。(分数:2.00)A.4 和 20 B.5 和 20C.4 和 21D.5 和 21解析:解析 此题考查的是 do.while 语句和 while 语句的使用。题目中 do.while 语句循环了 4 次,while 语句循环了 20 次,故最后输出字符“”4 个,字符“*”20 个。12.下列函数中,对调用它的函数没有起到任何作用的是( )。(分数:2.00)A.void f1(double B.double f2(double return x-1.5;C.voi
28、d f3(double -x; D.double f4(double *-*x;return*x;解析:解析 此题考查的是函数的调用和函数参数值的传递。选项 C)中函数 f3 的调用采用按值传递的方式,函数中对形参的修改不能改变实参的值,并且 f3 函数没有返回值,所以 f3 对调用它的函数没有起到任何的作用。选项 A)采用的是引用传递方式;选项 B)中 f2 有返回值;选项 D)中函数 f4 是指针调用并且函数有返回值。13.假定 MyClass 为一个类,则执行 MyClass a b(2),*p;语句时,自动调用该类构造函娄( )次。(分数:2.00)A.2 B.3C.4D.5解析:解析
29、 C+在创建一个对象时,会调用类的构造函数。语句 MyClass a b(2),*p;创建了两个对象a、b 和指针 p,在创建对象 a 和 b 后会调用构造函数,而创建指针 p 时,由于 p 本身不是对象,所以不调用类的构造函数。14.下列程序的执行结果是( )。 #includeiostream.h #includestdlib.h Class TestClass public: int x,y; TestClass()x=y=0; TestClass(int a,int b)x=a;y=b; void disp() cout“x=“x“,y=“yend1; ; void main() Te
30、stClass s1(2,3); s1.disp();(分数:2.00)A.x=2,y=2B.x=3,y=3C.x=2,y=3 D.x=3,y=2解析:解析 由主函数入手,定义了类 TestClass 的对象 s1(2,3),当类对象进入其作用域时调用构造函数,构造函数应该是调用具有参数的“TestClass(int a,int b)x=a;y=b;)”。然后引用成员函数disp(),则输出为“cout”x=“x”,y=“yendl;”。15.下列程序的输出结果是( )。 #includeiostream using namespace std; int main() char a=“Hell
31、o,Test“; char *p=a; while(*p) if(*p=a protected: unsigned len; char*data; ; MyString:MyString(const char*s) len=strlen(s); data=new charlen+1); strcpy(data,s); int main() MyString a(“C+Programing“); MyString b(a); return 0; 在运行上面的程序时出错,出错的原因是( )。(分数:2.00)A.构造函数的实参不允许是本类的对象B.没有定义实现深层复制(深拷贝)的复制构造函数 C.
32、构造对象 a 时实参与形参类型不符D.系统不能生成默认的复制构造函数解析:解析 此题考查的是类的构造函数。C+语言中当一个新对象被另一个已存在的同类型对象初始化时要调用复制构造函数。语句“My String b(a);”符合条件将调用 My String 的复制构造函数,但类 My String 未定义复制构造函数,所以会出错。18.对下列程序段的描述正确的是( )。 #includeiostream.h int fun(int,int); void main() coutfun(1,2)endl; int fun(int x,int y) return x+y; (分数:2.00)A.该函数
33、定义正确,但函数调用方式错误B.该函数调用方式正确,但函数定义错误C.该函数定义和调用方式都正确 D.该函数定义和调用方式都错误解析:解析 函数定义的一般形式为:类型标识符函数名(形式参数列表)声明部分;语句。函数调用的一般格式为:函数名(实参列表)。而“int fun(int,int)”为函数声明,是可以不写形参名,只写形参的类型。所以,可以看出函数 fun 的定义和调用都是正确的。19.数据库技术的根本目标是要解决数据的( )。(分数:2.00)A.存储问题B.共享问题 C.安全问题D.保护问题解析:解析 在数据库系统中,需要对数据进行集中、统一的管理,以达到被多个应用程序共享的目标。20
34、.下列关于 getline()函数的描述中,错误的是( )。(分数:2.00)A.该函数可以用来从键盘上读取字符串B.该函数读取的字符串长度是受限制的C.该函数读取字符串时,遇到终止符时便停止D.该函数中所使用的终止符只能是换行符 解析:解析 此题考查的是无格式输入输出流对象中的 getline()函数。该函数的功能是允许从输入流中读取多个字符,并且允许指定输入终止字符(默认是换行符),在读取完成后,从读取的内容中删除该终止字符。21.对于拷贝初始化构造函数,正确的描述是( )。(分数:2.00)A.在 C+语言中,如果不自定义类的拷贝初始化构造函数,则每个类都有默认的拷贝初始化构造函数 B.
35、必须为每个类定义拷贝初始化构造函数C.如果要使用拷贝初始化构造函数,则必须在类中先定义D.当定义了类的构造函数时,如果要使用拷贝初始化构造函数,则必须定义拷贝初始化构造函数解析:解析 拷贝构造函数是一个特殊的构造函数,它用一个已知的对象初始化一个正在创建的同类对象,它不能指定函数返回类型;只有一个参数,是同类的某个对象名的引用。每一个类中都必须有一个拷贝构造函数,如果类中未声明,编译器会自动生成一个公有的拷贝构造函数。22.( )是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。(分数:2.00)A.模板 B.类C.对象D.函数解析:解析 本题考查的是模板的特点。模板
36、是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。23.下列关于 C+函数的说明中,正确的是( )。(分数:2.00)A.内联函数就是定义在另一个函数体内部的函数B.函数体的最后一条语句必须是 return 语句C.标准 C+要求在调用一个函数之前,必须先声明其原型 D.编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式解析:解析 选项 A)中,内联函数不是定义在另一个函数体内部的函数,而是将 incline 放在函数定义中函数类型之前:函数体的最后一条语句可以是任意的语句,选项 B)错误;编译器不会根据函数返回值的类型来区分重载形式,选项 D)错误。标准
37、C+要求在调用一个函数之前,必须先声明其原型,选项 C)正确。24.关于运算符重载,下列表述中正确的是( )。(分数:2.00)A.C+已有的任何运算符都可以重载B.运算符函数的返回类型不能声明为基本数据类型C.在类型转换符函数的定义中不需要声明返回类型 D.可以通过运算符重载来创建 C+中原来没有的运算符解析:解析 此题考查的是运算符的有关概念。运算符重载是针对 C+原有运算符进行的,不能通过重载创造新的运算符;除了“.”、“.*”、“-*”、“:”、“?:”这 5 个运算符外,其他运算符都可以重载;在类型转换符函数的定义中不需要声明返回类型:运算符函数的返回值类型可以声明为基本数据类型。2
38、5.有下列二叉树,对此二叉树前序遍历的结果为( )。 (分数:2.00)A.ACFHIBEDGB.ABCDEFGHIC.ABDEGCFHI D.ABCDEFHGI解析:解析 对二叉树的前序遍历是指,先访问根结点,然后访问左子树,最后访问右子树。并且,在访问左、右子树时,先访问根结点,再依次访问其左、右子树。26.下面有关重载函数的描述中,正确的是( )。(分数:2.00)A.重载函数必须具有不同的返回值类型B.重载函数形参个数必须不同C.重载函数必须具有不同的形参列表 D.重载函数名可以不同解析:解析 所谓函数重载是指同一函数名可以对应多个函数实现。进行函数重载时,要求同名函数在参数个数上不同
39、,或者参数类型上不同。但函数的返回类型不能作为判断重载的依据。27.程序中有如下语句 for(int i=0;i5;i+)cout*(p+i)“,“;能够依次输出 int 型一维数组 a的前 5 个元素。由此可知,变量 P 的定义及初始化语句是( )。(分数:2.00)A.int *p=a; B.int p=a;C.*p=a;D.p=a;解析:解析 从循环语句中可以看出,是在。到 4 的循环中输出数组 a 中的前 5 个元素,输出的值为*(p+i),即为指针 p 向后移动指向的元素。所以初始化要将指针 p 指向数组 a,即 int*p=a;。28.有如下的运算符重载函数定义:double op
40、erator+(int i,int k)return double(i+k);但定义有错误,对这个错误最准确的描述是( )。(分数:2.00)A.+只能作为成员函数重载,而这里的+是作为非成员函数重载的B.两个 int 型参数的和也应该是 int 型,而这里将+的返回类型声明为 doubleC.没有将运算符重载函数声明为某个类的友元D.C+已经提供了求两个 int 型数据之和的运算符+,不能再定义同样的运算符 解析:解析 此题考查的是运算符的重载。c+语言规定,不能作为非成员函数重载的运算符有=、()、-以及所有的类型转换运算符,故选项 A)错误;运算符重载对返回值类型没有限制,故选项 B)错
41、误;C+并不强制要求非成员重载的运算符一定是某个类的友元,所以选项 C)错误:题目中重载的“+”运算符的两个参数都是 int 类型,而 C+已经提供了求两个血型数据之和的运算符+,编译器无法区分应该调用哪一个,所以应该选择选项 D)。29.已知在函数 func()中语句 this-ff=0;与语句 ff=0;的效果完全相同。对于这一现象,下列表述中错误的是( )。(分数:2.00)A.ff 是某个类的数据成员,func()是该类的友元函数 B.ff 是某个类的数据成员,func()是该类的成员函数C.this-ff 和 ff 是同一个变量D.func 不是一个静态成员函数解析:解析 此题考查的
42、是 this 指针的使用。类的每一个对象成员函数都有一个隐含的常量指针,即this 指针。本题选项 A)中,若 func()是该类的友元函数,this 指针没有指向同一个对象的地址,语句this-ff=0;与 ff=0;的效果就不同了。30.若有以下变量定义和函数调用语句: int a=5; fun( Test() n-=3; static int getNum()return n; private: static int n; ; int Test:n=1; int main() Test*p=new Test; delete p; cout“n=“Test:getNum()endl; re
43、turn 0; 执行后的输出结果是( )。(分数:2.00)A.n=0 B.n=1C.n=2D.n=3解析:解析 语句 Test*p=new Test;会调用类的构造函数 Test() n+=2;,使 n 的值由原来的 1 变为3,然后 delete p 调用类的析构函数Test() n-=3;,因为 n 是 static 型变量,所以会在 3 的基础上减 3,使得输出结果为 0。34.下列不属于软件工程 3 个要素的是( )。(分数:2.00)A.工具B.过程C.方法D.环境 解析:解析 软件工程包括 3 个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理
44、和文档生成;过程支持软件开发的各个环节的控制和管理。35.假定 MyClass 为一个类,那么下列的函数说明中,( )为该类的析构函数。(分数:2.00)A.voidMyClass();B.MyClass(int ;C.MyClass();D.MyClass(); 解析:解析 c+语言中析构函数为符号“”加类名,且析构函数没有返回值和参数,故前不加 void关键字。所以正确的形式应该是MyClass()。二、B填空题/B(总题数:15,分数:30.00)36.数据结构分为逻辑结构和存储结构,循环队列属于 1 结构。(分数:2.00)填空项 1:_ (正确答案:逻辑)解析:解析 数据的逻辑结构主
45、要是反映数据之间的逻辑关系,而存储结构是用来反映数据的逻辑结构在计算机存储空间中的存放形式。循环队列主要是强调数据之间的关系,因此属于逻辑结构。37.队列是限定在表的一端进行插入和在另一端进行删除操作的线性表。允许插入的一端称作 1。(分数:2.00)填空项 1:_ (正确答案:队尾)解析:解析 在队列中,允许插入的一端叫做“队尾”,允许删除的一端叫做“队头”。38.在一个容量为 32 的循环队列中,若头指针 front=3,尾指针 rear=2,则该循环队列中共有 1 个元素。(分数:2.00)填空项 1:_ (正确答案:31)解析:解析 设队列容量为 m,rearfront,则队列中元素个
46、数为 rear-front:rearfront,则队列中元素个数为 m+(rear-front)。本题 rearfront,则 m=32+(2-3)=31。39.一棵二叉树第 6 层(根结点为第一层)的结点最多为 1 个。(分数:2.00)填空项 1:_ (正确答案:32)解析:解析 二叉树第 k 层上,最多有 2k-i(k1)个结点。第 6 层的结点数最多是 26-1=32。区别“二叉树的结点最多数”和“某一层的结点最多数”。前者的计算是深度为 m 的二叉树最多有 2m-1个结点。40.度为 10 的线性表进行冒泡排序,在最坏情况下需要比较的次数为 1。(分数:2.00)填空项 1:_ (正确答案:45)解析:解析 对于长度为 n 的线性表,在最坏情况下(即线性表中元素现在的顺序与目标顺序正好相反),冒泡排序需要经过 n/2 遍的从前往后的扫描和 n/2 遍的从后往前的扫描,需要的比较次数为 n(n-1)/2。41.表达式 x=operator-(y,z)可以表示为 1。(分数:2.00)填空项 1:_ (正确答案:x=y-z)解析:解析 运算符函数有两种调用形式,第一种是像一般函数那样用函数名调用,即