1、二级 C+笔试 51 及答案解析(总分:86.00,做题时间:90 分钟)一、B选择题/B(总题数:30,分数:60.00)1.有以下程序: #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:n=0; int main () sample a(2) ,b(5); sample:add(); coutsend1; return 0; 执行后的输出结果是( )。(分数:2
2、.00)A.2B.5C.7D.32.设有 n 元关系 R 及 m 元关系 S,它们分别有 p、q 个元组,则关系 R 与 S 经笛卡尔积记为 RS,该关系是一个 n+m 元关系,那么其元组个数是( )。(分数:2.00)A.n*mB.n+mC.p+qD.p*q3.以下各特点中,属于算法的基本特征的是( )。(分数:2.00)A.不可行性B.确定性C.拥有部分的情报D.无穷性。4.有以下程序: #includeiostream using namespace std; int main() int a=5, b=4, c=3,d=2; if(abc) coutdend1; else if(c-1
3、=D) =1) coutd+1end1; else coutd+2end1; return O; 执行后的输出结果是( )。(分数:2.00)A.2B.3C.4D.编译时有错,无结果5.有如下程序: #include iostream using namespace std; Class x protected: int a; public: x() a=1; ; class x1 : virtual public x public: x1() a+=1; couta; ; class x2 : virtual public x public: x2() a+=2; couta; ; clas
4、s y : public xl,public x2 public: Y() coutaend1; ; int main () y obj; return 0; 该程序运行后的输出结果是( )。(分数:2.00)A.1B.123C.242D.2446.有如下类的定义。那么空格处的语句是( )。 class MyClass _int x,y; public: MyClass(int x1=0,int y1=0) x=x1; y=y1; static void change() x+=10; y+=10; ;(分数:2.00)A.staticB.constC.privateD.不需要填入内容7.下面
5、是类 MyClass 的定义,对定义中各语句描述正确的是( )。 class MyClass private: int x,y, z; public: void MyClass(int A) x=a; / int f(int a, int B) / x=a; y=b; int f(int a, int b, int c=0) / x=a; y=b; z=c; static void g() x=10; / ;(分数:2.00)A.语句是类 MyClass 的构造函数的定义B.语句和实现类成员函数的重载C.语句实现对类成员变量 x 的更新操作D.语句、和都不正确8.考虑下面的函数原型: void
6、 f(int a,int b=7,char c=); 下面的函数调用中,不合法的是( )。(分数:2.00)A.f(5)B.f(5,8)C.f(6, flag=n-1; while (flagO) k=flag-1; flag=O; for (j=O; j=k; j+) if(LjLj+1) temp=Lj;Lj=Lj+1; Lj+1 =temp; flag=j; void main() int array4=2, 1,3,0; sort (array, 4); for (int i=O; i4; i+) cout arrayi; cout end; 程序执行后的输出结果是( )。(分数:2.
7、00)A.0123B.3210C.2130D.123011.下列不属于软件工程过程的基本活动的是( )。(分数:2.00)A.软件规格说明B.软件开发C.软件确认D.软件需求分析12.下面关于对象概念的描述中错误的是( )。(分数:2.00)A.任何对象都必须有继承性B.对象是属性和方法的封装体C.对象间的通信靠消息传递D.操作是对象的动态属性13.以下程序的执行结果为( )。 #includeiostream.h Class sample int n; public: sample(int i)n=i; operator +() n+; void display() coutnend1; ;
8、 void main() sample obj(5); obj+; objdisplay(); (分数:2.00)A.5B.6C.7D.814.执行完 C+程序中的下列 3 条语句后,c 指向( )。 int a, b,*c = int main ( ) ofstream ofile; char ch; ofile.open (“abc.txt“); cinch; while (ch!=# ) cinch; ofile.put(ch); ofile.close(); return 0; 当从键盘终端连续输入的字符为 a、b、c 和#时,文件abc.txt 中的内容为( )。(分数:2.00)A
9、.程序编译时出错B.abc#C.abcD.#18.有以下程序: #include iostream #include string using namespace std; class base private: char baseName10; public: base ( ) strcpy (baseName, “Base“); virtual char *myName() return baseName; char *className() return baseName; ; class Derived : public base private: char derivedName10
10、; public: Derived() strcpy(derivedName,“Derived“); char *myName() return derivedName; char *className() return derivedName; ; void showPtr(base int main () base bb; Derived dd; showPtr(dd) ; return 0; (分数:2.00)A.DerivedBaseB.BaseBaseC.DerivedDerivedD.BaseDerived19.下列对模板的声明中,正确的是( )。(分数:2.00)A.templa
11、teTB.templateclassT1,T2C.templateclassT1,classT2D.templateclassT1;classT220.软件测试方法中属于静态测试方法的是( )。(分数:2.00)A.黑盒法B.逻辑覆盖C.错误推测D.人工检测21.在顺序表(3,6,8,10,12,15,16,18,21,25,30)中,用二分法查找关键码值 11,所需的关键码比较次数为( )(分数:2.00)A.2B.3C.4D.522.C+语言是以( )语言为基础逐渐发展演变而成的一种程序设计语言。(分数:2.00)A.PascalB.CC.BD.Simula 6723.下列关于类与对象的说
12、法中,不正确的是( )。(分数:2.00)A.对象是类的一个实例B.任何一个对象只能属于一个具体的类C.一个类只能有一个对象D.类与对象的关系和数据类型与变量的关系相似24.数据库设计包括两个方面的设计内容,它们是( )。(分数:2.00)A.概念设计和逻辑设计B.模式设计和内模式设计C.内模式设计和物理设计D.结构特性设计和行为特性设计25.有如下程序: #include iostream using namespace std; class AA public: virtual void f() cout “AA“; ; class BB : public AA public: BB()
13、cout “BB“; ; class CC : public BB public: virtual void f() BB:f(); cout “CC“; ; int main () AA aa,*p; BB bb; CC cc; p= p-f (); return 0; 执行上面的程序将输出( )。(分数:2.00)A.AAB.AABBCCC.BBAABBCCD.BBBBAACC26.下列关于虚函数的描述中,正确的是( )。(分数:2.00)A.如果在重定义函数时使用了保留字 virtual,则该重定义函数仍然是虚函数B.虚函数不得声明为静态函数C.虚函数不得声明为另一个类的友元函数D.派生
14、类必须重新定义基类的虚函数27.设有 a、b、c、d、m、n 均为 int 型变量,且 a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=aB) int main() int x; for(int i=1;i=100;i+) x=i; if (+x%2=0) if (+x%3=0) if (+x%7=0) coutx“,“; coutend1; return 0; 执行后输出结果是( )。(分数:2.00)A.39,81B.42,84C.26,68D.28,7030.不能作为函数重载的判断依据的是( )。(分数:2.00)A.constB.返回类型C.参数个数D.参数类型二、B
15、填空题/B(总题数:13,分数:26.00)31.算法的空间复杂度是指U 【1】 /U。(分数:2.00)填空项 1:_32.树 L 中,度为 1、2、3、4、5 和 6 的节点个数为 6、4、3、3、5、1,则 L 中叶子的个数是U 【2】 /U。(分数:2.00)填空项 1:_33.程序设计中最基本、最常用的控制结构是U 【3】 /U。(分数:2.00)填空项 1:_34.软件是程序、数据和U 【4】 /U的集合。(分数:2.00)填空项 1:_35.一个工人可以加工多种零件,每一种零件可以由不同的工人来加工,工人和零件之间为U 【5】 /U的联系。(分数:2.00)填空项 1:_36.写
16、出执行完下列代码段之后指定变量的值: bool x=true ,y=false,z=false; x=x U【8】 /U; int k=0; do s+=d; k+; d=1.0/(k*k+1); while(U 【9】 /U); (b) double s=1.0; for(int k=1;k=10;k+) s+=1.0/(k*(k+1);(分数:2.00)填空项 1:_38.下面语句段的输出结果是U 【10】 /U。 int x=0,y=2,z=3; switch(x) case 0 : switch(y) case 1 : cout*; break; case 2 : cout%; bre
17、ak; case 1 : switch(z) case 1 : cout$; break; case 2 : cout*; break; default : cout#; (分数:2.00)填空项 1:_39.若要把类 FriendClass 定义为类 MyClass 的友元类,则应在类 MyClass 的定义中加入语句U 【11】 /U。(分数:2.00)填空项 1:_40.有如下的类的模板定义: template class T class MyClass private: T number; public: MyClass(T k); ; 其中构造函数 MyClass()用 k 的值初始
18、化数据成员 n。因此在模板类体外,构造函数 MyClass 应定义为U 【12】 /U。(分数:2.00)填空项 1:_41.有以下程序: #include iostream using namespace std; class MyClass public: MyClass(); MyClass(); static int s; void SetValue(int val); ; int MyClass:s=0; MyClass:MyClass() s+; void MyClass:SetValue(int val) s=val; int main() MyClass my3,*p; p=m
19、y; for(int k=0;k3;k+) p-SetValue(k+1); p+; coutMyClass:send1; return 0; 运行后的输出结果是U 【13】 /U。(分数:2.00)填空项 1:_42.有以下程序: #include iostream using namespace std; class Base private: int a,b; public: Base(int x, int y) a=x; b=y; void Show() couta , bend1; ; class Derived : public Base private: int c; publi
20、c: Derived(int x, int y, int z) : Base(x,y),c(z) void Show() coutcend1; ; int main() Base b(50,50),*pb; Derived d(10,20,30); pb= pb-Show(); return 0; 运行后的打印结果为U 【14】 /U(分数:2.00)填空项 1:_43.设文件 temp.txt 已存在,则以下的打印结果是U 【15】 /U #include iostream #include fstream using namespace std; int main() ofstream o
21、utf (“temp.txt“,ios base: :trunC) ; outf“How you doing“; outf.close(); ifstream inf(“temp.txt“); char str20; infstr; inf.close(); coutstr; return 0; (分数:2.00)填空项 1:_二级 C+笔试 51 答案解析(总分:86.00,做题时间:90 分钟)一、B选择题/B(总题数:30,分数:60.00)1.有以下程序: #include iostream using namespace std; int s=0; class sample stat
22、ic int n; public: sample (int i) n=i; static void add() s+=n; ; int sample:n=0; int main () sample a(2) ,b(5); sample:add(); coutsend1; return 0; 执行后的输出结果是( )。(分数:2.00)A.2B.5 C.7D.3解析:解析 程序中定义对象 a(2)时,通过构造函数使静态数据成员 n=2,在定义对象 b(5)时,通过构造函数使静态数据成员 n=5(覆盖了前面 n=2),再执行“sample:add();”使全局变量 s=5。 注意:本题程序中尽管代
23、码中静态数据成员 n 的初始化语句“int sample:n=0;”没有意义(因为各对象中的n 值由变量 i 赋给),但不能省略,否则会出现编译错误。2.设有 n 元关系 R 及 m 元关系 S,它们分别有 p、q 个元组,则关系 R 与 S 经笛卡尔积记为 RS,该关系是一个 n+m 元关系,那么其元组个数是( )。(分数:2.00)A.n*mB.n+mC.p+qD.p*q 解析:解析 本题考核对笛卡儿积运算的掌握。笛卡儿积是两个关系的合并操作,p 元组关系 R 与 q 元组关系 S 经笛卡儿积后所得新关系的元组个数为 p*q。3.以下各特点中,属于算法的基本特征的是( )。(分数:2.00
24、)A.不可行性B.确定性 C.拥有部分的情报D.无穷性。解析:解析 作为一个算法一般应具有几个基本特征:可行性、确定性、有穷性、拥有足够的情报,显然答案为 B。4.有以下程序: #includeiostream using namespace std; int main() int a=5, b=4, c=3,d=2; if(abc) coutdend1; else if(c-1=D) =1) coutd+1end1; else coutd+2end1; return O; 执行后的输出结果是( )。(分数:2.00)A.2B.3 C.4D.编译时有错,无结果解析:解析 表面上看,本题很容易得
25、到答案。其实不然,出题者在题中隐藏了一个陷阱。粗心的读者可能会想当然地认为 if 语句中的条件表达式:abc 成立(因为 a =5,b=4,c=3)。然后执行 if 后面的语句,就得到错误答案 A) 。 要想正确解答本题,先来了解关系运算符的一些知识:在 C+语言中,true(真)是不为 0 的任何值,而 false(假)是 0。在使用关系运算符和逻辑运算符的表达式时,若结果为true(真)则返回 1,若结果为 false(假),则返回的是 0。 根据以上知识,第一步来判断 if 后面的条件表达式(abC) 是否成立,根据运算符的结合性,先计算表达式 ab,因为 a=5,b=4,所以可得到答案
26、 true,其返回值为 1。再计算表达式 1c,由于 c=3,所以可得到答案为 false(假),其返回值为 0。因此 if 后面的条件表达式不成立,继续下面的条件判断。第二步,计算 else if 后面的条件表达式(c-1=D) =1),把 c=3,d=2 代入此条件表达式,可得到答案为 true,此条件表达式成立,故执行 else if后面的语句,输出结果为 3。5.有如下程序: #include iostream using namespace std; Class x protected: int a; public: x() a=1; ; class x1 : virtual pub
27、lic x public: x1() a+=1; couta; ; class x2 : virtual public x public: x2() a+=2; couta; ; class y : public xl,public x2 public: Y() coutaend1; ; int main () y obj; return 0; 该程序运行后的输出结果是( )。(分数:2.00)A.1B.123C.242D.244 解析:解析 本题程序中引入了虚基类。在主函数中,执行语句“y obj;”时,先执行虚基类 x 的构造函数,使 a=1,然后执行类 x1 的构造函数,使 a=2,并输
28、出值 2。再执行类 x2 的构造函数,使 a=4,并输出值 4。最后执行类 y 的构造函数,输出值 4。6.有如下类的定义。那么空格处的语句是( )。 class MyClass _int x,y; public: MyClass(int x1=0,int y1=0) x=x1; y=y1; static void change() x+=10; y+=10; ;(分数:2.00)A.static B.constC.privateD.不需要填入内容解析:解析 静态成员函数与静态数据成员相似,也从属于类,只要类存在,静态成员函数就可以使用,静态成员函数的定义是在一般函数的定义前加上关键词 sta
29、tic。本题程序中把成员函数 change()定义成静态成员函数。由于静态成员函数只能访问静态数据成员、静态成员函数和类以外的函数和数据,不能访问类中的非静态数据成员(因为非静态数据成员只有对象存在时才有意义)。所以类的数据成员 x 和 y 也必须定义成静态数据成员。7.下面是类 MyClass 的定义,对定义中各语句描述正确的是( )。 class MyClass private: int x,y, z; public: void MyClass(int A) x=a; / int f(int a, int B) / x=a; y=b; int f(int a, int b, int c=0
30、) / x=a; y=b; z=c; static void g() x=10; / ;(分数:2.00)A.语句是类 MyClass 的构造函数的定义B.语句和实现类成员函数的重载C.语句实现对类成员变量 x 的更新操作D.语句、和都不正确 解析:解析 在 C+中构造函数没有返回类型,所以语句是错误的。语句和语句在进行 f(x,y)调用时会产生二义性。静态成员函数不能直接访问类中说明的非静态成员。所以语句也是错误的。8.考虑下面的函数原型: void f(int a,int b=7,char c=); 下面的函数调用中,不合法的是( )。(分数:2.00)A.f(5)B.f(5,8)C.f(
31、6, flag=n-1; while (flagO) k=flag-1; flag=O; for (j=O; j=k; j+) if(LjLj+1) temp=Lj;Lj=Lj+1; Lj+1 =temp; flag=j; void main() int array4=2, 1,3,0; sort (array, 4); for (int i=O; i4; i+) cout arrayi; cout end; 程序执行后的输出结果是( )。(分数:2.00)A.0123 B.3210C.2130D.1230解析:解析 本题中的函数 sort 的功能是将输入的数组 L,按从小到大的顺序排序,并返
32、回。所以程序最后的输出为 0123,即 A 选项。11.下列不属于软件工程过程的基本活动的是( )。(分数:2.00)A.软件规格说明B.软件开发C.软件确认D.软件需求分析 解析:解析 软件工程过程是把输入转化为输出的一组彼此相关的资源和活动。软件工程的过程是将软件工程的方法和工具综合起来,以达到合理、及时地进行计算机软件开发的目的。它的基本活动包括软件规格说明、软件开发、软件确认、软件演进。12.下面关于对象概念的描述中错误的是( )。(分数:2.00)A.任何对象都必须有继承性 B.对象是属性和方法的封装体C.对象间的通信靠消息传递D.操作是对象的动态属性解析:解析 对象是面向对象方法中
33、最基本的概念,对象可以用来表示客观世界中的任何实体,因此需要很清楚地理解对象的概念。因为客观世界的实体通常都具有静态和动态的属性,所以对象也具有静态和动态的属性。操作是对象的动态属性,属性是对象的静态属性。对象是属性和方法的封装体。面向对象是通过对象与对象间彼此的相互合作来推动的,对象间的相互合作需要传递消息。对象可以有继承性,但并不是任何对象都必须有继承性。13.以下程序的执行结果为( )。 #includeiostream.h Class sample int n; public: sample(int i)n=i; operator +() n+; void display() cout
34、nend1; ; void main() sample obj(5); obj+; objdisplay(); (分数:2.00)A.5B.6 C.7D.8解析:解析 本题考核运算重载的简单应用。程序中通过“+”运算符重载将 obj+转换成对类的私有变量 n 的增 1 运算。所以程序最后输出为 6。14.执行完 C+程序中的下列 3 条语句后,c 指向( )。 int a, b,*c = int main ( ) ofstream ofile; char ch; ofile.open (“abc.txt“); cinch; while (ch!=# ) cinch; ofile.put(ch)
35、; ofile.close(); return 0; 当从键盘终端连续输入的字符为 a、b、c 和#时,文件abc.txt 中的内容为( )。(分数:2.00)A.程序编译时出错B.abc#C.abc D.#解析:解析 本题程序的功能是将从键盘终端输入的内容存储到指定的文件中。18.有以下程序: #include iostream #include string using namespace std; class base private: char baseName10; public: base ( ) strcpy (baseName, “Base“); virtual char *m
36、yName() return baseName; char *className() return baseName; ; class Derived : public base private: char derivedName10; public: Derived() strcpy(derivedName,“Derived“); char *myName() return derivedName; char *className() return derivedName; ; void showPtr(base int main () base bb; Derived dd; showPt
37、r(dd) ; return 0; (分数:2.00)A.DerivedBase B.BaseBaseC.DerivedDerivedD.BaseDerived解析:解析 本题考核虚函数的应用。类 Derived 是从基类 Base 公有派生而来的。因此,Derived 是基类 Base 的子类型。主函数中定义了一个基类对象 bb 和一个派生类对象 dd。从程序中可看出,派生类Derived 的对象 dd 交给了处理基类 Base 的对象的函数 showPtr 进行处理。由于在基类中函数 myName 被定义成虚函数,所以在函数 showPtr 中调用的 myName 函数为派生类的成员函数
38、mySame,从而输出Derived。然后输出 className,即基类名称 Base。19.下列对模板的声明中,正确的是( )。(分数:2.00)A.templateTB.templateclassT1,T2C.templateclassT1,classT2 D.templateclassT1;classT2解析:解析 本题考核模板的定义。模板定义的类型参数表中包含一个或多个由逗号分隔的类型参数项,每一项由关键词 class 后跟一个用户命名的标识符,此标识符为类型参数,它不是一种数据类型,但可以同一般数据类型一样使用。在使用类模板时,必须将其实例化,即用实际的数据类型代替它。20.软件测
39、试方法中属于静态测试方法的是( )。(分数:2.00)A.黑盒法B.逻辑覆盖C.错误推测D.人工检测 解析:解析 软件测试若从是否需要执行被测试软件的角度,可以分为静态测试和动态测试方法。若按照功能划分,可以分为黑盒测试和白盒测试。静态测试可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。逻辑覆盖属于白盒测试的主要方法。错误推测属于黑盒测试主要诊断方法之一。21.在顺序表(3,6,8,10,12,15,16,18,21,25,30)中,用二分法查找关键码值 11,所需的关键码比较次数为( )(分数:2.00)A.2B.3C.4 D.5解析:解析 二分法查找首先用想要查找的关
40、键词 k 与中间位置的节点关键词相比较,这个中间节点把线性表分成了两个子表,若比较结果相等,则查找完成:若不等,再根据 k 与中间节点关键词的比较大小确定下一步查找哪个子表,这样递归下去,直到找到满足条件的节点,或者该线性表中没有这样的节点。本题中第 1 次和 15 比较:第 2 次和 7 比较:第 3 次和 10 比较:第 4 次和 12 比较:比较后结束,没找到22.C+语言是以( )语言为基础逐渐发展演变而成的一种程序设计语言。(分数:2.00)A.PascalB.C C.BD.Simula 67解析:解析 C+语言是以 C 语言为基础而逐渐发展起来的。23.下列关于类与对象的说法中,不
41、正确的是( )。(分数:2.00)A.对象是类的一个实例B.任何一个对象只能属于一个具体的类C.一个类只能有一个对象 D.类与对象的关系和数据类型与变量的关系相似解析:解析 C+中,类是用户自定义的一种数据类型,对象是类的实例,类定义了属于该类的所有对象的共同特性。一个类作为一种数据类型,它可以定义多个对象。24.数据库设计包括两个方面的设计内容,它们是( )。(分数:2.00)A.概念设计和逻辑设计 B.模式设计和内模式设计C.内模式设计和物理设计D.结构特性设计和行为特性设计解析:解析 模式设计和内模式设计是概念设计的两种方法。物理设计是根据特定的计算机系统,对数据的存储结构和存取方法进行
42、设计,从而实现从逻辑结构到物理结构的转换。从系统开发的角度来看,结构特性设计和行为特性设计是数据库应用系统所具有的两个特性。结构特性的设计:设计各级数据库模式(静态特性):行为特性的设计:改变实体及其特性,决定数据库系统的功能(动态特性)。25.有如下程序: #include iostream using namespace std; class AA public: virtual void f() cout “AA“; ; class BB : public AA public: BB() cout “BB“; ; class CC : public BB public: virtual
43、void f() BB:f(); cout “CC“; ; int main () AA aa,*p; BB bb; CC cc; p= p-f (); return 0; 执行上面的程序将输出( )。(分数:2.00)A.AAB.AABBCCC.BBAABBCCD.BBBBAACC 解析:解析 本题中,函数 f()在基类 AA 中派生类 CC 中都声明为虚函数,所以采用动态联编。主函数首先定义类 AA 的对象 aa 和指针对象 p,然后定义了类 BB 的对象 bb,此时调用了类 BB 的构造函数输出BB。再定义类 CC 的对象 cc,由于类 CC 是类 BB 的派生类,所以此时又调用类 BB
44、 的构造函数输出 BB。最后执行语句“p= int main() int x; for(int i=1;i=100;i+) x=i; if (+x%2=0) if (+x%3=0) if (+x%7=0) coutx“,“; coutend1; return 0; 执行后输出结果是( )。(分数:2.00)A.39,81B.42,84C.26,68D.28,70 解析:解析 程序最后输出的 x 值所满足的条件为:x 本身能被 7 整除,(x-1)能被 3 整除,(x-2)能被2 整除。在 1100 之间满足条件的 x 值是 28 和 70。30.不能作为函数重载的判断依据的是( )。(分数:2
45、.00)A.constB.返回类型 C.参数个数D.参数类型解析:解析 所谓函数重载,是指同一个函数名可以对应多个函数的实现。进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。即重载函数不许具有相同的形参列表。函数的返回类型不能作为函数重载的判断依据。const 是函数的一部分参与函数的重载。二、B填空题/B(总题数:13,分数:26.00)31.算法的空间复杂度是指U 【1】 /U。(分数:2.00)填空项 1:_ (正确答案:算法执行过程中所需要的存储空间)解析:解析 算法的空间复杂度是重要考点之一,应该理解记忆。算法的空间复杂度一般是指这个算法执行时所需要的内存空间,其中包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间,其中额外空间还包括算法程序执行过程的工作单元以及某种数据结构所需要的附加存储空间。32.树 L 中,度为 1、2、3、4、5 和 6 的节点个数为 6、4、3、3、5、1,则 L 中叶子的个数是U 【2】 /U。(分数:2.00)填空项 1:_ (正确答案:45)解析:解析