1、国家二级( C+)笔试模拟试卷 47及答案与解析 1 算法的空间复杂度是指 ( A)算法程序的长度 ( B)算法程序中的指令条数 ( C)算法程序所占的存储空间 ( D)算法执行过程中所需要的存储空间 2 下列关于队列的叙述中正确的是 ( A)在队列中只能插入数据 ( B)在队列中只能删除数据 ( C)队列是先进先出的线性表 ( D)队列是先进后出的线性表 3 在深度为 5的满二叉树中,叶子结点的个数为 ( A) 31 ( B) 32 ( C) 16 ( D) 15 4 下列叙述中正确的是 ( A)在模 块化程序设计中,一个模块应尽量多的包括与其他模块联系的信息 ( B)在自顶向下、逐步细化的
2、设计过程中,首先应设计解决问题的每一个细节 ( C)在模块化程序设计中,一个模块内部的控制结构也要符合结构化原则 ( D)在程序设计过程中,不能同时采用结构化程序设计方法与模块化程序设计方法 5 下列叙述中正确的是 ( A)程序执行的效率与数据的存储结构密切相关 ( B)程序执行的效率只取决于程序的控制结构 ( C)程序执行的效率只取决于所处理的数据量 ( D)以上三种说法都不对 6 在软件生存周期中,能准确地 确定软件系统必须做什么和必须具备哪些功能的阶段是 ( A)概要设计 ( B)详细设计 ( C)可行性分析 ( D)需求分析 7 软件需求分析阶段的工作,可以分为四个方面:需求获取,需求
3、分析,编写需求规格说明书,以及 ( A)阶段性报告 ( B)需求评审 ( C)总结 ( D)都不正确 8 在关系数据库中,用来表示实体之间联系的是 ( A)树结构 ( B)网结构 ( C)线性表 ( D)二维表 9 在面向对象的程序设计中,下列叙述中错误的是 ( A)任何一个对象构成一个独立的模块 ( B)一个对象 不是独立存在的实体,各个对象之间有关联,相互依赖 ( C)下一层次的对象可以继承上一层次对象的某些属性 ( D)上述三种说法都正确 10 将 E-R 图转换到关系模式时,实体与联系都可以表示成 ( A)属性 ( B)关系 ( C)键 ( D)域 11 若有以下定义: int a=1
4、, 2, 3, 4, 5, 6, 7; char c1=b,C2=2; 则数值不为 2的表达式是 ( A) a1 ( B) d-c1 ( C) a3-c2 ( D) c2-0 12 面向对 象程序设计思想的主要特征中不包括 ( A)继承性 ( B)功能分解,逐步求精 ( C)封装性和信息隐藏 ( D)多态性 13 下面关于虚函数的描述中正确的是 ( A)虚函数是一个静态成员函数 ( B)虚函数是一个非成员函数 ( C)虚函数既可以在函数说明时定义,也可以在函数实现时定义 ( D)派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型 14 下列运算符中不能在 C+中重载的是 ( A) ?:
5、 ( B) + ( C) - ( D) = 15 模板函数的真正代码是在 ( )时候产生。 ( A)源程序中声明函数时 ( B)源程序中定义函数时 ( C)源程序中调用函数时 ( D)运行执行函数时 16 若执行语句: cout setfill(*) setw(10) 123 OK end1后将输出 ( A) *123OK ( B) 123*OK ( C) *123*OK ( D) 123*OK* 17 C+语言中 while循环和 do-while循环的主要区别是 ( A) do-while的循环体至少无条 件执行一次 ( B) while的循环控制条件比 do-while的循环控制条件严格
6、 ( C) do-while允许从外部转到循环体内 ( D) do-while的循环体不能是复合语句 18 设有以下程序段: int a5=0,*p,*q; p=a; q=a; 则下列选项中,合法的运算是 ( A) p+q ( B) p-q ( C) p*q ( D) P q 19 已知: int n=10;那么下列语句中错误的是 ( A) int*p=new longn; ( B) int pn; ( C) int*p=new long(n); ( D) int p10; 20 以下程序执行后的输出结果是 #include iostream using namespace std; void
7、 try(int,int,int,int); int main() int x,y,z,r; x=1; y=2; try(x,y,z,r); cout r end1; return 0; void try(int x,int y, int z,int r) z = x+y; x = x*x; y = y*y; r = z+x+y; ( A) 18 ( B) 9 ( C) 10 ( D)不确定 21 若有如下程序: #include iostream using namespaces std; int s=0; class sample static iht n; public: sample(
8、int i) n=i; static void add() s+=n; ; int sample:s=0; int main() sample a(2),b(5); sample:add(); cout s endl; return 0; 程序运行后的输出结果是 ( A) 2 ( B) 5 ( C) 7 ( D) 3 22 下列类的定义中,有 ( )处语法错误。 class Base public: Base() Base(int i) data=i; private: int data; ; class Derive: public Base public: Derive(): Base(0
9、) Derive(int x) d=x; void setvalue(int i) data=i; private: d; ( A) 1 ( B) 2 ( C) 3 ( D) 4 23 C+流中重载了运算符,它是一个 ( A)用于输出操作的成员函数 ( B)用于输入操作的成员函数 ( C)用于输入操作的非成员函数 ( D)用于输出操作的非成员函数 24 有如下函数模板定义: template typename T1,typename T2,typename T3 T2 plus(T1 t1,T3 t3)return t1+t3; ( A) plus(3,5L); ( B) plus (3,5L
10、); ( C) plus int (3,5L); ( D) plus int, double (3,5L); 25 下列打开文件的表达式中,错误的是 ( A) ofstream ofile; ofile.open(“C:vcabc.txt“,ios:binary); ( B) fstream iofile; iofile.open(“abc.txt“,ios:ate); ( C) ifstream ifile(“C:vcabc.txt“); ( D) cout,open(“C:vcabc.txt“,ios:binary); 26 假定 MyClass为一个类,则该类的拷贝构造函数的声明语句为
11、( A) MyClass sample add(sample s1,sample s2) this- n=s1.n+s2.n; return (*this); void disp() cout “n=“ n end1; int main() sample s1(10),s2(5),s3; s3.add(s1,s2); s3.disp(); return 0; 程序运行后,输出的结果是 ( A) n=10 ( B) n=5 ( C) n=20 ( D) n=15 29 若有以下程序: #include iostream using namespace std; class data public
12、: int x; data(int x) data: :x=x; ; class A private: data d1; public: A(int x): d1(x) void dispa() cout d1.x “,“; ; class B: public A private: data d2; public: B(int x): A(x-1),d2(x) void dispb() cout d2.x end1; ; class C: public B public: C(int x): B(x-1) void disp() dispa(); dispb(); ; int main() C
13、 obj(5); obj.disp(); return 0; 程序执行后的输出结果是 ( A) 5,5 ( B) 4,5 ( C) 3,4 ( D) 4,3 30 下列对派生类的描述中,错误的是 ( A) 一个派生类可以作为另一个派生类的基类 ( B)派生类至少有一个基类 ( C)派生类的成员除了它自己的成员外,还包含了它的基类的成员 ( D)派生类中继承的基类成员的访问权限到派生类中保持不变 31 若有以下程序: #include iostream using namespace std; class Base public: Base() x=0; int x; ; class Deriv
14、edl: virtual public Base public: Derivedl() x=10; ; class Derived2: virtual public Base public: Derived2() ( x=20; ; class Derived: public Derivedl,protected Derived2 ; int main() Derived obj; cout obj.x end1; return 0; 该程序运行后的输出结果是 ( A) 20 ( B) 30 ( C) 10 ( D) 0 32 如果表达式 y*x+十中, “*”是作为成员函数重载的运算符, “
15、+”是作为友元函数重载的运算符,采用运算符函数调用格式, 该表达式还可表示为 ( A) x.operator+(0).operator *(y); ( B) operator * (x.operator+(0),y); ( C) y.operator * (operator+(x,0) ( D) operator * (operator+(x,0),y) 33 关于类模板,下列表述不正确的是 ( A)用类模板定义一个对象时,不能省略实参 ( B)类模板只能有虚拟类型参数 ( C)类模板本身在编译中不会生成任何代码 ( D)类模板的成员函数都是模板函数 34 有以下程序 #include ios
16、tream using namespace std; static int days= 31,28,31,30,31,30,31,31,30,31,30,31 ; class date private: int month, day, year; public: date( int m, int d, int y ) month = m; day = d; year = y; date() void disp() cout year “-“ month “-“ day end1; date operator+( int day ) date dt = *this; day+= dt.day;
17、while ( day daysdt.month - 1 ) day -= days dt.month - 1 ; if ( +dt.month = 13 ) dt.month = 1; dt.year+; dt.day = day; return dt; ; int main() date d1( 6, 20, 2004 ), d2; d2: d1 + 20; d2.disp(); return 0; 执行后的输出结果是 ( A) 2004-7-10 ( B) 2004-6-20 ( C) 2004-7-20 ( D)程序编译时出错 35 若有以下程序: #include iostream
18、using namespaces std; class A public: A() A(int i) x1=i; void dispa() cout x1=“ x1 “,“; private: int x1; ; class B: public A public: B() B(int i):A(i+10) x2=i; void dispb() dispa(); cout“x2=“ x2 end1; private: int x2; ; int main() B b(2); b.dispb(): return 0; 程序运行后的输出结果是 ( A) x1=10,x2=2 ( B) x1=12,x
19、2=10 ( C) x1=12,x2=2 ( D) x1=2,x2=2 36 在一个容量为 25的循环队列中,若头指针 front=16,尾指针 rear=9,则该循环队列中共有【 】个元素。 37 在面向对象方法中,属性与操作相似的一组对象称为【 】。 38 Jackson方法是一种面向【 】的结构化方法。 39 一个项目具有一个项目主管,一个项目主管可管理多个项目。则实体集 “项目主管 ”与实体集 “项目 ”的联系属于【 】的联系。 40 数据独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻 辑结构可以不变,所以,基于逻辑结构的应用程序不必修改,称为【 】。 41 写出执行完
20、下列代码段之后指定变量的值: bool x=true, y=false,z=false; x=x p+; cout MyClass:s endl; return 0; 运行后的输出结果是【 】。 46 有以下程序 #include iostream using namespace std; class MyClass public: MyClass(); MyClass(); Static int s; void SetValue (int val); ; int MyClass:s=0; MyClass:MyClass() s+; void M 47 有以下面程序: #include ios
21、tream using namespace std; long fib(int n) if (n 2) return(fib(n-1)+fib(n-2); else return 2; int main() cout fib(3) end1; rcturn 0; 则该程序的输出结果应该是【 】。 48 已知 int DBL(int n)return n+n; 和 long DBL(long n)return n+n)是一个函数模板的两个实例,则该函数模板的定义是【 】。 49 有以下程序 #include iostream using namespace std; class Base int
22、 a; public: Base(int x) a=x; vuid show()cout a; ; class DeriVed: public Base int b; public: Derived (int i): Base(i+1), b(i) void show()cout b; ; int main() Base b(5), *pb; Derived d(1); pb=&d; pb- show(); return 0; 运行后的打印结果是【 】。 50 有如下程序: #inClude iostream using namespace std; class AA public: vilt
23、ual void f() cout “AA“; ; class BB: public AA public: BB() cout “BB“; ; class CC: public BB public: virtual void f() BB:f(); cout “CC“; ; int main() AA aa,*p; BB bb; CC cc; p=&cc; p- f(); return 0; 运行后的输出结果【 】。 51 下面程序的输出结果为: Base:fun,请将程序补充完整。 #include iostream.h class Base public: 【 】 fun()cout “B
24、ase:fun“ end1; ; class Derived: public Base public: 【 】 fun()cout “Derived:fun“ end1; ; int main() Base a, *pb; Derived b; pb=&b; pb- tim(); return 0; 国家二级( C+)笔试模拟试卷 47答案与解析 1 【正确答案】 D 【试题解析】 算法的空间复杂度指执行这个算法所需要的内存空间。一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。正确答案为 D。 2 【正确答案】 C 【试题解析】
25、队列是指允许在一端进行插入、而在另一端进行删除的线性表,选项 A和选项 B 错误。允许插入的一端称为队尾,允许删除的一端称为队 头。在队列中,最先插入的元素将最先能够被删除,反之,最后插入的元素将最后才能被删除。所以,队列又称为 “先进先出 ”或 “后进后出 ”的线性表,它体现了 “先来先服务 ”的原则,选项 C正确,选项 D错误。 3 【正确答案】 C 【试题解析】 二叉树的一个性质是,在二叉树的第 k 层上,最多有 2k-1(k1)”个结点。对于满二叉树,每一层上的结点数都达到最大值,即在满二叉树的第 k 层上有 2(上标 )个结点。所以,在深度为 5的满二叉树中,所有叶子结点在第 5层上
26、,即其结点数为 2k-1=25-1=16。 4 【正确答案 】 C 【试题解析】 选项 A错误,在模块化设计中,要求将一个大程序按人们能理解的大小规模进行分解,使每个模块都能易于理解,各模块的功能尽量单一,各模块之间的联系尽量的少。 选项 B错误,自顶向下、逐步细化的设计过程,主要包括两个方面:将复杂问题的解法分解和细化成由若干模块组成的层次结构;将一个模块的功能逐步分解细化为一系列的处理步骤,直到某种程序设计语言的语句或某种机器指令。即在自顶向下、逐步细化的设计过程中,是按照先全局后局部、先整体后细节、先抽象后具体的方法设计程序。 选项 D错误,由于在模块化程序设 计中,一个模块内部的控制结
27、构也要符合结构化原则,所以,在程序设计过程中,结构化程序设计方法与模块化程序设计方法是要同时采用的。 选项 C 为正确答案。 5 【正确答案】 A 【试题解析】 程序执行的实际计算工作量不仅与程序的控制结构有一定的关系,与处理的数据量有关,而且还与数据的存储结构密切相关。所以,选项 A正确,选项 B和 C错误。所以,本题的正确答案为 A。 6 【正确答案】 D 【试题解析】 在需求分析阶段中,根据可行性研究阶段所提交的文档,特别是从数据流图出发,对目标系统提出清晰、准确 和具体的要求,即要明确系统必须做什么的问题。本题的正确答案为 D。 7 【正确答案】 B 【试题解析】 需求分析阶段的工作,
28、可以概括为以下 4个方面:需求获取、需求分析、编写需求规格说明书和需求评审。本题的正确答案为 B。 8 【正确答案】 D 【试题解析】 在关系模型中,把数据看成一个二维表,每一个二维表称为一个关系。即关系模型是用表格数据来表示实体本身及其相互之间的联系。本题的正确答案是 D。 9 【正确答案】 B 【试题解析】 在面向对象的程序设计中,一个对象是一个可以独立存 在的实体。各个对象之间相对独立,相互依赖性小。所以,选项 B 错误,应为所选。 10 【正确答案】 B 【试题解析】 把概念模型转换成关系数据模型就是把 E-R 图转换成一组关系模式,每一个实体型转换为一个关系模式,每个联系分别转换为关
29、系模式。本题的正确答案是 B 。 11 【正确答案】 D 【试题解析】 本题考查数组的定义、初始化及其引用,以及对字符 ASCII码值的熟悉程度。解本题的关键在于熟悉字符的 ASCII码值。字符在进行数学运算时取其 ASCII码值,其中 b,的 ASCII码值为 98, d的 ASCII 码值为 100,字符2的 ASCII码值为 50。根据以上知识,可知 D)选项中表达式 c2-0的值为 50。 12 【正确答案】 B 【试题解析】 C+是一种面向对象的程序设计语言,它充分支持面向对象思想中的 3个主要特征:封装性、继承性、多态性。 B 选项所描述是结构化程序设计的思想。 13 【正确答案】
30、 D 【试题解析】 本题考核虚函数的概念。虚函数是非静态的成员函数,它不能是友元函数,但可以在另一个类中被声明为友元函数。所以 A选项不正确;虚函数必须是类的成员函数,所 以 B 选项是错误的;虚函数声明只能出现在类定义的函数原型声明中,而不能在成员函数的函数体实现的地方,所以 C选项是不正确的;一般要求基类中说明了虚函数后,派生类说明的虚函数应该与基类中虚函数的参数个数相等,对应参数的类型相同。如果不相同,则将派生类虚函数的参数类型强制转换为基类中虚函数的参数类型。故 D选项的说法是正确的。 14 【正确答案】 A 【试题解析】 本题考核运算符的重载。 C+中, “:、 *、 .、 ?: ”
31、这 4个运算符不能重载。 15 【正确答案】 C 【试题解析】 本题考核模板函数的 使用。在说明一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中对象的形参,然后生成一个重载函数。由此可知模板函数的真正代码是在函数调用时产生的。 16 【正确答案】 A 【试题解析】 本题考核格式控制数据的输入输出。函数 setfill(charc)用于设置填充字符,在输出数据时,如果数据宽度小于设置的宽度,则空闲位置要用填充字符填满。函数 setw(int n)用于设置输入输出宽度,宽度设置的效果只对一次输入或输出有效,在完成一次数据的输出或输入后,宽度 设置自动
32、恢复为 0,例如题中语句以宽度 10输出数据 “123”后,字符串 “OK的输出宽度就自动恢复为 0了。而且输出的初始状态为右对齐,所以最终的输出为 *123OK。 17 【正确答案】 A 【试题解析】 本题考核 C+语言中 while循环和 do-while循环之间的区别。 do-while语句与 while语句不同的是, do-while循环中的语句至少会执行一次,而 while语句中当条件在第一次循环就不满足时,语句一次也不会执行。 18 【正确答案】 B 【试题解析】 本题考核 指针的运算。 C+语言中,指向同一字符串的指针之间可以,也只能进行减运算,减运算后返回的是一整型数,表示指针
33、之间的地址偏移量。 19 【正确答案】 B 【试题解析】 本题考核指针、数组和 new 运算符。运算符 new用于动态申请存储空间,它的操作数为某种数据类型且可以带有初值表达式或元素个数,若带初值,则其表达式为:指针 =new类型 (初值 ),如 C选项所示,若带有元素个数,则其语法格式为:指针 =new类型 元素个数 ,如 A选项所示。数组定义中数组大小必须为常量,而 B 选项中的 n 为一变量 所以是错误的。 20 【正确答案】 D 【试题解析】 本题考核函数调用 (参数的传递 )。本题常见的错误解答是:把x=1, y=2代入到函数 try中,逐步计算出 r=8。最后得到 r的输出值是 8
34、。以下是正确解答,根据程序逐步分析:程序中定义了一个名为 try的 void型函数,即函数 try没有任何返回值。而 try函数在 main 函数中是以一条独立语句的方式被调用的,且 main 函数最后输出变量 r的值。但在 main 函数中,并没有对变量 r赋值。在 C+语言中,数据只能从实参单向传递给形参,称为按值传递。也就是说,当简单 变量作为实参时,用户不能在函数中改变对应实参的值。所以虽然在函数 try中, r的值为 8,但它并不能传递给实参,当然最终的输出肯定是不确定的随机数了。 21 【正确答案】 B 【试题解析】 本题考核静态数据成员和静态成员函数的应用。程序中定义一个类sam
35、ple,它包括一个静态数据成员 n和一个静态成员函数 add,并在类的构造函数中给类私有静态数据成员 n赋值。在主函数 main 中,定义对象 a(2)时,通过构造函数使静态数据成员 n 的值变为 2,在定义对象 b(5)时,通过构造函数使静态数据成员 n=5(覆盖了前面的 n=2),再执行 sample:add()使全局变量 s=5。 22 【正确答案】 B 【试题解析】 本题考核派生类的定义和成员的访问权限。第一处错误:在派生类的构造函数 Derive(int x)中没有调用基类的构造函数对基类对象初始化:第二处错误:数据 data是基类 Base的私有成员,派生类 Derive不能访问,
36、所以在函数setvalue中对 data 的赋值是错误的。 23 【正确答案】 D 【试题解析】 本题考核运算符的重载。 C+流中重载了和,其中用于有格式输入,用于有 格式输出,且都重载为非成员函数。 24 【正确答案】 D 【试题解析】 本题考核函数模板的使用。 C+中对函数模板的调用有时候只使用了函数实参,而没有使用模板实参,模板实参都被省略了,但模板实参的省略并不是必然的,而是有条件。模板实参不能省略的情况有:从模板函数实参表获得的信息有矛盾;需要获得特定类型的返回值,而不管参数的类型如何:虚拟类型参数没有出现在模板函数的形参中;函数模板含有常规形参。题中定义的函数模板中虚拟类型参数 T
37、2没有出现在模板函数的形参列表中,所以在调用时不能省略, D选项的调用省略 了 T3,这是允许的。 25 【正确答案】 D 【试题解析】 本题考核文件的 I/O 操作。流可以分为 3类:输入流、输出流以及输入 /输出流,相应地必须将流说明为 ifstream、 ofstream以及 fstream类的对象。如,说明一个输入流对象: ifstream ifile;。说明了流对象后,可使用函数 open()打开文件。文件的打开即是在流与文件之间建立一个连接。 open()的函数原型为:void open(const char *filename,int mode,int port=filebuf:
38、openprot);其中,filename是文件名字,它可包含路径说明。 mode说明文件的打开模式。除了open()成员函数外, ifstream、 ofstream以及 fstream 三类流的构造函数也可以打开文件,其参数同 open()函数。例如: ifstream ifile(c:vcabc txt“);。打开的文件使用完毕后,必须使用 close()函数将其关闭。 close()函数也是流类的成员函数,它没有参数与返回值,其作用是将缓冲区的内容刷新并撤销流与文件之间的连接。当流对象的生存周期后,相 应的析构函数也会将文件关闭。由此可知, A、B 和 C选项的表达式都是正确的。对于
39、D选项,由于 open 函数并不是 tout对象中的成员函数,所以对 open 的调用是非法的。 26 【正确答案】 C 【试题解析】 本题考核拷贝构造函数的概念。声明拷贝构造函数的格式为:类名 :拷贝构造函数 (const类名 &引用名 );,其中 const是修饰符可,以省略。 27 【正确答案】 C 【试题解析】 本题考核构造函数。在 C+中,构造函数不能被继承,因此,派生类的构造函数必须通过调用基类的构造函 数来初始化基类子对象。所以,在定义派生类的构造函数时,除了对自己的数据成员进行初始化外,还必须负责调用基类构造函数使基类的数据成员得以初始化。如果派生类中还有子对象,还应包含对子对
40、象初始化的构造函数。但是它不负责基类中子对象的初始化。 28 【正确答案】 D 【试题解析】 本题考核 this 指针的使用。类成员函数 add 中通过 this 指针实现私有数据成员 n的赋值。 29 【正确答案】 C 【试题解析】 本题考核派生类的定义和访问权限。本题涉及多层次的继承关系。类 B 是类 A的派生类,类 C又是类 B的派生类。类 C中的构造函数调用了类 B的构造函数来初始化类 B 的私有数据成员,而类 B的构造函数又调用了类 A的构造函数来初始化类 A的私有数据成员。由此可知,程序最后的输出为 3,4。 30 【正确答案】 D 【试题解析】 本题考核继承与派生。基类与派生类的
41、关系为:基类是对派生类的抽象,派生类是对基类的具体化。基类抽取了它的派生类的公共特征,而派生类通过增加信息将抽象的基类变为某种有用的类型,派生类是基类定义的延续。派生类是基类的组合。公有派生类的对象可以作为基类的对象处理。由此可知 A、 B和 C选项都是正确的 。而在继承中,采用不同的继承方式,将限制派生类对基类成员的访问。所以 D选项是错误的。 31 【正确答案】 A 【试题解析】 本题考核虚基类的应用。本题中,虽然 Derivedl 和 Derivec2都是由共同的 基类 x派生而来的,但由于引入了虚基类,使得它们分别对应基类的不同副本。这时数据成员 x只存在一份拷贝,不论在类 Deriv
42、edl 中修改,还是在类 Derivect2中修改,都是直接对这惟一拷贝进行操作。本题程序执行语句“Derived obj; ”时,就会先调用虚基类 Base的构造函数,使得 x=0,然后执行类Derivedl 的构造函数使得 x=10,再执行类 Derived2的构造函数,使得 x=20。最后输出 x的值为 20。 32 【正确答案】 C 【试题解析】 本题考核运算符的重载。假定已经作为某个类的成员函数重载了二元运算符 +,且 c1、 c2 都是该类的对象,则 c1.operator+(c2)与 c1+c2 含义相同。如果 +作为该类的非成员函数重载,则 operator十 (c1,c2)与
43、 c1+c2 含义相同。同理,运算符 *作为成员函数重载,则广 (x+)与 y operator*(x+)含义相同, 后缀什作为友元函数重载,那么 x+与 operator+(x,0)含义相同,所以选项 C是正确的。 33 【正确答案】 B 【试题解析】 本题考核类模板的概念。类模板就是一系列相关类的模型或样板,这些类的成员组成相同,成员函数的源代码形式相同,所不同的只是所针对的类型 (成员的类型以及成员函数的参数和返回值的类型 )。 C柑中可以为类模板的参数设置默认值,所以 B)选项是不正确的,其他选项的表述都是正确的。 34 【正确答案】 A 【试题解析】 本题考核运算符的重载。本题通过将
44、 “+”运算符重载为类 date的成员函数实现简单的对象加法。 35 【正确答案】 C 【试题解析】 本题考核派生类的构造函数。在 C+中,构造函数不能被继承,因此,派生类的构造函数必须通过调用基类的构造函数来初始化基类子对象。所以,在定义派生类的构造函数时,除了对自己的数据成员进行初始化外,还必须负责调用基类构造函数使基类的数据成员得以初始化。如果派生类中还有子对象,还应包含对子对象初始化的构造函数。 36 【正确答案】 18 【试题解析】 设循环队列的容量为 n。 若 rear front,则循环队列中的元素个 数为 rear-front: 若 rear front,则循环队列中的元素个数
45、为 n+(rear-front)。 题中, fiont=16, rear=9, 即 rear front, 所以, 循环队列中的元素个数为 m+(rear-front)=25+(9-16)=18。 37 【正确答案】 类 【试题解析】 在面向对象方法中,类描述的是具有相似性质的一组对象。所以,属性与操作相似的一组对象称为类。 38 【正确答案】 数据结构 【试题解析】 Jackson 方法是一种面向数据结构的结 构化方法。 39 【正确答案】 一对多 【试题解析】 实体集 “项目主管 ”与实体集 “项目 ”的联系属于一对多的联系。 40 【正确答案】 物理独立性 【试题解析】 逻辑独立性是指,由于数据的局部逻辑结构与总体逻辑结构之间也由系统提供映像,使得当总体逻辑结构改变时,其局部逻辑结构可以不变,从而根据局部逻辑结构编写的应用程序也可以不必修改。物理独立性是指,由于数据的存储结构与逻辑结构之间由系统提供映像,使得当数据的