1、国家二级( C+)笔试模拟试卷 243及答案与解析 1 对关系 S和 R进行集合运算,结果中既包含 S中的所有元组也包含 R中的所有元组,这样的集合运算称为 ( )。 ( A)并运算 ( B)交运算 ( C)差运算 ( D)积运算 2 3 4 软件工程的出现是由于 ( )。 ( A)程序设计方法学的影响 ( B)软件产业化的需要 ( C)软件危机的出现 ( D)计算机的发展 5 有如下类声明: class XA int x; public: XA(int U)x=n; ; class XB: public XA int y; public: XB(int a, int B) ; ; 在构造函数
2、 XB的下列定义中,正确的是 ( A) XB:XB(int a, int B) :x(A) , y(B) ( B) XB:xB(int a, int B) : XA(A) , y(B) ( C) XB:XB(int a, int B) : x(A) , XB(B) ( D) XB:XB(int a, int B) : XA(A) , XB(B) 6 程序设计语言的工程特性之一为 ( )。 ( A)软件的可重用性 ( B)数据结构的描述性 ( C)抽象类型的描述性 ( D)数据库的易操作性 7 将 E-R图转换到关系模式时,实体与联系都可以表示成 ( )。 ( A)属性 ( B)关系 ( C)键
3、 ( D)域 8 程序设计语言的基本成分是数据成分、运算成分、控制成分和 ( A)对象成分 ( B)变量成分 ( C)语句成分 ( D)传输成分 9 在结构化方法中, 软件功能分解属于下列软件开发中的阶段是 ( )。 ( A)详细设计 ( B)需求分析 ( C)总体设计 ( D)编程调试 10 在结构化设计方法中,生成的结构图 (SC)中,带有箭头的连线表示 ( A)模块之间的调用关系 ( B)程序的组成成分 ( C)控制程序的执行顺序 ( D)数据的流向 11 若有以下程序: #include iostream using namespaces std; class A public: A(
4、) A(int i) xl=i; void dispa() cout “x1=“ x1 “, “; private: int x1; ; class B: public A public: B() B(int i): A(i+10) x2=i; void dispb() dispa(); cout “x2=“ x2 endl; private: int x2; ; int main) B b(2); b dispb(): return 0; 程序运行后的输出结果是 ( A) x1=10,x2=2 ( B) x1=12,x2=10 ( C) x1=12,x2=2 ( D) x1=2,x2=2 1
5、2 下列关于 getline()函数的描述中,不正确的是 ( )。 ( A) getline()函数是用来从键盘上读取字符串的 ( B) getline()函数读取字符串长度是受限制的 ( C) getline()函数读取字符串时,遇到终止符时就停止 ( D) getline()函数中所使用的终止符只能是换行符 13 以下程序的输出结果是 ( )。 main() int a=4, b=5, c=0, d; d !a class Demo public: Demo() cout “default constmctorn“; Demo(const Demo ; Demo userCode(Demo
6、 b)Demo c(b);return c; int ( A) 1和 1 ( B) 1和 2 ( C) 2和 3 ( D) 2和 4 15 下面程序输出的结果是 ( )。 #include iostream using namespace std; int fuc (char *x); int main() cout fuc(“hello“) endl; return 0; int fuc(char *x) char *y=x; while(*y! =0)y+; return(y-x); ( A) 5 ( B) 6 ( C) 0 ( D)语法错误,不能输出结果 16 下列关于派生类的构造函数的
7、叙述中,正确的是 ( )。 ( A)派生类通过成员初设列表的方法调用基类的构造函数,实现对基类的初始化 ( B)派生类构造函数的调用顺序先基类后子对象构造函数 ( C)派生类构造函数的调用顺序先子对象构造函数后基类, ( D)派生类构造函 数是不能继承基类的 17 模板函数的真正代码是在 ( )时候产生。 ( A)源程序中声明函数时 ( B)源程序中定义函数时 ( C)源程序中调用函数时 ( D)运行执行函数时 18 下列关于指针的运算中, ( )是非法的。 ( A)两个指针在一定条件下,可以进行相等或不等的比较运算 ( B)可以将一个空指针赋值给某个指针 ( C)一个指针可以加上两个整数之差
8、 ( D)两个指针在一定条件下可以相加 19 有如下程序: #include iostream using namespace std; int main() cout.fill(*); cout.width(5); cout scientific 315926535endl; retrun 0; 程序运行后,输出的结果是 ( )。 ( A) 3.14E+02 ( B) 3.14E+02 ( C) *3.14e+002 ( D) 314.16 20 以下程序的输出结果是 ( )。 #include iostream using namespace std; int main() cout.fi
9、ll(*); cout.width(5); cout hex 100endl; return (); ( A) *100 ( B) *64 ( C) 100* ( D) 64* 21 以下程序输出结果是 _。 #include iostream.h void n(int i); void f2(int i); char st=”Howdoyoudo!”; void fl(int i) cout sti; if(i3) i+=2: f2(i): void f2(int i) cout sti; if(i 3) i+=2; f1(i); void main() int i=0; f1(i); (
10、A) How ( B) do ( C) Hwo ( D) Hwoy 22 在 C+中用来实现运行时多态性的是 _ 。 ( A)重载函数 ( B)析构函数 ( C)构造函数 ( D)虚函数 23 以下不正确的定义浯句是 ( A) double x5=2.0, 4.0, 6.0, 8.0, 10.0; ( B) int y5=0, 1, 3, 5, 7, 9; ( C) char c1=1, 2, 3, 4, 5; ( D) char c2=x10, xa, x8; 24 类 A是类 B的友元,类 B是类 C的友元,则下列说法正确的是 ( A)类 B是类 A的友元 ( B)类 C是类 A的友元 (
11、 C)类 A是类 C的友元 ( D)以上都不对 25 下面关于类概念的描述中 ( )是错误的。 ( A)类是抽象数据类型的实现 ( B)类是具有共同行为的若干对象的统一描述体 ( C)类是创建对象的样板 ( D)类就是 C语言中的结构体类型 26 在计算机中,算法是指 ( )。 ( A)加工方法 ( B)解题方案的准确而完整的描述 ( C)排序方法 ( D)查询方法 27 C+中运算符优先级由高到低排列正确的是 ( A) :+ + | ( B) *| , ( C) sizeof %+: ( D) , else return b; return0; void main( ) cout min (
12、1, min (2, 3) end1; ( A) 0 ( B) 1 ( C) 2 ( D) 3 32 如果 a 1, b 2, c=3, d 4,则表达式 a b? a: c d? c: d的值为 ( A) 1 ( B) 2 ( C) 3 ( D) 4 33 对于语句 cout endl x;中的各个组成部分,下列叙述中错误的是 ( A) “cout”是一个输出流对象 ( B) “endl“的作用是输出回车换行 ( C) “x”是一个变量 ( D) “ ”称作提取运算符 34 有如下类声明: class Foo int bar; ; 则 Foo类的成员bar是 ( A)公有数据成员 ( B)公
13、有成员函数 ( C)私有数据成员 ( D)私有成员函数 35 要建立文件流并打开当前目录下的文件 file dat用于输入,下列语句中错误的是 ( A) ifstream fin=ifstream open(”file dat”); ( B) ifstream*fin=new ifstream(”file dat”); ( C) ifstream fin;fin open(”file dat”); ( D) ifstream*fin=new ifstream(); fin-open(”file dat”); 36 关系操作的特点是 _操作。 37 如下程序声明了一个使用两个通用数据类型的模板类
14、 dataClass,其中构造函数用于初始化两个数据成员,成员函数 show用于输出两个数据成员的数值。 #include iostream using namespaee std; _ T1 i: T2 j; public: dataClass(T1 a, T2B) i=a; j=b; void show( )tout i “, “ j n; ; int main( ) dataClass int, double obl(10, 0.23); dataClass char, char* ob2(X, “my data“); obl show( ); ob2 show( ); return 0
15、; 请将程序补充完整,使程序在运行时输出: 10, 0.23 X, my data 38 数据库系统的核心是 _。 39 关系数据模型由关系数据结构、关系操作集合和【 】三大要素组成。 40 设一棵完全二叉树共有 839个结点,则在该二叉树中有【 】个叶子结点。 41 假定 A为一个类,则语句 A(A int main() void test(int,char,double_); test(1,A,10.1); test(2,B); return 0; void test(int a,char b,double c) cout a , b , c end1; 43 执行这个程序的输出结果是 (
16、 ); #include iostream using namespace std; class TestClass1 public: void fun1()cout “TestClass1n“; virtual void fun2()cout “TestClass1n“; ; class TestClass2:public TestClass1 public: void fun1()cout “TestClass2n“; void fun2()cout “TestClass2n“; ; void f(TestClass1b.fun2(); int main() TestClass2 obj;
17、 f(obj); return 0; 44 多态性分为两类:编译时的多态性和 _。 45 有如下语句序列 int arr22=9, 8), 7, 6; int*p=arr0+1; cout *p end1; 运行时的输出结 果是 _。 46 程序段的输出结果是【 】。 int a=12, b=12; cout - -a “ “ +b; 47 假定动态分配一个类型为 Worker的具有 n个元素的数组,并由 P指向这个动态数组,如果要释放这个数组,则使用的语句为【 】。 48 下列程序的输出结果为 2,请将程序补充完整。 #include iostream using namespace std
18、; class Base public: 【 】 void fun() cout 1; ; class Derived: public Base public: void fun() cout 2; ; int main() Base *p=new Derived; p- fun(); delete p; return 0; 49 有如下定义语句: MyClass*p10; 当类对象数组指针 p离开它的作用域时,系统自动调用析构函数【 】次。 50 下列程序的运行结果为【 】。 #include iostream, h void main( ) int i; for(i=1; i 6;i+)i
19、f(i=3) break: com “i=“ i end1; 国家二级( C+)笔试模拟试卷 243答案与解析 1 【正确答案】 A 【试题解析】 关系 的并运算是指由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元组。 2 【正确答案】 B 【试题解析】 自然连接是一种特殊的等值连接,它满足下面的条件: 两关系间有公共域; 通过公共域的等值进行连接。 3 【正确答案】 B 【试题解析】 在引用函数模板时,如果没在函数名和参数之间加上类型参数,就默认表示参数类型严格按照模板定义的类型匹配;如果在函数名和参数之间加上了类型参数,则对实参自动进行类型转换。 4 【正确答案】 C
20、 【试题解析】 软件工 程的出现源自于软件危机。为了消除软件危机,通过认真研究解决软件危机的方法,认识到软件工程是使计算机软件走向工程科学的途径,逐步形成了软件工程的概念。 5 【正确答案】 B 【试题解析】 在派生类的构造函数声明中,一般格式为: 派生类名 (参数总表 ):基类名 (参数总表 ),对象成员名 (参数表 ) XB 继承 XA,基类 XA 的构造函数带有参数,所以必须给 XA 的构造函数的形参赋值,同时也可以为数据成员 Y赋值。 6 【正确答案】 A 7 【正确答案】 B 8 【正确答案】 D 【 试题解析】 程序设计语言是用于书写计算机程序的语言,其基本成分有以下 4种,数据成
21、分:用来描述程序中的数据。运算成分:描述程序中所需的运算。控制成分:用来构造程序的逻辑控制结构。传输成分:定义数据传输成分,如输入输出语言。 9 【正确答案】 C 【试题解析】 软件系统结构的总体设计包括:基于功能层次结构建立系统、按功能划分成模块的层次结构、确定每个模块的功能、建立与已确定的软件需求的对应关系、确定模块间的调用关系和模块间的接口、评估模块划分的质量等方面。详细设计的任务是:在使用程序设计语言编制程序以 前,对所采用算法的逻辑关系进行分析,设计出全部必要的过程细节,并给予清晰的表达。需求分析是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。需求分析的任务是发现需求
22、、求精、建模和定义需求,通常包括:功能需求、性能需求、环境需求、可靠性需求、安全保密要求、用户界面需求、资源使用需求、成本消耗需求、开发进度需求等。编程调试的任务是诊断和改正程序中潜在的错误。综上所述。软件功能分解只能发生在总体设计阶段。 10 【正确答案】 A 【试题解析】 常用的软件结构设计工具是结构图 (SC-Structure Chart),也称程序结构图。其中,矩形内用于注明模块的功能和名字;箭头表示模块间的调用关系,带实心圆的箭头表示传递的是控制信息,带空心圆的箭头表示传递的是数据。注意:根据结构图设计思想,了解结构图构成的基本形式。 11 【正确答案】 C 【试题解析】 本题考核
23、派生类的构造函数。在 C+中,构造函数不能被继承,因此,派生类的构造函数必须通过调用基类的构造函数来初始化基类子对象。所以,在定义派生类的构造函数时,除了对自己的数据成员进行初始化外,还必须负责调用基类构造函数使基类的数据成员得以 初始化。如果派生类中还有子对象,还应包含对子对象初始化的构造函数。 12 【正确答案】 D 【试题解析】 此题考查的是无格式输入输出流对象中的 getline()函数。该函数的功能是允许从输入流中读取多个字符,并且允许指定输入终止字符 (默认是换行符 ),在读取完成后,从读取的内容中删除该终止字符。 13 【正确答案】 A 【试题解析】 本题考查逻辑运算符 !逻辑
24、“非 ”, 第二次调用少了一个实参,却要求输出 2,B,3.5,由此分析,应将 test()函数的第三个参数声明为默认参数。且默认为 3.5,才能达到要求的输出结果。故应填入 =3.5或者 c=3.5。 43 【正确答案】 TestClass1 TcstClass2 【试题解析】 主函数中首先定义 TestClass2 对象 obj,然后执行 “f(obj);”。 “void f(TestClass1b.fun2();”语句中 fun 中参数为 TestClass1 类型的对象b,其中调用 fun1()和 fun2()。基类 TestClass1 中的 fun2()为虚函数,所以派生类中的 f
25、un2也是虚函数,所以输出为调用 TestClass1中的 fun1, TestClass2 中的fun2。即结果为 TestClass1 和 TestClass2。 44 【正确答案】 运行时的多态性 【试题解析】 多态性是指一个接口,多种方法。它分为编译时多态性和运行时的多态性。 45 【正确答案】 8 46 【正确答案】 11 13 47 【正确答案】 deletep; 【试题解析】 语句为 deletep;。 48 【正确答案】 virtual 【试题解析】 利用多态性,所以应该加修饰词 virtual。 49 【正确答案】 0 【试题解析】 类对象数组指针 p本身不定义类对象,而是定义了数组指针 p 可以指向一个 MyClass 的对象。 50 【正确答案】 i 3 【试题解析】 本题考察考生的 for语句和 if 语句综合使用能力。本题的情况适用于希望在满足指定值时停止循环的情况。