1、二级 C+笔试-233 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.有如下程序main( )int n=9;while(n6)n- -;coutnendl;)该程序段的输出结果是(分数:2.00)A.987B.876C.8765D.98762.以下关于友元函数的叙述不正确的是(分数:2.00)A.友元函数提供了类之间数据共享的一个途径B.一个友元函数可以访问任何类的任何成员C.友元函数破坏了数据的封装D.友元函数增加了程序设计的灵活性3.有如下函数模板声明:templatetypename TT Max(T a,T b)return(a
2、=b)? a:b;下列对函数模板 Max( )的调用中错误的是(分数:2.00)A.Max(3.5,4.5)B.Max(3.5,4)C.Maxdouble(3.5,4.5)D.Maxdouble(3.5,4)4.如果表达式- -x/y 中的“- -”和“/”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可以表示为(分数:2.00)A.operator /(x.operator- -( ),y);B.operator /(operator- -(x),y);C.operator- -( ).Operator /(y);D.operator /(operator- -(x);5.软
3、件开发的结构生命周期法的基本假定是认为软件需求能做到(分数:2.00)A.严格定义B.初步定义C.早期冻结D.动态改变6.已知语句 int m=10;则下列引用的表示中正确的是(分数:2.00)A.intB.intC.intD.float7.有以下程序main( )int a=5,b=4,c=3,d=2;if(abc)coutdendl;else if(c-1=d)=1)coutd+1endl;elsecoutd+2endl;执行后输出结果是(分数:2.00)A.2B.3C.4D.编译时有错,无结果8.以下程序的输出结果是int a,b;void fun( )a=100;b=200;)main
4、( )int a=5,b=7;fun( );coutabendl;(分数:2.00)A.100200B.57C.200100D.759.下列程序的输出结果是main( )int x=1,a=0,b=0;switch(x)case 0:b+;case 1:a+;case 2:a+;b+;cout“a=“a“b=“bendl;(分数:2.00)A.a=2 b=1B.a=1 b=1C.a=1 b=0D.a=2 b=210.有关构造函数的叙述不正确的是(分数:2.00)A.构造函数名必须和类名一致B.构造函数在定义对象时自动执行C.构造函数无任何函数类型D.在一个类中构造函数有且仅有一个11.有以下程
5、序main( )int i=1,j=1,k=2;if(j+| k+)执行后输出结果是(分数:2.00)A.1,1,2B.2,2,1C.2,2,2D.2,2,312.设有语句int n,m;char a5,b;cinnamb;为了分别将 10 和 20 分别赋给 n 和 m,look 赋给 a,t 赋给 b,则正确的输入为(分数:2.00)A.10“look“ 20tCRB.10“look“10C.10 look 20 tD.10CRlook20CRtCR13.为了避免嵌套的 ifelse 语句的二义性,C+规定与 else 配对的是(分数:2.00)A.缩排位置相同的 ifB.在其之前未配对的
6、 ifC.在其之前未配对的最近的 ifD.同一行上的 if14.下列程序的运行结果是main( )int a=2,c=5;cout“a=“a“b=“cendl;(分数:2.00)A.a=% b=%5B.a=2 b=5C.a=d b=dD.a=%d b=%d15.以下选项中合法的实型常数是(分数:2.00)A.5 E 2.0B.E-3C2 E0D.1.3 E16.对于以下带参数的 main( )函数的第二形参,void main(int argc,_),不可能的形式是(分数:2.00)A.char*argvB.char argvC.char*aD.char*m17.执行完下列语句int a,b,
7、c=int*p=后 c 指向(分数:2.00)A.aB.bC.cD.无效地址18.有以下程序:#includeiostreamusing namespace std;int main( )int x=15;while(x10if(x/3)x+; break;coutxendl;return 0;执行后的输出结果是(分数:2.00)A.15B.16C.17D.1819.以下循环体的执行次数是main( )int i,j;for(i=0,j=1;i=j+1;i+=2,j- -)coutiendl;(分数:2.00)A.3B.2C.1D.020.下列说法中不正确的是(分数:2.00)A.数据库减少了
8、数据冗余B.数据库中的数据可以共享C.数据库避免了一切数据的重复D.数据库具有较高的数据独立性21.以下函数值的类型是fun(float x)float y;y=3*x-4;return y;(分数:2.00)A.intB.不确定C.voidD.float22.一个关系中属性个数为 1 时,称此关系为(分数:2.00)A.对应关系B.单一关系C.一元关系D.二元关系23.假定 MyClass 为一个类,则该类的拷贝构造函数的声明语句为(分数:2.00)A.Myclasselse return n*f(n+1);B.int f(int n)if(n1)return 1;else return n
9、*f(n-1);C.int f(int n)if(abs(n)1)return 1;else return n*f(n/2);D.int f(int n)if(n1)return 1;else return n*f(n*2);)29.假定其中的 x 的单位是角度且不考虑 值的精度,则与数学公式 (分数:2.00)A.sqrt(cos(x)B.sqrt(abs(cos(x*3.14/180)C.sqrt(abs(cos(x*(/180)D.sqrt(fabs(cos(x*3.14/180)30.完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例的测试方法是(分数:2.00)A.黑
10、箱测试法B.白箱测试法C.错误推测法D.安装测试法31.执行下面程序中的输出语句后,a 的值是main( )int a;cout(a=3*5,a*4,a+5);(分数:2.00)A.65B.20C.15D.1032.设有两个串 p 和 q,求 q 在 p 中首次出现位置的运算称作(分数:2.00)A.连接B.模式匹配C.求子串D.求串长33.最简单的交换排序方法是(分数:2.00)A.快速排序B.选择排序C.堆排序D.冒泡排序34.若已定义int a=1,2,3,4,5,6,7,8,9,10,p=a,i=5;则对数组元素的不正确的引用是(分数:2.00)A.ap-aB.*(for(int i=
11、0;strli=str2i;i+);后,数组 strl 中的字符串是_。(分数:2.00)填空项 1:_42.下列程序的执行结果是_。#includelostream.hint a;int sum_a(void)a=a+5;return a;void main(void)a=a+sum_a( );coutaendl;(分数:2.00)填空项 1:_43.根据输出结果填空完成下面程序。#includeiostream.hclass Testprivate:static int val;int a;public:static int func( );void sfunc(Test ;_/初始化静态
12、变量 valint Test:func( )return val+;void Test:sfunc(Test cout“Result3=“r.a;void main( )cout“Resultl=“Test:func( )endl;Test A;cout“Result2=“A.fune( )endl;A. sfunc(A);输出结果为:Result1=201Result2=202Result3=125(分数:2.00)填空项 1:_44.下列程序的运行结果是_。#includeiostream.hclass testprivate:int hum;public:test( );int TEST
13、( )return num+100;)test( );test:test( )num=0;)test:test( )cout“Destructor is active“endl;)void main( )test x3;coutx1.TEST( )endl;(分数:2.00)填空项 1:_45.请将下列类定义补充完整。class Basepublic:void fun( )cout“Base:fun“endl;class Derived:public Basepublic:void fun( )_/显式调用基类的 fun 函数cout“Derived:fun“endl;(分数:2.00)填空项
14、 1:_46.有以下程序:#includeiostream.hclass Aint x;public:A(int a)x=a;friend class B;Class Bpublic:void print(A a)a.x- -;couta.xendl;void main()A a(10);B b;b.print(a);程序执行后的输出结果是_(分数:2.00)填空项 1:_47.下列程序编译时发现 pb-f(10);语句出现错误,其原因是_。#includeiostream.hclass Basepublic:void f(int x)cout“Base:“xendl;);class Deri
15、ved:public Basepublic:void f(char*str)cout“Derived:“strendl;void main(void)Derived*pd=new Derived;Pd-f(10);(分数:2.00)填空项 1:_48.下列程序的运行结果是_。#includeiostream.hclass SomeClasspublic:SomeClass(int value) some value=value; );void show_data(voiD) coutdatasome_valueendl; ;static void set_data(int value) dat
16、a=value; ;private:static int data;int some_value;int SomeClass:data=0;void main(void)SomeClass my_class(1001), your_class(2002);your_class.set_data(4004);my_class.show_data( );(分数:2.00)填空项 1:_49.有以下程序:#includediostreamusing namespace std;class Basepublic:Base( )x=0;int x;class Derived1:virtual publi
17、c Basepublic:Derived1( )x=10;class Derived2:virtual public Basepublic:Derived2( )x=20;class Derived: public Derived1,protected Derived2;int main( )Derived obj;coutobj. xendl;return 0;该程序运行后的输出结果是_。(分数:2.00)填空项 1:_50.下列程序对加号进行了重载,划线部分的语句是_。#includeiostream.h#includemath.hclass Triangleint x,y,z;doubl
18、e area;public:Triangle(int i,int j,int k)double s;x=i;y=j;z=k;s=(x+y+z)/2.0;area=sqrt(s*(s-x)*(s-y)*(s-z);void disparea( )cout“Area=“areaendl;friend double operator+(Triangle tl,Triangle t2)_;void main( )Triangle tl(3,4,5),t2(5,12,13);double s;cout“tl:“;t1. disparea( );cout“t2:“;t2. disparea( );s=t1
19、+t2:cout“总面积:=“sendl;(分数:2.00)填空项 1:_二级 C+笔试-233 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.有如下程序main( )int n=9;while(n6)n- -;coutnendl;)该程序段的输出结果是(分数:2.00)A.987B.876 C.8765D.9876解析:解析 注意到 n- -的运算顺序,知道第一次输出的应是 8,据此就可以很快排除 A 和 D。然后判断循环几次结束,由于当 n=6 时,while 的条件判断已经不成立了,直接跳过循环体结束程序了。故当n=9,8,7 时执行
20、了循环体,故答案为 B。2.以下关于友元函数的叙述不正确的是(分数:2.00)A.友元函数提供了类之间数据共享的一个途径B.一个友元函数可以访问任何类的任何成员 C.友元函数破坏了数据的封装D.友元函数增加了程序设计的灵活性解析:解析 友元的作用在于提高程序的运行效率,但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。容易混淆是 B,只有在类中声明了某个函数是自己的友元函数之后,该友元函数才能够访问本类的私有成员,而不是任何类的任何成员都可以访问。故答案为 B。3.有如下函数模板声明:templatetypename TT Max(T a,T b)return(a=b)?
21、a:b;下列对函数模板 Max( )的调用中错误的是(分数:2.00)A.Max(3.5,4.5)B.Max(3.5,4) C.Maxdouble(3.5,4.5)D.Maxdouble(3.5,4)解析:解析 本题考核函数模板的使用。引用模板函数和引用一般的函数在语法形式上没有任何区别。所有的类型替换都是编译器在幕后悄悄进行的。但是要注意的是说明一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确定是否匹配函数模板中对应的形参。例如,本题中的 B选项,编译系统从第一个参数“3.5“获得的信息是“T 对应于 double“,而从第二个参数“4“处获得的信息是“T 对应于
22、 int“,二者相互矛盾,在编译时会产生错误。对于 D 选项中紧跟在函数名后的double就是模板实参表,通过它通知编译系统在调用过程中,将 int 型的参数“4“将换成 double 型。4.如果表达式- -x/y 中的“- -”和“/”是作为友元函数重载的运算符,采用运算符函数调用格式,该表达式还可以表示为(分数:2.00)A.operator /(x.operator- -( ),y);B.operator /(operator- -(x),y); C.operator- -( ).Operator /(y);D.operator /(operator- -(x);解析:解析 本题考核运
23、算符的重载。假定已经作为某个类的成员函数重载了二元运算符+,且 c1、c2都是该类的对象,则 c1.operator+(c2)与 c1+c2 含义相同。如果+作为该类的非成员函数重载,则operator+(cl,c2)与 c1+c2 含义相同。同理,运算符“/”作为友元函数重载,则(- -x)/y 与表达式operator/(- -x),y)相同。前缀运算符“- -”作为友元函数重载,则- -x 与 operator- -(x)相同,所以组合起来是 operator/(operator- -(x),y);,即 B 选项。5.软件开发的结构生命周期法的基本假定是认为软件需求能做到(分数:2.00
24、)A.严格定义B.初步定义C.早期冻结 D.动态改变解析:解析 软件需求经过分析阶段后,通过软件需求说明书表示出来,后面的开发工作以此为基础进行,故结构生命周期法中需假定软件需求确定后一般不再改变,即“早期冻结”。6.已知语句 int m=10;则下列引用的表示中正确的是(分数:2.00)A.int B.intC.intD.float解析:解析 本题考查 C+中引入的新类型:引用。引用表示变量的别名,使用方式同变量,效果同指针。引用不能用常数进行赋值,引用的类型必须一致,引用在使用之前必须初始化。7.有以下程序main( )int a=5,b=4,c=3,d=2;if(abc)coutdend
25、l;else if(c-1=d)=1)coutd+1endl;elsecoutd+2endl;执行后输出结果是(分数:2.00)A.2B.3 C.4D.编译时有错,无结果解析:解析 本题考查逻辑表达式的结合特性,即左结合性。对于表达式 abc,首先判断 ab 为真,结果为 l,然后判断 1c,为假,故转去判断 c-1=d 是否成立,成立,结果为 1,再判断 1= =1,结果为真,因此,执行 d+1,答案为 B。8.以下程序的输出结果是int a,b;void fun( )a=100;b=200;)main( )int a=5,b=7;fun( );coutabendl;(分数:2.00)A.1
26、00200B.57 C.200100D.75解析:解析 本题考查同名变量的作用域大小。考生应掌握,同名局部变量在函数内部将屏蔽全局同名变量,因此,main 函数内部使用的局部变量 a 和 b,即 5 和 7,答案为 B。9.下列程序的输出结果是main( )int x=1,a=0,b=0;switch(x)case 0:b+;case 1:a+;case 2:a+;b+;cout“a=“a“b=“bendl;(分数:2.00)A.a=2 b=1 B.a=1 b=1C.a=1 b=0D.a=2 b=2解析:解析 本题主要考查 switch 语句中,break 语句的作用。每个 case 语句后面
27、如果没有 break 语句,则程序的执行流程将发生变化,即顺序执行各个 case 语句。这种情况一般不符合程序员的设计思路,但也可以用这种特性完成特殊控制。10.有关构造函数的叙述不正确的是(分数:2.00)A.构造函数名必须和类名一致B.构造函数在定义对象时自动执行C.构造函数无任何函数类型D.在一个类中构造函数有且仅有一个 解析:解析 本题考查构造函数的基本知识。构造函数名字与类名相同;可以重载;不需要参数;不需要指定返回类型等。本题答案为 D。11.有以下程序main( )int i=1,j=1,k=2;if(j+| k+)执行后输出结果是(分数:2.00)A.1,1,2B.2,2,1C
28、.2,2,2 D.2,2,3解析:解析 本题考查逻辑表达式及自增运算符的联合使用。考生要注意本题里面隐藏的考点:|在左侧表达式为真时,将不再进行该逻辑操作符右侧表达式的运算,即 j+本身为非零,故 k+不再执行。12.设有语句int n,m;char a5,b;cinnamb;为了分别将 10 和 20 分别赋给 n 和 m,look 赋给 a,t 赋给 b,则正确的输入为(分数:2.00)A.10“look“ 20tCRB.10“look“10C.10 look 20 t D.10CRlook20CRtCR解析:解析 本题考查 C+中流操作符的操作规则,即分割符。首先根据字符不需要加引号可以
29、排除选项 A 和 B,而 D 用回车作分割符,但却在 took 和 20 之间缺少一个回车符,故据此可选出正确答案为 C。13.为了避免嵌套的 ifelse 语句的二义性,C+规定与 else 配对的是(分数:2.00)A.缩排位置相同的 ifB.在其之前未配对的 ifC.在其之前未配对的最近的 if D.同一行上的 if解析:解析 C+规定 else 总是与之前未配对的最近的 if 进行配对,这样可以避免二义性,也便于编译器分析。14.下列程序的运行结果是main( )int a=2,c=5;cout“a=“a“b=“cendl;(分数:2.00)A.a=% b=%5B.a=2 b=5 C.
30、a=d b=dD.a=%d b=%d解析:解析 本题非常简单,考查 C+中基本的输出语句,注意不要与 C 语言的输出控制字符混淆。15.以下选项中合法的实型常数是(分数:2.00)A.5 E 2.0B.E-3C2 E0 D.1.3 E解析:解析 本题考查实型常数的指数表示法,可以肯定的是指数不能为小数即必须为整数,故排除A。由于符号 E 前面必须有数字,故 B 也是错误的。D 在指数符号后面没有数字,是错误的。答案为 C。16.对于以下带参数的 main( )函数的第二形参,void main(int argc,_),不可能的形式是(分数:2.00)A.char*argvB.char argv
31、 C.char*aD.char*m解析:解析 本题要考查的实际是字符数组,用于向函数传递参数,属于指针或引用传递方式。要注意的是考生不要被名称所迷惑,即根据 A 和 D 是相同类别的,故可以排除。对 C 来说,也属于指针传递方式,而 B 不仅不属于指针传递,而且还没有限定数组大小,编译器在编译时就会产生错误。17.执行完下列语句int a,b,c=int*p=后 c 指向(分数:2.00)A.aB.b C.cD.无效地址解析:解析 p 为 c 的引用,即两者实际上是一个指针,故 p 指向 b 后,c 自然也指向 b,故答案为 B。18.有以下程序:#includeiostreamusing n
32、amespace std;int main( )int x=15;while(x10if(x/3)x+; break;coutxendl;return 0;执行后的输出结果是(分数:2.00)A.15B.16C.17 D.18解析:解析 本题考核选择语句与循环语句的嵌套。由程序可知,当 x=16 时,满足 if 条件表达式,进入 if 分支,执行“x+; break;”,所以最后程序输出 x 的值为 17。19.以下循环体的执行次数是main( )int i,j;for(i=0,j=1;i=j+1;i+=2,j- -)coutiendl;(分数:2.00)A.3B.2C.1D.0 解析:解析
33、本题考查考生对 for 循环中三个表达式的执行顺序及使用方法。首先执行第一个表达式,然后判断第二个表达式是否成立,如果成立则执行循环体,然后执行第三个表达式,随后再去判断第二个表达式。根据这个顺序,可以很容易的判断出,循环体只执行了一次。20.下列说法中不正确的是(分数:2.00)A.数据库减少了数据冗余B.数据库中的数据可以共享C.数据库避免了一切数据的重复 D.数据库具有较高的数据独立性解析:解析 数据库系统具有以下几个特点:数据的集成性、数据的高共享性与低冗余性、数据的独立性、数据统一管理与控制。21.以下函数值的类型是fun(float x)float y;y=3*x-4;return
34、 y;(分数:2.00)A.int B.不确定C.voidD.float解析:解析 本题考查 C+当中函数的默认返回类型,这种类型与函数内部的局部变量的类型没有关系。如果不小心处理函数返回类型,可能造成数据丢失。本题答案为 A。22.一个关系中属性个数为 1 时,称此关系为(分数:2.00)A.对应关系B.单一关系C.一元关系 D.二元关系解析:解析 在关系模型数据库中,基本结构是二维表,这种二维表称为关系。关系的列称为属性。一个具有 N 个属性的关系称为 N 元关系。23.假定 MyClass 为一个类,则该类的拷贝构造函数的声明语句为(分数:2.00)A.Myclass,其中 const
35、是修饰符可以省略。24.下列叙述中,错误的是(分数:2.00)A.数据的存储结构与数据处理的效率密切相关B.数据的存储结构与数据处理的效率无关 C.数据的存储结构在计算机中所占的空间不一定是连续的D.一种数据的逻辑结构可以有多种存储结构解析:解析 一般来说,一种数据结构根据需要可以表示成多种存储结构。常用的存储结构有顺序、链接、索引等,而采用不同的存储结构,其数据处理的效率是不同的;一个数据结构中的各数据元素在计算机存储空间中的位置关系与逻辑关系是有可能不同的。25.需求分析阶段的任务是确定(分数:2.00)A.软件开发方法B.软件开发工具C.软件开发费用D.软件系统功能 解析:解析 需求分析
36、是软件定义时期的最后一个阶段,它的基本任务就是详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统的工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。26.面向对象程序设计将数据和什么放在一起,作为一个相互依存、不可分割的整体来处理?(分数:2.00)A.对数据的操作 B.信息C.数据隐藏D.数据抽象解析:解析 面向对象语言包含 3 个要素,即对象、类和继承。这 3 个要索反映了面向对象的传统观念。面向对象程序设计的本质是把数据和对数据的操作当成一个整体即对象。27.详细设计的结果基本决定了程序最终的(分数:2.00)A.代码的规模B.运行速度C.代码质量 D.可维护
37、性解析:解析 详细设计阶段的根本目标是确定应该怎样具体的实现所要求的系统,但详细设计阶段的任务还不是具体的编写程序,而是要设计出程序的“蓝图“,以后程序员将根据这个蓝图写出实际的程序代码,因此,详细设计阶段的结果基本上就决定了最终的程序代码的质量。28.能保证对所有的参数能够结束的递归函数是(分数:2.00)A.int f(int n)if(n1)return 1;else return n*f(n+1);B.int f(int n)if(n1)return 1;else return n*f(n-1);C.int f(int n)if(abs(n)1)return 1;else return
38、 n*f(n/2); D.int f(int n)if(n1)return 1;else return n*f(n*2);)解析:解析 递归函数的两个重要条件是要有结束和递归表达式。选项 A、B、D 无法结束。根据这两个条件可以进行判断出答案为 C。29.假定其中的 x 的单位是角度且不考虑 值的精度,则与数学公式 (分数:2.00)A.sqrt(cos(x)B.sqrt(abs(cos(x*3.14/180)C.sqrt(abs(cos(x*(/180)D.sqrt(fabs(cos(x*3.14/180) 解析:解析 本题考查数学表达式的掌握,首先应转换为弧度,然后作为 cos 函数的参数
39、,求绝对值,最后是开方函数。考生需要掌握的是常用的数学函数。30.完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例的测试方法是(分数:2.00)A.黑箱测试法 B.白箱测试法C.错误推测法D.安装测试法解析:解析 黑箱测试方法完全不考虑程序的内部结构和内部特征,而只是根据功能导出测试用例。白箱测试是根据对程序内部逻辑结构的分析来选取测试用例,白箱测试也称为逻辑覆盖测试,故选项 B 不正确;错误推测法只是黑箱测试所使用的一种具体的方法,故选项 C 不正确;安装测试是测试层次中的一种,它属于高级测试,故选项 D 不正确。31.执行下面程序中的输出语句后,a 的值是main( )i
40、nt a;cout(a=3*5,a*4,a+5);(分数:2.00)A.65B.20 C.15D.10解析:解析 本题考查逗号表达式的运算特点。逗号表达式是所有表达式中优先级最低的,从左到右结合,其求解过程是:将逗号表达式各表达式按从左到右的顺序依次求值,并将最右边的表达式结果作为整个逗号表达式的结果。这里考生要注意的是,第二个表达式执行完后,a 的值并没有发生变化,依然是15,所以在执行 a+5 的时候,结果是 20,而不是 65。正确答案应是 B。32.设有两个串 p 和 q,求 q 在 p 中首次出现位置的运算称作(分数:2.00)A.连接B.模式匹配 C.求子串D.求串长解析:解析 子
41、串的定位操作通常称作串的模式匹配,是各种串处理系统中最重要的操作之一,算法的基本思想是:从主串的开始字符起和模式的第一个字符比较,若相等则继续比较后续字符,否则从主串的下一个字符起再重新和模式的字符比较,依次类推,直至模式中的每一个字符依次和主串中的一个连续的字符序列相等,称匹配成功,否则称匹配不成功。33.最简单的交换排序方法是(分数:2.00)A.快速排序B.选择排序C.堆排序D.冒泡排序 解析:解析 冒泡排序是一种最简单的交换类排序方法,它是通过相邻数据元素的交换逐步将线性表变成有序表。交换排序方法有冒泡排序和快速排序,显然选项 B 和选项 C 错误,冒泡排序比较简单,其算法也容易理解,
42、但快速排序本身较为复杂,且采用了递归调用,其算法理解也较难。34.若已定义int a=1,2,3,4,5,6,7,8,9,10,p=a,i=5;则对数组元素的不正确的引用是(分数:2.00)A.ap-aB.*(for(int i=0;strli=str2i;i+);后,数组 strl 中的字符串是_。(分数:2.00)填空项 1:_ (正确答案:XYZxyz)解析:解析 注意 for 的循环体为空语句,其第二个表达式为一个赋值语句而不是一个逻辑表达式语句。因此,for 循环的作用实际上是将 str2 的字符逐个赋值给 str1 中的对应位置。42.下列程序的执行结果是_。#includelos
43、tream.hint a;int sum_a(void)a=a+5;return a;void main(void)a=a+sum_a( );coutaendl;(分数:2.00)填空项 1:_ (正确答案:10)解析:解析 本题考查全局变量的使用。全局变量被系统默认初始化为 0,故在执行 a=a+sum-a( );语句时,首先执行 sum_a 函数,将 a 的值改变为 5,该函数的返回值也是 5,故最后 a 的值被赋值为 10。43.根据输出结果填空完成下面程序。#includeiostream.hclass Testprivate:static int val;int a;public:s
44、tatic int func( );void sfunc(Test ;_/初始化静态变量 valint Test:func( )return val+;void Test:sfunc(Test cout“Result3=“r.a;void main( )cout“Resultl=“Test:func( )endl;Test A;cout“Result2=“A.fune( )endl;A. sfunc(A);输出结果为:Result1=201Result2=202Result3=125(分数:2.00)填空项 1:_ (正确答案:int Test:val=200;)解析:解析 类的静态成员变量必
45、须要进行初始化才能使用,初始化时需要用域限定符:指明该变量所属的类名。44.下列程序的运行结果是_。#includeiostream.hclass testprivate:int hum;public:test( );int TEST( )return num+100;)test( );test:test( )num=0;)test:test( )cout“Destructor is active“endl;)void main( )test x3;coutx1.TEST( )endl;(分数:2.00)填空项 1:_ (正确答案:100Destructor is activeDestruct
46、or is activeDestructor is active)解析:解析 本题比较简单,考查考生基本的类的定义,构造函数以及对象数组的概念。45.请将下列类定义补充完整。class Basepublic:void fun( )cout“Base:fun“endl;class Derived:public Basepublic:void fun( )_/显式调用基类的 fun 函数cout“Derived:fun“endl;(分数:2.00)填空项 1:_ (正确答案:Base:fun( );)解析:解析 本题考核虚基类。作用域分辨符号是“:“,它可以用来限定要访问的成员所在的类的名称。一般来说,在派生类中对基类成员的访问应该是唯一的。但是,多继承情况下可能造成对基类中某个成员的访问出现不唯一的情况,通过使用对象作用域分辨符可以解决这种对基类成员访问的二义性问题。46.有以下程序:#includeiostream.hclass Aint x;public:A(int a)x=a;friend class B;Class Bpublic:void print(A a)a.x- -;couta.xendl;void main()A a(10);B b;b.print(a);程序执行后的输出结果是_(分数:2.00)填