1、计算机等级考试二级(C+)42 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(每小题 2 分,共 70 分) 下列各(总题数:35,分数:70.00)1.有以下程序 main() int i,j,x=0; for(i=0;i0) switch(k) default : break; case 1 : n+=k; case 2 : case 3 : n+=k; k-; printf(“%d/n“,n); 程序运行后的输出结果是_。 (分数:2.00)A.0B.4C.6D.76.下列运算符中哪些是不能够被重载的?(分数:2.00)A.,* ,- * ,:,?:B.+,-,new
2、,delete,=C.sizeof,new,delete,+,-D.sizeof,new,delete,+,-7.sizeof(float)是( )。(分数:2.00)A.一个双精度型表达式B.一个整型表达式C.一种函数调用D.一个不合法的表达式8.下列有关内联函数的叙述中,正确的是_。(分数:2.00)A.内联函数在调用时发生控制转移B.内联函数必须通过关键字 inline 来定义C.内联函数是通过编译器来实现的D.内联函数体的最后一条语句必须是 rennin 语句9.面向对象程序设计思想的主要特征中不包括( )。(分数:2.00)A.继承性B.功能分解,逐步求精C.封装性和信息隐藏D.多态
3、性10.下列有关继承和派生的叙述中,正确的是_。(分数:2.00)A.如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员B.派生类的成员函数可以访问基类的所有成员C.基类对象可以赋值给派生类对象D.如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类11.下面程序的运行结果为( )。 # include iostreamh class A int num; public: A(inti)hum=i; A(Aa)num=anum+; void print( )cout num; ; void main( ) Aa(1),b(a); aprint( ); bprint( )
4、; (分数:2.00)A.显示“打开文件”对话框B.显示“保存文件”对话框C.显示“字体”对话框D.显示“打印”对话框12.通常拷贝构造函数的参数是( )。(分数:2.00)A.某个对象名B.某个对象的成员名C.某个对象的引用名D.某个对象的指针名13.设有定义 int a=1;float f=12;charc=a;,则下列表示错误的是( )。(分数:2.00)A.+a;B.f-;C.c+;D.8+;14.下面程序段的运行结果是( )。 voidmain( ) ihtt,a,b,C; a=1;b=2;C=2; while(abc) t=a;a=b;b=t;c-; couta“,“b“,“C;
5、(分数:2.00)A.1,2,0B.2,1,0C.1,2,1D.2,1,115.当使用 fstream 流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为( )。(分数:2.00)A.ios:inB.ios:outC.ios:in | ios:outD.以上都不对16.设有如下说明 typedef struct ST long a;int b;char c2;NEW; 则下面叙述中正确的是_。 (分数:2.00)A.以上的说明形式非法B.ST 是一个结构体类型C.NEW 是一个结构体类型D.NEW 是一个结构体变量17.下列有关继承和派生的途述中,正确的是【 】(分数:2.00)A.
6、如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员B.派生类的成员函数可以访问基类的所有成员C.基类对象可以赋值给派生类对象D.如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类18.数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和_。(分数:2.00)A.编码设计B.测试阶段C.运行阶段D.物理设计19.以下能正确定义字符串的语句是_。 (分数:2.00)A.char str=/064;B.char str=“/x43“;C.char str=;D.char str=“/0“;20.this 指针是 C+语言实现什么的一种机制?(分数:2.00)A.0B.1C
7、.2D.321.下面关于 C+语言的描述错误的是( )。(分数:2.00)A.C+语言支持数据封装B.C+语言中引入友元没有破坏封装性C.C+语言允许函数名和运算符重载D.C+语言支持动态联编22.C+语言类体系中,不能被派生类继承的有( )。(分数:2.00)A.转换函数B.构造函数C.虚函数D.静态成员函数23.数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和【 】(分数:2.00)A.编码设计B.测试阶段C.运行阶段D.物理设计24.C+语言中,表示一条语句结束的标号是( )。(分数:2.00)A.Caption 属性B.BackColor 属性C.ForeColor 属性D.Co
8、lor 属性25.下列描述中正确的是_。 (分数:2.00)A.线性链表是线性表的链式存储结构B.栈与队列是非线性结构C.双向链表是非线性结构D.只有根结点的二叉树是线性结构26.有以下程序 main() union char ch2; int d; s; s.d=0x4321; printf(“%x,%x/n“,s.ch0,s.ch1); 在 16 位编译系统上,程序执行后的输出结果是_。 (分数:2.00)A.21,43B.43,21C.43,00D.21,0027.有如下程序 #include using namespace std; class Obj static int i; pu
9、blic: Obj()i+; Obj()i-; static int getVal()teturn i; ; int Obj:i=0; void f ()Obj ob2;cout0) switch(k) default : break; case 1 : n+=k; case 2 : case 3 : n+=k; k-; printf(“%d/n“,n); 程序运行后的输出结果是_。 (分数:2.00)A.0B.4C.6D.7 解析:在 switch 语句中,表达式的值与某一个 case 后面的常量表达式的值相等时,就执行此 case 后面的语 句,若所有的 case 中的常量表达式的值都没有
10、与表达式的值匹配的,就执行 default 后面的语句,各个 case 和 default 的出现次序不影响执行结果。所以在本题中,当 k=5 和 k=4 的时候,case 都没有与其匹配的值, 所以执行了 default 语句;当 k=3 时,执行“case 3 : n+=k;”得 n=3,然后执行 default;当 k=2 时,执行“case2 : case 3 : n+=k;”得 n=5,然后执行 default;当 k=1 时,执行“case 1 : n+=k; case 2 : case 3 : n+=k;” 使得 n 加两次 k,得到 n=7。6.下列运算符中哪些是不能够被重载的
11、?(分数:2.00)A.,* ,- * ,:,?: B.+,-,new,delete,=C.sizeof,new,delete,+,-D.sizeof,new,delete,+,-解析:本题考查 C+浯言中不能够重载的操作符。C+语言中的不能重载的操作符是.,. * ,- * ,:和?:。 7.sizeof(float)是( )。(分数:2.00)A.一个双精度型表达式B.一个整型表达式 C.一种函数调用D.一个不合法的表达式解析:该函数用于数据类型和变量。注意:size of 操作符不能用于函数,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、void
12、类型等。8.下列有关内联函数的叙述中,正确的是_。(分数:2.00)A.内联函数在调用时发生控制转移B.内联函数必须通过关键字 inline 来定义C.内联函数是通过编译器来实现的D.内联函数体的最后一条语句必须是 rennin 语句解析:9.面向对象程序设计思想的主要特征中不包括( )。(分数:2.00)A.继承性B.功能分解,逐步求精 C.封装性和信息隐藏D.多态性解析:面向对象程序设计的主要特征是继承性,封装性和信息隐藏,多态性。10.下列有关继承和派生的叙述中,正确的是_。(分数:2.00)A.如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员B.派生类的成员函数可以访
13、问基类的所有成员C.基类对象可以赋值给派生类对象D.如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类解析:11.下面程序的运行结果为( )。 # include iostreamh class A int num; public: A(inti)hum=i; A(Aa)num=anum+; void print( )cout num; ; void main( ) Aa(1),b(a); aprint( ); bprint( ); (分数:2.00)A.显示“打开文件”对话框B.显示“保存文件”对话框C.显示“字体”对话框 D.显示“打印”对话框解析:选项卡是用来分页的,而选项组控
14、件是用来选择列表的,文本框控件主要用来输入或编辑字段数据。12.通常拷贝构造函数的参数是( )。(分数:2.00)A.某个对象名B.某个对象的成员名C.某个对象的引用名 D.某个对象的指针名解析:拷贝初始化构造函数的作用是用一个已知的对象来初始化一个被 创建的同类的对象,该函数只有一个参数,并且是对同类的某个对象的引用。13.设有定义 int a=1;float f=12;charc=a;,则下列表示错误的是( )。(分数:2.00)A.+a;B.f-;C.c+;D.8+; 解析:+,-运算符不能用于常量表达式。14.下面程序段的运行结果是( )。 voidmain( ) ihtt,a,b,C
15、; a=1;b=2;C=2; while(abc) t=a;a=b;b=t;c-; couta“,“b“,“C; (分数:2.00)A.1,2,0 B.2,1,0C.1,2,1D.2,1,1解析:本题中(abc)的运算次序是先算 ab,返回 1,再运算 1c,返回 1,所以表达式 abc 的值为 1。 15.当使用 fstream 流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为( )。(分数:2.00)A.ios:inB.ios:outC.ios:in | ios:outD.以上都不对 解析:使用 fstream 类建立文件流必须定义打开方式,否则编译器无法判断该文件流是读还是写
16、。16.设有如下说明 typedef struct ST long a;int b;char c2;NEW; 则下面叙述中正确的是_。 (分数:2.00)A.以上的说明形式非法B.ST 是一个结构体类型C.NEW 是一个结构体类型 D.NEW 是一个结构体变量解析:typedef 关键字用于声明一个新的类型名代替已有的类型名。本题中如果没有用 typedef 进行定义的话,则 struct ST 为结构体类型,现在用 typedef 定义后,相当于用 NEW 代表了 struct ST 这一结构体类型,故 NEW 为结构体类型。17.下列有关继承和派生的途述中,正确的是【 】(分数:2.00)
17、A.如果一个派生类私有继承其基类,则该派生类对象不能访问基类的保护成员B.派生类的成员函数可以访问基类的所有成员C.基类对象可以赋值给派生类对象D.如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类 解析:派生类继承私有继承基类,该派生类对象可以访问基类中的公有成员和保护成员,而基类的私有成员在派生类中不可访问。如果派生类没有给出全部纯虚函数的实现,该派生类仍然是一个抽象类。18.数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和_。(分数:2.00)A.编码设计B.测试阶段C.运行阶段D.物理设计解析:19.以下能正确定义字符串的语句是_。 (分数:2.00)A.char st
18、r=/064;B.char str=“/x43“;C.char str=;D.char str=“/0“; 解析:C 语言中,字符串是用一对双引号括起来的字符序列,并用字符型数组来存放,故选项 A、C 不属 于字符串, 选项 B 定义的是一个字符变量 str,却用来存放字符串,显然也不正确,所以选项 D 正确。20.this 指针是 C+语言实现什么的一种机制?(分数:2.00)A.0B.1C.2D.3 解析:由于数组元素是整型,所以其初始值为 0。21.下面关于 C+语言的描述错误的是( )。(分数:2.00)A.C+语言支持数据封装B.C+语言中引入友元没有破坏封装性 C.C+语言允许函数
19、名和运算符重载D.C+语言支持动态联编解析:数据封装就是数据抽象;友元可以访问类中的所有成员,是面向对 象的一个重要特征,但是破坏了封装性;重载和动态联编都是面向对象的另一个特点- 多态性。22.C+语言类体系中,不能被派生类继承的有( )。(分数:2.00)A.转换函数B.构造函数 C.虚函数D.静态成员函数解析:派生类对象的数据结构是由基类中说明的数据成员和派生类中说 明的数据成员共同构成,所以不能继承基类的构造函数,必须重新定义。23.数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和【 】(分数:2.00)A.编码设计B.测试阶段C.运行阶段D.物理设计 解析:数据库设计目前一般采
20、用生命周期法,即将整个数据库应用系统的开发分解成目标独立的若干阶段。它们是:需求分析阶段、概念设计阶段、逻辑设计阶段和物理设计阶段。24.C+语言中,表示一条语句结束的标号是( )。(分数:2.00)A.Caption 属性B.BackColor 属性 C.ForeColor 属性D.Color 属性解析:根据混合运算规则,如果有一个数据是 double 型,则其他数据类型先转化为 double 型,运算的结果最终也是 double 型。为保证精度的不丢失,表达式的数据类型是变量和常量中精确度最高的变量类型。25.下列描述中正确的是_。 (分数:2.00)A.线性链表是线性表的链式存储结构 B
21、.栈与队列是非线性结构C.双向链表是非线性结构D.只有根结点的二叉树是线性结构解析:根据数据结构中各数据元素之间前后关系的复杂程度,一般将数据结构分为两大类型:线性结构与 非线性结构。如果一个非空的数据结构满足下列两个条件: 有且只有一个根结点; 每个结点最多有 一个前件,也最多有一个后件。则称该数据结构为线性结构,又称线性表。所以线性表、栈与队列、线性 链表都是线性结构,而二叉树是非线性结构。26.有以下程序 main() union char ch2; int d; s; s.d=0x4321; printf(“%x,%x/n“,s.ch0,s.ch1); 在 16 位编译系统上,程序执行
22、后的输出结果是_。 (分数:2.00)A.21,43 B.43,21C.43,00D.21,00解析:此题考核的是共用体的特征。int 类型变量和字符数组 ch 共用两个字节的相同的存储单元,通常 ch0位于低字节,ch1位于高字节,所以 s.ch0=21,s.ch1=43。27.有如下程序 #include using namespace std; class Obj static int i; public: Obj()i+; Obj()i-; static int getVal()teturn i; ; int Obj:i=0; void f ()Obj ob2;cout)按位与( a=
23、10; b=20; c=(a%b1); printf(“%d %d %d/n“,a,b,c); (分数:2.00)填空项 1:_ (正确答案:10 20 0)解析:本题中“(a%b1)”的运算顺序为先算括号算术运算符关系运算符逻辑运算符。其中 a%b=10,a/b=0,所以 a%b1 值也是 0,故整个表达式的结果为 0,所以输出的 a,b,c 的值为 10 20 0。37.关系数据库管理系统能实现的专门关系运算包括选择、连接和 1。(分数:2.00)填空项 1:_ (正确答案:投影)解析:关系数据库管理系统的专门关系运算包括选择、连接和投影。选择运算是在指定的关系中选取所有满足给定条件的元组
24、,构成一个新的关系,而这个新的关系是原关系的一个子集:投影运算是在给定关系的某些域上进行的运算。通过投影运算可以从一个关系中选择出所需要的属性成分,并且按要求排列成一个新的关系,而新关系的各个属性值来自原关系中相应的属性值:连接运算是对两个关系进行的运算,其意义是从两个关系的笛卡尔积中选出满足给定属性间一定条件的那些元组。38.对长度为 10 的线性表进行冒泡排序,最坏情况下需要比较的次数为 1。(分数:2.00)填空项 1:_ (正确答案:45)解析:假设线性表的长度为 n,则在最坏情况下,冒泡排序需要经过 n/2 遍的从前往后扫描和 n/2 遍的从后 往前扫描,需要比较次数为 n(n-1)
25、/2。39.为解决在多重继承环境中因公共基类带来的 1 问题,C+语言提供了虚基类机制。(分数:2.00)填空项 1:_ (正确答案:二义性)解析:本题考查关于 C+中虚基类的作用。C+中产生虚基类的作用就是为了解决继承中的二义性问题,通过虚基类继承可以把父基类中相同的函数只编译一次。 40.如果类 B 继承了类 A,则称类 A 为类 B 的基类,类 B 称为类 A 的 1。(分数:2.00)填空项 1:_ (正确答案:派生类)解析:如果类 A 为类 B 的基类,那么类 B 称为类 A 的派生类。 41.operator 是运算符重载时必须使用的关键字,它和被重载的运算符连在一起,作为运算符函
26、数的专用函数名,务必把该函数说明为 1 的。(分数:2.00)填空项 1:_ (正确答案:public)解析:本题考查 c+中运算符重载的固定格式和要求。C+中不论用成员函数还是友元函数重载运算符都必须用关键字 operator,都必须将函数声明为公有的。42.执行下列语句后,c3 中的值为 1 int c1=1,c2=2,c3;c3=10/c2 * c1; (分数:2.00)填空项 1:_ (正确答案:0)解析:在赋值运算中,如果表达式中变量和常量的数据类型不一致就会自动进行类型转换。系统会计算10/c2,由于 10 是实型,所以均先转化为双精度型 0500000,再与 c1 转化后的双精度
27、数相乘得0500000。但其要赋值给整型变量 c3,故要进行强制转换,得 c3 的值为 0。 43.C+语言程序的注释可以出现在程序中的任何地方,一个注释以 1 作为开始和结束的标记。(分数:2.00)填空项 1:_ (正确答案:/ * * /)解析:C+语言程序的注释可以出现在程序中的任何地方,一个注释以“/ *,”开始, 以“* /”为结束。44.C+语言提供的基本控制结构可以分为 3 种类型:顺序结构、 1 和循环结构。(分数:2.00)填空项 1:_ (正确答案:选择结构)解析:顺序结构(也叫连续结构)和循环结构是经常被使用的,不过选择结构(if 和 switch)也是一种重要的流程控
28、制结构。45.数据管理技术发展过程经过人工管理、文件系统和数据库系统三个阶段,其中数 据独立性最高的阶段是 1。(分数:2.00)填空项 1:_ (正确答案:数据库系统)解析:在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中数据 独立性最高的阶段是数据库系统。46. 1 是 C+语言程序的入口。(分数:2.00)填空项 1:_ (正确答案:main-|_|-函数)解析:考查 C+语言的基本概念。main-|_|-是 C+语言的入口函数。47.以下程序输出的结果是 1。 #includeiostream.h voidmain( ) inta=5,b=4,c=3,
29、d; d=(abc); coutd; (分数:2.00)填空项 1:_ (正确答案:0)解析:本题的关键在于对变量 c 的赋值运算: d=(abc) d=(543) 先算 54,为真,得 1,即:d=(13),此时 13,为假,得 0。 48.下面程序的运行结果为 1。 # include iostreamh void fun(int x=0,int y=0) cout X y; void main( ) fun(5); (分数:2.00)填空项 1:_ (正确答案:50)解析:本题考查的是函数的默认参数,如果一个函数中有多个参数,则默认参数应 从右至左逐个定义,所以题目中 x 使用参数 5,y 使用默认参数 0。 49.在面向对象方法中,类的实例称为 1。(分数:2.00)填空项 1:_ (正确答案:对象)解析:将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。所以,类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是其对应类的一个实例。50.假设 int a=1,b=2;,则表达式(+a/b)*b-的值为 1。(分数:2.00)填空项 1:_ (正确答案:2)解析:运算符+的优先级高于双目运算符/,所以括号中的运算为 2/2,最后的结果为 2/2*2。