1、二级 C+笔试 370 及答案解析(总分:98.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.有如下类声明: class Foo int bar; ; 则 Foo 类的成员 bar 是(分数:2.00)A.公有数据成员B.公有成员函数C.私有数据成员D.私有成员函数2.在下面的类定义中,横线处应填入的内容是 class Fred public: void print () coutdataend1; void setData (double D) data=d; static int count; private: double data; ;_count=
2、0; /静态数据成员的定义(分数:2.00)A.intB.static intC.int Fred:D.static int Fred:3.下列关于运行符重载的描述中,正确的是(分数:2.00)A.运算符重载可以改变操作数的个数B.运算符重载可以改变操作数的优先级C.运算符重载可以改变运算符的结合性D.运算符重载可以使运算符实现特殊功能4.有如下程序:#include iostreamusing namespace std:class Testpublic: Test() n+=2; Test() n-=3; ; static int getNum() return n;privaue: st
3、atic int n:;int Test:n=1;int main() Test* p=new Test; delete p; cout“n=“Test:getNum()end1; return 0; 执行后的输出结果是(分数:2.00)A.n=0B.n=1C.n=2D.n=35.有如下程序: #include iostream using namespace std; int main() cout.fill(*); cout.width(6); cout.fill(#); cout123end1; return 0; 执行后的输出结果是(分数:2.00)A.#123B.123#C.*123
4、D.123*6.下列叙述中正确的是(分数:2.00)A.线性表是线性结构B.栈与队列是非线性结构C.线性链表是非线性结构D.二叉树是线性结构7.下面关于虚函数的描述中正确的是(分数:2.00)A.虚函数是一个静态成员函数B.虚函数是一个非成员函数C.虚函数既可以在函数说明时定义,也可以在函数实现时定义D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型8.设有以下程序段: int a5=0,*p,*q; p=a; q=a; 则下列选项中,合法的运算是(分数:2.00)A.p*qB.p-qC.p*qD.p%q9.下列叙述中正确的是(分数:2.00)A.软件交付使用后还需要进行维护B.软
5、件一旦交付使用就不需要再进行维护C.软件交付使用后其生命周期就结束D.软件维护是指修复程序中被破坏的指令10.在软件生存周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是(分数:2.00)A.概要设计B.详细设计C.可行性分析D.需求分析11.如果表达式 y*x+中,“*”是作为成员函数重载的运算符,“+”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可表示为(分数:2.00)A.operator+(0).operator*(;B.operator*(operator+(0),;C.operator*(operator+(x,0)D.operator*(opera
6、tor+(x,0),12.在一个类体的下列声明中,下确的纯虚函数声明星(分数:2.00)A.virtual voidvf0:0;B.void vf(in=0;C.virtual int vf(in;D.virtual void vf(in 13.下列叙述中正确的是(分数:2.00)A.程序执行的效率与数据的存储结构密切相关B.程序执行的效率只取决于程序的控制结构C.程序执行的效率只取决于所处理的数据量D.以上三种说法都不对15.有如下语句序列: int k=0; dok+=5; cout$; while(k19); while(k-00)cout*; 执行上面的语句序列输出字符$和*的个数分别
7、是(分数:2.00)A.4 和 20B.55 和 20C.4 和 21D.5 和 2116.有以下程序:#include iostreamusing namespace std;class Apublic: A(int i,int j) a=1; b=j; void move (int x,int y) a+=x; b+=y; void show() couta“,“bend1 private: int a,b; ; class B : private A public: B(int i,int 3):A (i,j) void fun() move (3,5); void f1() A:sho
8、w(); ; int main() B d(3,4); d.fun(); d.f1(); return 0; 程序执行后的输出结果是(分数:2.00)A.3,4B.6,8C.6,9D.4,317.下列叙述中错误的是(分数:2.00)A.在数据库设计的过程中,需求分析阶段必须考虑具体的计算机系统B.在数据库设计的过程中,概念结构设计与具体的数据库管理系统有关C.在数据库设计的过程中,逻辑结构设计与具体的数据库管理系统有关D.在数据库设计的过程中,物理结构设计依赖于具体的计算机系统18.在 C+中,实现封装性需借助于(分数:2.00)A.枚举B.类C.数组D.函数19.在表达式 x+y*z 中,+
9、是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是 ,(分数:2.00)A.operator+有两个参数,operator*有两个参数B.operator+有两个参数,operator*有一个参数C.operator+有一个参数,operator*有两个参数D.operator+有一个参数,operator*有一个参数20.有如下函数模板声明: templatetypename T T Max(T a, T B) return (a=B) ?a:b; 下列对函数模板 Max()的调用中错误的是(分数:2.00)A.Max(3.5,4.5)B.Max(3.5,4)C.
10、Maxdouble(3.5,4.5)D.Maxdouble(3.5,4)21.下列叙述中正确的是(分数:2.00)A.一个逻辑数据结构只能有一种存储结构B.数据的逻辑结构属于线性结构,存储结构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率22.一棵二叉树中共有 70 个叶子结点与 80 个度为 1 的结点,则该二叉树中的总结点数为(分数:2.00)A.221B.219C.231D.22923.下列叙述中错误的是(分数:2.00)A.一种数据的逻辑结构可以有多种存储结构B.数据的存储
11、结构与数据处理的效率无关C.数据的存储结构与数据处理的效率密切相关D.数据的存储结构在计算机中所占的中间不一定是连续的24.有如下程序: #include iostream.h using namespace std; class Stack public: Stack (unsigned n=10):size (n) rep_=new int size; top=0; Stack (stack for (int i=0;isize;i+ rip_i-s.rep_i; top=s.top; Stack() deleterep_; void poush(int a) rep_topj=a; to
12、p+; int pep() -top; return rep_top; bool isEmpty() cons5 return Top =0; private: int*rep_; unsigned size, top; ; int main() Stack s1; for(int i=1;i5;i+) s1.push(i); Stack s2(s1); for(i=1;i3;i+ couts2.pop(),; s2.push(6); s1.push(7); while(!s2.isEmpty() couts2.pop(),; return 0; 执行上面程序的输出是(分数:2.00)A.4,
13、3,2,1,B.4,3,6,7,2,1,C.4,3,6,2,1,D.1,2,3,4,25.面向对象程序设计将数据和什么放在一起,作为一个相互依存、不可分割的整体来处理?(分数:2.00)A.对数据的操作B.信息C.数据隐藏D.数据抽象27.在公有派生的情况下,派生类中定义的成员函数只能访问原基类的(分数:2.00)A.公有成员和私有成员B.私有成员和保护成员C.公有成员和保护成员D.私有成员、保护成员和公有成员28.下面关于 C+流的叙述中,正确的是(分数:2.00)A.cin 是一个输入流对象B.可以用 ifstream 定义一个输出流对象C.执行语句序列 char *y=“PQMN“; c
14、outy;将输出字符串“PQMN“的地址D.执行语句序列 char x80;cigetline(x,80);时,若键入 Happy new year 则 x 中的字符串是“Happy“29.设有如下关系表: (分数:2.00)A.T=RSB.T=RSC.T=RSD.T=R/S30.在表达式 x-y 中,“-”是作为非成员函数重载的运算符。若使用显式的函数调用代替直接使用运算符“-”,这个表达式还可表示为(分数:2.00)A.operator-(B.operator-(y,C.operator-(D.operator-(x,31.下列语句段将输出字符*的个数为 int i=100; while(
15、1) i-; if(i=0) break; cout*; (分数:2.00)A.98 个B.99 个C.100 个D.101 个32.下列对字符数组进行初始化的语句正确的是(分数:2.00)A.char a =“Hello“;B.char a=H,e,1,1,o);C.char a5=“Hello“;D.char a25=“Hello“, “World“;p33.在关系数据库中,用来表示实体之间联系的是(分数:2.00)A.树结构B.网结构C.线性表D.二维表34.下列虚基类的声明中正确的是(分数:2.00)A.class virtual B: public AB.virtual class
16、B: public AC.class B: public A virtualD.class B: virtual public A35.若语句: coutsetfill()setw(5)3141512setw(5)“OK!“; 是程序中第 1 个输出语句,则输出结果是(分数:2.00)A.3141512OK!B.31415120K!C.314150K!D.31415OK!二、B填空题/B(总题数:14,分数:28.00)36.某二叉树中度为 2 的结点有 18 个,则该二叉树中有 1 个叶子结点。(分数:2.00)填空项 1:_37.在面向对象方法中,类的实例称为 1 。(分数:2.00)填空
17、项 1:_38.软件生命周期包括 8 个阶段。为了使各时期的任务更明确,又可分为 3 个时期:软件定义期、软件开发期、软件维护期。编码和测试属于 1 期。(分数:2.00)填空项 1:_39.一棵二叉树第六层(根结点为第一层)的结点数最多为 1 个。(分数:2.00)填空项 1:_40.数据库系统中实现各种数据管理功能的核心软件称为 1。(分数:2.00)填空项 1:_41.设有定义语句:int a=12;,则表达式 a*=2+3 的运算结果是 1。(分数:2.00)填空项 1:_42.设在主函数中有以下定义和函数调用语句,且 fun()函数为 void 类型,请写出 fun()函数的首部_。
18、 int main() double s1022; int n: . fun (s): . return 0; (分数:2.00)填空项 1:_43.下列程序的输出结果是_。 #include iostream.h #include cstring.h using namespace std; void fun(const char*s,char int main ) char str =“ABCDE“; char ch=str1; fun(str,sh); coutCh; return 0; (分数:2.00)填空项 1:_44.请按下面注释的提示,将类 B 的构造函数定义补充完整。 cla
19、ssA int a; public: Aint aa=0) (a=aa; class B:public A int b; A c; public: /用 aa 初始化基类 A,用 aa+1 初始化类对象成员 c B(int aa): b=aa+2 ;(分数:2.00)填空项 1:_45.以下程序运行后的输出结果是_。 #include iostream #include string using namespace std; class Y; class X int x; char *strx; public: X(int a, char *str) x=a; strx=new charstr
20、len(str)+1 strcpy (strx,str); void show(Y ; class Y prlvate: int y; char *stry; public: Y(int b,char *str) y=b; stry=new charstrlen(str)+1; strcpy(stry,str); friend void X:show(Y ; void X:showY int main X a (10, “stringX“); Y b (20, “stringY“); a. show (b); renurn 0; (分数:2.00)填空项 1:_46.在下面横线上填上适当的语句
21、,完成程序。 #include iostream using namespace std; class Base int x: public: Base (int i)x=i; Base() ; class Derived : public Base public: _ /完成类 Derive 构造函数的定义 ; int main ( Derived Obi; return 0; 在横线外应填入的语句是_。(分数:2.00)填空项 1:_47.下面是用来计算 n 的阶乘的递归函数,请将该函数的定义补充完整。(注:阶乘的定义是) n!=n*(n-1)*.*2*1) unsigned fact(u
22、nsigned n) if (n =1) return 1; return_; (分数:2.00)填空项 1:_48.下列程序的输出结果是_。 #include iostream using namespace std; templatetypename T T fun(T a,T b) return (a=b)?a:b;) int main() coutfun(3, 6),fun(3.14F,6.28F) end1; return 0;(分数:2.00)填空项 1:_49.下面程序的输出是: *5.23 5.23* 请将下划线上遗漏的部分补充完整。 #include iostream #in
23、clude iomanip using namespace std: void main() double i=5.23; cout_setw(14)i couuend1_setw(14)i; (分数:2.00)填空项 1:_二级 C+笔试 370 答案解析(总分:98.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.有如下类声明: class Foo int bar; ; 则 Foo 类的成员 bar 是(分数:2.00)A.公有数据成员B.公有成员函数C.私有数据成员 D.私有成员函数解析:解析 本题考核类的定义。在定义类的成员变量时,一般都会加上关键字来
24、修饰其访问权限,其缺省值为私有。2.在下面的类定义中,横线处应填入的内容是 class Fred public: void print () coutdataend1; void setData (double D) data=d; static int count; private: double data; ;_count=0; /静态数据成员的定义(分数:2.00)A.intB.static intC.int Fred: D.static int Fred:解析:解析 本题考核静态数据成员的定义。题中数据成员 count 被定义成了静态的,其初始化的格式为:类型类名:静态数据成员 =常量
25、值;,所以横线处应填入的为“int Fred”。3.下列关于运行符重载的描述中,正确的是(分数:2.00)A.运算符重载可以改变操作数的个数B.运算符重载可以改变操作数的优先级C.运算符重载可以改变运算符的结合性D.运算符重载可以使运算符实现特殊功能 解析:解析 本题考核运算符重载的概念。C+把重载的运算符视为特殊的函数,称为运算符函数,函数名就是在运算符前加上保留字 operator。运算符重载就是赋予已有的运算符多重含义。C+中通过重新定义运算符,使它能够用于特定类的对象执行特定的功能。但是用户重新定义运算符,不改变原运算符的操作符个数、优先级和结合性同时运算符重载后,也不改变运算符的语法
26、结构,即单目运算符只能重载为单目运算符,双目运算符只能重载为双目运算符。所以 A,B,C 选项的描述都是错误的。4.有如下程序:#include iostreamusing namespace std:class Testpublic: Test() n+=2; Test() n-=3; ; static int getNum() return n;privaue: static int n:;int Test:n=1;int main() Test* p=new Test; delete p; cout“n=“Test:getNum()end1; return 0; 执行后的输出结果是(分数
27、:2.00)A.n=0 B.n=1C.n=2D.n=3解析:解析 本题考核静态数据成员与静态成员函数的定义与使用方式。静态数据成员是类中所有对象共享的成员,而不是某个对象的成员题中变量 n 是静态数据成员,对象对其操作的结果具有叠加作用,main 函数中先定义了 Test 的对象*p,然后又 delete p,所以对静态数据 n 进行了两次操作,分别是“n+=2”和“n-=3”,n 的初始值是 1,那么 n 最后的值变为 0。main 函数最后通过调用静态函数 getNum得到 n 的值,并输出。5.有如下程序: #include iostream using namespace std; i
28、nt main() cout.fill(*); cout.width(6); cout.fill(#); cout123end1; return 0; 执行后的输出结果是(分数:2.00)A.#123 B.123#C.*123D.123*解析:解析 本题考核 I/O 的格式化输出。语句“cout.fill(*);”表示填充字符为*,并且一直有效,直到再次设置填充字符为止。语句“cout.width(6);”用来设置输入输出宽度,当实际数据宽度小于指定的宽度时,多余的位置用填充字符填满;当实际数据的宽度大于设置的宽度时,仍按实际的宽度输出。语句“cout.fill(#);”表示将填充字符改为#(
29、即把之前设置的#改为#),由于数据“123”的实际宽度小于 6,由于输出的初始状态为在输出宽度内右对齐,所以前面将会有 3 个填充字符#。6.下列叙述中正确的是(分数:2.00)A.线性表是线性结构 B.栈与队列是非线性结构C.线性链表是非线性结构D.二叉树是线性结构解析:解析 非空的数据结构如果满足下列两个条件则称为线性结构:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件。线性表是线性结构。选项 A 的说法正确;栈与队列是特殊的线性表,因此,它们也是线性结构,选项 B 的说法错误:线性链表是线性表的链式存储结构,因此,其对应的逻辑结构也是线性结构,而不是非线性结构,选项 C
30、的说法错误;二叉树是非线性结构,而不是线性结构,选项 D 的说法错误。7.下面关于虚函数的描述中正确的是(分数:2.00)A.虚函数是一个静态成员函数B.虚函数是一个非成员函数C.虚函数既可以在函数说明时定义,也可以在函数实现时定义D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型 解析:解析 本题考核虚函数。虚函数是非静态的成员函数。它不能是友元函数,但可以在另一个类中被声明为友元函数,所以 A 选项不正确;虚函数必须是类的成员函数,所以 B 选项是错误的;虚函数声明只能出现在类定义的函数原型声明中,而不能在成员函数的函数体实现的地方,所以 C 选项是不正确的;一般要求基类中说明
31、了虚函数后,派生类说明的虚函数应该与基类中虚函数的参数个数相等,对应参数的类型相同。如果不相同,则将派生类虚函数的参数类型强制转换为基类中虚函数的参数类型。故 D 选项的说法是正确的。8.设有以下程序段: int a5=0,*p,*q; p=a; q=a; 则下列选项中,合法的运算是(分数:2.00)A.p*qB.p-q C.p*qD.p%q解析:解析 本题考核指针的运算。 C+语言中,指向同一字符串的指针之间可以,也只能进行减运算,减运算后返回的是一整型数,表示指针之间的地址偏移量。9.下列叙述中正确的是(分数:2.00)A.软件交付使用后还需要进行维护 B.软件一旦交付使用就不需要再进行维
32、护C.软件交付使用后其生命周期就结束D.软件维护是指修复程序中被破坏的指令解析:解析 本题考核软件维护的概念。维护是软件生命周期的最后一个阶段,也是持续时间最长、付出代价最大的阶段,在软件交付使用后,还需要进行维护。软件维护通常有以下四类:为纠正使用中出现的错误而进行的改正性维护;为适应环境变化而进行的适应性维护;为改进原有软件而进行的完善性维护;为将来的可维护和可靠而进行的预防性维护。软件维护不仅包括程序代码的维护,还包括文档的维护。综上所述,本题的正确答案是 A,其余选项的说法错误。10.在软件生存周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是(分数:2.00)A.概要设
33、计B.详细设计C.可行性分析D.需求分析 解析:解析 在需求分析阶段中,根据可行性研究阶段所提交的文档,特别是从数据流图出发,对目标系统提出清晰、准确和具体的要求,即要明确系统必须做什么的问题本题的正确答案为 D。11.如果表达式 y*x+中,“*”是作为成员函数重载的运算符,“+”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可表示为(分数:2.00)A.operator+(0).operator*(;B.operator*(operator+(0),;C.operator*(operator+(x,0) D.operator*(operator+(x,0),解析:解析 本题
34、考核运算符的重载。假定已经作为某个类的成员函数重载了二元运算符+,且 c1,c2都是该类的对象,则 c1.operator+(c2)与 c1+c2 含义相同。如果+作为该类的非成员函数重载,则operator+(c1,c2)与 c1+c2 含义相同。同理,运算符*作为成员函数重载,则 y*(x+)与 y.operator*(x+)含义相同,后缀+作为友元函数重载,那么 x+与 operator+(x,0)含义相同,所以选项 C 是正确的。12.在一个类体的下列声明中,下确的纯虚函数声明星(分数:2.00)A.virtual voidvf0:0; B.void vf(in=0;C.virtual
35、 int vf(in;D.virtual void vf(in 解析:解析 本题考核纯虚函数的声明。声明纯虚函数的一般格式为: virtual类型函数名(参数表)=0;13.下列叙述中正确的是(分数:2.00)A.程序执行的效率与数据的存储结构密切相关 B.程序执行的效率只取决于程序的控制结构C.程序执行的效率只取决于所处理的数据量D.以上三种说法都不对解析:解析 程序执行的实际计算工作量不仅与程序的控制结构有一定的关系,与处理的数据量有关,而且还与数据的存储结构密切相关。所以,选项 A 正确,选项 B 和 C 错误所以,本题的正确答案为 A。解析:解析 本题考核运算符的重载。题中语句为运算符
36、-的重载运算符函数,它所重载的运算符是一个二元运算符,且是作为常成员函数来重载的,所以它不能更新对象的数据成员,也不能调用该类中没有用 const 修饰的成员函数。15.有如下语句序列: int k=0; dok+=5; cout$; while(k19); while(k-00)cout*; 执行上面的语句序列输出字符$和*的个数分别是(分数:2.00)A.4 和 20 B.55 和 20C.4 和 21D.5 和 21解析:解析 本题 do.while 循环语句和 while 循环语句的使用。题中 do.while 语句循环了 4 次,while 语句循环了 20 次,所以输出字符$和*的
37、个数分别是 4 和 20。16.有以下程序:#include iostreamusing namespace std;class Apublic: A(int i,int j) a=1; b=j; void move (int x,int y) a+=x; b+=y; void show() couta“,“bend1 private: int a,b; ; class B : private A public: B(int i,int 3):A (i,j) void fun() move (3,5); void f1() A:show(); ; int main() B d(3,4); d.
38、fun(); d.f1(); return 0; 程序执行后的输出结果是(分数:2.00)A.3,4B.6,8C.6,9 D.4,3解析:解析 本题考核派生类的应用。本题中,类 B 是类 A 的私有派生类,在类 B 的成员函数 fun 中调用基类 A 的成员函数 move,并传入实参 3 和 5。在类 B 的成员函数 f1 中调用基类 A 的成员函数 show,来显示基类数据成员 a 和 b 的值。主函数 main 中,定义了派生类 B 的对象 d,并赋初值 3 和 4然后调用对象 d 的成员函数 fun 和 f1,通过上述对函数 fun 和 f1 的功能的描述可知,程序最后输出 6 和 9。
39、17.下列叙述中错误的是(分数:2.00)A.在数据库设计的过程中,需求分析阶段必须考虑具体的计算机系统B.在数据库设计的过程中,概念结构设计与具体的数据库管理系统有关 C.在数据库设计的过程中,逻辑结构设计与具体的数据库管理系统有关D.在数据库设计的过程中,物理结构设计依赖于具体的计算机系统解析:解析 数据库设计主要分四个步骤;需求分析,概念结构设计,逻辑结构设计,物理结构设计。 选项 B 错误,应为所选,因为概念结构设计在需求分析的基础上对客观世界做抽象,独立于数据库的逻辑结构;也独立于具体的数据库管理系统,与具体的数据库管理系统无关。18.在 C+中,实现封装性需借助于(分数:2.00)
40、A.枚举B.类 C.数组D.函数解析:解析 本题考核 C+对面向对象程序设计的支持。封装性是指将数据和算法捆绑成一个整体,这个整体就是对象,描述对象的数据被封装在其内部。C+语言通过建立用户定义类型 -“类”,来支持封装性和信息隐藏。19.在表达式 x+y*z 中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是 ,(分数:2.00)A.operator+有两个参数,operator*有两个参数B.operator+有两个参数,operator*有一个参数C.operator+有一个参数,operator*有两个参数 D.operator+有一个参数,opera
41、tor*有一个参数解析:解析 本题考核运算符重载。 +和*都是二元运算符,当作为成员函数重载时,参数表中只有一个参数,对应于第二个参数,而第一个操作数就是对象本身,仅以 this 指针的形式隐藏在参数表中当作为非成员函数重载时有两个参数。20.有如下函数模板声明: templatetypename T T Max(T a, T B) return (a=B) ?a:b; 下列对函数模板 Max()的调用中错误的是(分数:2.00)A.Max(3.5,4.5)B.Max(3.5,4) C.Maxdouble(3.5,4.5)D.Maxdouble(3.5,4)解析:解析 本题考核函数模板的使用。
42、引用模板函数和引用一般的函数在语法形式上没有任何区别。所有的类型替换都是编译器在幕后悄悄进行的。但是要注意的是说明一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中对应的形参。例如,本题中的 B) 选项,编译系统从第一个参数“3.5”获得的信息是“T 对应于 double”,而从第二个参数“4”处获得的信息是“T 对应于 int”,二者相互矛盾,在编译时会产生错误。对于 D) 选项中紧跟在函数名后的double就是模板实参表,通过它通知编译系统在调用过程中,int 型的参数“4”将被自动换成double 型。21.下列叙述中正确的是(分数:2.00
43、)A.一个逻辑数据结构只能有一种存储结构B.数据的逻辑结构属于线性结构,存储结构属于非线性结构C.一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率 解析:解析 一般来说,一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、索引等存储结构。而采用不同的存储结构,其数据处理的效率是不同的。由此可见,选项 D 的说法正确。22.一棵二叉树中共有 70 个叶子结点与 80 个度为 1 的结点,则该二叉树中的总结点数为(分数:2.00)A.221B.219 C.231D.229解析:解
44、析 在任意一棵二叉树中,度为。的结点(也就是叶子结点)总比度为 2 的结点多一个。由于本题中的二叉树有 70 个叶子结点,所以有 69 个度为 2 的结点。该二叉树中总结点数为:度为 2 的结点数十度为 1 的结点数+度为 0 的结点数 =69+80+70=219。23.下列叙述中错误的是(分数:2.00)A.一种数据的逻辑结构可以有多种存储结构B.数据的存储结构与数据处理的效率无关 C.数据的存储结构与数据处理的效率密切相关D.数据的存储结构在计算机中所占的中间不一定是连续的解析:解析 一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序,链接、索引等,选项 A 和选项 D
45、 正确。采用不同的存储结构,其数据处理的效率不同,因此,在进行数据处理时,选择合适的存储结构是很重要的,选项 C 正确,选项 B 错误,应为所选。24.有如下程序: #include iostream.h using namespace std; class Stack public: Stack (unsigned n=10):size (n) rep_=new int size; top=0; Stack (stack for (int i=0;isize;i+ rip_i-s.rep_i; top=s.top; Stack() deleterep_; void poush(int a)
46、rep_topj=a; top+; int pep() -top; return rep_top; bool isEmpty() cons5 return Top =0; private: int*rep_; unsigned size, top; ; int main() Stack s1; for(int i=1;i5;i+) s1.push(i); Stack s2(s1); for(i=1;i3;i+ couts2.pop(),; s2.push(6); s1.push(7); while(!s2.isEmpty() couts2.pop(),; return 0; 执行上面程序的输出是(分数:2.00)A.4,3,2,1,B.4,3,6,7,2,1,C.4,3,6,2,1, D.1,2,3,4,解析:解析 本题是一个综合应用考题,考核知识点包括类与对象的应用(包括构造函数、拷贝构造函数),循环语句的使用、指针的使用。 分析程序:类 Stack 的构造函数中默认参数为 10,即构造大小为 10 的堆栈,成员函数 push 用于将