1、全国计算机等级考试二级 C+真题 2006年 9月及答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.下列选项中不符合良好程序设计风格的是(分数:2.00)A.源程序要文档化B.数据说明的次序要规范化C.避免滥用 goto语句D.模块设计要保证高耦合、高内聚2.从工程管理角度,软件设计一般分为两步完成,它们是(分数:2.00)A.概要设计与详细设计B.数据设计与接口设计C.软件结构设计与数据设计D.过程设计与数据设计3.下列选项中不属于软件生命周期开发阶段任务的是(分数:2.00)A.软件测试B.概要设计C.软件维护D.详细设计4.在数据
2、库系统中,用户所见的数据模式为(分数:2.00)A.概念模式B.外模式C.内模式D.物理模式5.数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和(分数:2.00)A.编码设计B.测试阶段C.运行阶段D.物理设计6.设有如下三个关系表 (分数:2.00)A.TRSB.TRSC.TRSD.TRS7.下列叙述中正确的是(分数:2.00)A.一个算法的空间复杂度大,则其时间复杂度也必定大B.一个算法的空间复杂度大,则其时间复杂度必定小C.一个算法的时间复杂度火,则其空间复杂度必定小D.上述三种说法都不对8.在长度为 64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为(分数:2.00)A.
3、63B.64C.6D.79.数据库技术的根本目标是要解决数据的(分数:2.00)A.存储问题B.共享问题C.安全问题D.保护问题10.对下列二叉树 (分数:2.00)A.ACBDFEGB.ACBDFGEC.ABDCGEFD.FCADBEG11.下列有关内联函数的叙述中,正确的是(分数:2.00)A.内联函数在调用时发生控制转移B.内联函数必须通过关键字 inline来定义C.内联函数足通过编译器来实现的D.内联函数函数体的最后一条语句必须是 return语句12.下列情况中,不会调用拷贝构造函数的是(分数:2.00)A.用一个对象去初始化同一类的另一个新对象时B.将类的一个对象赋值给该类的另一
4、个对象时C.函数的形参是类的对象,调用函数进行形参和实参结合时D.函数的返回值是类的对象,函数执行返回调用时13.下列有关继承和派生的叙述中,正确的是(分数:2.00)A.如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员B.派生类的成员函数可以防问基类的所有成员C.基类对象可以赋值给派生类对象D.如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类14.下列运算符不能重载为友元函数的是(分数:2.00)A.()-B.+ - + -C. D.+ - * /15.关于在调用模板函数时模板实参的使用,下列表述正确的是(分数:2.00)A.对于虚拟类型参数所对应的模板实参,如
5、果能从模板函数的实参中获得相同的信息,则都可以省略B.对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D.对于常规参数所对应的模板实参,任何情况下都不能省略16.下列关于输入流类成员函数 getline()的描述中,错误的是(分数:2.00)A.该函数是用来读取键盘输入的字符串的B.该函数读取的字符串长度是受限制的C.该函数读取字符串时,遇到终止符便停止D.该函数读取字符串时,可以包含空格17.下列符号中,正确的 C+标识符是(分数:2.00)A.enumB.2bC.foo-9D._3218.下列语句
6、中,错误的是(分数:2.00)A.const int buffer=256;B.const double *point;C.int const buffer=256;D.double * const point;19.if语句的语法格式可描述为: 格式 1:if(条件)语句 或 格式 2:if(条件)语句1else语句 2 关于上面的语法格式,下列表述中错误的是(分数:2.00)A.条件部分可以是一个 if语句,例如 if(if(a=0)B.语句部分可以是一个 if语句,例如 if()if()C.如果在条件前加上逻辑非运算符!并交换语句 1和语句 2的位置,语句功能不变D.语句部分可以是一个循
7、环语句,例如 if()while()20.有如下说明 int a10=1,2,3,4,5,6,7,8,9,10,*p=a; 则数值为 9的表达式是(分数:2.00)A.*p+9B.*(p+8)C.*p+=9D.p+821.若有下面的函数调用: fun(a+b,3,max(n-1,b) 则 fun的实参个数是(分数:2.00)A.3B.4C.5D.622.以下关键字不能用来声明类的访问权限的是(分数:2.00)A.publicB.staticC.protectedD.private23.在公有继承的情况下,允许派生类直接访问的基类成员包括(分数:2.00)A.公有成员B.公有成员和保护成员C.公
8、有成员、保护成员和私有成员D.保护成员24.关于运算符重载,下列表述中正确的是(分数:2.00)A.C+已有的任何运算符都可以重载B.运算符函数的返回类型不能声明为基本数据类型C.在类型转换符函数的定义中不需要声明返回类型D.可以通过运算符重载来创建 C+中原来没有的运算符25.关于关键字 class和 typename,下列表述中正确的是(分数:2.00)A.程序中的 typename都可以替换为 classB.程序中的 class都可以替换为 typenameC.在模板形参表中只能用 typename来声明参数的类型D.在模板形参表中只能用 class或 typename来声明参数的类型2
9、6.有如下程序 #includeiostream #includeiomanip using namespace std; int main() coutsetprecision(3)fixedsetfill(*)setw(8); cout12.345_34.567; return 0; 若程序的输出是: * 12.345*34.567 则程序中下划线处遗漏的操作符是(分数:2.00)A.setprecision(3)B.fixedC.setfill(*)D.setw(8)27.有如下程序 #include iostream #include iomanip using namespace s
10、td; class MyClass public: MyClass() coutA; MyClass(char c) coutc; MyClass() coutB; ;int main( ) MyClass p1,*p2; p2=new MyClass(X); delete p2; return 0; 执行这个程序屏幕上将显示输出(分数:2.00)A.ABXB.ABXBC.AXBD.AXBB28.有如下程序 #include iostream using namespace std; int i=1; class Fun public: static int i; int value( ) r
11、eturn i-l; int value( )const return i+1; ; int Fun:i=2; int main( ) int i=3; Fun funl; const Fun fun2; _ return 0; 若程序的输出结果是: 123 则程序中下划线处遗漏的语句是(分数:2.00)A.coutfunvalue( )Fun:ifun2.value( );B.coutFun:ifunvalue()fun2.value( );C.coutfunvalue( )fun2.value( )Fun:i;D.coutfun2.value( )Fun:ifun1.value( );29
12、.有如下程序: #include iostream using namespace std; class Obj static int i; public: Obj( )i+; Obj()i-; static int getVal( ) return i; ; int Obj:i=0; void f() Obj ob2; coutob2.getVal( ); int main( ) Obj ob1; f(); Obj *ob3=ew Obj; coutob3-getVal( ); delete ob3; coutObj:getVal( ); return 0; 程序的输出结果是(分数:2.00
13、)A.232B.231C.222D.22130.有如下程序 #include iostream using namespace std; class Base protected: Base( )coutA; Base(char c) coutc; ; class Derived: public Base public: Derived(char c) coutc; ; int main( ) Derived d1 (B); return 0; 执行这个程序屏幕上将显示输出(分数:2.00)A.BB.BAC.ABD.BB31.有如下类定义: class MyBase int k; public
14、: MyBase(int n=0):k(n) int value( )const return k; ; class MyDerived: MyBase intj; public: MyDerived(int i): j(i) int getK( )const return k; int getJ( )const return j; ; 编译时发现有一处语法错误,对这个错误最准确的描述是(分数:2.00)A.函数 getK试图访问基类的私有成员变量 kB.在类 MyDerived的定义中,基类名 MyBase前缺少关键字 public、protected 或 privateC.类 MyDeri
15、ved缺少一个无参的构造函数D.类 MyDerived的构造函数没有对基类数据成员 k进行初始化32.在一个派生类对象结束其生命周期时(分数:2.00)A.先调用派生类的析构函数后调用基类的析构函数B.先调用基类的析构函数后调用派生类的析构函数C.如果基类没有定义析构函数,则只调用派生类的析构函数D.如果派生类没有定义析构函数,则只调用基类的析构函数33.有如下的运算符重载函数定义: double operator +(int i,int k)return double(i+k); 但定义有错误,对这个错误最准确的描述是(分数:2.00)A.+只能作为成员函数重载,而这里的+是作为非成员函数重
16、载的B.两个 int型参数的和也应该是 int型,而这里将+的返回类型声明为 doubleC.没有将运算符重载函数声明为某个类的友元D.C+已经提供了求两个 int型数据之和的运算符+,不能再定义同样的运算符34.语句 ofstream f(“SALARYDAT“,ios_base:app);的功能是建立流对象 f,并试图打开文件SALARY.DAT与 f关联,而且(分数:2.00)A.若文件存在,将其置为空文件;若文件不存在,打开失败B.若文件存在,将文件指针定位于文件尾:若文件不存在,建立一个新文件C.若文件存在,将文件指针定位于文件首;若文件不存在,打开失败D.若文件存在,打开失败;若文
17、件不存在,建立一个新文件35.有如下程序 #include iostream using namespace std; class A public: virtual void funcl( ) cout“A1“; void func2( ) cout“A2“; ; class B:public A public: void funcl( ) cout“B1“; void func2( ) cout“B2“; ; int main( ) A *p=new B; p-func1 ( ); p-func2( ); return 0; 运行此程序,屏幕上将显示输出(分数:2.00)A.B1B2B.A
18、1A2C.B1A2D.A1B2二、B填空题/B(总题数:15,分数:30.00)36.下列软件系统结构图 (分数:2.00)填空项 1:_37.U【2】 /U的任务是诊断和改正程序中的错误。(分数:2.00)填空项 1:_38.一个关系表的行称为U 【3】 /U。(分数:2.00)填空项 1:_39.按“先进后出”原则组织数据的数据结构是U 【4】 /U。(分数:2.00)填空项 1:_40.数据结构分为线性结构和非线性结构,带链的队列属于U 【5】 /U。(分数:2.00)填空项 1:_41.若有定义语句:int* a,b;,则变量 b的数据类型是U 【6】 /U。(分数:2.00)填空项
19、1:_42.已知数组 a中的元素个数为 n,下列语句的作用是将下标为 i的元素移动到下标为 i-1 的单元,其中1in。例如,当 n4,a 中原有数据为 1,2,3,4 时,则移动后 a中元素变为 2,3,4,4。请将语句补充完整: for(int i=0;in-1;i+) ai=aU 【7】 /U;(分数:2.00)填空项 1:_43.已知递归函数 f的定义如下: int f(int n) if(n =1)return 1; /递归结束情况 else return n*f(n-2); /递归 则函数调用语句 f(5)的返回值是U 【8】 /U。(分数:2.00)填空项 1:_44.创建对象数
20、组时,对数组的每一个元素都将调用一次构造函数,如果没有显式给出数组元素的初值,则调用缺省构造函数。下列程序涉及到对象数组的创建和单个对象的创建,其输出结果是U 【9】 /U。 #includeiostream using namespace std; class Foo public: Foo(int x)coutA; Foo() ; int main() Foo f3, g(3); return 0; (分数:2.00)填空项 1:_45.已知下列程序的输出结果是 42, 请将画线处缺失的部分补充完整。 #includeiostream using namespace std; class
21、Foo int value; public: Foo( ): value(0) void setValue(int value) U 【10】 /U=value; /给 Foo的数据成员 value赋值 void print( ) coutvalue; ; int main( ) Foo f; f.setValue(42); f.print(); return 0;(分数:2.00)填空项 1:_46.如果不使用多态机制,那么通过基类的指针虽然可以指向派生类对象,但是只能访问问从基类继承的成员。下列程序没有使用多态机制,其输出结果是U 【11】 /U。 #include iostream us
22、ing namespace std; class Base public: void print ( ) cout B; ; class Derived: public Base public: void print ( ) cout D; int main( ) Derived* pd = new Derived( ); Base* pb = pd; pb-print( ); pd-print(); delete pd; return 0; (分数:2.00)填空项 1:_47.在声明派生类时,如果不显式地给出继承方式,缺省的类继承方式是私有继承 private。 已知有如下类定义: cla
23、ss Base protected: void fun() ; class Derived:Base; 则 Base类中的成员函数 fun(),在 Derived类中的访问权限是U 【12】 /U(注意:要求填写 private、protected或 public中的一项)。(分数:2.00)填空项 1:_48.在 MyClass类的定义中,对赋值运算符二进行重载。请将画线处缺失的部分补充完整。 U【13】 /UMyClass:operator(const MyClassj0;-j) if(t=aj-1)break; aj=aj-1; aj=t; protected: int*a,n;/指针
24、a用于存放数组首地址,n 用于存放数组元素个数 ;(分数:2.00)填空项 1:_50.下列程序的输出结果是U 【15】 /U。 #include iostream using namespace std; class A int a; public: A():a(9) virtual void print() const couta; ; class B: public A char b; public: B( )b=S; void print() const coutb; ; void show(A int main() Ad1,*p; B d2; p= d1.print(); d2.pr
25、int0; p-print(); show(d1); show(d2); return 0;(分数:2.00)填空项 1:_全国计算机等级考试二级 C+真题 2006年 9月答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.下列选项中不符合良好程序设计风格的是(分数:2.00)A.源程序要文档化B.数据说明的次序要规范化C.避免滥用 goto语句D.模块设计要保证高耦合、高内聚 解析:解析 编程风格是在不影响性能的前提下,有效地编排和组织程序,以提高可读性和可维护性。更直接的说,风格就是意味着要按照规则进行编程。这些规则包括: (1)程序
26、文档化。就是程序文档包含恰当的标识符,适当的注解和程序的视觉组织等。(2)数据说明。出于阅读理解和维护的需要,最好使模块前的说明语句次序规范化。此外,为方便查找,在每个说明语句的说明符后,数据名应按照字典顺序排列。(3)功能模块化。即把源程序代码按照功能划分为低耦合、高内聚的模块。(4)注意 goto语句的使用。合理使用 goto语句可以提高代码的运行效率,但 goto语句的使用会破坏程序的结构特性。因此,除非确实需要,最好不使用 goto语句。因此,本题的正确答案是 D。2.从工程管理角度,软件设计一般分为两步完成,它们是(分数:2.00)A.概要设计与详细设计 B.数据设计与接口设计C.软
27、件结构设计与数据设计D.过程设计与数据设计解析:解析 从工程管理的角度,软件设计可分为概要设计和详细设计两大步骤。概要设计是根据需求确定软件和数据的总体框架:详细设计是将其进一步精化成软件的算法或表示和数据结构。而在技术上,概要设计和详细设计又由若干活动组成,包括总体结构设计、数据设计和过程设计。因此,本题的正确答案是 A。3.下列选项中不属于软件生命周期开发阶段任务的是(分数:2.00)A.软件测试B.概要设计C.软件维护 D.详细设计解析:解析 软件生命周期由软件定义、软件开发和软件维护三个时期组成,每个时期又进一步划分为若干个阶段。软件定义时期的基本任务是确定软件系统的工程需求。软件定义
28、可分为软件系统的可行性研究和需求分析两个阶段。软件开发时期是具体设计和实现在前一时期定义的软件,它通常由下面五个阶段组成:概要设计、详细设计、编写代码、组装测试和确认测试。软件维护时期的主要任务是使软件持久的满足用户的需要。即当软件在使用过程中发现错误时应加以改正:当环境改变时应该修改软件,以适应新的环境;当用户有新要求时应该及时改进软件,以满足用户的新要求。根据上述对软件生命周期的介绍,可知选项 C中的软件维护不是软件生命周期开发阶段的任务。因此,本题的正确答案是 C。4.在数据库系统中,用户所见的数据模式为(分数:2.00)A.概念模式B.外模式 C.内模式D.物理模式解析:解析 数据库管
29、理系统的三级模式结构由外模式、模式和内模式组成。外模式也称子模式或用户模式,是指数据库用户所看到的数据结构,是用户看到的数据视图。模式也称逻辑模式,是数据库中对全体数据的逻辑结构和特性的描述,是所有用户所见到的数据视图的总和。内模式也称存储模式或物理模式,是指数据在数据库系统内的存储介质上的表示,即对数据的物理结构和存取方法的描述。根据上述介绍可知,数据库系统中用户所见到的数据模式为外模式。因此,本题的正确答案是 B。5.数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和(分数:2.00)A.编码设计B.测试阶段C.运行阶段D.物理设计 解析:解析 数据库的生命周期可以分为两个阶段:一是数
30、据库设计阶段:二是数据库实现阶段。数据库的设计阶段又分为如下四个子阶段:即需求分析、概念设计、逻辑设计和物理设计。 因此,本题的正确答案是 D。6.设有如下三个关系表 (分数:2.00)A.TRSB.TRSC.TRS D.TRS解析:解析 本题考查数据库的关系代数运算。R 表中只有一个域名 A,有两个记录(也叫元组),分别是m和 n:S 表中有两个域名,分别是 B和 C,其所对应的记录分别为 1和 3。注意观察表 T,它是由 R的第一个记录依次与 S的所有记录组合,然后再由 R的第二个记录与 s的所有记录组合,形成的一个新表。上述运算恰恰符合关系代数的笛卡尔积运算规则。关系代数中,笛卡尔积运算
31、用“x”来表示。因此,上述运算可以表示为 T=RS。因此,本题的正确答案为 C。7.下列叙述中正确的是(分数:2.00)A.一个算法的空间复杂度大,则其时间复杂度也必定大B.一个算法的空间复杂度大,则其时间复杂度必定小C.一个算法的时间复杂度火,则其空间复杂度必定小D.上述三种说法都不对 解析:解析 时间复杂度是指一个算法执行时间的相对度量;空间复杂度是指算法在运行过程中临时占用所需存储空间大小的度量。人们都希望选择一个既省存储空间、又省执行时间的算法。然而,有时为了加快算法的运行速度,不得不增加空间开销:有时为了能有效地存储算法和数据,又不得不牺牲运行时间。时间和空间的效率往往是一对矛盾,很
32、难做到两全。但是,这不适用于所有的情况,也就是说时间复杂度和空间复杂度之间虽然经常矛盾,但是二者不存在必然的联系。因此,选项 A、 B、C 的说法都是错误的。故本题的正确答案是 D。8.在长度为 64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为(分数:2.00)A.63B.64 C.6D.7解析:解析 在长度为 64的有序线性表中,其中 64个数据元素是按照从大到小或从小到大的顺序排列有序的。在这样的线性表中进行顺序查找,最坏的情况就是查找的数据元素不在线性表中或位于线性表的最后。按照线性表的顺序查找算法,首先用被查找的数据和线性表的第一个数据元素进行比较,若相等,则查找成功,否则,
33、继续进行比较,即和线性表的第二个数据元素进行比较。同样,若相等,则查找成功,否则,继续进行比较。依次类推,直到在线性表中查找到该数据或查找到线性表的最后一个元素,算法才结束。因此,在长度为 64的有序线性表中进行顺序查找,最坏的情况下需要比较 64次。因此,本题的正确答案为 B。9.数据库技术的根本目标是要解决数据的(分数:2.00)A.存储问题B.共享问题 C.安全问题D.保护问题解析:解析 数据库产生的背景就是计算机的应用范围越来越广泛,数据量急剧增加,对数据共享的要求越来越高。共享的含义是多个用户、多种语言、多个应用程序相互覆盖的使用一些公用的数据集合。在这样的背景下,为了满足多用户、多
34、应用共,享数据的要求,就出现了数据库技术,以便对数据库进行管理。因此,数据库技术的根本目标就是解决数据的共享问题。故选项 B正确。10.对下列二叉树 (分数:2.00)A.ACBDFEG B.ACBDFGEC.ABDCGEFD.FCADBEG解析:解析 二叉树的中序遍历递归算法为:如果根不空,则(1)按中序次序访问左子树;(2)访问跟结点;(3)按中序次序访问右子树。否则返回。本题中,根据中序遍历算法,应首先按照中序次序访问以 C为根结点的左子树,然后再访问根结点 P,最后才访问以 E为根结点的右子树。遍历以 C为根结点的左子树同样要遵循中序遍历算法,因此中序遍历结果为 ACBD;然后遍历根结
35、点 F;遍历以 E为根结点的右子树,同样要遵循中序遍历算法,因此中序遍历结果为 EG。最后把这三部分的遍历结果按顺序连接起来,中序遍历结果为 ACBDFEG。因此,本题的正确答案是 A。11.下列有关内联函数的叙述中,正确的是(分数:2.00)A.内联函数在调用时发生控制转移B.内联函数必须通过关键字 inline来定义C.内联函数足通过编译器来实现的 D.内联函数函数体的最后一条语句必须是 return语句解析:解析 本题考查了内联函数的概念。在调用的时候,内联函数会像宏函数一样的展开,所以它没有一般函数的参数压栈和退栈操作,所以选项 A不正确。在 C+中,编译器会将在类的说明部分定义的函数
36、认定为内联函数,即使它们没有用 inline说明,所以选项 B不正确。内联函数除了比普通函数有更高的执行效率外,跟普通函数没有任何区别,因此选项 D也不正确。4 个选项中只有 C正确。12.下列情况中,不会调用拷贝构造函数的是(分数:2.00)A.用一个对象去初始化同一类的另一个新对象时B.将类的一个对象赋值给该类的另一个对象时 C.函数的形参是类的对象,调用函数进行形参和实参结合时D.函数的返回值是类的对象,函数执行返回调用时解析:解析 本题考查的是拷贝构造函数的概念。拷贝构造函数发生在,用一个已知的对象初始化一个正在创建的同类对象的时候。因此,选项 A、C、D 均会调用拷贝构造函数。而选项
37、 B没有创建的动作,它会调用的函数是重载的赋值运算符函数。故应该选择 B。13.下列有关继承和派生的叙述中,正确的是(分数:2.00)A.如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员B.派生类的成员函数可以防问基类的所有成员C.基类对象可以赋值给派生类对象D.如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类 解析:解析 本题考查的知识点是继承和派生。无论是公有、保护还是私有继承,派生类都能够访问基类的公有和保护成员,而不能访问基类的私有成员,故选项 A和 B不正确。公有继承时,派生类的对象可以作为基类的对象处理,派生类是基类的子类型。子类型关系是可以传递的,但
38、是不可逆的。因此,基类的对象不可作为派生类的对象处理,即基类对象不可赋值给派生类对象。所以选项 C不正确。4 个选项中,只有选项 D正确。14.下列运算符不能重载为友元函数的是(分数:2.00)A.()- B.+ - + -C. D.+ - * /解析:解析 本题考查运算符重载的概念。C+语言规定,、()、-以及所有的类型转换运算符只能作为成员函数重载。而要重载为友元函数就必须重载为非成员函数,故应该选择 A。15.关于在调用模板函数时模板实参的使用,下列表述正确的是(分数:2.00)A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略B.对于虚拟类型参数
39、所对应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略D.对于常规参数所对应的模板实参,任何情况下都不能省略 解析:解析 本题考查的是模板实参的省略。模板实参在以下几种情况中不能省略: 从模板函数实参表获得的信息有矛盾: 需要获得特定类型的返回值,而不管参数的类型如何; 虚拟类型参数没有出现在模板函数的形参表中; 函数模板含有常规形参。 故本题的正确答案是选项 D。16.下列关于输入流类成员函数 getline()的描述中,错误的是(分数:2.00)A.该函数是用来读取键盘输入的字符串的 B.该函数读取的字符串长度是受限制
40、的C.该函数读取字符串时,遇到终止符便停止D.该函数读取字符串时,可以包含空格解析:解析 本题考查的是 getline()函数。getline()函数的原型为:istream_type cout12.345_34.567; return 0; 若程序的输出是: * 12.345*34.567 则程序中下划线处遗漏的操作符是(分数:2.00)A.setprecision(3)B.fixedC.setfill(*)D.setw(8) 解析:解析 本题考查的是输出的格式控制。本例中,操作符 setprecision的作用是设置浮点数的精度;操作符 fixed的作用是让浮点数按定点格式输出;操作符 s
41、etfill的作用是设置填充字符;操作符 setw的作用是设置输入输出的宽度。宽度设置 setw是所有格式设置中惟一的一次有效的设置,即设置的宽度只对其后的一次输入输出操作有效,而其余操作符设置后会一直有效,直到再次设置时为止。因此,若下划线处什么也不填,则输出的结果应该为*12.34534.567。和要求的输出相比较,只缺少两个填充字符*。由此可知,下划线处应该填一个让 34.567的输出宽度为 8的操作符,即 setw(8)。故应该选择 D。27.有如下程序 #include iostream #include iomanip using namespace std; class MyCl
42、ass public: MyClass() coutA; MyClass(char c) coutc; MyClass() coutB; ;int main( ) MyClass p1,*p2; p2=new MyClass(X); delete p2; return 0; 执行这个程序屏幕上将显示输出(分数:2.00)A.ABXB.ABXBC.AXBD.AXBB 解析:解析 本题主要考查的是构造函数和析构函数。构造函数在对象被创建的时候由系统自动调用,而析构函数在对象的生存期即将结束的时候由系统自动调用。本例的 main()函数中,第 1条语句定义了一个 MyClass对象和一个 MyCla
43、ss类型指针,此时创建了 1个对象,因为没有构造参数,故会调用默认构造函数,输出一个A。第 2条语句通过 new运算符动态创建了 1个 MyClass对象,此时传入了一个构造参数X,所以会调用相应的构造函数,输出一个X。第 3条语句使用 delete运算符释放了 1个对象,所以会调用 1次析构函数,输出一个B。最后,当 main()函数结束时,局部变量 p1的生存期结束,故还要调用 1次析构函数输出一个B。因此,最终输出结果是 AXBB,应该选择 D。28.有如下程序 #include iostream using namespace std; int i=1; class Fun publi
44、c: static int i; int value( ) return i-l; int value( )const return i+1; ; int Fun:i=2; int main( ) int i=3; Fun funl; const Fun fun2; _ return 0; 若程序的输出结果是: 123 则程序中下划线处遗漏的语句是(分数:2.00)A.coutfunvalue( )Fun:ifun2.value( ); B.coutFun:ifunvalue()fun2.value( );C.coutfunvalue( )fun2.value( )Fun:i;D.coutfu
45、n2.value( )Fun:ifun1.value( );解析:解析 本题主要考查的是常成员函数。const 关键字可以用于参与对重载函数的区分。重载的原则是:常对象调用常成员函数,一般对象调用一般成员函数。当类中只有一个常成员函数时,一般对象也可以调用该常成员函数。由此可见,通过 fun1调用 value()函数时,是调用前一个,而通过 fun2调用value()函数,是调用后一个。另外,value()函数中访问的 i是类中定义的数据成员 i,全局变量 i在类中被“屏蔽”。观察 4个选项不难发现,要输出的表达式来来去去只有 3个:fun1value()、fun2value()和 Fun:i
46、。fun1.value()调用的是前一个 value()函数,输出 i-1,这里的 i是 Fun类的成员 i,即等于 2-1=1。fun2.value()调用的后一个 value()函数,输出 i+1=2+1=3。 Fun:i 是通过类名直接访问类的静态数据成员 i的值,即 2。所以正确的输出顺序应该是:fun1.value(),Fun:i,fun2.value()。故应该选择 A。29.有如下程序: #include iostream using namespace std; class Obj static int i; public: Obj( )i+; Obj()i-; static int getVal( ) return i; ; int Obj:i=0; void f() Obj ob2; coutob2.getVal( ); int main( ) Obj ob1; f(); Obj *ob3=ew Obj; coutob3-getVal( ); delete ob3; coutOb