1、二级 C+笔试 375 及答案解析(总分:98.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.按照标识符的要求,下列选项中,( )符号不能组成标识符。(分数:2.00)A.连接符B.下划线C.大小写字母D.数字字符2.下列数组的定义中,会产生错误的是(分数:2.00)A.int a=(0,1,2,3,4,5,6);B.int a10=0,1,2,3,4,5,6;C.char a5=“hello“;D.char a5=h,e,1,1,o;3.一个函数为 void f(int,charch=a),另一个函数为 void f(int),则它们(分数:2.00)A.
2、不能在同一程序中定义B.可以在同一程序中定义并可重载C.可以在同一程序中定义,但不可以重载D.以上说法均不正确4.实现运行时的多态性要使用(分数:2.00)A.重载函数B.析构函数C.构造函数D.虚函数5.在长度为 n 的有序线性表中进行二分查找,需要的比较次数为(分数:2.00)A.log2nB.nlog2nC.n/2D.(n+1)/26.数据库设计包括两个方面的设计内容,它们是(分数:2.00)A.概念设计和逻辑设计B.模式设计和内模式设计C.内模式设计和物理设计D.结构特性设计和行为特性设计7.结构化程序设计的主要特点是(分数:2.00)A.每个控制结构要模块化B.每个控制结构具有封装性
3、C.每个控制结构具有独立性D.每个控制结构只有一个入口和一个出口8.下面关于对象概念的描述中,错误的是(分数:2.00)A.C+中的对象就是 C 语言中的结构变量B.对象代表着正在创建的系统中的一个实体C.对象是一个状态和操作(或方法)的封装体D.对象之间的信息传递是通过消息进行的9.若有定义:int k,*q;,则下列各选项中赋值表达式正确的是(分数:2.00)A.q=(public: int z; void setx(int i) x=i; int getx () return x; :class B : public Aprivate: int m;public: int p; void
4、 setvalue(int a, int b, int c) setx(a) ; z=b; m=c; void display) coutgetx ()“, “z“, “mend1; ;int main() B obj; obj. setvalue(2,3,4);obj.display(); return 0; 程序运行以后的输出结果是(分数:2.00)A.产生语法错误B.2,3,4C.2,2,2D.4,3,212.数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是(分数:2.00)A.控制流B.加工C.数据存储D.源和潭13.
5、对建立良好的程序设计风格,下面描述正确的是(分数:2.00)A.程序应简单、清晰、可读性好B.符号名的命名只要符合语法C.充分考虑程序的执行效率D.程序的注释可有可无14.下列叙述中正确的是(分数:2.00)A.实体集之间一对一的联系实际上就是一一对应的关系B.关系模型只能处理实体集之间一对一的联系C.关系模型属于格式化模型D.以上三种说法都不对15.下面不属于软件工程 3 个要素的是(分数:2.00)A.工具B.过程C.方法D.环境16.有如下函数模板定义: templatetypename T1,int a2,int a3 T1 sum(T1 a1) return(a1+a2+a3); 则
6、以下调用中正确的是(分数:2.00)A.sumint,4,3(5);B.sum4,3(5);C.sumint,int,int(5);D.sum(5);17.已知枚举类型定义语句为: enum Token NAME,NUMBER,PLUS=5,MINUS,PRINT=10; 则下列说法中错误的是(分数:2.00)A.枚举常量 NAME 的值为 1B.枚举常量 NUMBER 的值为 1C.枚举常量 MINUS 的值为 6D.枚举常量 PRINT 的值为 1018.下面的描述中表达错误的是(分数:2.00)A.公有继承时基类中的 public 成员在派生类中仍是 public 的B.公有继承时基类中
7、的 private 成员在派生类中仍是 private 的C.公有继承时基类中的 protected 成员在派生类中仍是 protected 的D.私有继承时基类中的 public 成员在派生类中是 private 的19.以下程序段的输出结果是 int x=5; do coutx-end1; while(!x);(分数:2.00)A.5B.无任何输出C.4D.陷入死循环20.有如下程序: #includeiostream using namespace std; int main() cout. fill(*); cout. width(5); coutscientific314.15 92
8、6535end1; return 0; 程序运行后,输出的结果是(分数:2.00)A.3.141593e+002B.3.1416e+002C.*3.14e+002D.314.1621.下列关于关系运算的叙述中正确的是(分数:2.00)A.投影、选择、连接是从二维表的行的方向来进行运算B.并、交、差是从二维表的列的方向来进行运算C.投影、选择、连接是从二维表的列的方向来进行运算D.以上三种说法都不对22.( )是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。(分数:2.00)A.模板B.类C.对象D.函数23.有以下程序:#include iostreamusing
9、namespace std;class sampleprivate: int x; static int y;public: sample(int a) ; static void print(sample s);sample: sample(int a) x=a; y+=x;void sample:print(sample s) cout “x=“s. x“, y=“ yend1;int sampte:y=0;int main() sample s1(10); sample s2(20); sample:print(s2); return 0;程序运行后的输出结果是(分数:2.00)A.x=
10、10,y=20B.x=20,y=30C.x=30,y=20D.x=30,y=3024.设有下列二叉树: (分数:2.00)A.ABCDEFB.DBEAFCC.ABDECFD.DEBFCA25.在进行任何 C+流的操作后,都可以用 C+流的有关成员函数检测流的状态;其中只能用于检测输入流状态的操作函数名称是(分数:2.00)A.failB.eofC.badD.good26.有如下程序: #include iostream using namespace std; class sample private: int x,y; public: sample(int i,int j) x=i; y=j
11、; void disp () cout“disp1“end1; void disp() const cout“disp2“end1; ;int main () const sample a(1,2); a.disp(); return 0; 该程序运行后的输出结果是(分数:2.00)A.disp1B.disp2C.disp1 disp2D.程序编译时出错27.若有以下程序:# include iostreamusing namespace std;void sub(int x, int y, int *z) *z = y+x;int main () int a,b, c; sub8,4. su
12、b (6, a, sub (a.b, couta“ , “b“, “cend1; return 0; 程序运行后的输出结果是(分数:2.00)A.12,18,30B.-12,6,8C.6,8,10D.12,-18,1628.若有以下程序: #include iostream using namespace std; class A private: int a; public: void seta(int x) a=x; void showa() couta“,“; ; class B private: int b; public: void setb (int x) b=x; void sh
13、owb() coutb“,“; ;class C :public A,private B private: int c; public: void setc(int x, inc y, int z) c=z; seta (x); setb (y); void showc() showa (); showb (); coutcend1; ; int main () C c; c. setc(1,2,3); c.showc(); return 0; 程序执行后的输出结果是(分数:2.00)A.1,2,3B.1,1,1C.2,2,2D.3,3,329.执行语句序列 ofstream outfite(
14、“data.dat“); if(.)cout“ok“;else cout“fail“; 后,如果文件打开成功,显示“ok”,否则显示“fail”。由此可知,上面 if 语句的“”处的表达式是(分数:2.00)A.outfilfail()或 outfileB.outfilgood()或!outfileC.outfilgood()或 outfileD.outfilfail()或!outfile30.为完成下面的程序,应在划线处填入的语句是 #includeiostream using namespace std; class Base private: int x; public: Base(in
15、t i) x=i; Base() ; class Derived:public Base public: _ /完成类 Derive 构造函数的定义 ; int main() Derived obj; return 0; (分数:2.00)A.Derived(int :Base(B.Derived()C.Void Derived (int :Base(D.Denved(int Base(;31.以下运算符中不能重载的运算符是(分数:2.00)A.newB.sizeofC*D.+32.在下面的类定义中,错误的语句是 class Sample public: Sample(int val); /
16、Sample():/ private: int a=2.5; / Sample(); / ;(分数:2.00)A.B.C.D.33.有以下程序:#include iostreamusing namespace std;class sampleprivate: int n;public: sample() sample(int m) n=m; sample add(sample s1,sample s2) this-n-s1.n+s2.n; return (*this); void disp() cout “n=“nend1; ;int main ( sample s1(10),s2(5),s3
17、; s3.add(s1,s2); s3.disp(); return 0;程序运行后,输出的结果是(分数:2.00)A.n=10B.n=5C.n=20D.n=1534.假定 MyClass 为一个类,那么下列的函数说明中,( )为该类的析构函数。(分数:2.00)A.voidMyClass();B.MyClass(int ;C.MyClass();D.MyClass();35.运算符函数调用格式的表达式:y/x+与表达式:y. operator/(operator+(x,0)含义相同,由此可看出()。(分数:2.00)A.“/”和“+”都是作为成员函数重载的B.“/”和“+”都是作为非成员函数
18、重载的C.“/”是作为成员函数重载的,“+”是作为非成员函数重载的D.“/”是作为非成员函数重载的,“+”都是作为成员函数重载的二、B填空题/B(总题数:14,分数:28.00)36.设一棵二叉树中有 3 个叶子结点,有 8 个度为 1 的结点,则该二叉树牛总的结点数为U 【1】 /U。(分数:2.00)填空项 1:_37.类是一个支持集成的抽象数据类型,而对象是类的U 【2】 /U。(分数:2.00)填空项 1:_38.结构化设计主要分为系统设计和模块设计,U 【3】 /U的任务是决定系统的模块结构。(分数:2.00)填空项 1:_39.一般来说,数据库的设计过程要经历 3 个大的阶段,即可
19、行性分析与研究阶段、系统设计阶段、设计实施与系统运行阶段。概念设计、逻辑结构设计、物理结构设计属于数据库设计的U 【4】 /U阶段。(分数:2.00)填空项 1:_40.数据流图有两种典型的结构形式,它们分别是变换型和U 【5】 /U。(分数:2.00)填空项 1:_41.设有定义语句:double x=2.5, y=4.7;int a=7;那么表达式 x+a%3*(int)(x+ y)%2/4 的值为U 【6】 /U。(分数:2.00)填空项 1:_42.函数 swap(arr,n)可完成对 arr 数组从第 1 个元素到第 n 个元素两两交换。在运行调用函数中的语句后,a0和 a1的值分别
20、为U 【7】 /U。 a0=1;a1=2;swap(a,2);(分数:2.00)填空项 1:_43.下列程序的输出结果是U 【8】 /U #includeiostream using namespace std; int main() int num=500; int Base() ; class Derived : public Base public: U 【10】 /U/完成类 Derive 构造函数的定义 ; int main () Derived Obj; return 0; (分数:2.00)填空项 1:_46.下面是“二维向量”vector2D 的定义,其中作为成员函数重载的运算
21、符“+”的功能是将两向量的分量 x 和 y 对应相加,然后返回作为相加结果的新对象;请填空补充完整。 class vector2D double x; /x 分量 double y; /y 分量 public: vector2D(double x0=0, double y0=0):x(x0),y(y0) void show(cout (,y) ; vector2D operator + (vector2D); ; U 【11】 /Uoperator + (vector2D a) return vector2D(U 【12】 /U); (分数:2.00)填空项 1:_47.已知:double A
22、(double A) return+a;和 int A(in A) return+a;是一个函数模板的两个实例,则该函数模板定义为U 【13】 /U(分数:2.00)填空项 1:_48.有以下程序: #includeiostream.h class A int x; public: A(int a) x=a; friend class B; class B public: void print(A a) a. x-; couta.xend1; ; void main() A a(10); B b; b.print(a) ; 程序执行后的输出结果是U 【14】 /U。(分数:2.00)填空项 1
23、:_49.下面程序的输出结果是U 【15】 /U。 #include iostream using namespace std; class base protected: int a; public: base()cout“0“: ; class basel: virtual public base public: base1() cout“1“; ; class base2 : virtual public base public: base2()cout“2“; ; class derived : public base1,public base2 public: derived ()
24、cout“3“; int main () derived obj; coutend1; return 0; (分数:2.00)填空项 1:_二级 C+笔试 375 答案解析(总分:98.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.按照标识符的要求,下列选项中,( )符号不能组成标识符。(分数:2.00)A.连接符 B.下划线C.大小写字母D.数字字符解析:解析 本题考核 C+的标识符定义。C+规定标识符由大小写字母、数字字符 (09)和下划线组成,并且以字母或下划线开始,后跟 0 个或多个字母,数字字符或下划线。由此可知 A) 选项中的连接符不能用于组成标
25、识符。2.下列数组的定义中,会产生错误的是(分数:2.00)A.int a=(0,1,2,3,4,5,6);B.int a10=0,1,2,3,4,5,6;C.char a5=“hello“; D.char a5=h,e,1,1,o;解析:解析 本题考核数组的定义和初始化。下面逐项进行分析:A) 选项中,数组 a 的定义和初始化符合数组的定义和初始化语法,故正确:B) 选项中,数组 a 初始化的值虽然没有 10 个,但对于少的部分,系统会自动补 0,所以 B) 选项中数组的定义也是正确;C) 选项中,数组 a 的长度为 5,但字符串“hello”的长度为 5+1=6,字符串结束符/0无法存储在
26、数组中,所以是错误的;D) 选项中,数组 a的定义是正确的。3.一个函数为 void f(int,charch=a),另一个函数为 void f(int),则它们(分数:2.00)A.不能在同一程序中定义B.可以在同一程序中定义并可重载C.可以在同一程序中定义,但不可以重载 D.以上说法均不正确解析:解析 本题函数的调用。只要满足参数列表不同的条件,就可以在同一程序中对同名的函数进行定义。但是由于其中一个函数有默认值,因此当程序中出现语句“x=f(10);”时,就会产生二义性,不能确定调用函数 f(10)还是调用函数 f(10,a),此时这两个函数不能重载。4.实现运行时的多态性要使用(分数:
27、2.00)A.重载函数B.析构函数C.构造函数D.虚函数 解析:解析 本题考核虚函数的应用。动态联编一直要到程序运行时才能确定调用哪个函数。虚函数是实现动态联编的必要条件之一。没有虚函数一定不能实现动态联编,但有虚函数存在时,必须同时满足下列条件,才能实现动态联编:类之间满足子类型关系;调用虚函数操作的是指向对象的指针或对象引用,或者是由成员函数调用虚函数。5.在长度为 n 的有序线性表中进行二分查找,需要的比较次数为(分数:2.00)A.log2n B.nlog2nC.n/2D.(n+1)/2解析:解析 在长度为 n 的有序线性表中进行二分查找,需要的比较次数为 log2n。选项 A 正确。
28、6.数据库设计包括两个方面的设计内容,它们是(分数:2.00)A.概念设计和逻辑设计 B.模式设计和内模式设计C.内模式设计和物理设计D.结构特性设计和行为特性设计解析:解析 数据库设计包括两个方面的设计内容:概念设计和逻辑设计。选项 A 正确7.结构化程序设计的主要特点是(分数:2.00)A.每个控制结构要模块化B.每个控制结构具有封装性C.每个控制结构具有独立性D.每个控制结构只有一个入口和一个出口 解析:解析 结构化程序设计要求把程序的结构限制为顺序、选择和循环三种基本结构,以便提高程序的可读性。这种结构化程序具有以下两个特点:首先,以控制结构为单位,只有一个入口和一个出口,使各单位之间
29、的接口比较简单,每个单位也容易被人们所理解;其次,缩小了程序的静态结构与动态执行之间的差异,使人们能方便、正确地理解程序的功能。本题的正确答案是 D。8.下面关于对象概念的描述中,错误的是(分数:2.00)A.C+中的对象就是 C 语言中的结构变量 B.对象代表着正在创建的系统中的一个实体C.对象是一个状态和操作(或方法)的封装体D.对象之间的信息传递是通过消息进行的解析:解析 本题考核对象的概念。 C+中的对象与 C 语言中的结构变量是不一样的。对象是某一类类型的变量,而结构变量是结构类型的变量。同时 C+对 C 的结构有了扩展,结构可以和类一样使用。结构除了可以包含数据成员外,还可以包含成
30、员函数;成员也可以加上 public、private 和 protected 访问控制;结构之间也可以继承。两者惟一的不同之处是,结构中的成员默认是公有的,结构的继承默认是公有的,而类的继承默认是私有的,类的成员默认也是私有的9.若有定义:int k,*q;,则下列各选项中赋值表达式正确的是(分数:2.00)A.q=(public: int z; void setx(int i) x=i; int getx () return x; :class B : public Aprivate: int m;public: int p; void setvalue(int a, int b, int
31、c) setx(a) ; z=b; m=c; void display) coutgetx ()“, “z“, “mend1; ;int main() B obj; obj. setvalue(2,3,4);obj.display(); return 0; 程序运行以后的输出结果是(分数:2.00)A.产生语法错误B.2,3,4 C.2,2,2D.4,3,2解析:解析 本题考核继承与派生。当类的继承方式为公有继承时,基类的公有成员和保护成员分别作为派生类的公有成员和保护成员,派生类的其他成员可以直接访问它们。其他外部使用者只能通过派生类的对象访问继承来的公有成员。在本题中,数据成员 z 和函数
32、 setx 都是基类 A 的公有成员,它们经过公有继承以后,在派生类 B 中还是公有成员,而派生类 B 中的函数 setvalue 和 display 都是公有成员,可以通过对象对它们进行访问。所以程序中对各成员的访问是正确的。本程序的功能是输出已设置的各成员的值。12.数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是(分数:2.00)A.控制流 B.加工C.数据存储D.源和潭解析:解析 数据流图由 4 种基本成分构成:数据流,数据处理(即加工),数据存储,外部实体(即源和潭)而控制流是程序流程图中的图符,它不属于数据流图的合
33、法图符。选项 A 正确。13.对建立良好的程序设计风格,下面描述正确的是(分数:2.00)A.程序应简单、清晰、可读性好 B.符号名的命名只要符合语法C.充分考虑程序的执行效率D.程序的注释可有可无解析:解析 符号名的命名不仅要符合语法,而且符号名的命名应具有一定实际含义,以便于对程序功能的理解。所以,选项 B 错误。 程序设计风格强调“清晰第一,效率第二”,而不是效率第一。所以,选项 C 错误。 程序中的注释部分虽然不是程序的功能,计算机在执行程序时也不会执行它,但在程序中加入正确的注释能够帮助读者理解程序,注释是提高程序可读性的重要手段。所以,选项 D 错误。本题的正确答案为 A。14.下
34、列叙述中正确的是(分数:2.00)A.实体集之间一对一的联系实际上就是一一对应的关系B.关系模型只能处理实体集之间一对一的联系C.关系模型属于格式化模型D.以上三种说法都不对 解析:解析 实体集之间一对一的联系不一定是一一对应的关系如在图书馆,“学生”与“座位”之间是一对一的联系,但学生与座位之间不一定是一一对应的关系,因为有可能某些座位是空的,没有学生去坐。选项 A 错误。 在关系模型中,由于使用表格数据来表示实体之间的联系,所以,可以直接描述多对多的实体联系。选项 B 错误。 关系模型是与格式化模型完全不同的数据模型,它与层次模型,网状模型相比有着本质的区别。关系模型是用表格数据来表示实体
35、本身及其相互之间的联系,它是建立在数学理论基础上的。选项 C 错误。本题的正确答案是 D。15.下面不属于软件工程 3 个要素的是(分数:2.00)A.工具B.过程C.方法D.环境 解析:解析 软件工程包括 3 个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具是指支持软件的开发、管理、文档生成;过程是支持软件开发的各个环节的控制、管理。环境不属于软件工程的 3 个要素之一。本题的正确答案为 D。16.有如下函数模板定义: templatetypename T1,int a2,int a3 T1 sum(T1 a1) return(a1+a2+a3); 则以下调用中正确的是(分
36、数:2.00)A.sumint,4,3(5); B.sum4,3(5);C.sumint,int,int(5);D.sum(5);解析:解析 本题考核函数模板的使用。C+中对函数模板的调用有时候只使用了函数实参,而没有使用模板实参,模板实参都被省略了,但模板实参的省略并不是必然的,而是有条件。模板实参不能省略的情况有:从模板函数实参表获得的信息有矛盾;需要获得特定类型的返回值,而不管参数的类型如何;虚拟类型参数没有出现在模板函数的形参中;函数模板含有常规形参。题中定义的函数模板中含有常规形参,常规形参的信息无法从模板函数的实参表中获得,因此在调用时必须显式地给出对应于常规参数的模板实参。注意,
37、sum 的第一个模板实参的信息可以从模板函数的实参表中获得,但由于它位于不可省略实参的前面,因此不能省略,所以只有 A 选项的调用格式是正确的。17.已知枚举类型定义语句为: enum Token NAME,NUMBER,PLUS=5,MINUS,PRINT=10; 则下列说法中错误的是(分数:2.00)A.枚举常量 NAME 的值为 1 B.枚举常量 NUMBER 的值为 1C.枚举常量 MINUS 的值为 6D.枚举常量 PRINT 的值为 10解析:解析 本题考核 C+数据类型中枚举。枚举类型定义了一些整型符号常量的集合,使用枚举类型时应该注意以下几点:枚举类型的第一个常量默认值是 0;
38、枚举类型常量的值允许彼此相同;虽然枚举类型常量是整数类型,但是不允许使用整数直接赋值给枚举类型变量,也不允许与整数进行运算,只可以与整数进行比较。 由此可知枚举常量 NAME 的值应为 0。所以 A) 选项是错误的。18.下面的描述中表达错误的是(分数:2.00)A.公有继承时基类中的 public 成员在派生类中仍是 public 的B.公有继承时基类中的 private 成员在派生类中仍是 private 的 C.公有继承时基类中的 protected 成员在派生类中仍是 protected 的D.私有继承时基类中的 public 成员在派生类中是 private 的解析:解析 C+中,继
39、承方式控制了基类中具有不同访问属性的成员在派生类中的访问属性。基类中的私有成员在派生类中是隐蔽的,只能在基类内部访问。所以 B) 选项是错误的。派生类中的成员不能访问基类的中私有成员,但可以访问基类中的公有成员和保护成员。此时派生类对基类中各个成员的访问能力与继承方式无关,但继承方式将影响基类成员在派生类中的访问控制属性,基类中公有和保护成员在派生类中的访问控制属性将随着继承方式而改变:派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员;派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都改变为私有成员,派生类从基类保护继承时,基类的公有成员在派生类中改
40、变为保护成员,基类的保护成员在派生类中仍然为保护成员所以,A) 、C) 和 D) 选项都是正确的。19.以下程序段的输出结果是 int x=5; do coutx-end1; while(!x);(分数:2.00)A.5 B.无任何输出C.4D.陷入死循环解析:解析 本题考查循环语句 do-while 语句的执行情况根据 do-while 循环语句功能特点可得:首先无条件执行循环体,表达式 x-的值为 5,输出为 5,x 的值变为 4,然后检查条件 (!x)为假(false),则循环结束。20.有如下程序: #includeiostream using namespace std; int m
41、ain() cout. fill(*); cout. width(5); coutscientific314.15 926535end1; return 0; 程序运行后,输出的结果是(分数:2.00)A.3.141593e+002 B.3.1416e+002C.*3.14e+002D.314.16解析:解析 本题考核格式控制数据的输入输出函数 setfill (char c) 用于设置填充字符,在输出数据时,如果数据宽度小于设置的宽度,则空闲位置要用填充字符填满,设置的填充符一直有效,直到再次设置填充字符为止,如题中调用函数 setfill(*)将填充字符设置为*,后又调用函数 setfil
42、l(#)将填充字符设置为#。函数 setw(int n)用于设置输入输出宽度,当实际数据的宽度大于设置的宽度时,仍按实际的宽度输出, 如题中数据 314. 15926535 的宽度大于 5,所以将会按实际输出。关键字scientific 将浮点数按指数格式(科学表示法)输出。21.下列关于关系运算的叙述中正确的是(分数:2.00)A.投影、选择、连接是从二维表的行的方向来进行运算B.并、交、差是从二维表的列的方向来进行运算C.投影、选择、连接是从二维表的列的方向来进行运算 D.以上三种说法都不对解析:解析 在关系模型的数据语言中,一般除了运用常规的集合运算(并、交、差、笛卡尔积等)外,还定义了
43、一些专门的关系运算,如投影、选择,连接等运算前者是将关系看成是元组的集合,这些运算主要是从二维表的行的方向来进行的;后者主要是从二维表的列的方向来进行运算。周此,选项 A 与 B 错误,选项 C 正确。22.( )是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。(分数:2.00)A.模板 B.类C.对象D.函数解析:解析 本题考核模板的概念。模板是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。23.有以下程序:#include iostreamusing namespace std;class sampleprivate: int x;
44、static int y;public: sample(int a) ; static void print(sample s);sample: sample(int a) x=a; y+=x;void sample:print(sample s) cout “x=“s. x“, y=“ yend1;int sampte:y=0;int main() sample s1(10); sample s2(20); sample:print(s2); return 0;程序运行后的输出结果是(分数:2.00)A.x=10,y=20B.x=20,y=30 C.x=30,y=20D.x=30,y=30解
45、析:解析 本题考核静态数据成员和静态成员函数的应用。类 sample 中定义两个私有成员 x 和 y,其中 y 为静态数据成员。并定义函数 print()为静态成员函数。在主函数中,定义对象 s1(10)时,通过构造函数使对象 s1 的私有成员 x=10,静态数据成员 y=10。定义 s2(20)时,通过构造函数使对象 s2 的私有成员 x=20,静态数据成员 y=10+20=30。程序最后调用静态成员函数 print 输出对象 s2 的私有成员 x 的值20,对象 s1、s2 共享的静态数据成员 y 的值 30。24.设有下列二叉树: (分数:2.00)A.ABCDEFB.DBEAFC C.
46、ABDECFD.DEBFCA解析:解析 二叉树的遍历分为先序、中序、后序三种不同方式。本题要求中序遍历,其遍历顺序应该为:中序遍历左子树访问根结点中序遍历右子树。按照定义,中序遍历序列是 DBEAFC,故答案为B。25.在进行任何 C+流的操作后,都可以用 C+流的有关成员函数检测流的状态;其中只能用于检测输入流状态的操作函数名称是(分数:2.00)A.failB.eof C.badD.good解析:解析 本题考核 C+的输入,输出流。C+中函数 eof()的作用是进行输入操作时,若到达文件尾返回 true,否则返回 false。eof 函数只能用于输入流操作。26.有如下程序: #include iostream using namespace std; class sample private: int x,y; public: sample(int i,int j) x=i; y=j; void disp () cout“disp1“end1; void disp() const cout