1、国家计算机二级(C+)69 及答案解析(总分:460.00,做题时间:120 分钟)一、选择题(每小题 2分,共 70分) 下列各(总题数:35,分数:70.00)1.有如下程序 #include using namespace std; class Base protected: Base()coutA.BB.BAC.ABD.BB2.有以下程序: main() int a=1,2,3,4,5,6,7,8,9,0,*p; for(p=a;pA.1,2,3,4,5,6,7,8,9,0,B.2,3,4,5,6,7,8,9,10,1,C.0,1,2,3,4,5,6,7,8,9,D.1,1,1,1,1
2、,1,1,1,1,1,3.所有在函数中定义的变量,连同形式参数,都属于( )。(分数:2.00)A.局部变量不能被本层模块程序调用B.私有变量只能被本层模块程序调用C.局部变量能被本层模块和下层模块程序调用D.私有变量能被本层模块和下层模块程序调用4.下面程序的运行结果是( )。 #include“ iostreamh“ #define sum(a,b)a * b void main( ) int x; x=sam(1+2,3); cout x; (分数:2.00)A.0B.9C.7D.55.下列关于输入流类成员函数 getline()的描述中,错误的是【 】(分数:2.00)A.该函数是用来
3、读取键盘输入的字符串的B.该函数读取的字符串长度是受限制的C.该函数读取字符串时,遇到终止符便停止D.该函数读取字符串时,可以包含空格6.有如下程序 #include using namespace std; class Base protected; Base()coutA.BB.BAC.ABD.BB7.下列各组类型声明符中,含义相同的一组是(分数:2.00)A.unsigned long int和 longB.signed,sbort 和 sllortC.unsigned slaort和 sbortD.sfort int和 int8.若有说明语句 char a =“It is mine“;
4、 char *p=“It is mine“; 则以下不正确的叙述是( )。 (分数:2.00)A.continue语句用于循环体中,结束循环B.continue语句用于循环体中,它使执行流跳出循环体中尚未执行的语句,并进行下一循环判断C.continue可以用于 if语句中D.continue语句不能代替 break语句9.下列关于类定义的说法中,正确的是(分数:2.00)A.类定义中包括数据成员和函数成员的声明B.类成员的缺省访问权限是保护的C.数据成员必须被声明为私有的D.成员函数只能在类体外进行定义10.决定 C+语言中函数的返回值类型的是( )。(分数:2.00)A.Call ff(5
5、,7,z)B.Call ff(x,y,z)C.Call ff(3+x,5+y,z)D.Call ff(x+y,x-y,z)11.对于下面的程序,说法正确的是( )。 #includeiostreamh void main( ) int x=3,y=4,z=2; if(X=y+z) cout “x=y+Z“; else cout“x!=y+Z“; (分数:2.00)A.不能通过编译B.输出 6C.输出 x! =y+zD.输出 x=y+z12.下列语句中不是死循环的是( )。(分数:2.00)A.int i=10; while(1) i; if(i= =1)break; B.for(int i=1
6、;i 10;i+) i; C.int i=0; do i+; while(i =0);D.int i=1; for(;)i=i+1;13.在软件开发中,下面任务不属于设计阶段的是【 】(分数:2.00)A.数据结构设计B.给出系统模块结构C.定义模块算法D.定义需求并建立系统模型14.在 C+语言中,封装是借助于什么达到的?(分数:2.00)A.结构B.类C.数组D.函数15.函数模板:template T add(T x,T y) return x+y; 下列对 add函数的调用不正确的是( )。 (分数:2.00)A.Person(n,a);B.this(Person(n,a) );C.t
7、his(n,a);D.this(name,age);16.下面对于友元函数描述正确的是( )。(分数:2.00)A.友元函数的实现必须在类的内部定义B.友元函数是类的成员函数C.友元函数破坏了类的封装性和隐藏性D.友元函数不能访问类的私有成员17.C+语言是以哪种语言为基础逐渐发展演变而成的一种程序设计语言( )。(分数:2.00)A.满足一定规范化要求的二维表B.二维表中的一行C.二维表中的一列D.二维表中的一个数字项18.下列关于栈的描述中错误的是_。 (分数:2.00)A.栈是先进后出的线性表B.栈只能顺序存储C.栈具有记忆作用D.对栈的插入与删除操作中,不需要改变栈底指针19.以下叙述
8、中正确的是_。 (分数:2.00)A.用 C 程序实现的算法必须要有输入和输出操作B.用 C 程序实现的算法可以没有输出但必须要输入C.用 C 程序实现的算法可以没有输入但必须要有输出D.用 C 程序实现的算法可以既没有输入也没有输出20.C+语言中关于构造函数的说法正确的是( )。(分数:2.00)A.B.#C.!D.$21.有以下程序 main() int i,s=0,t=1,2,3,4,5,6,7,8,9; for(i=0;iA.45B.20C.25D.3622.下面程序的功能是把 316表示为两个加数的和,使两个加数分别能被 13和 11整除,在划线处应填入的是( )。 #includ
9、eiostream.h voidmain( ) inti=0,j,k; doi+;k=316-13*i;while(_); j=k/11; cout“316=13*“i“+11*“j; (分数:2.00)A.k/1lB.k%11C.k/11=0D.k%11=023.关于运算符重载,下列表述中正确的是_。(分数:2.00)A.C+已有的任何运算符都可以重载B.运算符函数的返回类型不能声明为基本数据类型C.在类型转换符函数的定义中不需要声明返回类型D.可以通过运算符重载来创建 C+中原来没有的运算符24.设变量 a、b、c、d 和 y 都已正确定义并赋值。若有以下 if 语句: if(aA.B.C
10、.D.25.派生类继承基类的方式有( )。(分数:2.00)A.publicB.privateC.protectedD.以上都对26.对以下说明语句的正确理解是( )。 inta10=6,7,8,9,10; (分数:2.00)A.将 5个初值依次赋给 a1至 a5B.将 5个初值依次赋给 a0至 a4C.将 5个初值依次赋给 a6至 a10D.因为数组长度与初值的个数不相同,所以此语句不正确27.只能作为成员函数重载的是( )。(分数:2.00)A.=B.+C.*D.new28.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS之间的关系是_。 (分数:2.00)A.DB 包含 DBS
11、 和 DBMSB.DBMS 包含 DB 和 DBSC.DBS 包含 DB 和 DBMSD.没有任何关系29.下面对于友元函数描述正确的是( )。(分数:2.00)A.多线程就是同时执行几个事件B.多线程是将程序分为几个并行的子任务,由它们并发交叉执行C.一个进程可产生多线程,形成执行流D.Java语言支持多线程30.有如下程序段: int i=0,j=1 int main1 int a34=12,41,36,28,19,33,15,27,3,27,19,1,b3,i; fun(3,4,a,b); for(i=0;i2=x; (分数:30.00)填空项 1:_44.假设 int a=1,b=2;
12、则表达式 a+-b的值为 1。(分数:30.00)填空项 1:_45.下面程序的输出结果为 1。 # include iostreamh void main2 int num=0,i=8; do i ; num+; while(i); cout num endl; (分数:30.00)填空项 1:_46.用以下语句调用库函数 malloc,使字符指针 st指向具有 11个字节的动态存储空间,请填空。 st=(char*) 1; (分数:30.00)填空项 1:_47.在 C+语言的结构化程序设计中, 1 是程序的基本组成单元;在 C+语言的面向对象设计框架中, 2是程序的基本组成单元。(分数:
13、30.00)填空项 1:_48.C+中只有两个逻辑常量:true 和 1。(分数:30.00)填空项 1:_国家计算机二级(C+)69 答案解析(总分:460.00,做题时间:120 分钟)一、选择题(每小题 2分,共 70分) 下列各(总题数:35,分数:70.00)1.有如下程序 #include using namespace std; class Base protected: Base()coutA.BB.BAC.AB D.BB解析:建立派生类对象时,构造函数的执行顺序如下: 执行基类的构造函数,调用顺序按照各个基类被继承时声明的顺序(自左向右); 执行成员对象的构造函数,调用顺序按
14、照各个成员对象在类中声明的顺序(自上而下); 执行派生类的构造函数。本题首先调用基类的构造函数输出字符 A,然后调用派生类的构造函数,输出字符 B。2.有以下程序: main() int a=1,2,3,4,5,6,7,8,9,0,*p; for(p=a;pA.1,2,3,4,5,6,7,8,9,0, B.2,3,4,5,6,7,8,9,10,1,C.0,1,2,3,4,5,6,7,8,9,D.1,1,1,1,1,1,1,1,1,1,解析: C 语言规定数组变量名代表数组的首地址,即第 0 号元素的地址。本题将 a 数组中的值全部输出, 即为 1,2,3,4,5,6,7,8,9,0,。3.所有
15、在函数中定义的变量,连同形式参数,都属于( )。(分数:2.00)A.局部变量不能被本层模块程序调用B.私有变量只能被本层模块程序调用C.局部变量能被本层模块和下层模块程序调用D.私有变量能被本层模块和下层模块程序调用 解析:本题考查模板概念。类模板可以有虚拟类型参数。4.下面程序的运行结果是( )。 #include“ iostreamh“ #define sum(a,b)a * b void main( ) int x; x=sam(1+2,3); cout x; (分数:2.00)A.0B.9C.7 D.5解析:本题考查宏定义的简单运用。理解宏定义,sum(a,b)o * b 中 a为
16、1+2,b 为 3,故 sum(1+2,3):1+2 * 3,即宏定义的替换过程是原样替换。注意:选项 B)的计算方法是(1+2) * 3=9 是错误的,注意,不要随意的加括号。5.下列关于输入流类成员函数 getline()的描述中,错误的是【 】(分数:2.00)A.该函数是用来读取键盘输入的字符串的B.该函数读取的字符串长度是受限制的 C.该函数读取字符串时,遇到终止符便停止D.该函数读取字符串时,可以包含空格解析:getline()函数允许从输入流中读取多个字符,并且允许指定输入终止字符(默认值是换行字符)。getline的定义为 getline(str,MAX,DELIM),其含义是
17、析取字符串到数组 str中,直到遇到 MAX个字符或者遇到字符 DELIM析取分界符。6.有如下程序 #include using namespace std; class Base protected; Base()coutA.BB.BAC.ABD.BB解析:7.下列各组类型声明符中,含义相同的一组是(分数:2.00)A.unsigned long int和 longB.signed,sbort 和 sllort C.unsigned slaort和 sbortD.sfort int和 int解析:signed short int 是有符号短整型,short 是短整型的缩写,两者数值的值域是
18、一样的。8.若有说明语句 char a =“It is mine“; char *p=“It is mine“; 则以下不正确的叙述是( )。 (分数:2.00)A.continue语句用于循环体中,结束循环 B.continue语句用于循环体中,它使执行流跳出循环体中尚未执行的语句,并进行下一循环判断C.continue可以用于 if语句中D.continue语句不能代替 break语句解析:C 语言是一种面向过程的程序设计语言,而 C+语言是一种面向对象的设计语言,C+语言是 C语言的超集,它包含了 C语言的所有语言特性,并进行了扩充。9.下列关于类定义的说法中,正确的是(分数:2.00)
19、A.类定义中包括数据成员和函数成员的声明 B.类成员的缺省访问权限是保护的C.数据成员必须被声明为私有的D.成员函数只能在类体外进行定义解析:本题考查对基本概念的了解程度,请查阅教材。10.决定 C+语言中函数的返回值类型的是( )。(分数:2.00)A.Call ff(5,7,z)B.Call ff(x,y,z) C.Call ff(3+x,5+y,z)D.Call ff(x+y,x-y,z)解析:该程序首先定义一个二维数组 a(2,3),然后利用 DO WHILE-ENDDO嵌套循环将每个数组元素赋值,即将该数组元素的行下标和列下标之和赋值给对应元素。11.对于下面的程序,说法正确的是(
20、)。 #includeiostreamh void main( ) int x=3,y=4,z=2; if(X=y+z) cout “x=y+Z“; else cout“x!=y+Z“; (分数:2.00)A.不能通过编译B.输出 6C.输出 x! =y+zD.输出 x=y+z 解析:解答本题关键是要理解 if后面的括号里的是赋值语句而并非关系判断,赋完值后 x不等于零,C+语言里非零都作真处理,所以输出结果为“x=y+z”,故答案为选项 D),注意“=”与“=”的区别。12.下列语句中不是死循环的是( )。(分数:2.00)A.int i=10; while(1) i; if(i= =1)b
21、reak; B.for(int i=1;i 10;i+) i; C.int i=0; do i+; while(i =0);D.int i=1; for(;)i=i+1;解析:选项 A)中 i自减到 1时就会执行 break语句跳出循环,选项 B)中 i 10 永远成立不会跳出循环,选项 C)中第一次进入循环体后 i0 永远不会跳出循环, 选项 D)中未给出结束循环的条件。13.在软件开发中,下面任务不属于设计阶段的是【 】(分数:2.00)A.数据结构设计B.给出系统模块结构C.定义模块算法D.定义需求并建立系统模型 解析:数据结构设计、给出系统模块结构以及定义模块算法都属于设计阶段,而定义
22、需求并建立系统模型属于分析阶段。14.在 C+语言中,封装是借助于什么达到的?(分数:2.00)A.结构B.类 C.数组D.函数解析:c+基本的性质就是它的封装性,而封装性主要是靠类来实现的。15.函数模板:template T add(T x,T y) return x+y; 下列对 add函数的调用不正确的是( )。 (分数:2.00)A.Person(n,a);B.this(Person(n,a) );C.this(n,a); D.this(name,age);解析:如果程序在运行的过程中抛出异常,而这个异常又不是 Runtime- Exception或者 Error,那么程序必须捕获这
23、个异常进行处理或者声明抛出(throWs)该异 常,捕获异常可以使用 trycatch( ).语句,而抛出异常在方法声明前是声明,在方 法的声明后面加上 throws XxxxException,抛弃多个异常时,在各异常间使用逗号“,”分 隔,题目中的程序在运行时抛出的不是一个 RuntimeExeeption,所有必须捕获或者抛弃, 而程序又没有捕获,所有应该在方法声明中声明抛弃。由于 Exception是所有异常的父 类,所有当然也可以代表 RuntimeExccption了。16.下面对于友元函数描述正确的是( )。(分数:2.00)A.友元函数的实现必须在类的内部定义B.友元函数是类的
24、成员函数C.友元函数破坏了类的封装性和隐藏性 D.友元函数不能访问类的私有成员解析:友元函数的定义既可以在类内部进行,也可以在类外部进行。它提高了程序的运行效率,但破坏了类的封装性和隐藏性,使得类的非成员函数可以访问类的私有成员。17.C+语言是以哪种语言为基础逐渐发展演变而成的一种程序设计语言( )。(分数:2.00)A.满足一定规范化要求的二维表 B.二维表中的一行C.二维表中的一列D.二维表中的一个数字项解析:Java 中公有变量使用 public定义,定义常量变量使用 final,另外注 意的是修饰符的顺序,一个最完整的修饰是 public static final int varia
25、l_a=100;这个顺序 不能变,而选项 C)错在修饰符的顺序上。18.下列关于栈的描述中错误的是_。 (分数:2.00)A.栈是先进后出的线性表B.栈只能顺序存储 C.栈具有记忆作用D.对栈的插入与删除操作中,不需要改变栈底指针解析:栈是一种特殊的线性表,又称先进后出表(First In Last Out ,FILO)。19.以下叙述中正确的是_。 (分数:2.00)A.用 C 程序实现的算法必须要有输入和输出操作B.用 C 程序实现的算法可以没有输出但必须要输入C.用 C 程序实现的算法可以没有输入但必须要有输出 D.用 C 程序实现的算法可以既没有输入也没有输出解析:算法的特性中包括“有
26、零个或多个输入”及“有一个或多个输出”这两个特性。一个算法得到的结 果就是算法的输出,没有输出的算法是没有意义的,所以一个算法必须至少有一个输出。20.C+语言中关于构造函数的说法正确的是( )。(分数:2.00)A. B.#C.!D.$解析:只有公有继承的公有成员才能被派生类的对象直接访问,其他的 情况都会因为访问权限问题产生错误。21.有以下程序 main() int i,s=0,t=1,2,3,4,5,6,7,8,9; for(i=0;iA.45B.20C.25 D.36解析:此题考核的是指针与数组间的应用,数组可以通过指针实现对数组元素的操作,*(t+i)相当于 ti。执行 for()
27、循环语句,i 分别为 0、2、4、6、8,有数组可知 t0=1;t2=3;t4=5;t6=7;t8=9 进行求和 运算结果为 25。22.下面程序的功能是把 316表示为两个加数的和,使两个加数分别能被 13和 11整除,在划线处应填入的是( )。 #includeiostream.h voidmain( ) inti=0,j,k; doi+;k=316-13*i;while(_); j=k/11; cout“316=13*“i“+11*“j; (分数:2.00)A.k/1lB.k%11 C.k/11=0D.k%11=0解析:do-while 语句的一般形式是: do 语句 while(表达式
28、); 特点是:“直到型”循环结构。先执行一次“语句”,判“表达式”,当“表达式”为非 0,再执行“语句”,直到“表达式”的值为 0时停止执行语句。在一般情况下,用 while和 do-while语句解决同一问题时,若二者的循环体部分是一样的,它们的结果也一样。但当 while后面的“表达式”一开始就为“假”时,两种循环的结果不同。这是因为此时 while循环的循环不被执行,而 do-while循环的循环体被执行一次。本题的关键是两个加数分别能被 13 和 11整除,在 i=0时,直接将 316赋值给 k,当 k%11的值为 0时,则不必执行循环,将执行j=k/11语句,输出结果,所以该表达式合
29、理的条件是 k5%11。 23.关于运算符重载,下列表述中正确的是_。(分数:2.00)A.C+已有的任何运算符都可以重载B.运算符函数的返回类型不能声明为基本数据类型C.在类型转换符函数的定义中不需要声明返回类型D.可以通过运算符重载来创建 C+中原来没有的运算符解析:24.设变量 a、b、c、d 和 y 都已正确定义并赋值。若有以下 if 语句: if(aA.B.C. D.解析:if 语句中包含一个或多个 if 语句称为 if 语句的嵌套。在 C 语言中,从最内层开始,else 总是与它 上面最近的(未曾配对的)if 配对。故本题中 y=1 的条件是 cd,又因为此 if 语句是前一个 i
30、f 语句的内 层嵌套语句,所以在满足内层嵌套的 if 语句之前,必须先满足外层的 if 语句中的条件表达式“a25.派生类继承基类的方式有( )。(分数:2.00)A.publicB.privateC.protectedD.以上都对 解析:派生类继承基类的方式有 3种:public,private 和 protected,常用的是 public。26.对以下说明语句的正确理解是( )。 inta10=6,7,8,9,10; (分数:2.00)A.将 5个初值依次赋给 a1至 a5B.将 5个初值依次赋给 a0至 a4 C.将 5个初值依次赋给 a6至 a10D.因为数组长度与初值的个数不相同,
31、所以此语句不正确解析:本题中,表达式将 5个初值赋给 a0至 a4,后面的部分,将自动会被依次补零处理。27.只能作为成员函数重载的是( )。(分数:2.00)A.= B.+C.*D.new解析:本题考查关于重载概念的考查。C+语言规定“=”运算符只能作为成员函数重载。28.数据库 DB、数据库系统 DBS、数据库管理系统 DBMS之间的关系是_。 (分数:2.00)A.DB 包含 DBS 和 DBMSB.DBMS 包含 DB 和 DBSC.DBS 包含 DB 和 DBMS D.没有任何关系解析:数据库系统由如下几部分组成:数据库、数据库管理系统、数据库管理员、系统平台(硬件平台和 软件平台)
32、。29.下面对于友元函数描述正确的是( )。(分数:2.00)A.多线程就是同时执行几个事件 B.多线程是将程序分为几个并行的子任务,由它们并发交叉执行C.一个进程可产生多线程,形成执行流D.Java语言支持多线程解析:C+语言中的抽象类就是类中至少有一个纯虚函数的类,抽象类不能被实例化,继承抽象类的类必须实现抽象类中的纯虚函数。30.有如下程序段: int i=0,j=1 int main1 int a34=12,41,36,28,19,33,15,27,3,27,19,1,b3,i; fun(3,4,a,b); for(i=0;i2=x; (分数:30.00)填空项 1:_ (正确答案:b
33、ri 或 *(br+i))解析:二维数组 a 存放 3 行 4 列的数组元素,一维数组 b 用于存放每行的最大数。在函数 fun 中,外层 for 循环用于控制行数,内层 for 循环用于控制列数。44.假设 int a=1,b=2;则表达式 a+-b的值为 1。(分数:30.00)填空项 1:_ (正确答案:2)解析:因为运算符+和-都是右结合的且优先级高于双目运算符+,所以上式的 运算顺序为先 a+,-b,再 a+b,最后 a自加 1。 45.下面程序的输出结果为 1。 # include iostreamh void main2 int num=0,i=8; do i ; num+; w
34、hile(i); cout num endl; (分数:30.00)填空项 1:_ (正确答案:4)解析:本题考查的是考生分析简单循环结构的能力。大体过程为第 1次进入循环,i 变成 7,num 变为1,i 变为 6;第 2次进入循环,i 变成 5,num 变为 2,i 变为 4;第 3次进入 循环,i 变成 3,num 变为3,i 变为 2;第 4次进入循环,i 变成 1,num 变为 4,i 变为 0,循环 结束。 46.用以下语句调用库函数 malloc,使字符指针 st指向具有 11个字节的动态存储空间,请填空。 st=(char*) 1; (分数:30.00)填空项 1:_ (正确答
35、案:malloc(11)或 malloc(sizeof(char) * 11 ))解析:malloc 函数的参数可以是一个具体的常数,也可以是一个表达式。在本题中, 可以是 malloc(11),也可以借助于 sizeof运算符来表示。 47.在 C+语言的结构化程序设计中, 1 是程序的基本组成单元;在 C+语言的面向对象设计框架中, 2是程序的基本组成单元。(分数:30.00)填空项 1:_ (正确答案:函数)解析:函数是程序功能实现的主要方式,是实现结构化设计(将程序分成若干个函数实现)的基本组成;类是一种用户定义的类型,是实现数据封装和数据抽象的工具,是面向对象设计中的基本组成。48.C+中只有两个逻辑常量:true 和 1。(分数:30.00)填空项 1:_ (正确答案:False)解析:true 和 false是 C+中仅有的两个逻辑常量。