1、二级 C+笔试-396 及答案解析(总分:88.00,做题时间:90 分钟)一、选择题(总题数:35,分数:62.00)1.下列叙述中正确的是_。A栈是“先进先出”的线性表B队列是“先进后出”的线性表C循环队列是非线性结构D有序线性表既可以采用顺序存储结构,也可以采用链式存储结构(分数:2.00)A.B.C.D.2.下面关于 break 语句的描述中,不正确的是A) break 可以用于循环体内B) break 语句可以在 for 循环语句中出现多次C) break 语句可以在 switch 语句中出现多次D) break 语句可用于 if 条件判断语句内(分数:2.00)A.B.C.D.3.
2、有如下程序:#includeiostreamusing namespqce Std;class TestClassprivate;Char C;public;TestClass(char n):c(n)TestClass()coutc;class TestClassl:public TestClassprivate:Char C;public:TestClassl(char n):TestClass(n+1),c(n)TestClass1()coutC;int main()TestClassl obj(x);return 0;执行上面的程序将输出( )。Axy Byx Cx Dy(分数:2.0
3、0)A.B.C.D.4.已经语句 int m10;则下列表示引用的表示中正确的是( )。Aint !xi+)A) 5 B) 6C) 1 D) 无限(分数:2.00)A.B.C.D.26.设 char str111=“HELLO,“,str210=“world”;则执行语句coutstrlen(strcpy(str,str2);后的输出结果是 _。A) 12 B) 11C) 7 D) 5(分数:2.00)A.B.C.D.27.有如下程序: int x=3: d0 x-=2: coutx: while(!(-x); 执行这个程序的输出结果是 A) 1 B) 30 C) 12 D) 死循环(分数:2
4、.00)A.B.C.D.28.下列程序输出的结果是( )。#includestdio.hun1(char a,char b)char c;ca;a=b;bc;fun2(char*a,char b)char c;c=*a;*a=b;b=c;fun3(char*2,char*b)charc;c=*a;*a=*b;*b=c;void main()char a,b;a=A;b=B;funl(a,b);putchar(a);putchar(b);a=A;b=B;fun2(;class Bint b;public:void setb(int x) b=x;void showb()coutbend1;;cl
5、ass C: public A,private Bprivate:int c:public:voidsetc(intx,inty,intz)c=z;seta(x);setb(y);void showc()coutcend1;void main()Cc:Cseta(1);Cshowa();Csetc(1,2,3);Cshowc();(分数:1.00)填空项 1:_41.有以下程序:#includeiostreamusing namespace std;class Basepublic:Base()x=0;int x;class Derivedl:virtual public Basepublic
6、:Derivedl()x=10;class Derived2:virtual public Basepublic:Derived2()x=20;class Derived:public Derivedl,protected Derived2;int main()Derived obj;coutobj.xendl;return 0;该程序运行后的输出结果是_。(分数:2.00)填空项 1:_42.下列程序的执行结果为_。#includeiostream.hclass Myclasspublic:void GetSum(int a);static int Sum;prtvate:int A;int
7、 Myclass:Sum=10;/必须在类外部对静态数据成员初始化void Myclass:GetSum(int a)A=a;Sum+=A:vold PrintSum(Myclassvoid main( )Myclass M,N;M.GetSum(3);N.GetSum(7);PrintSum(M);(分数:2.00)填空项 1:_43.请按下面注释的提示,将类 B 的构造函数定义补充完整。classAint a;public:Aint aa=0) (a=aa;class B:public Aint b;A c;public:/用 aa 初始化基类 A,用 aa+1 初始化类对象成员 cB(i
8、nt aa): b=aa+2;(分数:2.00)填空项 1:_44.若有以下程序:#includeiostreamusing namespace std;class TestClass 1public:TestClass1()X=0;int x;class TestClass2:virtual public TestClass1public:TestClass2()x=10;class TestClass3:virtual public TestClass 1public:TestClass3()x=20;class TestClass4:public TestClass2, protecte
9、d TestClass3;int main()TestClass4 obj;coutobj.xend1;return 0:该程序运行后的输出结果是_。(分数:2.00)填空项 1:_45.结构化分析方法是面向 1 进行分析的方法。(分数:2.00)填空项 1:_46.执行下列程序后的输出结果是_。#includeiostreamusing namespace std;int main()int x=3;int y+;coutxend1;return 0;(分数:2.00)填空项 1:_47.设有定义语句:double x=2.5, y=4.7;int a=7;那么表达式 x+a%3*(int)
10、(x+ y)%2/4 的值为 【6】 。(分数:2.00)填空项 1:_48.静态联编所支持的多态性称为编译时的多态性,动态联编所支持的多态性则称为运行时的多态性,动态多态性由 【4】 来支持。(分数:2.00)填空项 1:_49.全面支持软件开发过程的软件工具集合被称为 1。(分数:2.00)填空项 1:_50.C+语言中的友元函数为在类外访问类中的私有成员和保护成员提供了方便,但破坏了类的 1 和 2。(分数:1.00)填空项 1:_填空项 1:_二级 C+笔试-396 答案解析(总分:88.00,做题时间:90 分钟)一、选择题(总题数:35,分数:62.00)1.下列叙述中正确的是_。
11、A栈是“先进先出”的线性表B队列是“先进后出”的线性表C循环队列是非线性结构D有序线性表既可以采用顺序存储结构,也可以采用链式存储结构(分数:2.00)A.B.C.D. 解析:栈是先进后出的线性表,所以 A 错误;队列是先进先出的线性表,所以 B 错误;循环队列是线性结构的线性表,所以 C 错误。2.下面关于 break 语句的描述中,不正确的是A) break 可以用于循环体内B) break 语句可以在 for 循环语句中出现多次C) break 语句可以在 switch 语句中出现多次D) break 语句可用于 if 条件判断语句内(分数:2.00)A.B.C.D. 解析:解析 本题考
12、查的是 break 语句的使用,break 可以结束 switch 语句和 for 循环语句,但是不能使用在条件判断语句内。3.有如下程序:#includeiostreamusing namespqce Std;class TestClassprivate;Char C;public;TestClass(char n):c(n)TestClass()coutc;class TestClassl:public TestClassprivate:Char C;public:TestClassl(char n):TestClass(n+1),c(n)TestClass1()coutC;int mai
13、n()TestClassl obj(x);return 0;执行上面的程序将输出( )。Axy Byx Cx Dy(分数:2.00)A. B.C.D.解析:解析 本题中 TestClass 为基类,TestClassl 为派生类。在主函数中定义 TestClassl 对象obj(x),“TestClassl(char n):TestClass(n+1),c(n)”,所以选输出 x,然后调用基类构造函数,x+1=y,所以输出 y,即答案为 xy。4.已经语句 int m10;则下列表示引用的表示中正确的是( )。Aint !xi+)A) 5 B) 6C) 1 D) 无限(分数:2.00)A.B.
14、 C.D.解析:26.设 char str111=“HELLO,“,str210=“world”;则执行语句coutstrlen(strcpy(str,str2);后的输出结果是 _。A) 12 B) 11C) 7 D) 5(分数:2.00)A.B.C.D. 解析:27.有如下程序: int x=3: d0 x-=2: coutx: while(!(-x); 执行这个程序的输出结果是 A) 1 B) 30 C) 12 D) 死循环(分数:2.00)A.B.C. D.解析:解析 Do.while()循环是先执行循环体,然后判断条件。第一次进入循环 x=1,打印 1,第二次进入循环 x=0,执行
15、x-=2 后,x=-2,打印 x,退出循环。28.下列程序输出的结果是( )。#includestdio.hun1(char a,char b)char c;ca;a=b;bc;fun2(char*a,char b)char c;c=*a;*a=b;b=c;fun3(char*2,char*b)charc;c=*a;*a=*b;*b=c;void main()char a,b;a=A;b=B;funl(a,b);putchar(a);putchar(b);a=A;b=B;fun2(;class Bint b;public:void setb(int x) b=x;void showb()cou
16、tbend1;;class C: public A,private Bprivate:int c:public:voidsetc(intx,inty,intz)c=z;seta(x);setb(y);void showc()coutcend1;void main()Cc:Cseta(1);Cshowa();Csetc(1,2,3);Cshowc();(分数:1.00)填空项 1:_ (正确答案:1 3)解析:41.有以下程序:#includeiostreamusing namespace std;class Basepublic:Base()x=0;int x;class Derivedl:v
17、irtual public Basepublic:Derivedl()x=10;class Derived2:virtual public Basepublic:Derived2()x=20;class Derived:public Derivedl,protected Derived2;int main()Derived obj;coutobj.xendl;return 0;该程序运行后的输出结果是_。(分数:2.00)填空项 1:_ (正确答案:20)解析:解析 本题考核虚基类。本题中,虽然 Derived1 和 Derived2 都是由共同的基类 x 派生而来的,但由于引入了虚基类,使得
18、它们分别对应基类的不同副本。这时数据成员 x 只存在一份拷贝,不论在类Derived1 中修改,还是在类 Derived2 中修改,都是直接对这惟一拷贝进行操作。本题程序执行语句“Derived obJ;”时,就会先调用虚基类 Base 的构造函数,使得 x=0,然后执行类 Derived1 的构造函数使得 x=10,再执行类 Derived2 的构造函数,使得 x=20。最后输出 x 的值为 20。42.下列程序的执行结果为_。#includeiostream.hclass Myclasspublic:void GetSum(int a);static int Sum;prtvate:int
19、 A;int Myclass:Sum=10;/必须在类外部对静态数据成员初始化void Myclass:GetSum(int a)A=a;Sum+=A:vold PrintSum(Myclassvoid main( )Myclass M,N;M.GetSum(3);N.GetSum(7);PrintSum(M);(分数:2.00)填空项 1:_ (正确答案:sum=20)解析:解析 本题考察静态数据成员在同类的不同对象间的数据传递功能。Sum 为所有对象的公共数据,M 对象和 N 对象分别对 sum 进行累加,故结果为 20。43.请按下面注释的提示,将类 B 的构造函数定义补充完整。clas
20、sAint a;public:Aint aa=0) (a=aa;class B:public Aint b;A c;public:/用 aa 初始化基类 A,用 aa+1 初始化类对象成员 cB(int aa): b=aa+2;(分数:2.00)填空项 1:_ (正确答案:A(aa),c(aa+1) 或 c(aa+1),A(aa))解析:解析 本题考核派生类构造函数的定义。题中要求用 aa 初始化基类 A,用 aa+1 初始化类对象成员 c,用的初始化列表的形式,即 A(aa),c(aa+1)或 c(aa+1),A(aa)。44.若有以下程序:#includeiostreamusing nam
21、espace std;class TestClass 1public:TestClass1()X=0;int x;class TestClass2:virtual public TestClass1public:TestClass2()x=10;class TestClass3:virtual public TestClass 1public:TestClass3()x=20;class TestClass4:public TestClass2, protected TestClass3;int main()TestClass4 obj;coutobj.xend1;return 0:该程序运行
22、后的输出结果是_。(分数:2.00)填空项 1:_ (正确答案:20)解析:解析 主函数中定义 TestClass4 的对象 obj。TestClass4 虽然公有继承于 TestClass2,但是 x在其中为私有,所以无法访问。TestClass4 保护继承于 TestClass3,TestClass3 中的 x=20 为公有成员数据,对象 obj 可以访问这个数据,即输出为 20。45.结构化分析方法是面向 1 进行分析的方法。(分数:2.00)填空项 1:_ (正确答案:数据流)解析:解析 结构化分析方法的实质是着眼于数据流,自顶向下,逐层分解,建立系统的处理流程,以数据流图和数据字典为
23、主要工具,建立系统的逻辑模型。46.执行下列程序后的输出结果是_。#includeiostreamusing namespace std;int main()int x=3;int y+;coutxend1;return 0;(分数:2.00)填空项 1:_ (正确答案:4)解析:解析 C+程序中的引用实际上是为变量起个别名,其后的任何操作都相当于对原变量的操作。所以最后输出 4。47.设有定义语句:double x=2.5, y=4.7;int a=7;那么表达式 x+a%3*(int)(x+ y)%2/4 的值为 【6】 。(分数:2.00)填空项 1:_ (正确答案:2.5)解析:解析
24、本题考核运算符的使用(包括类型、优先级、结合性)。强制类型转换符()将表达式 x+y 的值转换为 int 型,那么表达式“a%3*(int)(x+y)%2/4”结果将为整型,计算:7%3*7%2/4 的结果为 0,而x 为 double 型,所以最后的结果为 2.548.静态联编所支持的多态性称为编译时的多态性,动态联编所支持的多态性则称为运行时的多态性,动态多态性由 【4】 来支持。(分数:2.00)填空项 1:_ (正确答案:虚函数)解析:49.全面支持软件开发过程的软件工具集合被称为 1。(分数:2.00)填空项 1:_ (正确答案:软件工程环境)解析:解析 软件开发环境或称软件工程环境,它是全面支持软件开发过程的软件工具集合。50.C+语言中的友元函数为在类外访问类中的私有成员和保护成员提供了方便,但破坏了类的 1 和 2。(分数:1.00)填空项 1:_ (正确答案:隐藏性)填空项 1:_ (正确答案:封装性)解析: