1、二级 C+分类模拟 256及答案解析(总分:67.50,做题时间:90 分钟)一、选择题(总题数:35,分数:67.50)1.在 C语言中,引用数组元素时,其数组下标的数据类型允许是_。(分数:2.50)A.整型表达式B.整型常量C.整型常量或整型表达式D.任何类型的表达式2.将运算符重载为类成员函数时,其参数表中没有参数,说明该运算符是 _ 。(分数:2.00)A.不合法的运算符B.一元运算符C.无操作数的运算符D.二元运算符3.下面的函数调用语句中 func函数的实参个数是 _ 。 fune(f2(v1,v2),(v3,v4,vS),(v6,max(v7,v8);(分数:2.00)A.3B
2、.4C.5D.84.为了使模块尽可能独立,要求 _ 。(分数:2.00)A.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱C.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强5.执行语句序列 ofstream outfile(“data.dat“); if() cout“ok“;else cout“fail“;后,如果文件打开成功,显示“ok”,否则显示“fail”。由此可知,上面 if语句的“”处的表达式是 _ 。(分数:2.00)A.outfile.fail()或 ou
3、tfileB.outfile.good()或!outfileC.outfile.good()或 outfileD.outfile.fail()或!outfile6.若执行语句:coutsetfill(“*“)setw(10)123“OK“endl 后将输出 _ 。(分数:2.00)A.*1230KB.123*OKC.*123*OKD.123*OK*7.有如下程序: #includeiostream using namespace std; class TestClass protected: TestClass()cout“x“;) TestClass(char c)coutc; class
4、TestClass1:public TestClass public: TestClass1(char c)coutc; int main() TestClass1 d1(“y“); return 0; 执行这个程序,屏幕上将显示输出_。(分数:1.00)AyB.yxC.xyD.yy8.软件测试的目的是_。(分数:2.50)A.评估软件可靠性B.发现并改正程序中的错误C.改正程序中的错误D.发现程序中的错误9.有 3个关系 R、S 和 T如下表所示: (分数:2.50)A.选择B.投影C交D并10.实现运行时的多态性要使用 _ 。(分数:2.00)A.虚函数B.重载函数C.析构函数D.构造函数
5、11.下列特征中不是面向对象方法的主要特征的是 _ 。(分数:2.00)A.多态性B.继承C.封装性D.模块化12.下列程序的执行结果是_。 #includeiostream.h #includestdlib.h class TestClass public: int x,y; TestClass()x=y=0; TestClass(int a,int b)x=a;y=b; void disp() cout“x=“x“,y=“yecdl; ; void main() TestClass s1(2,3); s1.disp();(分数:1.00)A.x=2,y=2B.x=2,y=3C.x=3,y=
6、2D.x=3,y=313.有如下程序: #includeiostream using namespace std; class Instrument public: virtual void Display()=0; ; class Piano:public Instrument public: vold Display()/*函数体程序略*/ ; int main() Instrument s; Instrument*p=0; /.; return 0; 下列叙述中正确的是_。(分数:2.50)A.语句“Insturment*p=0;”编译时出错B.语句“Instrument s;”编译时出
7、错C.类 Piano中的 Display函数不是虚函数D.类 Instrumen是一个虚基类14.假定 AB为一个类,则执行 AB x;语句时将自动调用该类的(分数:2.00)A.有参构造函数B.无参构造函数C.拷贝构造函数D.赋值重载函数15.在对函数进行原型声明时,下列语法成分中不需要的是_。(分数:1.00)A.函数返回类型B.函数参数列表C.函数名D.函数体16.有如下类声明: class Base protected; int amount; public; Base(int n=0):amount(n) int getAmount()constreturn amount; ; cl
8、ass Derived:public Base protected; int value; public; Derived(int m,int n):value(m).Base(n) Int getData()constreturn value+amount; ; 己知 x是一个 Derived对象,则下列表达式中正确的是_。(分数:2.00)A.value+x.getAmount()B.getData()-x.gctAmount()C.getData()-x.amountD.value+x.amount17.下列数据结构中,属于非线性结构的是_。(分数:2.50)A.双向链表B.循环链表C.
9、二叉链表D.循环队列18.一个栈的输入序列为 1,2,3,4,下面 _ 序列不可能是这个栈的输出序列(分数:2.00)A.1,3,2,4B.2,3,4,1C.4,3,1,2D.3,4,2,119.有如下类定义: class XX int xdata; public: XX(int n=0):xdata(n) ; class YY:public XX int ydata; public: YY(int m=0,int n=0):XX(m),ydata(n) ; YY类的对象包含的数据成员的个数是_。(分数:2.00)A.1B.2C.3D.420.下列关于析构函数的描述中,错误的是_。(分数:2.
10、50)A.析构函数可以重载B.析构函数由系统自动调用C.每个对象的析构函数只被调用一次D.每个类都有析构函数21.下列选项合法的标识符是_。(分数:2.50)A.1_1B.1-1C._11D.1_ _22.对关系 S和 R进行集合运算,产生的元组属于 S中的元组,但不属于 R中的元组,这种集合运算称为 _ 。(分数:2.00)A.并运算B.交运算C.差运算D.积运算23.支持子程序调用的数据结构是_。(分数:1.00)A栈B树C.队列D.二叉树24.下列程序的运行结果为_。 # includeiostream.h templateclass TT class FF TT a1,a2,a3; p
11、ublic: FF(TT b1,TT b2,TT b3)a1=b1;a2=b2;a3=b3; TT Sum()return a1+a2+a3;); void main() FFintx(int(1.1),2.3),y(int(4.2),5,6); coutx.Sum()“y.Sum()encIl;(分数:2.50)A.6.1 15.2B.6 15C.6 15.2D.6.1 1525.在一个抽象类中,一定包含有_。(分数:2.00)A.虚函数B.纯虚函数C.模板函数D.重载函数26.以下哪些不是程序调试的基本步骤_?(分数:2.50)A.分析错误原因B.错误定位C.修改设计代码以排除错误D.回归
12、测试,防止引入新错误27.下列关于类定义的说法中,正确的是_。(分数:1.00)A.类定义中包括数据成员和函数成员的声明B.类成员的缺省访问权限是保护的C.数据成员必须被声明为私有的D.成员函数只能在类体外进行定义28.类模板的使用实际上是将类模板实例化成一个具体的 _ 。(分数:2.00)A类B.对象C.函数D.模板类29.有如下程序: #includeiostream using namespace std; int main() void function(double val); double val; function(val); coutval; return 0; void fu
13、nction(double val) val=3; 编译运行这个程序将出现的情况是_。(分数:2.00)A.编译出错,无法运行B.输出:3C.输出:3.0D.输出一个不确定的数30.一个类的友元函数或友元类能够通过成员操作符访问该类的_。(分数:2.50)A.私有成员B.保护成员C.公用成员D.公用成员、保护成员和私有成员31.下面关于虚函数的描述中正确的是 _ 。(分数:2.00)A.虚函数是一个静态成员函数B.虚函数是一个非成员函数C.虚函数可以在函数说明时定义,也可以在函数实现时定义D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型32.结构化程序设计方法的主要原则有下列 4
14、项,不正确的是_。(分数:2.50)A.自下向上B.逐步求精C.模块化D.限制使用 goto语句33.数据库、数据库系统和数据库管理系统之间的关系是 _ 。(分数:1.00)A.数据库包括数据库系统和数据库管理系统B.数据库系统包括数据库和数据库管理系统C.数据库管理系统包括数据库和数据库系统D.3者没有明显的包含关系34.下列关于运算符函数的描述中,错误的是_。(分数:1.00)A.运算符函数的名称总是以 operator为前缀B.运算符函数的参数可以是对象C.运算符函数只能定义为类的成员函数D.在表达式中使用重载的运算符相当于调用运算符重载函数35.有如下程序: #includeiostr
15、eam.h using namespace std; class Demo public: Demo() cout“default constructor/n“; Demo (const Demo x) cont“copy construc; Demo userCode (Demo b)Demo c(b);return c; int main() Demo a;d; cout“calling userCode()/n“; d=userCode(a); return 0; 执行上面程序的过程中,构造函数 Demo()和 Demo(const Demo x)被调用的次数分别是_。(分数:1.00)
16、A.1和 1B.1和 2C.2和 3D.2和 4二级 C+分类模拟 256答案解析(总分:67.50,做题时间:90 分钟)一、选择题(总题数:35,分数:67.50)1.在 C语言中,引用数组元素时,其数组下标的数据类型允许是_。(分数:2.50)A.整型表达式B.整型常量C.整型常量或整型表达式 D.任何类型的表达式解析:解析 在 C语言中,引用数组元素时,其数组下标的数据类型可以是整型常量,也可以是整型表达式。2.将运算符重载为类成员函数时,其参数表中没有参数,说明该运算符是 _ 。(分数:2.00)A.不合法的运算符B.一元运算符 C.无操作数的运算符D.二元运算符解析:解析 一元或二
17、元运算符函数作为成员函数时,第一操作数就是对象本身,并不出现在参数表中,即第一操作数仅以 this指针的形式隐含于参数表中,因此对于一元运算符参数表是空的;而对于二元运算符参数表中只有一个参数,它代表第二操作数。3.下面的函数调用语句中 func函数的实参个数是 _ 。 fune(f2(v1,v2),(v3,v4,vS),(v6,max(v7,v8);(分数:2.00)A.3 B.4C.5D.8解析:解析 逗号表达式及实参的形式,在逗号表达式中,取最后一个表达式的值,结合 func的调用形式,可以知道实参的个数只有 3个。4.为了使模块尽可能独立,要求 _ 。(分数:2.00)A.模块的内聚程
18、度要尽量高,且各模块间的耦合程度要尽量强B.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱 C.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强解析:解析 耦合是指模块之间的关联程度,而内聚是指模块内部各部分的聚合程度。模块之间的关联程度越小,模块内部的聚合程度越高,越容易维护。在程序设计中应追求高内聚低耦合。5.执行语句序列 ofstream outfile(“data.dat“); if() cout“ok“;else cout“fail“;后,如果文件打开成功,显示“ok”,否则显示“fail”。由此可知,上面 if语句的
19、“”处的表达式是 _ 。(分数:2.00)A.outfile.fail()或 outfileB.outfile.good()或!outfileC.outfile.good()或 outfile D.outfile.fail()或!outfile解析:6.若执行语句:coutsetfill(“*“)setw(10)123“OK“endl 后将输出 _ 。(分数:2.00)A.*1230K B.123*OKC.*123*OKD.123*OK*解析:解析 cout.fill()用于设置或返回输出的填充字符,默认是空格,fill()函数的设置一直有效,直到下一个 fill()函数改变该值为止。setw
20、(int n)作用是设置输入输出的宽度,此设置只对一次输入或输出效,在完成一次数据的输入或输出后,宽度设置自动恢复为 0。注意:默认为输出数据在指定宽度内右对齐。7.有如下程序: #includeiostream using namespace std; class TestClass protected: TestClass()cout“x“;) TestClass(char c)coutc; class TestClass1:public TestClass public: TestClass1(char c)coutc; int main() TestClass1 d1(“y“); re
21、turn 0; 执行这个程序,屏幕上将显示输出_。(分数:1.00)AyB.yxC.xy D.yy解析:解析 本题中类 TestClass为基类,TestClass1 为 TeslClass的派生类。由 main主函数入手,定义 TestClass1类型的对象 d1,参数值为 y。TestClass1 类继承 TestClass,所以主函数中“TestClassldl(“y“);”语句首先调用“TesiClass1(char c)courc;)”然后调用基类中的“TestClass()cout“x“;”输出 x,然后执行“TestClass(char c)coutc;”输出 y,即答案为“xy
22、”。8.软件测试的目的是_。(分数:2.50)A.评估软件可靠性B.发现并改正程序中的错误C.改正程序中的错误D.发现程序中的错误 解析:解析 软件测试目的慨念理解题,本题的答案为 D。9.有 3个关系 R、S 和 T如下表所示: (分数:2.50)A.选择B.投影C交D并 解析:解析 两个相同结构关系的并是由属于这两个关系的元组组成的集合。10.实现运行时的多态性要使用 _ 。(分数:2.00)A.虚函数 B.重载函数C.析构函数D.构造函数解析:解析 虚函数是实现动态联编的必要条件之一,没有虚函数一定不能实现动态联编。11.下列特征中不是面向对象方法的主要特征的是 _ 。(分数:2.00)
23、A.多态性B.继承C.封装性D.模块化 解析:解析 面向对象设计方法与面向过程设计方法有本质的不同,其基本原理是使用现实世界的概念抽象地思考问题从而自然地解决问题。其特点包括分类性、多态性、封装性、模块独立性、继承和多态性等。模块化是结构化程序设计的特点。12.下列程序的执行结果是_。 #includeiostream.h #includestdlib.h class TestClass public: int x,y; TestClass()x=y=0; TestClass(int a,int b)x=a;y=b; void disp() cout“x=“x“,y=“yecdl; ; voi
24、d main() TestClass s1(2,3); s1.disp();(分数:1.00)A.x=2,y=2B.x=2,y=3 C.x=3,y=2D.x=3,y=3解析:解析 由主函数入手,定义了类 TestClass的对象 s1(2,3),当类对象进入其作用域时调用构造函数,构造函数应该是调用具有参数的“TestClass(inta,int b)x=a;y=b;”,然后调用成员函数ditip(),则输出为“cout“x=“x“,y=“yendl;”。即 x=2,y=3。13.有如下程序: #includeiostream using namespace std; class Instru
25、ment public: virtual void Display()=0; ; class Piano:public Instrument public: vold Display()/*函数体程序略*/ ; int main() Instrument s; Instrument*p=0; /.; return 0; 下列叙述中正确的是_。(分数:2.50)A.语句“Insturment*p=0;”编译时出错B.语句“Instrument s;”编译时出错 C.类 Piano中的 Display函数不是虚函数D.类 Instrumen是一个虚基类解析:解析 抽象类只能作为别的类的基类,不能生
26、成对象。14.假定 AB为一个类,则执行 AB x;语句时将自动调用该类的(分数:2.00)A.有参构造函数B.无参构造函数 C.拷贝构造函数D.赋值重载函数解析:解析 当没有显式调用指定形式的构造函数,则系统自动调用无参构造函数,如果没有为类指定此构造函数,则系统自动为其生成一个最简单的无参构造函数。15.在对函数进行原型声明时,下列语法成分中不需要的是_。(分数:1.00)A.函数返回类型B.函数参数列表C.函数名D.函数体 解析:解析 函数原型中,函数名、函数返回值、函数参数列表是需要的,而函数体在函数声明时不需要。所以答案为 D。16.有如下类声明: class Base protec
27、ted; int amount; public; Base(int n=0):amount(n) int getAmount()constreturn amount; ; class Derived:public Base protected; int value; public; Derived(int m,int n):value(m).Base(n) Int getData()constreturn value+amount; ; 己知 x是一个 Derived对象,则下列表达式中正确的是_。(分数:2.00)A.value+x.getAmount()B.getData()-x.gctA
28、mount() C.getData()-x.amountD.value+x.amount解析:解析 此题考查的是派生类对基类成员的访问权限。派生类中的成员不能访问基类中的私有成员,可以访问基类中的公有成员和保护成员。派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍然是公有成员和保护成员;派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都变成私有成员;派生类从基类保护继承时,基类的公有成员在派生类中变成保护成员,基类的保护成员在派生类中仍然是保护成员。17.下列数据结构中,属于非线性结构的是_。(分数:2.50)A.双向链表B.循环链表C.二叉链表 D.循环队列解析:解析
29、对于线性结构,除了首结点和尾结点外,每一个结点只有一个前驱结点和一个后继结点。线性表、栈、队列都是线性结构,循环链表和双向链表是线性表的链式存储结构;二叉链表是二叉树的存储结构,而二叉树是非线性结构,因为二叉树有些结点有两个后继结点,不符合线性结构的定义。18.一个栈的输入序列为 1,2,3,4,下面 _ 序列不可能是这个栈的输出序列(分数:2.00)A.1,3,2,4B.2,3,4,1C.4,3,1,2 D.3,4,2,1解析:19.有如下类定义: class XX int xdata; public: XX(int n=0):xdata(n) ; class YY:public XX in
30、t ydata; public: YY(int m=0,int n=0):XX(m),ydata(n) ; YY类的对象包含的数据成员的个数是_。(分数:2.00)A.1B.2 C.3D.4解析:解析 因为类 XX包括一个数据成员 xdata,而类 YY继承自类 XX,所在类 YY中也包含数据成员xdata,同时类 YY中也定义了其本身的数据成员 ydata,因而 YY类的对象包含的数据成员的个数是 2。20.下列关于析构函数的描述中,错误的是_。(分数:2.50)A.析构函数可以重载B.析构函数由系统自动调用C.每个对象的析构函数只被调用一次D.每个类都有析构函数 解析:解析 本题考查的知识
31、点是析构函数。析构函数的功能是用来释放一个对象,在对象删除前,用它来做一些清理工作。 (1)析构函数是特殊的成员函数,函数体可以写存类体内,也可写在类体外。该函数的名字为求反符号“”后面跟着类名,该函数不能指定返回类型,不能有参数,也不能重载。 (2)一个类只能定义一个析构函数。 (3)析构函数在对象生命周期结束时被系统直接调用,程序中一般不调用析构函数。 (4)运算符 delete与析构函数一起使用。21.下列选项合法的标识符是_。(分数:2.50)A.1_1B.1-1C._11 D.1_ _解析:解析 C 语言中标识符命名的规则是:标识符只能由字母、数字和下画线组成,第一个字符必须为字母或
32、下画线。所以选项 C正确。22.对关系 S和 R进行集合运算,产生的元组属于 S中的元组,但不属于 R中的元组,这种集合运算称为 _ 。(分数:2.00)A.并运算B.交运算C.差运算 D.积运算解析:23.支持子程序调用的数据结构是_。(分数:1.00)A栈 B树C.队列D.二叉树解析:解析 栈支持子程序调用。栈是一种只能在一端进行插入或删除的线性表,在主程序调用子函数时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此本题的答案为 A。24.下列程序的运行结果为_。 # includeiostrea
33、m.h templateclass TT class FF TT a1,a2,a3; public: FF(TT b1,TT b2,TT b3)a1=b1;a2=b2;a3=b3; TT Sum()return a1+a2+a3;); void main() FFintx(int(1.1),2.3),y(int(4.2),5,6); coutx.Sum()“y.Sum()encIl;(分数:2.50)A.6.1 15.2B.6 15 C.6 15.2D.6.1 15解析:解析 本题考查模板函数的应用,表达式 int(1.1)和 int(4.2)是将 1.1和 4.2强制转换为整型。25.在一个
34、抽象类中,一定包含有_。(分数:2.00)A.虚函数B.纯虚函数 C.模板函数D.重载函数解析:解析 拥有纯虚函数的类叫做抽象类,所以抽象类中必然包含有虚函数。26.以下哪些不是程序调试的基本步骤_?(分数:2.50)A.分析错误原因 B.错误定位C.修改设计代码以排除错误D.回归测试,防止引入新错误解析:解析 程序调试的基本步骤: (1)错误定位。从错误的外部表现形式入手,研究有关部分的程序,确定程序中出错位置,找出错误的内在原因。(2)修改设计和代码,以排除错误。(3)进行回归测试,防止引进新的错误。27.下列关于类定义的说法中,正确的是_。(分数:1.00)A.类定义中包括数据成员和函数
35、成员的声明 B.类成员的缺省访问权限是保护的C.数据成员必须被声明为私有的D.成员函数只能在类体外进行定义解析:解析 类的成员的缺省访问权限是私有的,数据成员可以是私有,可以是公用的,也可以是受保护的。类的成员函数可以在类内定义。28.类模板的使用实际上是将类模板实例化成一个具体的 _ 。(分数:2.00)A类 B.对象C.函数D.模板类解析:解析 类模板就是把类中的数据分离出来,作为一个类的描述。C+编译器根据类模板和特定伪数据类型来产生一个类,类模板就是一个抽象的类。29.有如下程序: #includeiostream using namespace std; int main() voi
36、d function(double val); double val; function(val); coutval; return 0; void function(double val) val=3; 编译运行这个程序将出现的情况是_。(分数:2.00)A.编译出错,无法运行B.输出:3C.输出:3.0D.输出一个不确定的数 解析:30.一个类的友元函数或友元类能够通过成员操作符访问该类的_。(分数:2.50)A.私有成员B.保护成员C.公用成员D.公用成员、保护成员和私有成员 解析:31.下面关于虚函数的描述中正确的是 _ 。(分数:2.00)A.虚函数是一个静态成员函数B.虚函数是一个
37、非成员函数C.虚函数可以在函数说明时定义,也可以在函数实现时定义D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型 解析:解析 本题考查虚函数的概念。虚函数是非静态的成员函数,它不能是友元函数,但可以在另一个类中被声明为友元函数。虚函数必须是类的成员函数,虚函数声明只能出现在类定义的函数原型声明中,而不能在成员函数的函数体实现的地方,一般要求基类中说明了虚函数后,派生类说明的虚函数应该与基类中虚函数的参数个数相等,对应参数的类型相同。如果不相同,则将派生类虚函数的参数类型强制转换为基类中虚函数的参数类型。32.结构化程序设计方法的主要原则有下列 4项,不正确的是_。(分数:2.50
38、)A.自下向上 B.逐步求精C.模块化D.限制使用 goto语句解析:解析 结构化程序设计方法的主要原则为: (1)自顶向下:即先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。 (2)逐步求精:对复杂问题,应设计一些子目标作过渡,逐步细化。 (3)模块化:把程序要解决的总目标分解为分目标,再进一步分解为具体的小目标,把每个小目标称为一个模块。 (4)限制使用 goto语句。33.数据库、数据库系统和数据库管理系统之间的关系是 _ 。(分数:1.00)A.数据库包括数据库系统和数据库管理系统B.数据库系统包括数据库和数据库管理系统 C.数据库管理系统包括数据库和数据库系统D.3者没有明显
39、的包含关系解析:34.下列关于运算符函数的描述中,错误的是_。(分数:1.00)A.运算符函数的名称总是以 operator为前缀B.运算符函数的参数可以是对象C.运算符函数只能定义为类的成员函数 D.在表达式中使用重载的运算符相当于调用运算符重载函数解析:解析 运算符函数可以定义为类的友元函数。所以 C选项错误。35.有如下程序: #includeiostream.h using namespace std; class Demo public: Demo() cout“default constructor/n“; Demo (const Demo x) cont“copy constru
40、c; Demo userCode (Demo b)Demo c(b);return c; int main() Demo a;d; cout“calling userCode()/n“; d=userCode(a); return 0; 执行上面程序的过程中,构造函数 Demo()和 Demo(const Demo x)被调用的次数分别是_。(分数:1.00)A.1和 1B.1和 2C.2和 3 D.2和 4解析:解析 函数 Demo()为构造函数,而 Demo(const Demox)为复制构造函数。C+在创建一个对象时,会自动调用类的构造函数,所以语句”Demo a.d;”将调用函数 Demo()2次。当一个对象作为实参传递给函数时为初始化形参,要调用拷贝构造函数;在函数返回一个对象时调用拷贝构造函数。由此可知语句d=userCode(a);调用拷贝构造函数 3次。