1、全国计算机等级考试二级 C+真题 2004年 9月及答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.下面叙述正确的是(分数:2.00)A.算法的执行效率与数据的存储结构无关B.算法的空间复杂度是指算法程序中指令(或语句)的条数C.算法的有穷性是指算法必须能在执行有限个步骤之后终止D.以上三种描述都不对2.以下数据结构中不属于线性数据结构的是(分数:2.00)A.队列B.线性表C.二叉树D.栈3.在一棵二叉树上第 5层的结点数最多是(分数:2.00)A.8B.16C.32D.154.下面描述中,符合结构化程序设计风格的是(分数:2.00)
2、A.使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑B.模块只有一个入口,可以有多个出口C.注重提高程序的执行效率D.不使用 goto语句5.下面概念中,不属于面向对象方法的是(分数:2.00)A.对象B.继承C.类D.过程调用6.在结构化方法中,用数据流程图(DFD) 作为描述工具的软件开发阶段是(分数:2.00)A.可行性分析B.需求分析C.详细设计D.程序编码7.在软件开发中,下面任务不属于设计阶段的是(分数:2.00)A.数据结构设计B.给出系统模块结构C.定义模块算法D.定义需求并建立系统模型8.数据库系统的核心是(分数:2.00)A.数据模型B.数据库管理系统C.软件
3、工具D.数据库9.下列叙述中正确的是(分数:2.00)A.数据库系统是一个独立的系统,不需要操作系统的支持B.数据库设计是指设计数据库管理系统C.数据库技术的根本目标是要解决数据共享的问题D.数据库系统中,数据的物理结构必须与逻辑结构一致10.下列模式中,能够给出数据库物理存储结构与物理存取方法的是(分数:2.00)A.内模式B.外模式C.概念模式D.逻辑模式11.关于面向对象的程序设计方法,下列说法正确的是(分数:2.00)A.“封装性”指的是将不同类型的相关数据组合在一起,作为一个整体进行处理B.“多态性”指的是对象的状态会根据运行时要求自动变化C.基类的私有成员在派生类的对象中不可访问,
4、也不占内存空间D.在面向对象的程序设计中,结构化程序设计方法仍有着重要作用12.判断字符型变量 ch是否为大写英文字母,应使用表达式(分数:2.00)A.chA _yyOff void Print() const cout(_x,_y)endl; private: int_x_y; ; 下列语句中会发生编译错误的是(分数:2.00)A.Pointpt;pt;Print();B.const Point pt;pPrint();C.Pointpt;pMove(1,2);D.const Point pt;pMove(1,2);34.有以下类定义 class MyClass private: int
5、id; char gender; char*phone; public: MyClass():id(0),gender(#),phone(NULL) MyClass(int no,char ge=#,char*ph=NULL) idno;gender=ge;phone=ph; ; 下列类对象定义语句中错误的是(分数:2.00)A.MyClass myObj;B.MyClass myObj(11,“13301111155“);C.MyClass myObj(12,m);D.MyClass myObj(12);35.有以下程序 #includeiostream using namespace st
6、d; class Complex public: Complex(double r=O,double i0):re(r),im(i) double real() const return re; double imag()const return im; Complex operator (Complex C) const return Complex (rec.re,imc.im); private: double re,im; ; int main() Complex a=Complex(1,1)Complex (5); coutareal()a.imag()iendl; retum 0;
7、 程序执行后的输出结果是(分数:2.00)A.66iB.61iC.16iD.11i二、B填空题/B(总题数:15,分数:30.00)36.算法的复杂度主要包括U 【1】 /U复杂度和空间复杂度。(分数:2.00)填空项 1:_37.数据的逻辑结构在计算机存储空间中的存放形式称为数据的U 【2】 /U(分数:2.00)填空项 1:_38.若按功能划分,软件测试的方法通常分为白盒测试方法和U 【3】 /U测试方法。(分数:2.00)填空项 1:_39.如果一个工人可管理多个设备,而一个设备只被一个工人管理,则实体“工人”与实体“设备”之间存在U 【4】 /U关系。(分数:2.00)填空项 1:_4
8、0.关系数据库管理系统能实现的专门关系运算包括选择、连接和U 【5】 /U。(分数:2.00)填空项 1:_41.设有定义语句:int a=12;,则表达式 a*23 的运算结果是U 【6】 /U。(分数:2.00)填空项 1:_42.从实现的角度划分,C所支持的两种多态性分别是U 【7】 /U时的多态性和运行时的多态性。(分数:2.00)填空项 1:_43.将一个函数声明为一个类的友元函数必须使用关键字U 【8】 /U。(分数:2.00)填空项 1:_44.请按下面注释的提示,将类 B的构造函数定义补充完整。 C1assA int a; public: A(int aaO)aaa; ; cl
9、ass B:public A int b; A c; public: /用 aa初始化基类 A,用 aa1 初始化类对象成员 c B(int aa:U 【9】 /Ubaa2 ;(分数:2.00)填空项 1:_45.下列程序的输出结果是U 【10】 /U。 #inCludeiostream using namespace std; int main() int i5; int r7; coutiendl; return0; (分数:2.00)填空项 1:_46.下列程序的输出结果是U 【11】 /U。 #inCludeiostream using namespace std; class Tes
10、t public: Test() cnt; Test()cnt; static int Count() return cnt; private: static int cnt; ; int Test:cnt0; int main() coutTest:Count()”; Test t1,t2; Test*pT3new Test; Test*pT4new Test; coutTest:Count(); delete pT4; delete pT3; coutTest:Count()endl; return 0; (分数:2.00)填空项 1:_47.下面是用来计算 n的阶乘的递归函数,请将该函数
11、的定义补充完整。(注:阶乘的定义是 n!n*(n1)*.*2*1) unsigned fact (unsigned n) if(n1) retum 1; returnU 【12】 /U; (分数:2.00)填空项 1:_48.下列程序的输出结果是U 【13】 /U #includeiostream using namespace std; templatetypenameT Tfun(Ta,TB) return (aB) ?a:b; int main () coutfun(3,6),fun(3.14F,6.28F)end1; return 0; (分数:2.00)填空项 1:_49.与成员访问
12、表达式 pname 等价的表达式是U 【14】 /U。(分数:2.00)填空项 1:_50.下列程序的输出结果是U 【15】 /U。 #includeiostream using namespace std; class base public: int n; base (int x)nx; virtual void set (int m)nm;coutn; ; class deriveA:public base public: dericeA(int x):base(x) void set(int m)nm;coutn; ; Class deriveB:public base public:
13、 deriveB(int x):base(x) void set(int m)nm;coutn; ; int main() deriveA d1(1); deriveBd2(3); base*pbase; pbase_yyOff void Print() const cout(_x,_y)endl; private: int_x_y; ; 下列语句中会发生编译错误的是(分数:2.00)A.Pointpt;pt;Print();B.const Point pt;pPrint();C.Pointpt;pMove(1,2);D.const Point pt;pMove(1,2); 解析:解析 本题考
14、核常对象、常数据成员与常成员函数。如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数,不能调用其他的成员函数,D 选项中对象 pt 为常对象,而成员函数Move()不是常成员函数,所以这样调用会发生编译错误。34.有以下类定义 class MyClass private: int id; char gender; char*phone; public: MyClass():id(0),gender(#),phone(NULL) MyClass(int no,char ge=#,char*ph=NULL) idno;gender=ge;phone=ph; ; 下列类对象定义语句中错
15、误的是(分数:2.00)A.MyClass myObj;B.MyClass myObj(11,“13301111155“); C.MyClass myObj(12,m);D.MyClass myObj(12);解析:解析 本题考核构造函数的应用。对象建立用初始化列表对数据成员进行时,列表中的参数类型要与构造函数中形参类型一致。B 选项中第二个参数为“13301111155“是字符串,而构造函数中第二个形参为 char型,两者不一致造成错误。35.有以下程序 #includeiostream using namespace std; class Complex public: Complex(d
16、ouble r=O,double i0):re(r),im(i) double real() const return re; double imag()const return im; Complex operator (Complex C) const return Complex (rec.re,imc.im); private: double re,im; ; int main() Complex a=Complex(1,1)Complex (5); coutareal()a.imag()iendl; retum 0; 程序执行后的输出结果是(分数:2.00)A.66iB.61i C.
17、16iD.11i解析:解析 本题考核类与对象、运算符重载。运算符“”在类 Complex中作为成员函数重载,实现两个对象的数据成员的相加。所以 main函数中语句“Complex aComplex(1,1)Complex(5);”的作用相当于“Complex a(15,1);”即对象 a的数据成员 re的值为 6,imag 的值为 1,所以输出为61i。二、B填空题/B(总题数:15,分数:30.00)36.算法的复杂度主要包括U 【1】 /U复杂度和空间复杂度。(分数:2.00)填空项 1:_ (正确答案:时间)解析:解析 算法的复杂度主要指时间复杂度和空间复杂度。所谓算法的时间复杂度,是指
18、执行算法所需要的计算工作量;算法的空间复杂度,一般是指执行这个算法所需要的内存空间。37.数据的逻辑结构在计算机存储空间中的存放形式称为数据的U 【2】 /U(分数:2.00)填空项 1:_ (正确答案:存储结构(或物理结构、或物理存储结构))解析:解析 时间数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构。38.若按功能划分,软件测试的方法通常分为白盒测试方法和U 【3】 /U测试方法。(分数:2.00)填空项 1:_ (正确答案:黑盒(或黑箱))解析:解析 软件测试的方法分为白箱测试方法和黑箱测试方法。白箱测试是根据对程序内部逻辑结构的分析来选取测试用例,白箱测试用例的设计准则
19、有:语句覆盖、分支覆盖、条件覆盖和组合条件覆盖;黑箱测试方法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例。常用的黑箱测试有等价分类法、边值分析法、因果图法和错误推测法。39.如果一个工人可管理多个设备,而一个设备只被一个工人管理,则实体“工人”与实体“设备”之间存在U 【4】 /U关系。(分数:2.00)填空项 1:_ (正确答案:一对多(或 1对多、或 1:M、或 1:N,其中 M、N 大小写均可))解析:解析 实体之间的联系可以归结为三类:一对一的联系,一对多的联系,多对多的联系。设有两个实体集 E1和 E2,如果 E2中的每一个实体与 E1中的任意个实体(包括零个)
20、有联系,而 E1中的每一个实体最多与E2中的一个实体有联系,则称这样的联系为“从 E2到 E1的一对多的联系”,通常表示为“1:n 的联系”。由此可见,工人和设备之间是一对多关系。40.关系数据库管理系统能实现的专门关系运算包括选择、连接和U 【5】 /U。(分数:2.00)填空项 1:_ (正确答案:投影)解析:解析 关系数据库管理系统的专门关系运算包括选择、连接和投影。选择运算是在指定的关系中选取所有满足给定条件的元组,构成一个新的关系,而这个新的关系是原关系的一个子集:投影运算是在给定关系的某些域上进行的运算。通过投影运算可以从一个关系中选择出所需要的属性成分,并且按要求排列成一个新的关
21、系,而新关系的各个属性值来自原关系中相应的属性值:连接运算是对两个关系进行的运算,其意义是从两个关系的笛卡尔积中选出满足给定属性间一定条件的那些元组。41.设有定义语句:int a=12;,则表达式 a*23 的运算结果是U 【6】 /U。(分数:2.00)填空项 1:_ (正确答案:60)解析:解析 本题考核 C运算符运算优先级和结合性。表达式“a*23;”先计算“23”得到5,然后计算 a*5,得到 a的值为 60。42.从实现的角度划分,C所支持的两种多态性分别是U 【7】 /U时的多态性和运行时的多态性。(分数:2.00)填空项 1:_ (正确答案:编译)解析:解析 本题考核 C的多态
22、性。一个面向对象的系统常常要求一组具有相同基本语义的方法能在同一接口下为不同的对象服务,这就是所谓多态性。在 C语言中,多态性可分为两类:编译时的多态性和运行时的多态性。编译时的多态性是通过函数重载和模板体现。其实现机制称为静态联编(也译为静态绑定),即在编译阶段决定执行哪个同名的被调用函数。运行时的多态性是通过体现的,其实现机制称为动态联编(也译为动态绑定),即在编译阶段不能决定执行哪个同名的被调用函数,只在执行阶段才能依据要处理的对象类型来决定执行哪个类的成员函数。43.将一个函数声明为一个类的友元函数必须使用关键字U 【8】 /U。(分数:2.00)填空项 1:_ (正确答案:frien
23、d)解析:解析 本题考核友元函数。定义友元函数的方式是在类定义中用关键字 friend说明该函数,其格式为:friend类型友元函数名(参数表);44.请按下面注释的提示,将类 B的构造函数定义补充完整。 C1assA int a; public: A(int aaO)aaa; ; class B:public A int b; A c; public: /用 aa初始化基类 A,用 aa1 初始化类对象成员 c B(int aa:U 【9】 /Ubaa2 ;(分数:2.00)填空项 1:_ (正确答案:A(aA),c(aa+1)或 c(aa+1),A(aA))解析:解析 本题考核派生类构造函
24、数的定义。题中要求用明初始化基类 A,用 aa+1初始化类对象成员c,用的初始化列表的形式,即 A(aA),c(aa+1)或 c(aa+1),A(aA) 。45.下列程序的输出结果是U 【10】 /U。 #inCludeiostream using namespace std; int main() int i5; int r7; coutiendl; return0; (分数:2.00)填空项 1:_ (正确答案:7)解析:解析 本题考核引用的概念和使用。C的引用是一种赋值、发送和返回复杂数据结构的方法,应用这种方法,系统不需要负担额外的开销,节省内存空间。在程序中对引用的存取都是对它所引用
25、的变量的存取。题中程序对 i引用 r赋值为 7,则说明 i的值也被赋为 7。46.下列程序的输出结果是U 【11】 /U。 #inCludeiostream using namespace std; class Test public: Test() cnt; Test()cnt; static int Count() return cnt; private: static int cnt; ; int Test:cnt0; int main() coutTest:Count()”; Test t1,t2; Test*pT3new Test; Test*pT4new Test; coutTes
26、t:Count(); delete pT4; delete pT3; coutTest:Count()endl; return 0; (分数:2.00)填空项 1:_ (正确答案:042)解析:解析 本题考核静态数据成员与静态成员函数的定义与使用方式。C中,提出静态成员的目的是为了解决数据共享的问题。一个给定类的每个对象都有类中定义的所有数据的自己的拷贝,如果在类中将数据成员用 static说明为静态的,则这个类成员只有一个拷贝并被这个类的所有对象所共享。类 Test的静态成员 cnt,初始值为 0,所以执行语句“coutTest:Count();”后输出 0。然后程序创建了两个对象 t1和
27、t2,以及两个对象指针并调用 new来初始化指针,所以 cnt的值变成了 4(即此时输出为 4)。然后程序将对象指针 pT4、pT3 delete 了,此时将分别调用析构函数将 cnt的减 1,所以最后输出 cnt的值为 2。47.下面是用来计算 n的阶乘的递归函数,请将该函数的定义补充完整。(注:阶乘的定义是 n!n*(n1)*.*2*1) unsigned fact (unsigned n) if(n1) retum 1; returnU 【12】 /U; (分数:2.00)填空项 1:_ (正确答案:n*fact (n-1))解析:解析 本题考核递归函数。一般递归函数由递归出口和递归体两
28、部分组成。递归出口给出了递归终止的条件;递归体给出了递归的方式。题中程序给出了递归出口,但是没有给出递归体,由阶乘的定义可知其递归体应该为 n*fact (n-1)。48.下列程序的输出结果是U 【13】 /U #includeiostream using namespace std; templatetypenameT Tfun(Ta,TB) return (aB) ?a:b; int main () coutfun(3,6),fun(3.14F,6.28F)end1; return 0; (分数:2.00)填空项 1:_ (正确答案:3,3.14)解析:解析 本题考核模板函数的使用。C编译
29、系统将根据实参表中的实参的类型来确定函数的形参列表中的类型。函数 fun的功能是返回两者中较小的值,函数调用 fun(3,6)返回的值为 3,函数调用fun(3.14F,6.28F)返回的值为 3.14。49.与成员访问表达式 pname 等价的表达式是U 【14】 /U。(分数:2.00)填空项 1:_ (正确答案:(*p)name)解析:解析 本题考核对象指针的定义与使用。一个基类型为类类型的指针称为对象指针。对于指向对象的指针,下面两种表示方式是等价的: 对象指针名成员名; (*对象指针名)成员名;50.下列程序的输出结果是U 【15】 /U。 #includeiostream usin
30、g namespace std; class base public: int n; base (int x)nx; virtual void set (int m)nm;coutn; ; class deriveA:public base public: dericeA(int x):base(x) void set(int m)nm;coutn; ; Class deriveB:public base public: deriveB(int x):base(x) void set(int m)nm;coutn; ; int main() deriveA d1(1); deriveBd2(3
31、); base*pbase; pbase&d1; pbaseset(1); pbase&d2; pbaseset(2); return 0; (分数:2.00)填空项 1:_ (正确答案:25)解析:解析 本题考核虚函数的定义和调用。在 C中,一个基类指针(或引用)可以用来指向它的派生类对象,而且通过这样的指针(或引用)调用虚函数时,被调用的是该指针(或引用)实际所指向的对象类的那个重定义版本。题中基类成员函数 set()被定义成虚函数,而且其派生类 deriveA和 deriveB都有函数 set()的重定义版本,所以通过指针 pbase的两次调用分别调用的是派生类 deriveA和 deriveB中定义的版本,即输出 25。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1