1、二级 C+-226 及答案解析(总分:67.50,做题时间:90 分钟)一、选择题(总题数:38,分数:67.50)1.一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是_。(分数:1.00)A.-对一B.一对多C.多对多D.多对一2.有如下类定义: class Animal public: virtual void Name()=0; ; class Koala:public Animal public: void Name()/*函数体略*/ ; 关于上述类定义,下列描述中错误的是_。(分数:2.50)A.类 Koala 是类 Animal
2、的派生类B.类 Koala 中的 Name 函数是一个虚函数C.类 Animal 中的 Name 函数是一个纯虚函数D.语句“Animal a;”能够建立类 Animal 的一个对象 a3.在公有继承的情况下,允许派生类直接访问的基类成员包括_。(分数:1.00)A.公有成员B.公有成员和保护成员C.公有成员、保护成员和私有成员D.保护成员4.建立派生类对象时,3 种构造函数分别是 a(基类的构造函数)、b(成员对象的构造函数)、c(派生类的构造函数)这 3 种构造函数的调用顺序为(分数:1.00)A.abcB.acbC.cabD.cba5.设有关键码序列(66,13,51,76,81,26,
3、57,69,23),要按关键码值递增的次序排序,若采用快速排序法,并以第一个元素为划分的基准,那么第一趟划分后的结果为_。(分数:2.50)A.23,13,51,57,66,26,81,69,76B.13,23,26,51,57,66,81,76,69C.23,13,51,57,26,66,81,69,76D.23,13,51,57,81,26,66,69,766.数据库管理系统中负责数据模式定义的语言是 _ 。(分数:2.00)A.数据定义语言B.数据管理语言C.数据操纵语言D.数据控制语言7.有以下定义,则此数组的元素中不正确的一个赋值结果是 _。 static int a10=1,2,3
4、,4,5;(分数:2.00)A.a10=2B.a0=1C.a3=4D.a7=08.下面是类 Shape 的定义: class Shape public: virtual void Draw()=0; ; 下列关于 Shape 类的描述中,正确的是_。(分数:2.50)A.类 Shape 是虚基类B.类 Shape 是抽象类C.类 Shape 中的 Draw 函数声明有误D.语句“Shape s;”能够建立 Shape 的一个对象 s9.若有下面的函数调用: fun(a+b,3,max(n-1,b) 则 fun 的实参个数是_。(分数:1.00)A.3B.4C.5D.610.如下函数模板: te
5、mplateclass TT square(T x)return x*x; 其中,T 是_。(分数:2.50)A.函数形参B.函数实参C.模板形参D.模板实参11.下列叙述中正确的是(分数:2.00)A.软件测试的主要目的是确定程序中错误的位置B.软件调试的主要目的是发现程序中错误的类型C.程序经调试后还应进行测试D.软件的测试与调试工,作最好都由程序编制者来完成12.有如下类定义: class Sample public; Sample(int x):ref(x) / private: Sample():ref(0) / static int val=5; / constint ref; /
6、 ; 上述程序段中,错误的语句是_。(分数:2.00)A.B.C.D.13.在下列原型所示的 C+函数中,按“传值”方式传递参数的是_。(分数:2.00)A.void f1(int x);B.void f2(int*x);C.void f3(const int*x);D.void f4(int14.下列叙述中错误的是_。(分数:1.00)A.gets 函数用于从终端读入字符串B.getchar 函数用于从磁盘文件读入字符C.fputs 函数用于把字符串输出到文件D.fwrite 函数用于以二进制形式输出数据到文件15.计算斐波那契数列第 n 项的函数定义如下: int fib(int n) i
7、f(n=0)return 1; else if(n=1)return 2; else return fib(n-1)+fib(n-2); 若执行函数调用表达式 fib(2),函数 fib 被调用的次数是_。(分数:2.50)A.1B.2C.3D.416.为了提高函数调用的实际运行速度,可以将较简单的函数定义为_。(分数:1.00)A.内联函数B.重载函数C.递归函数D.函数模板17.某二叉树共有 7 个结点,其中叶子结点只有 1 个,则该二叉树的深度为(假设根结点在第 1 层) _ 。(分数:2.00)A.3B.4C.6D.718.关于运算符重载,下列表述中正确的是_。(分数:2.00)A.C
8、+已有的任何运算符都可以重载B.运算符函数的返回类型不能声明为基本数据类型C.在类型转换符函数的定义中不需要声明返回类型D.可以通过运算符重载来创建 C+中原来没有的运算符19.下列关于输入流类成员函数 getline()的描述中,错误的是_。(分数:2.00)A.该函数是用来读取键盘输入的字符串的B.该函数读取的字符串长度是受限制的C.该函数读取字符串时,遇到终止符便停止D.该函数读取字符串时,可以包含空格20.与语句“coutendl;”不等价的是_。(分数:2.50)A.cout“n“B.cout“/12“C.cout“/xA“D.cout“/0“21.若已定义过类 A 和 B,并且定义
9、类 C 如下: class C public: int val; A aObj; B bObj; C*cObj; C(): cObj(0), val(0) ; 若要建立类 C 的对象 object,则类成员 val、aObj、bObj 和 cObj 中最后被初始化的是_。(分数:1.00)A.valB.aObjC.bObjD.cObj22.在数据库系统中,把具有以下特征中之 _ 两个特征的数据模型称为网状模型。(分数:2.00)A.允许有一个以上的结点没有双亲B.有且仅有一个结点无双亲C.根以外的结点有且仅有一个双亲D.一个结点可以有多个双亲23.下面关于 break 语句的描述中,不正确的是
10、_。(分数:1.00)A.break 可以用于循环体内B.break 语句可以在 for 循环语句中出现多次C.break 语句可以在 switch 语句中出现多次D.break 语句可用于 if 条件判断语句内24.有如下程序: #includeiostream using namespace std; class B public: B(int xx):x(xx)+count;x+=10; virtual void show()const coutcount“_“xendl; protected: static int count; private: int x; ; class D:pu
11、blic B public: D(int xx,int yy):B(xx),y(yy)+count;y+=100; virtual void show()const coutcount“_“yendl; private: int y; ; int B:count=0; int main() B *ptr=new D(10,20); ptr-show(); delete ptr; return 0; 运行时的输出结果是_。(分数:2.00)A.1_120B.2_120C.1_20D.2_2025.下列程序将 x、y 和 z 按从小到大的顺序排列,横线处应添加语句 _ 。 templateclas
12、s T void fun (_) T a; if(xy) a=x;x=y;y=a; if(yz) a=y;y=z;z=a; if(xy) a=x;x=y;y=a; (分数:2.00)A.Tx,Ty,TzB.Tx;y;zC.T class D:public B protected: void fun4() ; 若 obj 是类 D 的对象,则下列语句中不违反访问控制权限的是_。(分数:1.00)A.obj.fun1();B.obj.fun2();C.obj.fun3();D.obj.fun4();29.若执行语句:coutsetfill(“*“)setw(10)123“OK“endl 后将输出
13、_ 。(分数:2.00)A.*1230KB.123*OKC.*123*OKD.123*OK*30.程序段“int x=12; double y=3.141593; printf(“%d%8.6“f“,x,y);”的输出结果是_。(分数:2.50)A.123.141593B.12 3.141593C.12,3.141593D.123.141593031.下列选项中合法的用户标识符是 _ 。(分数:2.00)A.10ngB.2TestC.3DmaxD.dat32.有如下程序: #includeiostream using namespace std; class Pair int m; int n
14、; public: Pair(int i,int j):m(i),n(j) bool operator(Pair P)const; /须在类体外给出定义 ; int main() Pair p1(3,4),p2(4,3),p3(4,5); cout(p1p2)(p2p1)(p2p3)(p3p2); return 0; 运算符函数。perator的功能是比较两个 Pair 对象的大小,当左边对象大时,返回 true,否则返回false。比较规则是首先比较两对象的 m 成员,m 大者为大:当 m 相等时比较 n,n 大者为大。程序输出0101,下列对运算符重载函数的正确定义是_。(分数:2.00)
15、A.bool Pair:operator(Pair p)constif(m!=p.m)return mp.m;return np.n;B.bool Pair:operator(Pair P)if(m!=p.m)return mp.m;return np.n;C.bool Pair:operator(Pair p)constif(mp.m)return true;return np.n;D.bool Pair:operator(Pair P)if(mp.m)return true;return np.n;33.有如下程序: #includeiostream using namespace std
16、; class CD public: CD()cout“C“;) private: char name80; ; int main()CD a,*b,d2;return 0; 运行时的输出结果是_。(分数:2.00)A.CCCCB.CCCC.CCDC34.以下各选项中, _ 中都是 C+语言保留字。(分数:1.00)A.cout,operator,thisB.short,string,staticC.if,while,=D.private,public,printf35.下列不属于 C+规定的类继承方式的是(分数:2.50)A.protectiveB.privateC.protectedD.p
17、ublic36.在下列链表中,能够从任意一个结点出发直接访问到所有结点的是_。(分数:2.50)A.单链表B.循环链表C.双向链表D.二叉链表37.数据库系统的三级模式不包括_。(分数:1.00)A.概念模式B.内模式C.外模式D.数据模式38.有如下程序: #includeiostream using namespace std; class MyClass public: MyClass()cout“A“; MyClass(char c)coutc; MyClass()cout“B“; ; int main() MyClass p1.*p2; p2=new MyClass(“X“); de
18、lete p2; return 0; 执行这个程序的输出结果是_。(分数:1.00)A.ABXB.ABXBC.AXBD.AXBB二级 C+-226 答案解析(总分:67.50,做题时间:90 分钟)一、选择题(总题数:38,分数:67.50)1.一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是_。(分数:1.00)A.-对一B.一对多C.多对多 D.多对一解析:解析 因为一个人可以操作多个计算机,而一台计算机又可以被多个人使用,所以两个实体之间是多对多的关系。2.有如下类定义: class Animal public: virtual void
19、 Name()=0; ; class Koala:public Animal public: void Name()/*函数体略*/ ; 关于上述类定义,下列描述中错误的是_。(分数:2.50)A.类 Koala 是类 Animal 的派生类B.类 Koala 中的 Name 函数是一个虚函数C.类 Animal 中的 Name 函数是一个纯虚函数D.语句“Animal a;”能够建立类 Animal 的一个对象 a 解析:3.在公有继承的情况下,允许派生类直接访问的基类成员包括_。(分数:1.00)A.公有成员B.公有成员和保护成员 C.公有成员、保护成员和私有成员D.保护成员解析:解析 本
20、题考查公用继承对基类成员的访问属性。在公用继承中,基类的公用成员和保护成员在派生类中保持原有的访问属性,其私有成员仍为基类私有。所以本题答案为 B。4.建立派生类对象时,3 种构造函数分别是 a(基类的构造函数)、b(成员对象的构造函数)、c(派生类的构造函数)这 3 种构造函数的调用顺序为(分数:1.00)A.abc B.acbC.cabD.cba解析:解析 本题考查的是在继承中派生类的对象调用构造函数的顺序,应该是先调用基类的构造函数,然后是成员中的对象对应类的构造函数,最后是派生类自己的构造函数。5.设有关键码序列(66,13,51,76,81,26,57,69,23),要按关键码值递增
21、的次序排序,若采用快速排序法,并以第一个元素为划分的基准,那么第一趟划分后的结果为_。(分数:2.50)A.23,13,51,57,66,26,81,69,76 B.13,23,26,51,57,66,81,76,69C.23,13,51,57,26,66,81,69,76D.23,13,51,57,81,26,66,69,76解析:解析 快速排序是起泡排序的改进。在快速排序中,任取一个记录,以它为基准用交换的方法将所有的记录分成两部分,关键码值比它小的在一部分,关键码值比它大的在另一部分,再分别对两个部分实施上述过程,一直重复到排序完成。6.数据库管理系统中负责数据模式定义的语言是 _ 。(
22、分数:2.00)A.数据定义语言 B.数据管理语言C.数据操纵语言D.数据控制语言解析:7.有以下定义,则此数组的元素中不正确的一个赋值结果是 _。 static int a10=1,2,3,4,5;(分数:2.00)A.a10=2 B.a0=1C.a3=4D.a7=0解析:8.下面是类 Shape 的定义: class Shape public: virtual void Draw()=0; ; 下列关于 Shape 类的描述中,正确的是_。(分数:2.50)A.类 Shape 是虚基类B.类 Shape 是抽象类 C.类 Shape 中的 Draw 函数声明有误D.语句“Shape s;”
23、能够建立 Shape 的一个对象 s解析:解析 把含有纯虚函数的类称作为抽象类或抽象基类。抽象类只能作为别的类的基类,不能生成对象。9.若有下面的函数调用: fun(a+b,3,max(n-1,b) 则 fun 的实参个数是_。(分数:1.00)A.3 B.4C.5D.6解析:解析 本题考查函数实参个数的基础知识,根据实参的概念,(a+b)、3、max(n-1,b)分别为其中的 3 个实参。故答案为 A。10.如下函数模板: templateclass TT square(T x)return x*x; 其中,T 是_。(分数:2.50)A.函数形参B.函数实参C.模板形参 D.模板实参解析:
24、解析 函数模板的定义格式为 template模板形参表函数声明 根据定义可知,T 是模板形参。11.下列叙述中正确的是(分数:2.00)A.软件测试的主要目的是确定程序中错误的位置B.软件调试的主要目的是发现程序中错误的类型C.程序经调试后还应进行测试 D.软件的测试与调试工,作最好都由程序编制者来完成解析:解析 软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定。 测试不是为了证明程序是正确的,而是在设想程序有错误的前提下进行的,其目的是设法暴露程序中的错误和缺陷。 由于测试的这一特征,一般应当避免由开发者测试自己的程序。 测试只能说明程序有错,而不能证明程
25、序无错,希望通过有限次的测试就能发现程序中的所有错误是不可能的,即完全测试是不可能的。 因此,选项 A)与 D)中的说法都是错误的。 调试也称排错。 测试的目的是暴露错误,而调试的目的是发现错误的位置,并改正错误。 经测试发现错误后,可以立即进行调试并改正错误;经过调试后的程序还需进行回归测试:以检查调试的效果,同时也可防止在调试过程中引进新的错误。 因此,选项 B)中的说法也是错误的,而选项 C)中的说法是正确的。12.有如下类定义: class Sample public; Sample(int x):ref(x) / private: Sample():ref(0) / static i
26、nt val=5; / constint ref; / ; 上述程序段中,错误的语句是_。(分数:2.00)A.B.C. D.解析:解析 静态整型数据不能定义为类的数据成员。13.在下列原型所示的 C+函数中,按“传值”方式传递参数的是_。(分数:2.00)A.void f1(int x); B.void f2(int*x);C.void f3(const int*x);D.void f4(int解析:解析 传值方式是将实参复制到形参中,因此实参和形参是两个不同的变量,有各自的存储空间,可以把函数的形参看做是函数的局部变量。其中 BC 选项为按低值传递 D 选贤为按引用传递。14.下列叙述中错
27、误的是_。(分数:1.00)A.gets 函数用于从终端读入字符串B.getchar 函数用于从磁盘文件读入字符 C.fputs 函数用于把字符串输出到文件D.fwrite 函数用于以二进制形式输出数据到文件解析:解析 本题考查的是 C 语言中输入、输出函数的使用,gets 和 getchar 函数用于从标准输入设备键盘读入字符串和字符;fputs 用于把字符串输出到文件;fwrite 用于以二进制形式输出数据到文件。15.计算斐波那契数列第 n 项的函数定义如下: int fib(int n) if(n=0)return 1; else if(n=1)return 2; else retur
28、n fib(n-1)+fib(n-2); 若执行函数调用表达式 fib(2),函数 fib 被调用的次数是_。(分数:2.50)A.1B.2 C.3D.4解析:16.为了提高函数调用的实际运行速度,可以将较简单的函数定义为_。(分数:1.00)A.内联函数 B.重载函数C.递归函数D.函数模板解析:解析 一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换,一般只将规模很小而使用频繁的函数声明为内联函数,可以避免函数调用时间开销,从而提高运行速度。17.某二叉树共有 7 个结点,其中叶子结点只有 1 个,则该二叉树
29、的深度为(假设根结点在第 1 层) _ 。(分数:2.00)A.3B.4C.6D.7 解析:解析 根据二叉树的性质,度为 0 的结点(即叶子结点)总是比度为 2 的结点多一个。题目中的二叉树的叶子结点为 1,因此度为 2 的结点的数目为 0,因而这个二叉树的深度为 7。18.关于运算符重载,下列表述中正确的是_。(分数:2.00)A.C+已有的任何运算符都可以重载B.运算符函数的返回类型不能声明为基本数据类型C.在类型转换符函数的定义中不需要声明返回类型 D.可以通过运算符重载来创建 C+中原来没有的运算符解析:解析 此题考查的是运算符重载的概念。C+语言规定,“.”、“.*”、“-*”、“:
30、”和“? :”这五个运算符不能被重载,故选项 A 错误;运算符函数的返回类型由该运算符所组成的表达式的值的类型来决定,故选项 B 说法是错误的;运算符重载是针对原有运算符,并不能通过重载创造出新的运算符,故选项 D 错误。19.下列关于输入流类成员函数 getline()的描述中,错误的是_。(分数:2.00)A.该函数是用来读取键盘输入的字符串的 B.该函数读取的字符串长度是受限制的C.该函数读取字符串时,遇到终止符便停止D.该函数读取字符串时,可以包含空格解析:解析 此题考查的是 getline()函数。getline()函数的原型为:istream_type。其功能是从当前输入位置开始提
31、取字符存入 s 所指向的具有 n 个字节的字符空间中。遇到以下情况时停止:已提取并存储了 n-1 个字符;到流尾,无字符可取;下一个要提取的字符等于结束标志字符 delim。故选项 B、C、D 都是正确的。getline()函数不仅可以用来读取键盘输入的字符串,还可以用来读取文件等数据流,故选项 A 错误。20.与语句“coutendl;”不等价的是_。(分数:2.50)A.cout“n“B.cout“/12“C.cout“/xA“D.cout“/0“ 解析:解析 coutendl 与选项 A、B、C 均表示回车换行,而选项 D 是字符串的结尾标志。21.若已定义过类 A 和 B,并且定义类
32、C 如下: class C public: int val; A aObj; B bObj; C*cObj; C(): cObj(0), val(0) ; 若要建立类 C 的对象 object,则类成员 val、aObj、bObj 和 cObj 中最后被初始化的是_。(分数:1.00)A.valB.aObjC.bObjD.cObj 解析:解析 C+中初始化顺序遵循以下两个原则:(1)初始化列表的初始化变量顺序是根据成员变量声明的顺序来执行的;(2)若有成员对象,先初始化成员对象,多个成员变量按规则(1)执行。按题中所给声明顺序,最后被初始化的是 cObj。故选择 D 选项。22.在数据库系统中
33、,把具有以下特征中之 _ 两个特征的数据模型称为网状模型。(分数:2.00)A.允许有一个以上的结点没有双亲B.有且仅有一个结点无双亲 C.根以外的结点有且仅有一个双亲D.一个结点可以有多个双亲解析:23.下面关于 break 语句的描述中,不正确的是_。(分数:1.00)A.break 可以用于循环体内B.break 语句可以在 for 循环语句中出现多次C.break 语句可以在 switch 语句中出现多次D.break 语句可用于 if 条件判断语句内 解析:解析 本题考查 break 语句的使用。break 可以结束 switch 语句和 for 循环语句,但是不能使用在条件判断语句
34、内。24.有如下程序: #includeiostream using namespace std; class B public: B(int xx):x(xx)+count;x+=10; virtual void show()const coutcount“_“xendl; protected: static int count; private: int x; ; class D:public B public: D(int xx,int yy):B(xx),y(yy)+count;y+=100; virtual void show()const coutcount“_“yendl; pr
35、ivate: int y; ; int B:count=0; int main() B *ptr=new D(10,20); ptr-show(); delete ptr; return 0; 运行时的输出结果是_。(分数:2.00)A.1_120B.2_120 C.1_20D.2_20解析:解析 在主函数中定义了一个基类 B 的指针变量 ptr,并调用类 D 的构造函数创建了类 D 的实例对象,因为变量 count 是全局变量所以在调用基类 B 的构造函数给其值加 1,在调用 D 的构造函数时给其值加 1,因而输出其值等于 2,在类 D 的构造函数中给成员变量 y 的值加 100,所以其等于
36、 120 并输出。25.下列程序将 x、y 和 z 按从小到大的顺序排列,横线处应添加语句 _ 。 templateclass T void fun (_) T a; if(xy) a=x;x=y;y=a; if(yz) a=y;y=z;z=a; if(xy) a=x;x=y;y=a; (分数:2.00)A.Tx,Ty,TzB.Tx;y;zC.T class D:public B protected: void fun4() ; 若 obj 是类 D 的对象,则下列语句中不违反访问控制权限的是_。(分数:1.00)A.obj.fun1(); B.obj.fun2();C.obj.fun3();
37、D.obj.fun4();解析:解析 本题考查派生类对基类成员的访问属性,基类成员在派生类中的访问属性如下表所示,因此本题选 A, 基类中的属性 继承方式 在派生类中的访问方式 公有成员 公有 保护成员 保护 私公有继承 不有成员 可直接访问 公有成员 保护 保护成员 保护 私有成员 保护继承 不可直接访问 公有成员 私有 保护成员 私有 私有成员 私有继承 不可直接访问 29.若执行语句:coutsetfill(“*“)setw(10)123“OK“endl 后将输出 _ 。(分数:2.00)A.*1230K B.123*OKC.*123*OKD.123*OK*解析:解析 cout.fill
38、()用于设置或返回输出的填充字符,默认是空格,fill()函数的设置一直有效,直到下一个 fill()函数改变该值为止。setw(int n)作用是设置输入输出的宽度,此设置只对一次输入或输出效,在完成一次数据的输入或输出后,宽度设置自动恢复为 0。注意:默认为输出数据在指定宽度内右对齐。30.程序段“int x=12; double y=3.141593; printf(“%d%8.6“f“,x,y);”的输出结果是_。(分数:2.50)A.123.141593 B.12 3.141593C.12,3.141593D.123.1415930解析:解析 根据输出函数 printf 中对输出数值
39、格式的要求,第一个数和第二数之间没有空格或分隔号,因而此题答案为选项 A。31.下列选项中合法的用户标识符是 _ 。(分数:2.00)A.10ngB.2Test C.3DmaxD.dat解析:解析 此题考查的是标识符。标识符是由数字、字母以及下划线构成,其第一个字符必须是字母或下划线,中间不能有空格;标识符的长度是任意的,但由于编译系统的限制一般不超过 31 个字符;标识符中的大小写字母是不同的;定义标识符时不能采用系统的保留字。符合这些要求的只有选项 B。32.有如下程序: #includeiostream using namespace std; class Pair int m; int
40、 n; public: Pair(int i,int j):m(i),n(j) bool operator(Pair P)const; /须在类体外给出定义 ; int main() Pair p1(3,4),p2(4,3),p3(4,5); cout(p1p2)(p2p1)(p2p3)(p3p2); return 0; 运算符函数。perator的功能是比较两个 Pair 对象的大小,当左边对象大时,返回 true,否则返回false。比较规则是首先比较两对象的 m 成员,m 大者为大:当 m 相等时比较 n,n 大者为大。程序输出0101,下列对运算符重载函数的正确定义是_。(分数:2.0
41、0)A.bool Pair:operator(Pair p)constif(m!=p.m)return mp.m;return np.n; B.bool Pair:operator(Pair P)if(m!=p.m)return mp.m;return np.n;C.bool Pair:operator(Pair p)constif(mp.m)return true;return np.n;D.bool Pair:operator(Pair P)if(mp.m)return true;return np.n;解析:解析 按照比较规则:首先比较两对象的 m 成员,m 大者为大:当 m 相等时比较
42、 n,n 大者为大。这条规则的用 C+写出来就是选项 A。33.有如下程序: #includeiostream using namespace std; class CD public: CD()cout“C“;) private: char name80; ; int main()CD a,*b,d2;return 0; 运行时的输出结果是_。(分数:2.00)A.CCCCB.CCC C.CCDC解析:解析 在这个程序的主函数中定义了 3 个 CD 类的实例对象 a,d0,d1和一个指向 CD 类对象的指针变量 b,所以当程序结束时,执行 CD 的析构函数输出字符 C 三次。34.以下各选项
43、中, _ 中都是 C+语言保留字。(分数:1.00)A.cout,operator,this B.short,string,staticC.if,while,=D.private,public,printf解析:解析 本题主要考察有关 C+语言保留字这个知识点。C+语言中,运算符(=)、函数名(printf)和非基本数据类型(string)都不是 C+语言的保留字(关键词)。35.下列不属于 C+规定的类继承方式的是(分数:2.50)A.protective B.privateC.protectedD.public解析:36.在下列链表中,能够从任意一个结点出发直接访问到所有结点的是_。(分数
44、:2.50)A.单链表B.循环链表 C.双向链表D.二叉链表解析:解析 由于线性单链表的每个结点只有一个指针域,由这个指针只能找到其后件结点,但不能找到其前件结点。也就是说,只能顺着之后向链尾方向进行扫描,因此必须从头指针开始,才能访问到所有的结点。循环链表的最后一个结点的指针域指向表头结点,所有结点的指针构成了一个环状链,只要指出表中任何一个结点的位置就可以从它出发访问到表中其他所有的结点。双向链表中的每个结点设置有两个指针,一个指向其前件,另一个指向其后件,这样从任意一个结点开始,既可以向前查找,也可以向后查找,在结点的访问过程中一、般从当前结点向链尾方向扫描,如果没有找到,则从链尾向头结
45、点方向扫描,这样部分结点就要被遍历两次,因此不符合题意。二叉链表是二叉树的一种链式存储结构,每个结点有两个指针域,分别指向左右子结点,可见,二叉链表只能由根结点向叶子结点的方向遍历。37.数据库系统的三级模式不包括_。(分数:1.00)A.概念模式B.内模式C.外模式D.数据模式 解析:解析 数据库系统的三级模式是概念模式、外模式和内模式,所以选择 D。38.有如下程序: #includeiostream using namespace std; class MyClass public: MyClass()cout“A“; MyClass(char c)coutc; MyClass()cout“B“; ; int main() MyClass p1.*p2; p2=new MyClass(“X“); delete p2; return 0; 执行这个程序的输出结果是_。(分数:1.00)A.ABXB.ABXBC.AXBD.AXBB 解析:解析 构造函数和析构函数的调用顺序为先构造的后析构,后构造的先析构。所以本题答案为D。