1、计算机二级(C+)61 及答案解析(总分:4230.00,做题时间:90 分钟)一、选择题(每小题 2分,共 70分) 下列各(总题数:60,分数:4200.00)1.以下程序中,错误的行为是( )。 (1) # include iostream.h (2) class A (3) (4) public: (5) int n=2; (6) A(int val) cout val endl; (7) A( ) ; (8) ; (9) void main( ) (10) (11) A a(0); (12) (分数:70.00)A.一元运算符B.二元运算符C.选项 A)和选项 B)都可能D.重载错误
2、2.下列是模板声明的开始部分,其中正确的是【 】(分数:70.00)A.templateTB.templateclass T1,T2C.templateclass T1,class T2D.templateclass T1;class T23.有以下程序: main() int a=1,b; for(b=1;b=8)break; if(a%2=1)a+=5;continue; a-=3; printf(“%d/n“,b); 程序运行后的输出结果是_。 (分数:70.00)A.3B.4C.5D.64.对于下面的程序 ifstreamfin(c:/testtxt); if(fin) cout“ok
3、“; else cout“wrong“; 对于 if语句中的内容可以换为( )。 (分数:70.00)A.finfail( );B.finbad( );C.fingood( );D.fineof( );5.以下 C+语言中用于单行注释的是( )。(分数:70.00)A.继承性B.功能分解,逐步求精C.封装性和信息隐藏D.多态性6.面向对象程序设计思想的主要特征中不包括( )。(分数:70.00)A.public int MAX = 100;B.final int MAX = 100;C.final public int MAX = 100;D.public final int(MAX = 10
4、0;7.设有如下三个关系表 , 下列操作中正确的是【 】 (分数:70.00)A.T=RSB.T=RSC.T=RSD.T=RS8.下列描述中哪个是正确的?(分数:70.00)A.2310B.2016C.1500D.16589.在公有继承的情况下,允许派生类直接访问的基类成员包括_。(分数:70.00)A.公有成员B.公有成员和保护成员C.公有成员、保护成员和私有成员D.保护成员10.下面程序的运行结果是( )。 # include iostreamh void fun(int * a,int * b) int x= * a; * a= * b; * b=X; cout * a * b“ “ ;
5、 void main( ) int x=1, y=2; fun ( x, y); cout 0|Ewho6; p= struct node *next; Node; Node fun(char s) /* 建立链表*/ void disp(Node *h) Node *p; p=h-next; while(= 1 ) printf(“%s/n“,p-sub);p= 2 ; main3 Node *hd; hd=fun4; disp(hd);printf(“/n“); (分数:1.50)填空项 1:_77.问题处理方案的正确而完整的描述称为 1。(分数:1.50)填空项 1:_78.C+语言中表
6、示双精度浮点数的关键字是 1。(分数:1.50)填空项 1:_79.下面程序的运行结果为 1。 # include iostreamh void fun(int x=0,int y=0) cout X y; void main( ) fun(5); (分数:1.50)填空项 1:_80.请定义一个函数名为 A,返回值为 int,没有参数的纯虚函数的定义是 1。(分数:1.50)填空项 1:_计算机二级(C+)61 答案解析(总分:4230.00,做题时间:90 分钟)一、选择题(每小题 2分,共 70分) 下列各(总题数:60,分数:4200.00)1.以下程序中,错误的行为是( )。 (1)
7、 # include iostream.h (2) class A (3) (4) public: (5) int n=2; (6) A(int val) cout val endl; (7) A( ) ; (8) ; (9) void main( ) (10) (11) A a(0); (12) (分数:70.00)A.一元运算符B.二元运算符C.选项 A)和选项 B)都可能D.重载错误 解析:在实现 Runnable接口的类中,必须有的是 run()方法。在实现 Runnable接口的类中,必须重写run()方法来定义线程体。实现 Runable接口的来创建线程,更符合面向对象的思想。 2
8、.下列是模板声明的开始部分,其中正确的是【 】(分数:70.00)A.templateTB.templateclass T1,T2C.templateclass T1,class T2 D.templateclass T1;class T2解析:本题考核模板的声明。模板声明的开始部分为:template类型形参表。其中,类型形参表可以包含基本数据类型,也可以包含类类型。类型形参需要加前缀 class。如果类型形参多于一个,则每个类型形参都要使用 class。形参表中的参数是惟一的,而且至少在函数定义体中出现厂次。形参表中至少有一个形参的类型必须用类型形参表中的形参来定义。所以只有 C选项的声明
9、是正确的。 3.有以下程序: main() int a=1,b; for(b=1;b=8)break; if(a%2=1)a+=5;continue; a-=3; printf(“%d/n“,b); 程序运行后的输出结果是_。 (分数:70.00)A.3B.4 C.5D.6解析: break 和 continue 的区别是:continue 语句只结束本次循环,而不是终止整个循环的执行;而 break语句则是结束整个循环过程,不再判断执行的条件是否成立。4.对于下面的程序 ifstreamfin(c:/testtxt); if(fin) cout“ok“; else cout“wrong“;
10、对于 if语句中的内容可以换为( )。 (分数:70.00)A.finfail( );B.finbad( );C.fingood( ); D.fineof( );解析:C+语言中判断文件操作成功主要有两个函数 good( )和 fail( ),其中 if(文件流名good( ) )和 if(!文件流名fail( ) ),还有 if(文件流名)都可以表示判断文件操作是否成功。5.以下 C+语言中用于单行注释的是( )。(分数:70.00)A.继承性B.功能分解,逐步求精 C.封装性和信息隐藏D.多态性解析:查询的视图包括设计、数据表和 SQL视图。6.面向对象程序设计思想的主要特征中不包括( )
11、。(分数:70.00)A.public int MAX = 100;B.final int MAX = 100;C.final public int MAX = 100;D.public final int(MAX = 100; 解析:变量的作用域指变量的作用范围,根据变量的定义位置和使用的变量定义语句的不同,变量可以分为 3类,即局部变量、模 块变量和全局变量。局部变量是在过程(事件过程或通用过程)内定义的变量,其作用域是它所在的过程,通常用来存放中间结果或用作临时变 量;模块变量包括窗体变量和标准模块变量,窗体变量可用于该窗体内的所有过程,使用前必须先声明,也就是说,窗体层变量不能默认声明
12、 ;全局变量也称全程变量,其作用域最大,可在工程的每个模块、每个过程中使用,和模块级变量类似,全局变量也在标准模块的声明部分声 明,所不同的是全局变量必须用 Public或 Global 语句声明,不能用 Dim语句声明,更不能用 Private声明;全局变量只能在标准模块中声明,不 能在过程或窗体模块中声明。7.设有如下三个关系表 , 下列操作中正确的是【 】 (分数:70.00)A.T=RSB.T=RSC.T=RS D.T=RS解析:对于两个关系的合并操作可以用笛卡尔积表示。设有 n元关系 R和 m元关系 S,它们分别有 p和 q个元组,则 R与 S的笛卡儿积记为 RS,它是一个 m+n元
13、关系,元组个数是 pq,由题意可得,关系 T是由关系 R与关系 S进行笛卡尔积运算得到。8.下列描述中哪个是正确的?(分数:70.00)A.2310B.2016 C.1500D.1658解析:题目中 Sub过程的形式参数都没有特别指明是传址方式还是传值方式,隐含的是传址。实际调用时,还要根据实参的形式,才能确定是传值还是传址的数据传送方式。若实参为常量或表达式,则为传值的传递方式;若实参是变量名或数组名,则为传值的传递方式。9.在公有继承的情况下,允许派生类直接访问的基类成员包括_。(分数:70.00)A.公有成员B.公有成员和保护成员C.公有成员、保护成员和私有成员D.保护成员解析:10.下
14、面程序的运行结果是( )。 # include iostreamh void fun(int * a,int * b) int x= * a; * a= * b; * b=X; cout * a * b“ “ ; void main( ) int x=1, y=2; fun ( x, y); cout float-double。16.若变量已正确定义并赋值,以下符合 C+语言语法的表达式是( )。(分数:70.00)A.a:=b+1B.a=b=c+2 C.int 185%3D.a=a+7=c+b解析:本题考查 C+语言的正确赋值方法。a=b=c+2 实际上相当于 a=(b=c+2),进而可分解
15、为两个表达式:b =c+2和 a=b。注意:选项 A)中包含一个不合法的运算符“:=”;选项 C)应改为(int)185 3;选项D)可理解为两个表达式:a+7=c+b 和 a=a+7,其中第一个是错的,因为 C+语言规定赋值号的左边只能是单个变量,不能是表达式或常量等。17.设有定义 int n1=0,n2,*p=,以下赋值语句中与 n2=n1;语句等价的是_。 (分数:70.00)A.*p=*q; B.p=q;C.*p=D.p=*q;解析:题面中各变量定义后,指针变量 p 指向了变量 n2 所在的存储单元,指针变量 q 指向了变量 n1 所在 的存储单元,要使得 n1 的值赋给 n2,可用
16、指针变量 q 所指向的存储单元的值赋给指针变量 p 所指向的存 储单元,即*p=*q。18.在长为 64 的有序线性表中进行顺序查找,最坏情况下需要比较的次数为_。(分数:70.00)A.63B.64C.6D.7解析:19.在结构化方法中,用数据流程图(DFD) 作为描述工具的软件开发阶段是【 】(分数:70.00)A.可行性分析B.需求分析 C.详细设计D.程序编码解析:结构化分析方法是结构化程序设计理论在软件需求分析阶段的运用。而结构化分析就是使用数据流图(DFD) 、数据字典(DD) 、结构化英语、判定表和判定树等工具,来建立一种新的、称为结构化规格说明的目标文档。所以数据流程图是在需求
17、分析阶段使用的。20.下面程序的结果是( )。 #includeiostreamh class A public: A( ) cout “construtA“ end1; virtual A( ) cout “destructA“ end1; ; class B:public A ; class C:public A ; class D:public B,public C ; void main( ) Dd; (分数:70.00)A.constructA destructAB.constructA constructA destructA destructA C.constructA cons
18、tructA constructA destructA destructA destructAD.constructA constructA constructA constructA destructA destructA destructA destructA解析:类 D继承了类 C和类 B,所以在构造的时候分别构造类 B和类 C。21.下面关于数组的初始化正确的是( )。(分数:70.00)A.char str :a,b,c B.char str2=a,b,cC.char str23=a,b,c,d,e,fD.char str( )=a,b,c解析:本题考查的是字符数组的初始化。选项 B
19、)中用 3个元素初始化大小为 2的数组,越界了;选项 C)中应该是 2行 3列的数组,题中使用 3行 2列初始化;选项 D)中数组合后应用方括号。22.以下程序的输出结果是( )。 #includeiostreamh voidmain( ) charx=040; cout(x1); (分数:70.00)A.100B.80C.64 D.32解析:左移 1位,相当于乘以 2,题中的 x的值是一个八进制数,转换为十进制数是 32,再乘以 2,x 的值为 64。23.以下程序的输出结果是( )。 #includeiostream.h voidreverse(inta,intn) inti,t; for
20、(i=0;in/2;i+) t=ai;ai=an-1-i;an-1-i=t; voidmain( ) int b10:=1,2,3,4,5,6,7,8,9,10;inti,s=0; reverse(b,8); for(i=6;i10;i+)s+=bi; coutS; (分数:70.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)解析: 在 Visual Basic中,允许出现快捷菜单,对用户来说,提供了很大的方便,一般来说,菜单都在窗口的顶部,有时,用户需要执行菜单中的某一命令,就得把鼠标移
21、动到窗口顶部,然后打开菜单选择命令,这对用户来说,会觉得麻烦。而快捷菜单并不需要到窗口的顶部来打开,只要单击鼠标右键,就会弹出菜单。设计快捷菜单仍然可以用 Visual Basic中提供的菜单编辑器,只要把某个菜单设置成隐藏就可以了,实际上,不管是在窗口顶部菜单条上显示的菜单还是隐藏的菜单,都可以用 PopupMenu方法把它们作为快捷菜单在运行时显示出来。PopupMenu 方法的使用形式如下: 对象PopupMenu 菜单名,标志,x,y 其中,x,y 是提供菜单显示的位置;标志:指定快捷菜单的行为。当标志为 0时,快捷菜单中的项只能对鼠标左键起反应;当标志为 2时,快捷菜单中的项对鼠标右
22、键和左键都反应;标志为 2时,PopupMenu方法只能用在 MouseDown事件过程中。 24.下列叙述中正确的是_。 (分数:70.00)A.软件测试应该由程序开发者来完成B.程序经调试后一般不需要再测试C.软件维护只包括对程序代码的维护D.以上三种说法都不对 解析:程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件 中的错误。先要发现软件的错误,然后借助于一定的调试工具去找出软件错误的具体位置。软件测试贯穿 整个软件生命期,调试主要在开发阶段。为了达到更好的测试效果,应该由独立的第三方来构造测试。因 为从心理学角度讲,程序人员或设计方在测试自己的程序
23、时,要采取客观的态度是程度不同地存在障碍的。软件的运行和维护是指将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需求进行必 要而且可能的扩充和删改。25.下面关于类和对象的描述中,错误的是( )。(分数:70.00)A.类就是 C语言中的结构体类型,对象就是 C语言中的结构体变量 B.类和对象之间的关系是抽象和具体的关系C.对象是类的实例,一个对象必须属于一个已知的类D.类是具有共同行为的若干对象的统一描述体解析:在 C+语言中,类和结构体有本质区别,类中包含数据及操作函 数,而结构体只包含有数据。26.存在定义 int a10,x,*pa;,若 pa: main() print
24、f(“%d/n“,F(3+5); 程序运行后的输出结果是_。 (分数:70.00)A.192B.29C.25D.编译出错 解析:return 语句用于从被调函数带回一个函数值。void 关键字表示“无类型”,即不需要从被调函数中 带回函数值,所以不需要 return 语句,故编译时出错。41.以下能对二维数组 a进行正确初始化的语句是( )。(分数:70.00)A.int a2 = 1,0,1,5,2,3;B.int a 3= 1,2,3,4,5,6; C.int a24= l,2,3,4,5,6 ;D.int a 3= 1,0,1, ,l,1 ;解析:本题考查对二维数组初始化知识点的掌握。在
25、初始化语句时,需要注意下面几点:所赋初值个数与数组元素的个数相同;每行所赋初值个数与数组元素的个数不同时,系统将自动给该行其余的元素补初值 0;所赋初值行数少于数组行数时,系统将自动给后面各行的元素补初值 0;赋初值时省略行花括号对。在给二维数组赋初值时可以不用行花括号对。注意:选项 A)中省略了第二维的大小,所以是错误的;选项 C)超出了数组的定义范围,所以是错误的;选项 D)在初始化赋值的时候出现了错误。42.有以下程序: #include void f(char *s,char *t) char k; if(*s) f(s,t); main() char str10=“abcdefg“,
26、*p; p=str+strlen(str)/2+1; f(p,p-2); printf(“%s/n“,str); 程序运行后的输出结果是_。(分数:70.00)A.abcdefgB.gfedcba C.gbcdefaD.abedcfg解析:本程序的作是将字符串 str倒序。语句“p=str+strlen(str)/2+1;”用于将指针变量 p指向 e字符所在的存储 单元,p-2 指向了 c字符所在的存储单元,在函数 f中将这两个存储单元的内容交换,并使得 f函数中指向 e字 符的指针变量 s加 1。指向 c字符的指针变量 t减 1,然后继续将 s和 t指向的存储单元的内容进行交换,直到 s指
27、向的存储单元的内容为空为止。所以本题程序输出的结果是字符串“abcdefg”的倒序形式“gfedcba”。43.C+语言中标点符号中表示一条预处理命令开始的是( )。(分数:70.00)A.# B.;C.解析:C+语言中预处理语句的开始符号是#。44.下列程序的运行结果为( )。 # include iostreamh int i=0; classA public: A( ) i + + ; ; void main( ) A a,b3,* c; C=b; cout i endl; (分数:70.00)A.该宏组由 macro1和 macro2两个宏组成B.宏 macor1由两个操作步骤(打开窗
28、体、关闭窗体)组成C.宏 macro1中 OpenForm命令打开的是教师自然情况窗体D.宏 macro2中 Close命令关闭了教师自然情况和教师工资两个窗体 解析:表格式报表是以整齐的行列形式显示记录数据,通常一行显示一条记录、一页显示多行记录。45.在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是( )。(分数:70.00)A.派生类的对象可以赋给基类的对象B.派生类的对象可以初始化基类的引用C.派生类的对象可以直接访问基类中的成员 D.派生类的对象的地址可以赋给指向基类的指针解析:公有继承的派生类和基类是子类型的关系,所谓子类型是类型间一般和特殊的关系,即派生类是基
29、类的子类型或者说基类的操作可以被用于操作派生类的对象。46.以下对结构体类型变量 td 的定义中,错误的是_。 (分数:70.00)A.B.C. D.解析:选项 C 中的 aa 本身就为结构体变量名,所以不能再用它来定义结构体变量,故此种定义方法是错误 的。47.算法具有五个特性,以下选项中不属于算法特性的是_。 (分数:70.00)A.有穷性B.简洁性 C.可行性D.确定性解析: 有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性是算法的基本特性。48.已知各变量的定义如下 int i=8,k,a,b; unsigned long w=5; double x=142,y=52; 则以
30、下符合 C+语言语法的表达式是( )。 (分数:70.00)A.第一个 B.最后一个C.全部D.字段值不惟一,不能存储解析:本题考查的是在继承中派生类的对象调用构造函数的顺序,应该 是先调用基类的构造函数,然后是成员中的对象对应类的构造函数,最后是派生类自己 的构造函数。49.与 y=(x0? 1:x0? -1:0);的功能相同的 if语句是( )。(分数:70.00)A.字符串 a的长度B.字符串 b的长度C.字符串 a和 b的长度之差D.字符串 a和 b的长度之和 解析:国际化命令只包含一个命令 native2ascii,该命令将含有本机编码 字符的文件,转换成 Unicode编码字符的文
31、件。50.在 C+语言中,不合法的实型数据的是( )。(分数:70.00)A.数值型数据B.字符型数据 C.逻辑型数据D.以上数据类型都可以解析:不要用一个子类去捕获父类的异常,尽可能用一个父类去捕获 其所有的子类的异常。这也就是选项 A)中的说法:父类在前,子类在后原则。catch 从 句的顺序排列要注意,应该将最特殊的排在最前面,依次逐步一般化。51.在以下给出的表达式中,与 while(E)中的(E)不等价的表达式是_。 (分数:70.00)A.(!E=0)B.(E0|Ewho6; p= struct node *next; Node; Node fun(char s) /* 建立链表*
32、/ void disp(Node *h) Node *p; p=h-next; while(= 1 ) printf(“%s/n“,p-sub);p= 2 ; main3 Node *hd; hd=fun4; disp(hd);printf(“/n“); (分数:1.50)填空项 1:_ (正确答案:p!=NULL 或 p 或 p!=0 或 p!=/0 , p-next 或 (*p).next)解析:此题主要考核的是用指针处理链表。自定义结构体类型名为 Node,并定义一个指向结点类型的指针 next。用 Node 来定义头结点指针变量 h,并定义另一个指针变量 p 指向了第一个结点,在满足
33、p 未指向最 后一个结点的空指针时,输出 p 所指向结点的字符串,所以第一个空填 p!=NULL 或 p 或 p!=0 或 p!=/0, 然后将 p 指向下一个非空结点,所以第二个空填 p-next 或与其等效的形式,反复执行直到所有的结点都输 出,即遇到 p 的值为 NULL。77.问题处理方案的正确而完整的描述称为 1。(分数:1.50)填空项 1:_ (正确答案:算法)解析:所谓算法是指解题方案的准确而完整的描述。78.C+语言中表示双精度浮点数的关键字是 1。(分数:1.50)填空项 1:_ (正确答案:double)解析:C+语言中基本的数据类型关键字,有 int,float,dou
34、ble。 79.下面程序的运行结果为 1。 # include iostreamh void fun(int x=0,int y=0) cout X y; void main( ) fun(5); (分数:1.50)填空项 1:_ (正确答案:50)解析:本题考查的是函数的默认参数,如果一个函数中有多个参数,则默认参数应 从右至左逐个定义,所以题目中 x使用参数 5,y使用默认参数 0。 80.请定义一个函数名为 A,返回值为 int,没有参数的纯虚函数的定义是 1。(分数:1.50)填空项 1:_ (正确答案:virtual int A-|_|-=0;)解析:C+语言中的纯虚函数是一种特殊的函数,它没有自己的定义,只有声明,纯虚函数与虚函数声明的不同就在于在函数后面加上了“=0”。