1、国家二级( C+)笔试模拟试卷 146及答案与解析 1 下列关于线性表、栈和队列的叙述,错误的是 ( A)线性表是给定的 n(n必须大于零 )个元素组成的序列 ( B)线性表允许在表的任何位置进行插入和删除操作 ( C)栈只允许在一端进行插入和删除操作 ( D)队列允许在一端进行插入在另一端进行删除 2 串的长度是 ( A)串中不同字符的个数 ( B)串中不同字母的个数 ( C)串中所含字符的个数且字符个数大于零 ( D)串中所含字符的个数 3 用数组表示线性表的优点是 ( A)便于插入和删除操作 ( B)便于随机存取 ( C)可以动态地分配存储空间 ( D)不需要占用一片相邻的存储空间 4
2、软件工程的理论和技术性研究的内容主要包括软件开发技术和 ( A)消除软件危机 ( B)软件工程管理 ( C)程序设计自动化 ( D)实现软件可重用 5 开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称作 ( A)软件投机 ( B)软件危机 ( C)软件工程 ( D)软件产生 6 软件开发的结构化生命周期方法将软件生命周期划分成 ( A)定义、开发、运行维护 ( B)设计阶段、编程阶段、测试 阶段 ( C)总体设计、详细设计、编程调试 ( D)需求分析、功能定义、系统设计 7 数据处理的最小单位是 ( A)数据 ( B)数据元素 ( C)数据项 ( D)数据结构 8 下列 SQL语
3、句中,用于修改表结构的是 ( A) ALTER ( B) CREATE ( C) UPDATE ( D) INSERT 9 面向对象的程序设计主要考虑的是提高软件的 ( A)可靠性 ( B)可重用性 ( C)可移植性 ( D)可修改性 10 数据库系统的核心是 ( A)数据库 ( B)数据库管理系统 ( C)模拟 模型 ( D)软件工程 11 关于常成员函数,下列说法中错误的是 ( A)常成员函数无法更新对象的数据成员,但可以访问其他类的公用数据成员或全局变量 ( B)常成员函数无法更新对象的数据成员,但是可以更新该对象的常数据成员 ( C)常成员函数既可以被常对象调用,也可以被一般对象调用
4、( D)常成员函数不仅要在声明中用到 const修饰符,在定义时也必须使用 const修饰符 12 解决类继承中产生的二义性的方法不包括 ( A)使用作用域运算符限定访问的成员函数 ( B)在派生类中定义同名函数,且参数表必 须和基类的保持一致 ( C)在派生类中定义同名函数,且参数表可以和基类的不同 ( D)采用虚基类解决多重继承中的共同基类产生的二义性 13 一个类的友元函数能够访问该类的 ( A)私有成员 ( B)保护成员 ( C)公用成员 ( D)所有成员 14 执行下列语句后,输出结果为 steven的是 char*str=“steven“; eout.write(str, ); (
5、 A) strlen(str) ( B) sizeof(str) ( C) strlen(str+1) ( D) sizeof(str-1) 15 对于拷贝构造函数和赋值操作的关系,正确的是 ( A)拷贝构造函数和赋值操作是完全一样的操作 ( B)进行赋值操作时,会调用类的构造函数 ( C)当调用拷贝构造函数时,类的对象正在被建立并被初始化 ( D)拷贝构造函数和赋值操作不能在同一个类中被同时定义 16 下面描述中体现了抽象类特性的语句是 ( A)可以说明虚函数 ( B)可以进行构造函数重载 ( C)可以定义友元函数 ( D)不能定义对象 17 下面说法正确的是 ( A)内联函数在运行时是将该
6、函数的目标代码 插入每个调用该函数的地方 ( B)内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方 ( C)类的内联函数必须在类体内定义 ( D)类的内联函数必须在类体外通过加关键字 inline定义 18 已知一个运行正常的程序中有下面两个语句: int*p1,p2 p1=b; 由此可知,变量 a和 b的类型分别是 ( A) int和 int ( B) int*和 int ( C) int和 int* ( D) int*和 int* 19 以下说法中错误的是 ( A) strcpy(A,B)函数是将 A字符串的内容复制到 B字符串中 ( B) strlen(cha*s)返回字符串
7、 S的长度,未尾的字符不计算在内 ( C) char a20=“string“;中字符串长度为 6 ( D) strstr(S1,S2)函数在字符串 S1中从左边开始查找字符串 S2,若查找成功则返回 S2在 S1中首次出现的位置,否则返回 NULL,如果 S2为 “,则返回 S1。 20 下列关于虚函数与函数重载区别的叙述中不正确的是 ( A)函数说明形式上不同 ( B)函数重载允许是非成员函数,虚函数只能是成员函数 ( C)函数重载的调用依据参 数和类型的差别,虚函数则依据对象 ( D)函数重载的本体可以在类外定义,虚函数不可以 21 请阅读以下程序 main( ) int x=1,y=0
8、,a=0,b=0; switch(x) case 1: switch(y) case 0:a+;break; case 1:b+;break; case 2: a+;b+;break; cout “a=“ a “b=“ b endl; 上面程序的输出结果是 ( A) a=2,b=1 ( B) a=1,b=1 ( C) a=1,b=0 ( D) a=2,b=2 22 以下程序的输出结果是 main( ) int i=0,a=0; while(i 20) for(;) if(i%10)=0)break; else i - -; i+=11;a+=i; cout a endl; ( A) 21 (
9、B) 32 ( C) 33 ( D) 11 23 以下程序的功能是按顺序读入 10名学生 4门课程的成绩,计算出每位学生的平均分并输出: main( ) int n,k; float score,sum,ave; sum=0.0; for(n=1;n =10;n+) for(k=1;k =4;k+) cin score; sum+=score; ave=sum/4.0; cout “NO“ n “:“ ave endl; 上述程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。这条语句是 ( A) sum=0.0 ( B) sum+=score ( C) ave=sun/4.0
10、 ( D) cout “N0“ n “:“ ave endl; 24 执行语句序列 ofstream outfile(“DATE.DAT”); if()cout “OK“; else cout “FAIL“后,如果文件打开成功,显示 “OK”,否则显示 “FAIL“。由此可知,上面 if语句 处的表达式是: ( A) outfile.fail( )或 outfile ( B) outfile.good( )或 outfile ( C) outfile.good( )或 !outfile ( D) outfile.fail( )或 !out file 25 有如下程序 main( ) int n
11、5=0,0,0,i,k=2; for(i=0;i k;i+)ni=ni+1; cout nk endl; 该程序的输出结果是 ( A)不定值 ( B) 2 ( C) 1 ( D) 0 26 下列关于虚基类的描述中错误的是 ( A)虚基类子对象的初始化由最派生类完成 ( B)虚基类子对象的初始化次数与虚基类下面的派生类个数有关 ( C)设置虚基 类的目的是消除二义性 ( D)带有虚基类的多层派生类构造函数的成员初始化列表中都要列出对虚基类构造函数调用 27 在某类的公共部分有声明 string operator+( );和 string operator+(int);则说明 ( A) strin
12、g operator+( );是前置自增运算符声明 ( B) string( )perator+( );是后置自增运算符声明 ( C) string operator+(int);是前置自增运算符声明 ( D)两条语句无区别 28 已知类 X成功地重载 了 - -、 +、 =、 这几个运算符。则其中肯定属于成员函数的运算符是: ( A)前置 - -和 ( B) =和 ( C) 和后置 - - ( D) +和 = 29 设有 char str80;以下不能将输入数据 firstnsecondn CR读取到数组 str中的语句是 ( A) cin.get(str,strlen(str); ( B)
13、 cin.getline(str,strlen(str); ( C) cin str; ( D) cin.read(str,strlen(str); 30 下列能对对象进行初始化的是 ( A)构造函数 ( B)析构函数 ( C)友元函数 ( D)静态成员函数 31 控制格式输入 /输出的操作子中,设置域宽的函数是 ( A) ws ( B) oct ( C) setfill(int) ( D) setw(int) 32 下列不能作为类的成员的是 ( A)自身类对象的指针 ( B)自身类对象 ( C)数组 ( D)另一个类的对象 33 设置虚基类的目的是 ( A)简化程序 ( B)消除二义性 (
14、C)提高程序运行效率 ( D)减少目标代码 34 下列描 述中正确的是 ( A)类中可以定义与类名相同的数据成员 ( B)直接子类中可以定义与父类名相同的数据成员 ( C)孙子类中可以定义与爷爷类名相同的数据成员。 ( D)类的所有子孙中都不可以定义与该类同名的数据成员。 35 要通过函数实现一种不太复杂的功能,并且要求加快执行速度,则应该选用 ( A)重载函数 ( B)内联函数 ( C)静态函数 ( D)虚函数 36 设一棵二叉树的中序遍历结果为 ABCDEFG,前序遍历结果为 DBACFEG,则后序遍历结果为 _。 37 在面向对象方法中,属性 与操作相似的一组对象称为 _。 38 在结构
15、化设计方法中,数据流图表达了问题中的数据流与加工之间的关系,并且,每一个 _实际上对应一个处理模块。 39 软件概要设计的成果是 _。 40 在数据库的外模式、模式和内模式 3级模式的体系结构中,存在两级映射:外模式到模式的映射定义了外模式与模式之间的对应关系;模式到内模式的映射定义了数据库的逻辑结构与 _之间的对应关系。 41 为了表明一个函数不带返回值,应在定义函数时指定该函数类型为 _。 42 下列程 序如果去掉 for循环外围的大括号对,则会出现编译错误。错误原因是_。 #include iostream.h int a=5; void main( ) int a=10,b=20; c
16、out a “,“ b endl; int a=0,b=0; for(int i=1;i 8;i+) a+=i; b+=a; cout a “,“ b “,“ :a endl; cout a “,“ b endl; 43 有以下程序 #include iostream 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) endl; return 0; 则该程序的输出结果应该是 _。 44 下列程序不能通过编译,应该在划线部分填写
17、的语句是 _。 #include iostream.h #include stdlib.h double Func(int a,int b,char ch) double x; switch(ch) case+: x=double(a)+b; break; case -: x=double(a)-b; break; case *: x=double(a)*b; break; case/: if(B)x=double(a)/b; else exit(1); break; default: exit(1); _ void main( ) cout Func(32,6,-) “,“; cout Fu
18、nc(32,6, *) “,“; cout Func(32,6,/) endl; 45 根据下面的主程序,完成类的一种构造函数的最简单形式。 #include iostream.h class base private: int num; public: _; ; void main( ) base try(6); 46 下列程序的执行结果为 _。 #include iostream.h int f(int i) return+i; int g(int void main( ) int a,b; a=b=0; a+=f(g(a); b+=f(f(b); cout “a=“ a “,b=“ b
19、endl; 47 下列程序的运行结果是 _。 #include iostream.h class A public: virtual void use( ) cout “in An“; ; class B:public A public: virtual void use( ) cout “in Bn“; ; class C:public B public: virtual void use( )cout“in Cn“; ; void main( ) A*obj; obj=new C; obj- use( ); delete obj; 48 完成下列类的构造函数,初始化语句为 _。 #incl
20、ude iostream.h class Test private: int x,y; public: void Test(int initx,int inity) _ void printx( )cout x “-“ y “=“ x-y; ; void main( ) Test x(300,200); x.printx( ); 49 根据下列程序的执行结果,可以断定划线部分的修饰符应为 _。执行结果: i9a football is created. a football is created. i=10 a football is destroyed. a football is crea
21、ted. i=20 a football is destroyed. a football is destroyed. 源程序: #include iostream.h class Football public: Football( )cout “a football is created.“ endl; Football( )tout “a football is destroyed.“ endl; ; void func(int i) _Football f1; Football f2; cout “i=“ i endl; void main( ) func(10); func(20);
22、 50 下列程序的输出结果为 2,请将程序补充完整。 #inelude iostream.h using namespace std; class Base public: _ void fun( )cout 1; ; class Derived: public Base pbulic: void fubn( )cout 2; ; int main( ) Base*P=new Derived; Pfun( ); delete P; return 0; 国家二级( C+)笔试模拟试卷 146答案与解析 1 【正确答案】 A 【试题解析】 线性表的插入和删除允许在任何位置进行,所以 B选项的说法是
23、正确的;栈的操作只允许在栈顶进行,因此,栈称为先进后出表 (FILO,First In Last Out),或 “后进先出 ”表 (LIFO,Last In First Out),所以 C选项说法也是正确的; 队列 (queue)是只允许在一端删除,在另一端插入的顺序表,允许删除的一端叫做队头 (front),允许插入的一端叫做队尾 (rear),因此队列亦称作先进先出 (FIFO, First In First Out)的线性表,或后进后出 (LILO, Last In Last Out)的线性表。所以 D选项说法也是正确的。 2 【正确答案】 D 【试题解析】 串的长度指的是串中的字符的个
24、数,且其字符个数可以为零。 3 【正确答案】 B 【试题解析】 对顺序存储的线性表进行插入和删除操作时,需要移动 大量的元素,因此不便于进行插入删除操作, A选项错误;数组的存储空间大小一开始就已经分配好,不能动态分配存储空间,所以 C选项错误;数组正是占用一片相邻的存储空间,所以 D选项也错误。 4 【正确答案】 B 【试题解析】 软件工程的目标是,在给定的成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品。基于这一目标,软件工程的理论和技术性研究的内容主要包括:软件开发技术和软件工程管理。 5 【正确答案
25、】 B 【 试题解析】 将开发软件所需高成本和产品的低质量之间有着尖锐的矛盾称作软件危机。 6 【正确答案】 A 【试题解析】 通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。它可以分为软件定义、软件开发及软件运行维护 3个阶段。 7 【正确答案】 C 【试题解析】 数据处理的最小单位是数据项;由若干数据项组成数据元素;而数据是指能够被计算机识别、存储和加工处理的信息载体;数据结构是指数据之间的相互关系和数据运算。故正确答案为选项 C。 8 【正确答案】 A 【试题 解析】 SQL,语句中凡创建都用 CREATE,删除都用 DROP,改变用ALTER,再跟类型和名字
26、,附加子句。 9 【正确答案】 B 【试题解析】 对于 A项,可靠性,没有这种说法;对于 C项,可移植性,与设计的方法无关,而是与软硬件环境有关;对于 D选项,可修改性,不是面向对象程序设计的主要目的。所以 A选项、 C选项和 D选项都是错误的。 10 【正确答案】 B 【试题解析】 数据库管理系统 (Database Management System,简称 DBMS)是数据库的机构,它是一种系统软件,负 责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等,数据库管理系统是数据库系统的核心。 11 【正确答案】 B 【试题解析】 本题考察 const修饰符的使用规则,只要考生理
27、解了 const表示“常 ”的意思就容易举一反三。根据被修饰内容的不同, const在修饰数据成员,成员函数和对象时,具有特定的含义。很明显,常数据成员是不能被修改的,这一点在选项 B中被破坏,因此可以确定本题答案为 B,如果考生对其他选项难于区分,同样可以得到正确答案。 12 【正确答案】 C 【试题解析】 继承 中的二义性主要表现在多重继承中具有多条继承路径时,派生类中行为的不确定性。如果强制指定了按照某条路径访问,亦即采用域作用符限定访问的成员函数的方法可以解决之,故选项 A排除。在选项 B和 C中,唯一的区别在于参数表是否一致,我们知道:参数表不一致同名函数属于重载,是不存在二义性问题
28、的,故选项 C是正确答案。关于选项 D,虚基类是 C+中解决二义性的一种有效手段。 13 【正确答案】 D 【试题解析】 在一个类的内部声明,并用 friend修饰的函数称为该类的友员函数,友员函数可以像成员函数一样,访问类的所有级 别的成员。友员机制主要用于提高访问效率,但是破坏了类的封装性原则。在程序中适当使用友员函数,并寻求封装和效率之间的一个平衡点,是使用友员技术的一个主要内容。 14 【正确答案】 A 【试题解析】 本题考察在 C+中,字符串的存放方式,以及不同的字符串函数的作用。其中, strlen是专门用于求字符串长度的,其自动去掉字符数组后面的那个0,而 sizeof后面求的则
29、是 str指针,指针在目前的 32位机器中是固定大小的,其值与字符串的长度是没有关系的。故可以排除 B和 D。而选项 C则将 0多考虑了一次 。 15 【正确答案】 C 【试题解析】 在赋值操作中,将发生对象的拷贝操作,但并不说明两者是完全一样的。一般情况下,如果给类定义了赋值操作符,则应该同时定义合适的拷贝构造函数,除非系统默认生成的拷贝构造函数满足赋值操作。实际上,系统默认的拷贝构造函数仅仅将数据成员进行简单的对应赋值,而在多数特殊应用中,这么简单的对应关系是不适用的,这就需要程序员重新定义拷贝构造函数。 16 【正确答案】 D 【试题解析】 抽象类指的是类中至少有一个纯虚函数,纯虚函数是
30、虚函数后有“=0”修饰,表示该函数 在本级类中没有实现,类仅用于派生。抽象类存在的唯一目的就是构造类层次,派生出其他类。抽象类与其他类的最大区别就在于抽象类不能实例化。 17 【正确答案】 B 【试题解析】 内联函数用 inline修饰,用于取代 C语言中的宏定义。 Inline是个建议机制而不是强制机制,也就是说,程序员可以指定任意函数为 inline函数,但是编译器会根据系统情况来决定是否将其 inline处理。对于较大的函数,编译器往往会取消其 inline特性。 Inline函数的特点之一就是执行速度快,他实质是在编译时将函数的目标代码插 入到每个调用该函数的地方,从而没有出栈入栈、保
31、护现场等开销,提高了效率。在类体内定义的成员函数,自动被编译器当做内联函数处理,在类体外定义的成员函数,如果用 inline修饰,编译器也认为是一种内联建议。 18 【正确答案】 C 【试题解析】 本题乍一看让人迷惑,如果找到切入点就可以简单快速的解答本题。观察四个选项可知,变量 a和 b的四种组合分别是四个选项。很明显指针在做值使用时需要加星号修饰,即如 *p1=整数变量的形式。故 b不可能是 int型,故可排除 A和 B。另外需要注意的是变量的初始化和赋值是不同的 。 P2在声明时就指向变量 a,其值为 a的地址。因此,变量 a应为: int型,故正确答案为 C。 19 【正确答案】 A
32、【试题解析】 strcpy( )函数的一般形式为: strcpy(to,from),该函数将 from字符串中的内容复制到 to字符串中,故 A项错误。 20 【正确答案】 D 【试题解析】 A项, B项, C项均为虚函数与函数重载的不同之处。但有一点它们是相同的:在类内外定义均可。故 D项错误。 21 【正确答案】 A 【试题解析】 本题考察 switch语句的嵌套,以及 break语句的使用规则,不再执行下面的 case语句,如果没有 break语句,则会顺序执行随后语句。据此,读程序可知,内层 switch执行 case 0分支,故 a增 1,跳出内层 switch后,由于没有 brea
33、k语句;随后执行外层 switch的 case 2分支, a又增 1, b增 1。故答案为A。 22 【正确答案】 B 【试题解析】 本题是两个循环语句和一个判断语句的嵌套。 For循环的作用是在i等于 10的时候跳出循环。本题的答案为 B。 23 【正确答案】 A 【试题解析】 本题编译没有错误,但是执行结果 确实错误的。错误原因在于第一个考生的乘积输入完之后, sun的值并没有被清空,接着累加第二个考生的分数,随后进行四门平均是错误的。所以需要内层循环和平均值计算完毕后进行 sum的清空。 24 【正确答案】 B 【试题解析】 本题考查文件流状态判断函数。 good( )表示刚进行的操作成
34、功时返回 true,否则返回 false。 fail( )与 good( )相反, fail( )表示刚进行的操作失败时返回 true,否则返回 false。本题中流对象为 outfile,则 if(! outfile)等同于if(outfile.fail( ), if(outfile)等同于 if(outfile.good)。由上述可知正确答案为 B项。 25 【正确答案】 D 【试题解析】 本题中的 for循环只是起到混淆视听的效果,对结果并没有任何影响。 26 【正确答案】 B 【试题解析】 虚基类主要是为了消除在多重继承中的二义性问题。虚基类对象的初始化次数只于对象的多少有关,与类的层
35、次结构是没有关系的。故本题正确答案为 B。 27 【正确答案】 A 【试题解析】 在重载单操作符的过程中, +既可以是前缀运算符, 又可以是后缀运算符, C+规定重载后缀 +时必须多一个虚拟参数 int,则不带虚拟参数 int的为前缀运算符。 28 【正确答案】 B 【试题解析】 赋值运算符 =和运算符 只能作为成员函数重载,而 - -, +则没有限止。 29 【正确答案】 B 【试题解析】 本题考察 C+中输入输出流对象的一些常用成员函数的用法。其中get和 getline的区别在于 getline读取中以 “n“作为输入结束符。故本题中 getline只能接收第一个换行符之前的字符,即 f
36、irst。后面的字符被丢弃。因此正确答案应为 B。 30 【正确答案】 A 【试题解析】 对象的初始化工作由构造函数来完成,析构函数则完成对象销毁前的资源回收等工作。静态成员函数为同一类中所有对象所共享。 31 【正确答案】 D 【试题解析】 本题需要考生记忆一些输入输出控制操作子, oct为八进制, setfill为设置填充符, setw为设置域宽。 32 【正确答案】 B 【试题解析】 类的数据成员可以是任意类型,包括整型,浮点型、字符型、数组、指针和引用,也可以是类自身的指针,另一个类的对象,但不能是类自身的对象,故 B项是错误的。 33 【正确答案】 B 【试题解析】 虚基类的目标就是
37、要消除二义性。 34 【正确答案】 C 【试题解析】 本题所有选项中均提到了同名数据成员的现象。是否允许同名数据成员存在,关键要看这种同名现象编译器是否能够判断出来,如果可以判断,则是允许的,否则则是禁止的。 35 【正确答案】 B 【试题解析】 内联 inline函数就是取代宏定义的,在编译时展开,插入到相应的位置,从而减少了系统开销,加快了执行速度。虚函数则是为了取消二义性现象,静态函数则是一个类所有对象的共 享函数。 36 【正确答案】 ACBEGFD 【试题解析】 由于在前序遍历中首先访问根结点,因此,前序序列中的第一个结点为二叉树的根结点,即 D为二叉树的根结点。又由于在中序遍历中访
38、问根结点的次序为居中,而访问左子树上的结点为居先,访问右子树上的结点为最后,因此,在中序序列中,以根结点 (D)为分界线,前面的子序列 (ABC)一定在左子树中,后面的子序列 (EFG)一定在右子树中。同样的道理,对于已经划分出的每一个子序列的所有结点中,位于前序序列最前面的一个结点为子树的根结点,而在中序序列中位于该根结点前面的 结点构成左子树上的结点子序列,位于该根结点后面的结点构成右子树上的结点子序列。这个处理过程直到所有子序列为空为止。 根据上述道理,该二叉树恢复的过程如下图所示: 根据后序遍历的方法,对该二叉树后序遍历的结果为 ACBEGFD。 37 【正确答案】 类 【试题解析】
39、在面向对象方法中,类描述的是具有相似性质的一组对象。因此,属性与操作相似的一组对象称为类。 38 【正确答案】 加工 【试题解析】 SD方法实际上是面向数据流图的,即它的工作对象实际上是在 SA方法中形成的数据流图。因此,可以由 数据流图来导出结构图。另外,由数据流图导出结构图的关键是找出中心加工,而每个加工则对应一个处理模块。 39 【正确答案】 软件设计说明书 【试题解析】 软件生命周期各个阶段都有阶段成果,软件设计说明书是软件概要设计阶段的成果。 40 【正确答案】 物理结构 【试题解析】 模式也称为逻辑模式,是数据库中全体数据的逻辑结构和特征的描述;内模式也称存储模式或数据库模式,它是
40、数据物理结构和存储结构的描述。 41 【正确答案】 void 【试题解析】 void表明该函数不带返回值,如果没 有 void,则系统会返回一个默认类型的随机值,这对程序可能造成不必要的问题。 42 【正确答案】 a, b重定义 【试题解析】 在本题中 for循环外围的大括号对没有实质含义,仅用于函数的作用域范围。如果去掉该括号,编译错误就会发生,因为变量 a, b出现了重定义错误。 43 【正确答案】 4 【试题解析】 本题主要考查 C+中递归函数,主函数通过调用 fib( )函数, fib( )函数的内部再通过一个分支结构判断是否进行递归调用或退出递归调用,调用方式为直接递归调用。主函数通
41、过实参将值 3赋给 fib( )函数的形参 n,由于 n=3满足 if分支语句条件,因此函数进行递归调用,即计算 fib(2)和 fib(1)的值;将 2赋给 fib( )函数的形参后,由于 n=2不满足 if语句条件,因此程序退出递归,返回2;将 1赋给 fib( )函数的形参后,函数同样返回 2。因此函数递归调用的最终结果为返回 2 +2=4,即 fib(3)=4,程序最后输出值为 4。 44 【正确答案】 return x; 【试题解析】 本题函数声明时指定了函数的返回值为 double,因此在函数体中必须存在一个 return语句。 45 【正确答案】 10 base(int n) 【
42、试题解析】 注意,根据 main函数中对类 base的使用情况可知, base类必须提供整型单参构造函数,同时要求构造其最简单的形式,故函数体为空。 46 【正确答案】 a=3, b=2 【试题解析】 本题考查函数间引用传递的知识点。 g(a)执行之后,返回值为 1, a也变为 1,这就是引用传递的特点。然后执行 f(1),返回值为 2,此时 a=2+1,故a此时为 3。由于 f(b)不具有引用传递的特征,因此,执行后 b=0+2,结果为 2。 47 【正确答案】 in C 【试题解析】 本题考查虚函数和多态性。原本 obj指向祖先类,随后被赋值,指向新的子孙类,则在使用 use这个重载的虚函
43、数时,根据当前指向可确定调用子孙的同名虚函数。 48 【正确答案】 x=initx; y=inity; 【试题解析】 本题考查的是类的私有数据如何从接口成员函数那里得到数据的。本题虽然简单,却体现了类的数据封装思想,并指明了如何完成这种封装。 49 【正确答案】 static 【试题解析】 观察一下输出中对象的构造函数和析构函数的执行次数可以看出,再次进入 时某对象没有被构造,亦即该对象在 func执行后没有被销毁,再次进入时则不需要重构,可以体现这种功能的标识符只有 static。 50 【正确答案】 virtual 【试题解析】 本题考查虚函数的概念。在 C+中,一个基类的指针可以用于指向它的派生类对象。而且通过这样的指针调用虚函数时,被调用的是该指针实际指向的对象类的那个重定义版本。在本题中,通过对象指针 P调用的是派生类中重定的。 fun函数,那么基类中的 fun只有是虚函数才能满足要求。