1、二级 C+笔试-251 及答案解析(总分:102.00,做题时间:90 分钟)一、选择题(总题数:35,分数:72.00)1.下面程序输出的结果是#includeiostreamhvoid main( )int i;int a33=1,2,3,4,5,6,7,8,9;for(i=0;i3;i+)coutaii“ “;(分数:2.00)A.1 5 9B.7 5 3C.3 5 7D.5 9 12.派生类继承基类的方式有(分数:2.00)A.publicB.privateC.protectedD.以上都对3.以下程序中循环体总的执行次数是int i,j;for(i=6;i1;i-)for(j=0;j
2、i;j+)(分数:2.00)A.20B.261C.15D.254.设以下变量均为 int 类型,则值不等于 7 的表达式是(分数:2.00)A.(x=y=6,x+y,X+1)B.(x=y=6,x+y,y+1)C.(x=6,x+1,y=6,x+y)D.(y=6,y+1,x+y,x+1)5.下列程序的输出结果是#includeiostreamhvoid main( )int a3,i,j,k=2;for(i=0;i3;i+)ai=i;for(i=0;ik;i+)for(j=0;jk;j+)aj=ai;couta2;(分数:2.00)A.2B.3C.1D.06.C+语言中用于定义类的关键字是(分数:
3、2.00)A.classB.structC.defaultD.sizeof7.以下程序的输出结果是#includeiostreamhvoid main( )int a=21,b=11;cout- -a+b;(分数:2.00)A.30B.31C.32D.338.有以下程序#includeiostreamhvoid ss(char*s,char t)while(*s)if(*S=t)*s=t-a+A;s+; void main( )char strl100=“abcddfefdbd“,c=d:ss(strl,c) ;coutstrl;程序运行后的输出结果是(分数:2.00)A.ABCDDEfEBD
4、B.abcDDfefDbDC.abcAAfefALbAD.Abcddfefdbd9.关于抽象类下面说法正确的是(分数:2.00)A.抽象类就是其中有函数定义但没有实现的类B.抽象类是可以被实例化的C.派生类不能成为抽象类D.抽象类的子类必须实现父类中的纯虚函数10.循环链表的主要优点是(分数:2.00)A.不再需要头指针了B.从表中任一结点出发都能访问到整个链表C.在进行插入、删除运算时,能更好的保证链表不断开D.已知某个结点的位置后,能够容易的找到它的直接前件11.已知各变量的定义如下int i=8,k,a,b;unsigned long w=5;double x=142,y=52;则以下符
5、合 C+语言语法的表达式是(分数:2.00)A.a+=a-=(b=4) * (a=3)B.a=a * 3+2C.x(-3)D.y=float i12.如果表达式-X+y 中,-是作为成员函数重载的,+是作为成员函数重载的,则该表达式还可为(分数:2.00)A.operator+(xoperator-(0)B.y,operator+(x.operator-( )C.operator+(operator-t(x,0)D.operator+(xoperator- -t( )13.与 y=(x0? 1:x0? -1:0);的功能相同的 if 语句是(分数:2.00)A.if(x0)y=1else if
6、(x0)y=-1;else y=O;B.if(x)if(x0)y=1;else if(x0)y=-1;C.y=-1;if(x)if(x0)y=1;else if(x=0)y=0;else y=-1;D.y=0;if(x=0)if(x0)y=1;else y=-1;14.下面程序段的运行结果是#includeiostreamhvoid main( )char*s=“abcde“;S+=2;coutvoid main( )int a=10,b=20;couta“ “b;swap(c3=10/c2 * c1;(分数:2.00)填空项 1:_42.若从键盘输入 70,则以下程序输出的结果是 【8】 。
7、#includeiostreamhvoid main( )int a;cina;if(a50) couta;if(a40)couta;if(a30)couta(分数:2.00)填空项 1:_43.以下程序的输出结果是 【9】 。#includeiostreamhvoid main( )char s =“abcdef“;s3=/0;coutsendl;(分数:2.00)填空项 1:_44.以下程序运行后的输出结果是 【10】 。#includeiostreamhvoid fun(int x,int y)x=x+y;y=x-y;x=x-y;cout x “,“ y “ ,“;void main(
8、)int x=2,y=3;fun(x,y);cout x “,“ y endl;(分数:2.00)填空项 1:_45.常数据成员和静态数据成员在使用前共同的要求是要进行 【11】 。(分数:2.00)填空项 1:_46.类 test 的析构函数是 【12】 。(分数:2.00)填空项 1:_47.表达式 xoperator+(yoperator+(0)还可以写成 【13】 。(分数:2.00)填空项 1:_48.要采用“cin,tout”进行输入输出时,必须包含的头文件是 【14】 。(分数:2.00)填空项 1:_49.构造函数是和 【15】 同名的函数。(分数:2.00)填空项 1:_二级
9、 C+笔试-251 答案解析(总分:102.00,做题时间:90 分钟)一、选择题(总题数:35,分数:72.00)1.下面程序输出的结果是#includeiostreamhvoid main( )int i;int a33=1,2,3,4,5,6,7,8,9;for(i=0;i3;i+)coutaii“ “;(分数:2.00)A.1 5 9 B.7 5 3C.3 5 7D.5 9 1解析:解析:首先,当 i=0 时,数组中的位置是 a00=1,当然,如果用排除法的话,就不用考虑后面的循环了,因为在 4 个选项中,第 1 个数为 1 的选项只有 A)。本题执行第 2 次循环时,i 的值为 1,
10、则cout 函数中的数组指向为 a11=5,依次循环,可求出答案。2.派生类继承基类的方式有(分数:2.00)A.publicB.privateC.protectedD.以上都对 解析:解析:派生类继承基类的方式有 3 种:public,private 和 protected,常用的是 public。3.以下程序中循环体总的执行次数是int i,j;for(i=6;i1;i-)for(j=0;ji;j+)(分数:2.00)A.20 B.261C.15D.25解析:解析:本题中第 1 个 for 循环执行 5 次后结束,第 2 个 for 循环执行 5 次。第 2 个 for 循环中第 1次执行
11、了 6 次,第 2 次执行了 5 次,第 3 次执行了 4 次,第 4 次执行了 3 次,第 5 次执行了 2 次,共 20次。4.设以下变量均为 int 类型,则值不等于 7 的表达式是(分数:2.00)A.(x=y=6,x+y,X+1)B.(x=y=6,x+y,y+1)C.(x=6,x+1,y=6,x+y) D.(y=6,y+1,x+y,x+1)解析:解析:C+语言中逗号“,”也是一种运算符,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。其一般形式为:表达式 1,表达式 2,其求值过程是分别求两个表达式的值,并以表达式 2 的值作为整个逗号表达式的值。逗号表达
12、式的一般形式可以扩展为:表达式 1,表达式 2,表达式 3,表达式 n,它的值为表达式 n 的值。5.下列程序的输出结果是#includeiostreamhvoid main( )int a3,i,j,k=2;for(i=0;i3;i+)ai=i;for(i=0;ik;i+)for(j=0;jk;j+)aj=ai;couta2;(分数:2.00)A.2 B.3C.1D.0解析:解析:本题里有三个 for 循环,但要分清楚,第一个是单独的给三个元素赋值,赋完值后三个 a0=0,a1=1,a2=2;后面的两个 for 是嵌套循环,对数组元素的赋值,但由于 k=2,初值已定 for 里的条件是小于
13、k,所以不管怎么处理都影响不到 a 2,故答案为 2。6.C+语言中用于定义类的关键字是(分数:2.00)A.class B.structC.defaultD.sizeof解析:解析:C+中类定义的关键字是 class。class 不能大写。7.以下程序的输出结果是#includeiostreamhvoid main( )int a=21,b=11;cout- -a+b;(分数:2.00)A.30B.31 C.32D.33解析:解析:自减运算符位于变量之前时,先使变量的值减 1,再进行运算。8.有以下程序#includeiostreamhvoid ss(char*s,char t)while(
14、*s)if(*S=t)*s=t-a+A;s+; void main( )char strl100=“abcddfefdbd“,c=d:ss(strl,c) ;coutstrl;程序运行后的输出结果是(分数:2.00)A.ABCDDEfEBDB.abcDDfefDbD C.abcAAfefALbAD.Abcddfefdbd解析:解析:在内存中,字符数据以 ASCII 码存储,它的存储形式就与整数的存储形式相类似。C+语言使字符型数据和整型数据之间可以通用。也可以对字符数据进行算术运算,此时相当于对它们的 ASCII 码进行算术运算,在本题中,s+相当于 s=s +1,即让 s 指向数组中的下一个
15、元素。9.关于抽象类下面说法正确的是(分数:2.00)A.抽象类就是其中有函数定义但没有实现的类B.抽象类是可以被实例化的C.派生类不能成为抽象类D.抽象类的子类必须实现父类中的纯虚函数解析:解析:C+语言中的抽象类就是类中至少有一个纯虚函数的类,抽象类不能被实例化,继承抽象类的类必须实现抽象类中的纯虚函数。10.循环链表的主要优点是(分数:2.00)A.不再需要头指针了B.从表中任一结点出发都能访问到整个链表 C.在进行插入、删除运算时,能更好的保证链表不断开D.已知某个结点的位置后,能够容易的找到它的直接前件解析:解析:循环链表就是将单向链表中最后一个结点的指针指向头结点,使整个链表构成一
16、个环形,这样的结构使得从表中的任一结点出发都能访问到整个链表。11.已知各变量的定义如下int i=8,k,a,b;unsigned long w=5;double x=142,y=52;则以下符合 C+语言语法的表达式是(分数:2.00)A.a+=a-=(b=4) * (a=3) B.a=a * 3+2C.x(-3)D.y=float i解析:解析:选项 B)中 a 在运算前未赋初值,在 C+语言里变量在运算前必须赋初值;选项 C)中的模运算符“”两侧均应为整型数据;选项 D)应改为 y=(float)i。12.如果表达式-X+y 中,-是作为成员函数重载的,+是作为成员函数重载的,则该表达
17、式还可为(分数:2.00)A.operator+(xoperator-(0)B.y,operator+(x.operator-( ) C.operator+(operator-t(x,0)D.operator+(xoperator- -t( )解析:解析:C+语言中用成员函数重载-x 为:xoperator-( ),用成员函数重载 x+y 为:xoperator+(y)。13.与 y=(x0? 1:x0? -1:0);的功能相同的 if 语句是(分数:2.00)A.if(x0)y=1else if(x0)y=-1;else y=O; B.if(x)if(x0)y=1;else if(x0)y=
18、-1;C.y=-1;if(x)if(x0)y=1;else if(x=0)y=0;else y=-1;D.y=0;if(x=0)if(x0)y=1;else y=-1;解析:解析:条件运算符要求有三个操作对象,它是 c+语言中惟一的一个三目运算符。条件表达式的一般形式为:表达式 1?表达式 2:表达式 3,先求解表达式 1,若为非 0(真)则求解表达式 2,此时表达式2 的值就作为整个条件表达式的值。若表达式 1 的值为 0(假),则求解表达式 3,表达式 3 的值就是整个条件表达式的值。本题中用了两次三目运算符。14.下面程序段的运行结果是#includeiostreamhvoid main
19、( )char*s=“abcde“;S+=2;coutvoid main( )int a=10,b=20;couta“ “b;swap( t= * p; * p=*q;*q=t;执行程序时,先将 a 的地址传递给指针变量 p,b 的地址传递给指针变量 q,然后将*p(a 的值)的值传递给 t,将*q(b 的值)传递给 * p,将 t 的值传递给 * q,从而将 a 值和 b 值互换。34.关于友元的概念错误的是(分数:2.00)A.友元函数没有 this 指针B.调用友元函数时必须在它的实参中给出要访问的对象C.一个类的成员函数也可以作为另一个类的友元函数D.只能在类的公有段声明友元 解析:解
20、析:C+中的友元可以在一个类中的任何位置声明,不一定必须在公有段,友元没有自己的 this指针,调用友元函数时必须在它的实参中给出要访问的对象,并且一个类的成员函数是可以作为另一个类的友元函数的。二、填空题(总题数:15,分数:30.00)35.常用的黑箱测试有等价分类法、 【1】 、因果图法和错误推测法 4 种。(分数:2.00)填空项 1:_ (正确答案:【1】边值分析法)解析:解析:黑箱测试方法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例。常用的黑箱测试有等价分类法、边值分析法、因果图法和错误推测法 4 种。36.测试的目的是暴露错误,评价程序的可靠性;而 【2】
21、的目的是发现错误的位置并改正错误。(分数:2.00)填空项 1:_ (正确答案:【2】调试)解析:解析:软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定;调试也称排错,它是一个与测试有联系又有区别的概念。具体来说,测试的目的是暴露错误,评价程序的可靠性,而调试的目的是发现错误的位置,并改正错误。37.软件维护活动包括以下几类:改正性维护、适应性维护、 【3】 维护和预防性维护。(分数:2.00)填空项 1:_ (正确答案:【3】完善性)解析:解析:软件维护活动包括以下几类:改正性维护、适应性维护、完善性维护和预防性维护。改正性维护是指在软件交付使用后,为了识
22、别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当进行的诊断和改正错误的过程;适应性维护是指为了使软件适应变化,而去修改软件的过程;完善性维护是指为了满足用户对软件提出的新功能与性能要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性;预防性维护是为了提高软件的可维护性、可靠性等,为以后的进一步改进软件打下良好基础。38.在面向对象的设计中,用来请求对象执行某一处理或回答某些信息的要求称为 【4】 。(分数:2.00)填空项 1:_ (正确答案:【4】消息)解析:解析:在面向对象技术中,主要用到对象(object)、类(class)、方法(m
23、ethod)、消息 (message)、继承(inheritance)、封装(encapsulation)等基本概念。其中消息是用来请求对象执行某一处理或回答某些信息的要求。39.关键字 ASC 和 DESC 分别表示 【5】 的含义。(分数:2.00)填空项 1:_ (正确答案:【5】升序排列和降序排列)解析:解析:ASC 表示升序排列,DESC 表示降序排列,多用在索引定义和 SELECT 语句中的 ORDER 子句中。40.C+语言中表示双精度浮点数的关键字是 【6】 。(分数:2.00)填空项 1:_ (正确答案:【6】double)解析:解析:C+语言中基本的数据类型关键字,有 in
24、t,float,double。41.执行下列语句后,c3 中的值为 【7】int c1=1,c2=2,c3;c3=10/c2 * c1;(分数:2.00)填空项 1:_ (正确答案:【7】0)解析:解析:在赋值运算中,如果表达式中变量和常量的数据类型不一致就会自动进行类型转换。系统会计算 10/c2,由于 10 是实型,所以均先转化为双精度型 0500000,再与 c1 转化后的双精度数相乘得 0500000。但其要赋值给整型变量 c3,故要进行强制转换,得 c3 的值为 0。42.若从键盘输入 70,则以下程序输出的结果是 【8】 。#includeiostreamhvoid main( )
25、int a;cina;if(a50) couta;if(a40)couta;if(a30)couta(分数:2.00)填空项 1:_ (正确答案:【8】707070)解析:解析:本题考查对 if 语句的掌握,当输入 70 以后,程序中的 3 个 if 语句都成立,所以分别输出70。43.以下程序的输出结果是 【9】 。#includeiostreamhvoid main( )char s =“abcdef“;s3=/0;coutsendl;(分数:2.00)填空项 1:_ (正确答案:【9】abc)解析:解析:本题中,给数组 s 中的第 4 个元素 s3赋以/0,则 s 数组中只有前 3 个元
26、素有效,输出结果为 abc。44.以下程序运行后的输出结果是 【10】 。#includeiostreamhvoid fun(int x,int y)x=x+y;y=x-y;x=x-y;cout x “,“ y “ ,“;void main( )int x=2,y=3;fun(x,y);cout x “,“ y endl;(分数:2.00)填空项 1:_ (正确答案:【10】3,2,2,3)解析:解析:main 函数和 fun 函数中的变量 x 和 y 都是局部变量,它们各自独立,在本题 fun 函数中:接入实参的值传递:x=2,y=3,执行:x=x+y 后,x=5,y=3,执行:x=x-y
27、后,x=5,y=3,执行:y=x-y后,x=3,y=2。所以,第一次执行 cout 显示结果是 3 和 2 返回到 main 函数中,输出 main 函数中的 x 和y 的值 2,3。45.常数据成员和静态数据成员在使用前共同的要求是要进行 【11】 。(分数:2.00)填空项 1:_ (正确答案:【11】初始化)解析:解析:C+语言中常数据成员和静态数据成员都要进行初始化,只是初始化的方法不一样。46.类 test 的析构函数是 【12】 。(分数:2.00)填空项 1:_ (正确答案:【12】test-|_|-;)解析:解析:C+语言中虚构函数在每个类中只有一个,其函数的写法是在构造函数的
28、前面加一个“”字符。47.表达式 xoperator+(yoperator+(0)还可以写成 【13】 。(分数:2.00)填空项 1:_ (正确答案:【13】x+y+或 x+(y+))解析:解析:因为 yoperator+(0)是对成员 y 重载运算符,所以是成员重载,在参数表中又有一个参数,所以是重载后缀+,所以是 x+(y+)。48.要采用“cin,tout”进行输入输出时,必须包含的头文件是 【14】 。(分数:2.00)填空项 1:_ (正确答案:【14】iostreamh)解析:解析:iostreamh 是与输入输出有关的类文件。49.构造函数是和 【15】 同名的函数。(分数:2.00)填空项 1:_ (正确答案:【15】类)解析:解析:C+语言中的构造函数就是在类中定义的和类名一样的函数。