1、二级 C+笔试 11及答案解析(总分:90.00,做题时间:90 分钟)一、B选择题/B(总题数:30,分数:60.00)1.下列关于类和对象描述中,错误的是( )。(分数:2.00)A.对象(Objec 是现实世界中的客观事物,对象具有确定的属性B.类是具有相同属性和行为的一组对象的集合C.对象是类的抽象,类是对象的实例D.类是对象的抽象,对象是类的实例2.以下 4个程序中,不能实现两个实参值进行交换的是 ( )。(分数:2.00)A.void swap (float *p, float * float *t ,a; t = t = p; *p = *q; *q = *t; void mai
2、n () float x = 8.0;y = 9.0; swap ( coutx“, “yend1; B.void swap (float *p, float * float a; a = *p; *p = *q; *q = a; void main() float x = 8.0;y = 9.0; swap ( coutx“, “yend1; C.void swap (float *p, float * float x; x = *p; *p = *q; *q = x; void main() float a,; *a = 8.0;*b = 9.0; swap (a, ; coutx“, “
3、yend1; D.void swap (float a = p; p = q; q = a; void main() float a = 8.0,b = 9.0; swap (a,; coutx“, “yend1; 3.下列说法中,正确的是( )。(分数:2.00)A.在线性表中插入一个元素后,线性表长度不变B.在线性表中删除一个元素后,线性表长度不变C.在线性表中插入一个元素后,线性表长度加 1D.在线性表顺序存储的情况下插入一个元素的效率较高4.下列关于链式存储的叙述中,错误的是( )。(分数:2.00)A.链式存储结构的空间可以是不连续的B.数据节点的存储顺序与数据元素之间的逻辑关系可以
4、不一致C.链式存储方式只可用于线性结构D.链式存储也可用于非线性结构5.在进行了任何 C+流的操作后,都可以用 C+流的有关成员函数检测流的状态,其中用于是否进行了非法操作的函数名是( )。(分数:2.00)A.failB.eofC.badD.good6.若有如下程序: #include iostream using namespace std; int s=0; class sample static int n; public: sample (int i) n=i; static void add() s+=n; ; int sample: :s=0; int main () sampl
5、e a(2),b(5); sample: add (); coutsend1; return 0; 程序运行后的输出结果是( )。(分数:2.00)A.2B.5C.7D.37.软件详细设计的主要任务是( )。(分数:2.00)A.确定每个模块的算法和使用的数据结构B.确定每个模块外部的接口C.确定每个模块的功能D.编程8.有以下程序: #include iostream using namespace std; class Base public: Base() virtual void who() cout“Base Class“end1; Base() ; class Derivel :
6、public Base public: void who() cout“Derivel Class“end1; ; class Derive2 : public Base public: void who () cout“Derive2 Class“end1; ; int main () Base *p; Derivel obj1; Derive2 obj2; p= p= p-who ( ); return 0; 执行程序后的输出结果是( )。(分数:2.00)A.Base ClassB.Derivel ClassC.Derive2 ClassD.程序编译时出错9.“or(int x=0,y=
7、0;!x int main () char s=“/n123/“; coutstrlen (s) “, “sizeof (s) end1; return 0; (分数:2.00)A.赋初值的字符串有错B.6,7C.5,6D.6,611.为了使程序的输出的正确结果为: Now is 20047.10 10:10:10 那么应在下列程序划线处填入的正确语句是( )。 那么应在下列程序划线处填入的正确语句是( )。 #include iostream using namespace std; class TIME; class DATE public: DATE(int y=2004,int m=1
8、,int d=1) year=y; month=m; day=d; friend void DateTime(DATE private: int year, month, day; ; class TIME public: TIME(iht h=0, int m=0,int s=0) hour=h; minute=m; second=s; friend void DateTime(DATE private: int hour,minute, second; ; _ /函数 DateTime 的首部 cout“Now is“d.year.d.month.d.day t.hour“:“t.minu
9、te:t.second.end1; int main ( ) DATE d(2004,7,10); TIME t(10, 10, 10); DateTime(d,t); return 0; (分数:2.00)A.void DateTime(DATE class A private: int x; protected: int y; public: int z; void setx(int i) x=i; int getx () return x; ; class B : protected A public: void setvalue(int a, int b, int c) setx (a
10、); y=b; z=c; void display() coutgetx ( ) “, “y“, “z“, “end1; ; int main () B obj; obj.setvalue(5, 6, 7); obj.display ( ); return 0; 程序运行后的输出结果是( )。(分数:2.00)A.产生语法错误B.7,6,5C.5,6,7D.7,5,615.若有以下函数调用语句: f(m+n,x+y,f(m+n,z,(x,y); 在此函数调用语句中实参的个数是( )。(分数:2.00)A.6B.5C.4D.316.在结构化程序设计使用 goto语句的原则是( )。(分数:2.0
11、0)A.限制B.鼓励C.禁止D.滥用17.在数据库设计的 4个阶段中,为关系模式选择存取方法(建立存取路径)的阶段是( )。(分数:2.00)A.需求分析B.概念设计C.逻辑设计D.物理设计18.在函数声明中,下面哪项是不必要的( )。(分数:2.00)A.函数参数的类型和参数名B.函数名C.函数的类型D.函数体19.软件是一种( )。(分数:2.00)A.程序B.数据C.逻辑产品D.物理产品20.若有以下程序段: #include iostream using namespace std; int main () int a=1,4,5; int *p= for (y=0; y3; y+)
12、z= ( (* (p+y) x) ? *(p+y) :x); coutzend1; return 0; 程序运行后的输出结果是( )。(分数:2.00)A.1B.4C.5D.221.下列关于类概念的描述中,错误的是( )。(分数:2.00)A.类是抽象数据类型的实现B.类是具有共同行为的若干对象的统一描述体C.类是创建对象的模板D.类就是 C语言中的结构类型22.若有以下程序: #include iostream using namespace std; class A protected: int a; public: A() a=10; ; class A1 : public A publ
13、ic: A1() a=a+1; ; class A2 : public A public: A2 () a=a+2; ; class B : public A1,public A2 public: B() void print() coutaend1; ; int main ( ) B obj; obj.print(); return 0; 程序运行后的输出结果是( )。(分数:2.00)A.产生语法错误B.11C.12D.1023.某二叉树 T有 n个节点,设按某种顺序对 T中的每个节点进行编号,编号值为 1,2, n,且有如下性质:T 中任一节点 v,其编号等于左子树上的最小编号减 1,而
14、 v的右子树的节点中,其最小编号等于v左子树上的节点的最大编号加 1。此二叉树是按( )顺序编号的。(分数:2.00)A.前序遍历B.中序遍历C.后序遍历D.按层次遍历24.实现运行时的多态性要使用( )。(分数:2.00)A.重载函数B.析构函数C.构造函数D.虚函数25.关系表中的每一横行成为一个( )。(分数:2.00)A.元组B.字段C.属性D.码26.下面关于继承机制的描述中,不正确的是( )。(分数:2.00)A.派生类不仅可以继承基类的成员,也可以添加自己的成员B.设置 protected成员是为派生类访问基类成员之用C.采用不同的继承方式,将限制派生类对基类成员的访问D.采用私
15、有继承,派生类只能得到基类的公有成员27.下列关于队列的叙述中,不正确的是 ( )。(分数:2.00)A.在队列中能插入数据B.在队列中能删除数据C.队列是先进先出的线性表D.队列是先进后出的线性表28.下列对模板的声明中,正确的是( )。(分数:2.00)A.temvlateTB.templateclassT1,T2C.temvlateclassT1,classT2D.templateclassT1;classT229.有以下程序: #include iostream using namespace std; class B private: int a,b; public: B() B(i
16、nt i,int j); void printb(); ; class A B C; public: A() A(int i,int j); void printa(); ; A:A(int i,int j) :c(i,j) void A:printa() c.printb (); B:B(int i, int j) a=i; b=j; void B: :printb() couta“, “bend1; int main () A m(7,8); m.printa(); return 0; 该程序运行后的输出结果是( )。(分数:2.00)A.5,6B.7,8C.8,9D.9,1030.有如下
17、程序段,请指出”p 所代表的是( )。 int *p,*s,k=20; S = t = t = p; *p = *q; *q = *t; void main () float x = 8.0;y = 9.0; swap ( coutx“, “yend1; B.void swap (float *p, float * float a; a = *p; *p = *q; *q = a; void main() float x = 8.0;y = 9.0; swap ( coutx“, “yend1; C.void swap (float *p, float * float x; x = *p; *
18、p = *q; *q = x; void main() float a,; *a = 8.0;*b = 9.0; swap (a, ; coutx“, “yend1; D.void swap (float a = p; p = q; q = a; void main() float a = 8.0,b = 9.0; swap (a,; coutx“, “yend1; 解析:解析 本题考核指针和引用作为函数形参。做此类题时,应学会整体比较,要不然花费的时间不亚于一个大的编程题。 首先,这 4个程序都是调用 swap函数,而且目的都一致,交换传入的两个实参值。 分析被调函数 swap()。在选项
19、A、B 和 C中都是指针作为形参,只有在选项 D中,函数 swap()是以引用作为形参。由指针和引用作为函数形参的特点可知,只要调用了函数,就能达到交换两个实参变量的值,所以这几个被调函数没有问题。 再看主函数。在选项 C中,没有定义指针类型变量,而是直接给指针变量赋值: “floata,b;*a=8.0;*b=9.0;”,这显然是非法的。想直接开辟存储空间,交换两个常量值,是不可能的。所以只有选项 C是错误的。3.下列说法中,正确的是( )。(分数:2.00)A.在线性表中插入一个元素后,线性表长度不变B.在线性表中删除一个元素后,线性表长度不变C.在线性表中插入一个元素后,线性表长度加 1
20、 D.在线性表顺序存储的情况下插入一个元素的效率较高解析:解析 在线性表中插入一个元素后,线性表长度加 1,选项 A是错误的。在线性表中删除一个元素后,线性表长度减 1,选项 B是错误的。在线性表顺序存储的情况下插入一个元素,在平均情况下需要移动的数据元素数目为 n2,效率较低,选项 D 是错误的。4.下列关于链式存储的叙述中,错误的是( )。(分数:2.00)A.链式存储结构的空间可以是不连续的B.数据节点的存储顺序与数据元素之间的逻辑关系可以不一致C.链式存储方式只可用于线性结构 D.链式存储也可用于非线性结构解析:解析 链式存储结构不同于顺序存储结构,它的存储空间可以是不连续的,并且数据
21、节点的存储顺序与数据元素之间的逻辑关系可以不一致,数据元素之间的逻辑关系是由指针域来确定的。链式存储方式可用于线性结构链式存储也可用于非线性结构,在表示复杂的非线性结构时,指针域的个数要多一些。5.在进行了任何 C+流的操作后,都可以用 C+流的有关成员函数检测流的状态,其中用于是否进行了非法操作的函数名是( )。(分数:2.00)A.failB.eofC.bad D.good解析:解析 C+中可以用文件流对象的下列成员函数来判别文件流的当前状态。 函数 is open 判定流对象是否与一个打开的文件相联系,若是,返回 true,否则返回 false。 函数 good 刚进行的操作成功时返回
22、true,否则返回 false。 函数 fail 与 good()相反,刚进行的操作失败时返回 true,否则返回 false。 函数 bad 如果进行了非法操作返回 true,否则返回 false。 函数 eof 进行输入操作时,若到达文件尾返回 true,否则返回 false。 其中,eof 函数只能用于输入流操作。6.若有如下程序: #include iostream using namespace std; int s=0; class sample static int n; public: sample (int i) n=i; static void add() s+=n; ;
23、int sample: :s=0; int main () sample a(2),b(5); sample: add (); coutsend1; return 0; 程序运行后的输出结果是( )。(分数:2.00)A.2B.5 C.7D.3解析:解析 本题考核静态数据成员和静态成员函数的应用。程序中定义一个类 sample,它包括一个静态数据成员 n和一个静态成员函数 add(),并在类的构造函数中给类私有静态数据成员 n赋值。在主函数中,定义对象 a(2)时,通过构造函数使静态数据成员 n的值变为 2,在定义对象 b(5)时,通过构造函数使静态数据成员 n=5(覆盖了前面的 n=2),再
24、执行“sample:add()”使全局变量 s=5。7.软件详细设计的主要任务是( )。(分数:2.00)A.确定每个模块的算法和使用的数据结构 B.确定每个模块外部的接口C.确定每个模块的功能D.编程解析:解析 本题考核结构化设计方法的详细设计。从软件开发的工程化观点来看,在使用程序设计语言编制程序以前,需要对所采用算法的逻辑关系进行分析,设计出全部必要的过程细节,并给予清晰的表达。详细设计的任务就是要决定各个模块的实现算法,并精确地表达这些算法。8.有以下程序: #include iostream using namespace std; class Base public: Base()
25、 virtual void who() cout“Base Class“end1; Base() ; class Derivel : public Base public: void who() cout“Derivel Class“end1; ; class Derive2 : public Base public: void who () cout“Derive2 Class“end1; ; int main () Base *p; Derivel obj1; Derive2 obj2; p= p= p-who ( ); return 0; 执行程序后的输出结果是( )。(分数:2.00)
26、A.Base ClassB.Derivel ClassC.Derive2 Class D.程序编译时出错解析:解析 本题考核虚函数的应用。本题中,先定义了一个基类 Base,它含有一个虚成员函数 who(),随后定义的类 Derivel和 Derive2都是基类 Base的公有派生类。在主函数中定义了一个指向 Base类的指针,它也被允许指向其派生类。在执行过程中,不断改变它所指向的对象,p-who 就能调用不同的函数实现。这是因为使用了虚函数,因而进行动态联编。 程序最后把指针 p指向派生类 Derive2的对象,由于函数 who()在基类 Base中是虚函数,所以系统调用 Derive2中
27、的 who()函数,最后输出Derive2Class。9.“or(int x=0,y=0;!x int main () char s=“/n123/“; coutstrlen (s) “, “sizeof (s) end1; return 0; (分数:2.00)A.赋初值的字符串有错B.6,7C.5,6 D.6,6解析:解析 本题考核字符串的长度和字符型数组所占的字节数。本题在定义字符数组时没有定义数组长度,但赋给数组初值,初值的个数即为数组的长度。故数组长度为 6(包括/0)。字符串的长度为有效字符的个数,为 5。所以程序最后输出 5,6。11.为了使程序的输出的正确结果为: Now is
28、 20047.10 10:10:10 那么应在下列程序划线处填入的正确语句是( )。 那么应在下列程序划线处填入的正确语句是( )。 #include iostream using namespace std; class TIME; class DATE public: DATE(int y=2004,int m=1,int d=1) year=y; month=m; day=d; friend void DateTime(DATE private: int year, month, day; ; class TIME public: TIME(iht h=0, int m=0,int s=
29、0) hour=h; minute=m; second=s; friend void DateTime(DATE private: int hour,minute, second; ; _ /函数 DateTime 的首部 cout“Now is“d.year.d.month.d.day t.hour“:“t.minute:t.second.end1; int main ( ) DATE d(2004,7,10); TIME t(10, 10, 10); DateTime(d,t); return 0; (分数:2.00)A.void DateTime(DATE class A private
30、: int x; protected: int y; public: int z; void setx(int i) x=i; int getx () return x; ; class B : protected A public: void setvalue(int a, int b, int c) setx (a); y=b; z=c; void display() coutgetx ( ) “, “y“, “z“, “end1; ; int main () B obj; obj.setvalue(5, 6, 7); obj.display ( ); return 0; 程序运行后的输出
31、结果是( )。(分数:2.00)A.产生语法错误B.7,6,5C.5,6,7 D.7,5,6解析:解析 本题考核保护继承中对类成员的访问权限。 在保护继承中,基类公有成员和保护成员都以保护成员身份出现在派生类中,而基类私有成员不可访问。 基类的公有成员和保护成员被继承以后作为派生类的保护成员,这样,派生类的其他成员可以直接访问它们。 由保护派生的类声明的对象,不能访问任何基类的成员。在本题中,基类 A中的数据成员 y和函数 setx,经过保护继承以后,在派生类 B中成为保护成员,派生类 B的对象不能访问它们。而派生类 B中的函数 setvalue和 display 都是公有成员,可以通过对象对
32、它们进行访问。所以程序中对各成员的访问是正确的。本程序的功能是对类中各数据成员进行赋值,然后查看赋值是否正确。15.若有以下函数调用语句: f(m+n,x+y,f(m+n,z,(x,y); 在此函数调用语句中实参的个数是( )。(分数:2.00)A.6B.5C.4D.3 解析:解析 本题考察对函数参数表的掌握程度。调用函数时,在函数名后面跟参数,参数用逗号隔开。调用时,实参与形参的个数相等,类型一致,且按顺序一一对应传递数据,同时实参是实际调用函数时所给定的有确定值的常量、变量或表达式。根据以上知识点,可以得到此函数调用语句中实参的个数是 3。故本题答案是:D。16.在结构化程序设计使用 go
33、to语句的原则是( )。(分数:2.00)A.限制 B.鼓励C.禁止D.滥用解析:解析 在块和进程的非正常出口处往往需要用 goto语句,使用 goto语句会使程序执行效率较高,但它造成程序的混乱,程序的质量与 goto语句的数量成反比。结构化程序设计的关键是提高程序的清晰性。因此在结构化程序设计使用 goto语句的原则是限制。17.在数据库设计的 4个阶段中,为关系模式选择存取方法(建立存取路径)的阶段是( )。(分数:2.00)A.需求分析B.概念设计C.逻辑设计D.物理设计 解析:解析 本题考核数据库设计的 4个阶段的区分。题目不难,只需要分清楚四个阶段的任务是什么就可以答对。显然不是需
34、求分析阶段,因为需求分析是分析用户的要求。而概念设计是将需求分析得到的用户需求抽象为信息结构及概念模型的过程,涉及不到关系模式的存取。逻辑结构设计是在概念结构设计的基础上,将 ER图转换成以数据库管理系统的逻辑数据模型表示的逻辑模式,也不涉及到存取的问题。而物理设计是为一个给定的逻辑数据模型选取一个最适合应用环境的物理结构的过程。所以为关系模式选择存取方法应该属于物理设计阶段。18.在函数声明中,下面哪项是不必要的( )。(分数:2.00)A.函数参数的类型和参数名B.函数名C.函数的类型D.函数体 解析:解析 本题考核函数的原型声明格式。解析此题时,要注意函数定义和函数声明的区别。 C+中每
35、一个函数的定义都是由 4个部分组成的,即函数类型、函数名、函数参数表和函数体。 函数的声明是为了消除函数定义的位置影响。不管函数是在何处定义的,只要在调用前进行函数的声明,就可保证函数调用的合法性。 函数原型的说明格式为: 类型函数名(形参表);19.软件是一种( )。(分数:2.00)A.程序B.数据C.逻辑产品 D.物理产品解析:解析 计算机软件是计算机系统中与硬件互相依存的另一部分,是包括程序、数据及相关文档的完整集合。软件是一种逻辑实体,而不是物理实体,具有抽象性。20.若有以下程序段: #include iostream using namespace std; int main (
36、) int a=1,4,5; int *p= for (y=0; y3; y+) z= ( (* (p+y) x) ? *(p+y) :x); coutzend1; return 0; 程序运行后的输出结果是( )。(分数:2.00)A.1B.4C.5 D.2解析:解析 本题考核指针的运算。程序首先定义了一整型数组 a,并赋初值 1,4,5。即 a0,a1和 a2的值分别为 1,4 和 5。程序还定义了一个整型指针 p,并将其初始化且指向数组元素 a0。在for循环语句中,赋值语句“z=(*(p+y)x)?*(p+y):x);”可等价为“z=(ayx)?ay:x”。因为表达式中的“*(p+y)
37、=py=ay”。for 语句每循环一次,就给变量 z重新赋值一次,z 的值其实就是数组和 x相比较,将数组 a中的最大值赋给 z。当 y=2后,退出循环,输出结果是 5。21.下列关于类概念的描述中,错误的是( )。(分数:2.00)A.类是抽象数据类型的实现B.类是具有共同行为的若干对象的统一描述体C.类是创建对象的模板D.类就是 C语言中的结构类型 解析:解析 类是创建对象的模板,它包含着所创建对象的状态描述和方法的定义。类的完整描述包含了外部接口和内部算法以及数据结构的形式。22.若有以下程序: #include iostream using namespace std; class A
38、 protected: int a; public: A() a=10; ; class A1 : public A public: A1() a=a+1; ; class A2 : public A public: A2 () a=a+2; ; class B : public A1,public A2 public: B() void print() coutaend1; ; int main ( ) B obj; obj.print(); return 0; 程序运行后的输出结果是( )。(分数:2.00)A.产生语法错误 B.11C.12D.10解析:解析 本题考核派生类的定义和使用。
39、本程序有语法错误,这是由于类 B中的 print 函数中的语句“coutaend1;”要输出成员 a的值,从而产生了二义性。分析如下:程序中定义了类 A,类A1和类 A2都是在类 A的基础上以公有继承方式产生的派生类,而类 B是在类 A1和类 A2的基础上经过多重继承方式产生的派生类,所以在类 B中成员 a有两个拷贝,系统无法区分是从 A1继承过来的 a,还从A2类继承过来的 a。 修改方法有以下两种: 在被访问的成员加上作用域分辨符“:”。将类 B中的print()函数体中语句改为: coutA1:aend1; 或 coutA2:aend1; 但两者的输出结果不同,前者输出 11,而后者输出
40、 12。 采用虚基类的方法。就是在定义 A1和 A2时,在派生方式前加上关键词“virtual”。23.某二叉树 T有 n个节点,设按某种顺序对 T中的每个节点进行编号,编号值为 1,2, n,且有如下性质:T 中任一节点 v,其编号等于左子树上的最小编号减 1,而 v的右子树的节点中,其最小编号等于v左子树上的节点的最大编号加 1。此二叉树是按( )顺序编号的。(分数:2.00)A.前序遍历 B.中序遍历C.后序遍历D.按层次遍历解析:解析 根据节点 v的右子树的节点中,其最小编号等于 v左子树上的节点的最大编号加 1,可以断定是前序遍历。24.实现运行时的多态性要使用( )。(分数:2.0
41、0)A.重载函数B.析构函数C.构造函数D.虚函数 解析:解析 本题考核虚函数的应用。动态联编一直要到程序运行时才能确定调用哪个函数。虚函数是实现动态联编的必要条件之一。没有虚函数一定不能实现动态联编,但有虚函数存在时,必须同时满足下列条件,才能实现动态联编:类之间满足子类型关系;调用虚函数操作的是指向对象的指针或对象引用,或者是由成员函数调用虚函数。25.关系表中的每一横行成为一个( )。(分数:2.00)A.元组 B.字段C.属性D.码解析:解析 本题考核关系表中的一些概念。元组是指一个实体的所有属性值的集合,关系表中的每一横行就是一个实体的所有属性值的集合,选项 A是正确的。关系表中的每
42、一列的列名为一个属性,列中的每一元素为一个字段。码是指能惟一表示元组的最小属性集。26.下面关于继承机制的描述中,不正确的是( )。(分数:2.00)A.派生类不仅可以继承基类的成员,也可以添加自己的成员B.设置 protected成员是为派生类访问基类成员之用C.采用不同的继承方式,将限制派生类对基类成员的访问D.采用私有继承,派生类只能得到基类的公有成员 解析:解析 本题主要考察 C+中继承机制的特点。C+中允许利用已有的数据类型来定义新的数据类型,这种机制称为继承机制,并称已存在的用来派生新类的类称为基类,由已存在的类派生出的新类称为派生类。派生类有 3种继承方式可以采用,即 publi
43、c、private 和 protected方式。 派生类除了继承基类中的数据成员和成员函数外,还可以添加具有自身特点的成员,这是继承机制的真正用意所在。因此选项 A的叙述正确。 采用不同的继承方式,将限制派生类对基类成员的访问权限,因此选项 C的叙述正确。对于类本身,protected 成员和 private成员对外的访问权限是相同的,即外界函数都无法直接访问这两类成员。对于类作为基类被继承产生派生类时,protected 成员又和 public成员性质相同,即在所有继承方式下都可以被派生类所继承,在 public继承时可以被派生类对象访问,在 protected和 private继承方式下无
44、法被派生类的子类访问。这也正是 C+设置 protected访问权限成员的真正用途,即为派生类继承基类隐蔽成员之用途。因此选项 B的叙述正确。27.下列关于队列的叙述中,不正确的是 ( )。(分数:2.00)A.在队列中能插入数据B.在队列中能删除数据C.队列是先进先出的线性表D.队列是先进后出的线性表 解析:解析 队列是指允许在一端进行插入,而在另一端进行删除的线性表。允许插入的一端称为队尾,允许删除的一端称为队头,所以在队列中既可以插入数据也能删除数据,所以选项 A、B 是正确的。在这种数据结构中,最先插入的元素最先能够被删除。因此队列又称为先进先出的线性表。答案是 D。28.下列对模板的
45、声明中,正确的是( )。(分数:2.00)A.temvlateTB.templateclassT1,T2C.temvlateclassT1,classT2 D.templateclassT1;classT2解析:解析 本题考核模板的定义。模板定义的类型参数表中包含一个或多个由逗号分隔的类型参数项,每一项由关键词 class后跟一个用户命名的标识符,此标识符为类型参数,它不是一种数据类型,但可以同一般数据类型一样使用。在使用类模板时,必须将其实例化,即用实际的数据类型代替它。29.有以下程序: #include iostream using namespace std; class B priv
46、ate: int a,b; public: B() B(int i,int j); void printb(); ; class A B C; public: A() A(int i,int j); void printa(); ; A:A(int i,int j) :c(i,j) void A:printa() c.printb (); B:B(int i, int j) a=i; b=j; void B: :printb() couta“, “bend1; int main () A m(7,8); m.printa(); return 0; 该程序运行后的输出结果是( )。(分数:2.00)A.5,6B.7,8 C.8,9D.9,10解析:解析 本题考核类的定义和应用。程序首先定义了两个类 A和 B。在类 A中,其私有数据成员 c为类 B的对象。类 A的成员函数 printa()中,调用私有成员对象 c的成员函数 printb()输出类 B私有数据成员 a和 b的值。30.有如下程序段,请指出”p 所代表的是( )。 int *p,*s,k=20; S = &k; p = &s;(分数:2.00)A.sB.&kC.*pD.k 解析:解析 在程序中,指针变量 p是 int类型的指针类型。从程序中可看出: 赋值语句“s=&k;”,使 s指向 k,即 s的值为 k在内存中