1、二级 C+-82 及答案解析(总分:65.00,做题时间:90 分钟)一、选择题(总题数:20,分数:34.00)1.下列语句中,错误的是(分数:2.00)A.const int buffei=256;B.const double*point;C.int const buffer=256;D.double*const point:;2.下列语句中,与语句“n=(ab?(bc?1:0):0);”的功能等价的是 _ 。(分数:2.00)A.if(a=B) n=0;B.if(aB) |(bC) )n=1; else n=0;C.if(aB) if(bC) n=h else n=0; else n=0
2、;D.if(aB) n=1; else if(b=C) n=1; else if(bC) n=1; else n=0;3.派生类构造函数的调用顺序是先调用 _ 。(分数:2.00)A.派生类的构造函数B.基类的构造函数C.派生类的析构函数D.基类的析构函数4.有如下程序; #includeiostream using namespace std; clas Basel public: Basel(int d)coutd; Basel() ; class Base2 public: Base2(int d)outd; Base2() ; class Derived:public Base1,Ba
3、se2 public: Derived(int a,int b,int c,intd): Base1(b),Base2(a),b1(d),b2(c) private: int b1; int b2; ; int main() Derived d(1,2,3,4); return 0; 运行时的输出结果是_。(分数:1.00)A.1234B.2134C.12D.215.下面程序的运行结果是 #includeiostream,h void fun(int*a,int*b) int X= *a; * a= *b; *b=X; cout *a *b“ “; void main() int x=1, y
4、=2; fun( class Pair int m; int n; public: Pair(int i,int j):m(i),n(j) bool operator(Pair P)const; /须在类体外给出定义 ; int main() Pair p1(3,4),p2(4,3),p3(4,5); cout(p1p2)(p2p1)(p2p3)(p3p2); return 0; 运算符函数。perator的功能是比较两个 Pair 对象的大小,当左边对象大时,返回 true,否则返回false。比较规则是首先比较两对象的 m 成员,m 大者为大:当 m 相等时比较 n,n 大者为大。程序输出
5、0101,下列对运算符重载函数的正确定义是_。(分数:2.00)A.bool Pair:operator(Pair p)constif(m!=p.m)return mp.m;return np.n;B.bool Pair:operator(Pair P)if(m!=p.m)return mp.m;return np.n;C.bool Pair:operator(Pair p)constif(mp.m)return true;return np.n;D.bool Pair:operator(Pair P)if(mp.m)return true;return np.n;14.如果算符函数调用格式的
6、表达式:x.operator-(operator+(y,0)中的“”是作为成员函数重载的,“+”是作为友元函数重载的,那么该表达式还可以表示为:()(分数:2.00)A.x-y+B.x-(+y)C.(x+)-yD.+x-y15.有如下程序: #includeiostream using namespace std; int main() cout.fill(“*“); cout.width(5); coutscientific314.15926535endl; retrun 0; 程序运行后,输出的结果是 _ 。(分数:2.00)A.3.141593e+002B.3.1416e+002C.*3
7、.14e+002D.314.1616.下列叙述中正确的是(分数:1.00)A.接口复杂的模块,其耦合程度一定低B.耦合程度弱的模块,其内聚程度一定低C.耦合程度弱的模块,其内聚程度一定高D.上述三种说法都不对17.在数据库系统中,把具有以下特征中之 _ 两个特征的数据模型称为网状模型。(分数:2.00)A.允许有一个以上的结点没有双亲B.有且仅有一个结点无双亲C.根以外的结点有且仅有一个双亲D.一个结点可以有多个双亲18.已知二叉树后序遍历序列是 dabec,中序遍历序列是 debac,它的前序遍历序列是(分数:1.00)A.acbedB.decabC.deabcD.cedba19.有以下结构
8、体说明和变量的定义,且指针 p 指向变量 a,指针 q 指向变量 b。则不能把节点 b 连接到节点 a 之后的语句是 struct node char data; stmct node * next; a,b, * p(分数:2.00)A.nextq;B.nextC.pnextD.( * p) .nextq;20.下列关于虚基类的描述,错误的是 _ 。(分数:2.00)A.设置虚基类的目的是为了消除二义性B.虚基类的构造函数在非虚基类之后调用C.若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用D.若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数二、
9、填空题(总题数:18,分数:31.00)21.软件测试可分为白盒测试和黑盒测试。基本路径测试属于 1 测试。 (分数:2.00)22.多态性分为两类:编译时的多态性和 _ 1_ 。 (分数:1.00)23.虚基类说明格式如下:slass 派生类名 _ 1_ 继承方式基类名。 (分数:2.00)24.若要在程序文件中进行标准输入输出操作,则必须在开始的# include 命令中使用头文件 _ 1_ 。 (分数:2.00)25.如下程序声明了一个使用两个通用数据类型的模板类 dataClass,其中构造函数用于初始化两个数据成员,成员函数 show 用于输出两个数据成员的数值。 #includei
10、ostream using namespace std; _ 1_ T1 i; T2 j; public: dataClass(T1 a, T2 b)i=a;j=b; void show()couti“,“j“/n“; ; int main() dataClassint. doubleob1(10,0.23) dataCllasschar,char *ob2(“X“,“my data“); ob1show(); ob2show(); return 0; 请将程序补充完整,使程序在运行时输出: 10,0.23 X,my data (分数:2.00)26.若有函数 fun(x,y),并且已经使函数
11、指针变量 p 指向函数 fun,则使用 p 调用函数 fun 的方法是 1。 (分数:2.00)27.下列程序的输出结果为-5/8-3/4,请将横线处的缺失部分补充完整。 #includeiostream using namespace std; class Fraction/“分数“类 public: Fraction(double a, double B) : num(A) , den(B) Fraction() Fraction operator -() 1; f. num=-f. num; return f; void print()coutnum“/“den“ “ private:
12、double num; double den; /分母 ; int main() Fraction f1(5,8), f2(3, 4); (-f1) print(); (-f2). print(); return 0: (分数:2.00)28.重载的关系运算符和逻辑运算符的返回类型应当是 1。 (分数:2.00)29.通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为 _ 1_ 。 (分数:2.00)30.在进行模块测试时,要为每个被测试的模块另外设计两块:驱动和承接模块(桩模块)。其中 _ 1_ 的作用是将测试数据传送给被测试的模块,并显示被测试模块所产生的结果。 (分数:1.0
13、0)31.下面程序的输出结果是 1。 #include iostream using namespace std; void f(int x) if(x) coutput(“0“+x%10); f(x10); int main() f(11001); return 0; (分数:1.00)32.友元类的所有成员函数都是另一个类的 _ 1_ 函数。 (分数:2.00)33.有如下程序: #includeiostream using namespace std; class ONE public: virtual void f() cout “1“; ; class TWO: public ONE
14、 public: TWO() cout “2“; ; class THREE: public TWO public: virtual void f() TWO:f(); cout “3“; ; int main() ONE aa, *p; TWO bb; THREE cc; p = P-f(); return 0; 执行上面程序的输出是 1 (分数:1.00)34.若有: int x=25,y=14,z=19; 则在计算表达式 x+=25 int k; for(k=0;k4:k+) s2k=(slk- “0“ +1) + “0“ ; s2k= “/0“ ; couts2; (分数:2.00)3
15、8.若 a. b 和 C 均是 int 型变量,则表达式 a=(b=4)+(c=2)执行后,a 的值为 1。 (分数:2.00)二级 C+-82 答案解析(总分:65.00,做题时间:90 分钟)一、选择题(总题数:20,分数:34.00)1.下列语句中,错误的是(分数:2.00)A.const int buffei=256;B.const double*point; C.int const buffer=256;D.double*const point:;解析:解析 定义常变量的一般形式为: const 类型名变量名=初始值 定义常指针的一般形式为: const 类型名*变量名=初始值 或者
16、为: 类型名*const 变量名=初始值2.下列语句中,与语句“n=(ab?(bc?1:0):0);”的功能等价的是 _ 。(分数:2.00)A.if(a=B) n=0;B.if(aB) |(bC) )n=1; else n=0;C.if(aB) if(bC) n=h else n=0; else n=0; D.if(aB) n=1; else if(b=C) n=1; else if(bC) n=1; else n=0;解析:解析 条件表达式(ab?(bc?1:0):0)的含义是,如果 ab 成立,则此表达式的值等于条件表达式(bc?1:0)的值,否则其值等于 0。而条件表达式(bc?1:0
17、)的含义是,如果 bc 成立,其值等于1,否则其值等于 0。3.派生类构造函数的调用顺序是先调用 _ 。(分数:2.00)A.派生类的构造函数B.基类的构造函数 C.派生类的析构函数D.基类的析构函数解析:解析 派生类在构造时,先调用基类的构造函数。4.有如下程序; #includeiostream using namespace std; clas Basel public: Basel(int d)coutd; Basel() ; class Base2 public: Base2(int d)outd; Base2() ; class Derived:public Base1,Base2
18、 public: Derived(int a,int b,int c,intd): Base1(b),Base2(a),b1(d),b2(c) private: int b1; int b2; ; int main() Derived d(1,2,3,4); return 0; 运行时的输出结果是_。(分数:1.00)A.1234B.2134C.12D.21 解析:解析 多继承构造函数执行的顺序为继承时的顺序。所以答案为 D。Dcrived(int a,int b,int c,int d):Base1(b),Base2(a),bl(d),b2(c)的含义是:构造函数 Basel 的参数值为 b
19、,构造函数Base2 的参数值为 a。成员变量 b1,b2 的值分别为 d、C。5.下面程序的运行结果是 #includeiostream,h void fun(int*a,int*b) int X= *a; * a= *b; *b=X; cout *a *b“ “; void main() int x=1, y=2; fun( class Pair int m; int n; public: Pair(int i,int j):m(i),n(j) bool operator(Pair P)const; /须在类体外给出定义 ; int main() Pair p1(3,4),p2(4,3),
20、p3(4,5); cout(p1p2)(p2p1)(p2p3)(p3p2); return 0; 运算符函数。perator的功能是比较两个 Pair 对象的大小,当左边对象大时,返回 true,否则返回false。比较规则是首先比较两对象的 m 成员,m 大者为大:当 m 相等时比较 n,n 大者为大。程序输出0101,下列对运算符重载函数的正确定义是_。(分数:2.00)A.bool Pair:operator(Pair p)constif(m!=p.m)return mp.m;return np.n; B.bool Pair:operator(Pair P)if(m!=p.m)retur
21、n mp.m;return np.n;C.bool Pair:operator(Pair p)constif(mp.m)return true;return np.n;D.bool Pair:operator(Pair P)if(mp.m)return true;return np.n;解析:解析 按照比较规则:首先比较两对象的 m 成员,m 大者为大:当 m 相等时比较 n,n 大者为大。这条规则的用 C+写出来就是选项 A。14.如果算符函数调用格式的表达式:x.operator-(operator+(y,0)中的“”是作为成员函数重载的,“+”是作为友元函数重载的,那么该表达式还可以表示
22、为:()(分数:2.00)A.x-y+ B.x-(+y)C.(x+)-yD.+x-y解析:解析 本题考核运算符的重载。假定已经作为某个类的成员函数重载了二元运算符+,且 c1、c2都是该类的对象,则 c1. operator+(c2)与 c1+c2 含义相同。如果+作为该类的非成员函数重载,则operator+(c1,c2)与 c1+c2 含义相同。同时一元运算符“+”重载函数调用中采用了虚拟参数,说明+为后缀的,所以其等价的表达式为“x-y+”。15.有如下程序: #includeiostream using namespace std; int main() cout.fill(“*“);
23、 cout.width(5); coutscientific314.15926535endl; retrun 0; 程序运行后,输出的结果是 _ 。(分数:2.00)A.3.141593e+002 B.3.1416e+002C.*3.14e+002D.314.16解析:16.下列叙述中正确的是(分数:1.00)A.接口复杂的模块,其耦合程度一定低B.耦合程度弱的模块,其内聚程度一定低C.耦合程度弱的模块,其内聚程度一定高 D.上述三种说法都不对解析:解析 影响模块之间耦合的主要因素有两个:模块之间的连接形式,模块接口的复杂性。一般来说,接口复杂的模块,其耦合程度要比接口简单的的模块强,所以 选
24、项 A 的说法错误; 耦合程度弱的模块,其内聚程度一定高,选项 B 错误;选项 C 正确。17.在数据库系统中,把具有以下特征中之 _ 两个特征的数据模型称为网状模型。(分数:2.00)A.允许有一个以上的结点没有双亲B.有且仅有一个结点无双亲 C.根以外的结点有且仅有一个双亲D.一个结点可以有多个双亲解析:18.已知二叉树后序遍历序列是 dabec,中序遍历序列是 debac,它的前序遍历序列是(分数:1.00)A.acbedB.decabC.deabcD.cedba 解析:解析 依据后序遍历序列可确定根结点为 c;再依据中序遍历序列可知其左子树由 deba 构成,右子树为空;又由左子树的后
25、序遍历序列可知其根结点为 e,由中序遍历序列可知其左子树为 d,右子树由 ba 构成,如下图所示。求得该二叉树的前序遍历序列为选项 D)。 19.有以下结构体说明和变量的定义,且指针 p 指向变量 a,指针 q 指向变量 b。则不能把节点 b 连接到节点 a 之后的语句是 struct node char data; stmct node * next; a,b, * p(分数:2.00)A.nextq;B.next C.pnextD.( * p) .nextq;解析:解析 要把节点 b 连接到节点 a 之后,必须把 b 的地址给 a 的 next 指针,选项 A 中,指针变量 q 保存的就是
26、变量 b 的地址,选项 B 中的 p 是指针变量,应该是 pnext在选项 D 中,用*运算符取出结构体变量,并且保存的就是 b 的地址,所以正确。20.下列关于虚基类的描述,错误的是 _ 。(分数:2.00)A.设置虚基类的目的是为了消除二义性B.虚基类的构造函数在非虚基类之后调用 C.若同一层中包含多个虚基类,这些虚基类的构造函数按它们说明的次序调用D.若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类的构造函数解析:二、填空题(总题数:18,分数:31.00)21.软件测试可分为白盒测试和黑盒测试。基本路径测试属于 1 测试。 (分数:2.00)解析:白盒解析 黑盒测试是
27、根据程序规格说明所规定的功能来设计测试用例,它不考虑程序的内部结构和处理过程。常用的黑盒测试技术分为等价类划分、边界分析、错误猜测及因果图等。白盒测试的基本原则是保证所测模块中每一个独立路径至少被执行一次;保证所测模块所有判断的每一分支至少被执行一次;保证所测模块每一循环都在边界条件和一般条件下至少各被执行一次;验证所有内部数据结构的有效性。白盒测试的主要方法有逻辑覆盖和基本路径测试等。22.多态性分为两类:编译时的多态性和 _ 1_ 。 (分数:1.00)解析:运行时的多态性解析 本题考核 C+的多态性。在 C+语言中,多态性可分为两类:编译时的多态性和运行时的多态性。23.虚基类说明格式如
28、下:slass 派生类名 _ 1_ 继承方式基类名。 (分数:2.00)解析:virtual24.若要在程序文件中进行标准输入输出操作,则必须在开始的# include 命令中使用头文件 _ 1_ 。 (分数:2.00)解析:iostream.h解析 本头文件和重要,包含了基本输入输出所需要的库函数。25.如下程序声明了一个使用两个通用数据类型的模板类 dataClass,其中构造函数用于初始化两个数据成员,成员函数 show 用于输出两个数据成员的数值。 #includeiostream using namespace std; _ 1_ T1 i; T2 j; public: dataCl
29、ass(T1 a, T2 b)i=a;j=b; void show()couti“,“j“/n“; ; int main() dataClassint. doubleob1(10,0.23) dataCllasschar,char *ob2(“X“,“my data“); ob1show(); ob2show(); return 0; 请将程序补充完整,使程序在运行时输出: 10,0.23 X,my data (分数:2.00)解析:templatetypename T1,typename T2calss dataClass 解析 类模板说明的一般形式是: template类型形参表 clas
30、s类名 /类说明体 ;26.若有函数 fun(x,y),并且已经使函数指针变量 p 指向函数 fun,则使用 p 调用函数 fun 的方法是 1。 (分数:2.00)解析:(*p)(x,y)。解析 一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向读函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”。 函数指针变量定义的一般形式为:类型说明符(*指针变量名)();其中“类型说明符”表示被指函数的返回值的类型。“(*指针变量名)”表示“*”后面的变量是定
31、义的指针变量。最后的空括号表示指针变量所指的是一个函数。27.下列程序的输出结果为-5/8-3/4,请将横线处的缺失部分补充完整。 #includeiostream using namespace std; class Fraction/“分数“类 public: Fraction(double a, double B) : num(A) , den(B) Fraction() Fraction operator -() 1; f. num=-f. num; return f; void print()coutnum“/“den“ “ private: double num; double d
32、en; /分母 ; int main() Fraction f1(5,8), f2(3, 4); (-f1) print(); (-f2). print(); return 0: (分数:2.00)解析:Fraction f(-num, den);解析 在重载取负运算符“-”中,定义一个分数对象 f,其参数为-num, den。28.重载的关系运算符和逻辑运算符的返回类型应当是 1。 (分数:2.00)解析:bool解析 关系运算符和逻辑运算符重载后只能是 true 或者 false,即返回值为 bool 型。29.通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为 _ 1_ 。
33、(分数:2.00)解析:软件生命周期30.在进行模块测试时,要为每个被测试的模块另外设计两块:驱动和承接模块(桩模块)。其中 _ 1_ 的作用是将测试数据传送给被测试的模块,并显示被测试模块所产生的结果。 (分数:1.00)解析:驱动模块解析 驱动模块的作用是将测试数据传送给被测试的模块,并显示被测试模块所产生的结果。31.下面程序的输出结果是 1。 #include iostream using namespace std; void f(int x) if(x) coutput(“0“+x%10); f(x10); int main() f(11001); return 0; (分数:1.
34、00)解析:10011解析 本程序中 f 函数的功能是将传入的实参按倒序方式将各位数字输出。32.友元类的所有成员函数都是另一个类的 _ 1_ 函数。 (分数:2.00)解析:友元33.有如下程序: #includeiostream using namespace std; class ONE public: virtual void f() cout “1“; ; class TWO: public ONE public: TWO() cout “2“; ; class THREE: public TWO public: virtual void f() TWO:f(); cout “3“;
35、 ; int main() ONE aa, *p; TWO bb; THREE cc; p = P-f(); return 0; 执行上面程序的输出是 1 (分数:1.00)解析:2213解析 本题考查了派生类的构造和虚函数的运用。在主函数中,首先定义了一个 ONE 类的一个对象 aa 和一个指针 p。然后定义一个 TWO 类的对象 bb,此时 TWO 类的默认构造函数会被执行,输出一个“2”。接下来又定义了一个 THREE 类的对象 cc,因为 THREE 类是 TWO 类的派生类,所以会调用 TWO 类的构造函数,再输出一个“2”。然后让 p 指向对象 cc。最后通过 ONE 类指针 p
36、调用 THREE 类对象 cc 的成员函数 f(),因为 f()函数是虚函数,所以调用的是 THREE 类中的 f()函数。在该函数中,首先通过作用域运算符“:”调用 TWO 类中的 f()函数,而 TWO 类自身没有定义该函数,但它从 ONE 类中继承了一个,所以该步实际调用的是 ONE 类中的 f()函数,输出一个“1”,最后返回到 THREE 类的 f()函数中,输出一个“3”结束调用,返同主函数,整个程序运行结束。故最终输出的结果是:2213。34.若有: int x=25,y=14,z=19; 则在计算表达式 x+=25 int k; for(k=0;k4:k+) s2k=(slk- “0“ +1) + “0“ ; s2k= “/0“ ; couts2; (分数:2.00)解析:BCDE38.若 a. b 和 C 均是 int 型变量,则表达式 a=(b=4)+(c=2)执行后,a 的值为 1。 (分数:2.00)解析:6解析 本题考察运算优先级问题,从右向左,先括号后乘除,随后加减,这是基本的运算规则。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1