1、国家二级( C+)笔试模拟试卷 258及答案与解析 1 下述关于数据库系统的叙述中正确的是 ( A)数据库系统减少了数据冗余 ( B)数据库系统避免了一切冗余 ( C)数据库系统中数据的一致性是指数据类型一致 ( D)数据库系统比文件系统能管理更多的数据 2 在下列关系运算中,可能改变关系中属性个数的是 ( A)并 ( B)差 ( C)投影 ( D)交 3 4 5 在数据库设计中,将 E-R图转换为关系模式的过程属于 ( )。 ( A)需求分析阶段 ( B)逻辑设计阶段 ( C)概 念设计阶段 ( D)物理设计阶段 6 下列语句中,错误的是 ( A) const int buffer=256;
2、 ( B) const int temp; ( C) const double*point; ( D) const double*rt=new double(5.5); 7 若磁盘上已存在某个文本文件,其全路径文件名为 d: ncretest.txt,下列语句中不能打开该文件的是 ( A) ifstream file(“d:ncretest.txt“); ( B) ifstream file(“d: ncretest.txt“); ( C) ifstream file; file open(“d: ncretest.txt“); ( D) ifstream*pFile=new ifstream
3、(“d: ncretest.txt“); 8 9 关系模型允许定义 3类数据约束,下列不属于数据约束的是 ( A)实体完整性约束 ( B)参照完整性约束 ( C)域完整性约束 ( D)用户自定义的完整性约束 10 软件工程的理论和技术性研究的内容主要包括软件开发技术和 ( A)消除 软件危机 ( B)软件工程管理 ( C)程序设计自动化 ( D)实现软件可重用 11 有以下程序: #include iostream using namespace std; int main () int x=15; while (x 10 if (x/3) x+; break; cout x endl; re
4、turn 0; 执行后的输出结果是 ( A) 15 ( B) 16 ( C) 17 ( D) 18 12 下列数组的定义中,会产生错误的是 ( A) int a=0,1,2,3,4,5,6); ( B) int a10=0,1,2,3,4,5,6; ( C) char a5=“hello“; ( D) char a5=h,e,r,l,o; 13 下列说法正确的是 ( )。 ( A)内联函数在运行 时是将该函数的目标代码插入每个调用该函数的地方 ( B)内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方 ( C)类的内联函数必须在类体内定义 ( D)类的内联函数必须在类体外通过加关键字
5、 inline定义 14 下列程序的输出结果为 ( )。 #include iostream.h) class TestClass public: TestClass()val+; static, int val; ; int TestClass: : val0; void main() TestClass cs1; cout csl.val “; TestClass cs2; TestClass cs3, cs4; co ( A) 03 ( B) 13 ( C) 14 ( D) 24 15 ( )既可重载为一元运算符,又可重载为二元运算符。 ( A) “*” ( B) “=” ( C) “=
6、”和 “*” ( D) “*”和 “*+” 16 软件开发离不开系统环境 资源的支持,其中必要的测试数据属于 ( A)硬件资源 ( B)通信资源 ( C)支持软件 ( D)辅助资源 17 以下程序的输出结果是 ( )。 #include iostream.h void main() int a=0,i; for(i=1 ;i 5;i+) switch(i) case 0: case 3: a+ =2; case 1: case 2: a+ =3; default: a+ =5; cout a end1; return; ( A) 31 ( B) 13 ( C) 10 ( D) 20 18 关于
7、语句 #include iostream using namespace std;void main()cout100.8989663 ;com fixed 100.8989663 ;cout scientific100.8989663 ;的输出结果为 ( ) ( A) 100.899 100.898966 1.008990e+002 ( B) 100.8989663 100.898966 1.008990e+002 ( C) 100.899 100.898966 1.008989e+002 ( D) 100.899 100.8989663 1.008989e+002 19 下述静态数据成员的
8、特性中, ( )是错误的。 ( A)说明静态数据成员时前边要加修饰符 static ( B)静态数据成员要在类体外进行初始化 ( C)引用静态数据成员时,要在静态数据成员名前加类名和作用域运算符 ( D)静态数据成员不是所有对象所共用 的 20 下列程序用来判断数组中特定元素的位置所在,则输出结果为 ( )。 #include conio.h #include iostream.h int fun(int*s,int t,int*k) int i; *k=0; for(i=0;i t;i+) if (s*k si)*k=i; return s*k; void main() int a10=(8
9、76,675,896,101,301,401,980,431,451,777);int k; fun(a,10, ( A) 7,431 ( B) 6 ( C) 980 ( D) 6,980 21 在下面关于函数的描述中错误的是 _。 ( A)在一个源文件中,如果函数定义在先,调用在后,则不必声明该函数 ( B)如果一个函数在一个源文件里定义,而调用在另一个源文件中,则必须在调用之前声明该函数 ( C)函数的声明应使用函数原型 ( D)在一个源文件中,如果自定义函数调用在先,定义在后,则不必声 明该函数 22 以下不正确的是 _。 ( A)语句 for(i=0:; i+)表示无限循环 ( B)
10、for(; ;)表示无限循环 ( C) for()也表示无限循环 ( D) while(1)表示无限循环 23 在数据流图 (DFD) 中,带有名字的箭头表示 _ 。 ( A)控制程序的执行顺序 ( B)模块之间的调用关系 ( C)数据的流向 ( D)程序的组成成分 24 在下面的函数声明中,存在语法错误的是 _ 。 ( A) void BC (int a,int) ( B) void BD (int, int) ( C) void BE (int, int =5) ( D) void BF (int x; int y) 25 已知下列语句中的 x和 y都是 int型变量,其中错误的语句是 _
11、 . ( A) x=y+; ( B) x=+y; ( C) (x+ y)+; ( D) +x=y; 26 下面不是派生类对基类的继承方式的是 ( )。 ( A) private ( B) public ( C) static ( D) protected 27 下面关于 C+语言变量的叙述错误 的是 ( A) C+语言中变量分为 auto, static, extern和 register四种存储类型 ( B)自动变量和外部变量的作用域为整个程序 ( C)内部静态变量的作用域是定义它的函数 ( D)外部静态变量的作用域是定义它的文件 28 可以用 p a的形式访问派生类对象 p的基类成员 a,
12、其中 a是 ( A)私有继承的公有成员 ( B)公有继承的私有成员 ( C)公有继承的保护成员 ( D)公有继承的公有成员 29 重载输入流运算符必须使用的原型为 ( A) ostream static int st; public, Sample() Sample(int m) n=m; st=m+10; void Change(int k) st=st+k; void AddValue(int m) Sample s, s. n=n+m; *this=s; void disp( ) cout “n=“ n “;st=“ st end1; ; int Sample: :st=0 void m
13、ain() Sample s1(10),s2(10) s1.disp() s1.AddValue(5), s2.Change(100); s1.disp(); s2.disp() 48 对虚函数的调用有两种方式:【 】和【 】。 49 C+中的数据类型大体上可以分成三类:它们是 _、 _和 _。 50 若有定义语句: int* a, b;,则变量 b的数据类型是【 】。 国家二级( C+)笔试模拟试卷 258答案与解析 1 【正确答案】 A 【试题解析】 数据库是一个通用化的、综合性的数据集合,它可以为各种用户所共享,具有最小的冗余度和较高的数据与程序的独立性,而且能并发地为多个应用服务,同时
14、具有安全性和完整性。即数据库系统减少了数据冗余,但不能避免一切冗余。所以选项 A正确,选项 B 错误。在数据库管理阶段中,数据是结构化的,面向系统,数据冗余度小,从而节省了数据的存储空间,也减少了对数据的存取时间,提高了访问效率,避免了数据的不一致性。数据的不一致性,是指对数据的存 取方式,选项 C错误。数据库系统比文件系统能管理更多的数据,并非是数据库系统的特点,选项 D错误。本题正确答案是 A。 2 【正确答案】 C 【试题解析】 投影运算是在给定关系的某些域上进行的运算。通过投影运算可以从一个关系中选择出所需要的属性成分,并且按要求排列成一个新的关系,而新关系的各个属性值来自原关系中相应
15、的属性值。因此,经过投影运算后,会取消某些列,即投影运算可能改变关系中属性的个数。 3 【正确答案】 D 4 【正确答案】 C 5 【正确答案】 B 6 【正确答案】 B 【试题解析】 用 const修饰常量就变为常变量,常变量一旦被建立,就不能被更改。在被定义时就应该给常变量赋初始值,而常指针则不同,被定义后,它指向的地址不能发生改变,但是指向的地址中的数据可以改变。 7 【正确答案】 A 【试题解析】 文件流的打开路径用 “”隔开,而不是 “”,但可以用 “/”隔开。 8 【正确答案】 D 【试题解析】 在软件开发的过程中,应该尽早的制定测试计划,其中在需求分析阶段制定系统测试计划,在概要
16、设计阶段制定集成测试计划,在详细设计阶段制定单元测试计划。 9 【正确答案】 C 【试题解析】 关系模型允许定义 3类数据约束,它们是实体完整性约束、参照完整性约束及用户自定义的完整性约束。其中前两种完整性约束由关系数据库系统支持,对于用户自定义的完整性约束,则由关系数据库系统提供完整性约束语言,用户利用该语言给出约束条件,运行时由系统自动检查。 10 【正确答案】 B 【试题解析】 软件工程的目标是,在给定的成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品。基于 这一目标,软件工程的理论和技术性研究的内容
17、主要包括:软件开发技术和软件工程管理。 11 【正确答案】 C 【试题解析】 本题考核选择语句与循环语句的嵌套。由程序可知,当 x=16时,满足 if 条件表达式,进入 if分支,执行 “x+;break;“,所以最后程序输出 x的值为 17。 12 【正确答案】 C 【试题解析】 本题考核数组的定义和初始化。下面逐项进行分析: A选项中,数组 a的定义和初始化符号数组的定义和初始化语法,故正确; B选项中,数组 a初始化的值虽然没有 10个,但对于少的部分,系统会自 动补 0,所以 B 选项中数组的定义也是正确; C选项中,数组 a的长度为 5,但字符串 “hello“的长度为5+1=6,字
18、符串结束符 0无法存储在数组中,所以是错误的; D选项中,数组 a的定义是正确的。 13 【正确答案】 B 【试题解析】 本题考查的是内联函数的定义,引入内联函数是为了解决程序中函数调用的效率问题,是以目标代码的增加为代价换取时间的节省;一般函数在运行时被调用,而调用的内联函数在编译时就被替代了,如果不加 inline关键字,则编译器会将在类说明部分定义的任何函数都被认定为内联函数。 14 【正确答案】 C 【试题解析】 由主函数 main 入手,定义 TestClass 类的对象 cs1,执行es1.va1,其中 va1为静态变量,根据 “tnt TestClass: val=0: ”初始化
19、,TestClass 中的 TestClass()val+; 构造函数执行后, val值为 1。主函数中接着定义对象 cs2, cs3, cs4。执行 “cout cs2.va1 end1”中的 val 值为 4,所以输出为 14。 15 【正确答案】 A 【试题解析】 此题考查的是运算符的有关概念。 “*”是 二元运算符,既可以用于间接访问也可用于两数乘;而 “=”和 “+”都是一元运算符。 16 【正确答案】 D 【试题解析】 软件测试过程中,辅助资源包括测试用例 (测试数据 )、测试计划、出错统计和最终分析报告等。 17 【正确答案】 A 18 【正确答案】 A 19 【正确答案】 B
20、20 【正确答案】 D 21 【正确答案】 D 22 【正确答案】 C 23 【正确答案】 C 【试题解析】 在数据流图 (DFD) 中,带有名字的箭头表示数据的流向。 24 【正确答案 】 D 【试题解析】 D选项用 “; ”(分号 )分隔参数,所以存在语法错误。 25 【正确答案】 C 【试题解析】 (x+y)+操作应该是, (x+y)=x+y,然后 (x+y)+,这是不正确的操作,所以此题应该选择 C。 26 【正确答案】 C 27 【正确答案】 B 【试题解析】 自动变量是函数体或分程序内定义的变量,它的作用域在所定义的函数体内或分程序体内。 28 【正确答案】 D 【试题解析】 只有
21、公有继承的公有成员才能被派生类的对象直接访问,其他的情况都会因为访问 权限问题产生错误。 29 【正确答案】 A 【试题解析】 本题考核运算符的重载。 C+中重载输入流运算符和输出流运算符只能作为非类成员函数重载,且必须使用如下原形: istream& operator (istream&,类名 &); ostream& operator (ostream&,类名 ); 30 【正确答案】 D 【试题解析】 类是创建对象的模板,它包含着所创建对象的状态描述和方法的定义。类的完整描述包含了外部接口和内部算法以及数据结构的形式。 31 【 正确答案】 A 32 【正确答案】 B 【试题解析】 C+
22、语言中全局变量是任何函数都可以改变的量,静态变量的有效范围在定义它的类中,而普通的变量的有效性只在使用它的函数中,在本题中 c为全局变量, b 为静态变量, a为普通变量, b 和 c在类 A的对象 a1 和 a2中都自加 1。所以 b, c为 2, a为 1。 33 【正确答案】 B 【试题解析】 本题考查的知识点是: for循环语句。 for语句的执行过程是: (1)计算第 1个表达式 (在本题中是 “int i=50”)的值: (2)计算第 2个表达式 (在本题中是 “i 1”)的值,如果此值不等于 0(结果为真 ),则转向步骤 (3);否则转向步骤 (5); (3)执行一遍循环体 (在
23、本题中是 “cout *; ”); (4)计算第 3个表达式 (在本题中是 “-i”)的值,然后转向步骤 (2); (5)结束 for循环。 由此可见,本题循环中 i从 50开始逐次递减,直到 i=1时退出,而此时没有机会执行到循环体,因此执行了 49遍循环体。而循环体中的语句是输出 1个字符“*”,所以最终输出了 49个字符 “*”,故本题应该选择 B。 34 【正确答案】 A 【试题解析】 本题考查的知识 点是:多态性。在 C+中,一个基类指针 (或引用 )可以用于指向它的派生类对象,而且通过这样的指针 (或引用 )调用虚函数时,被调用的是该指针 (或引用 )实际所指向的对象类的那个重定义
24、版本。基类中的实函数也可以在派生类中重定义,但重定义的函数仍然是实函数。在实函数的情况下,通过基类指针 (或引用 )所调用的只能是基类的那个函数版本,无法调用到派生类中的重定义函数。本题中的 show函数就是被重定义的实函数,所以通过基类指针pb所调用的是基类的版本,即输出 a和 b 的值 10,20。故应该选择 A。 35 【正确答案】 A 【试题解析】 coutA语句错误。输出字符 A的语句应为: coutA。 36 【正确答案】 过程 37 【正确答案】 log2n 38 【正确答案】 D 【试题解析】 根据 ASCII码的形式 F-2 得到的值便是 D。 39 【正确答案】 350 【
25、试题解析】 在任意一棵二叉树中,度为 0的结点 (即叶子结点 )总是比度为 2的结点多一个。在根据完全二叉树的定义,在一棵完全二叉树中,最多有 1个度为 1的结点。因此,设一棵完全二叉树具有 n个结点,若 n 为偶数,则在该二叉树中有 n/2个叶子结点以及 n/2-1个度为 2的结点,还有 1个是度为 1的结点;若 n为奇数,则在该二叉树中有 n/2+1个叶子结点以及 n/2个度为 2的结点,没有度为1的结点。本题中,完全二叉树共有 700个结点, 700是偶数,所以,在该二叉树中有 350个叶子结点以及 349个度为 2的结点,还有 1个是度为 1的结点。本题的正确答案为 350。 40 【
26、正确答案】 功能模型 【试题解析】 本题属于记忆题,考生应掌握。 41 【正确答案】 ios 【试题解析】 ios 是所有输入输出类的根基类。同时要知道, C+内置了四个输入输出流对象,可以不用实例化就可以直接使用,如 cin, cout, cerr, clog等。 42 【正确答案】 max=(a b)?a:b 43 【正确答案】 多态性 【试题解析】 面向对象系统包含了三个特征 -封装性、继承性和多态性,这三个特征可以很好的实现数据抽象,进行行为共享,完成进化求解和描述一个系统的确定行为。 44 【正确答案】 类模板 【试题解析】 本题考核类模板的基本概念。类模板就是一系列相关类的模型或样
27、板,这些类的成员组成相同,成员函数的源代码形式相同 ,所不同的只是所针对的类型 (成员的类型以及成员函数的参数和返回值的类型 )。对于类模板,数据类型本身成了它的参数,因而是一种参数化类型的类,是类的生成器。类模板中声明的类称为模板类。 45 【正确答案】 c3=c1+c2 【试题解析】 本题考核运算符的重载。这是运算符重载应用的两种形式。 46 【正确答案】 函数模板 【试题解析】 本题考核函数模板与重载函数的区别。重载函数通常是基于不同的数据类型完成类似的操作;而函数模板则是对不同的数据类型完成相同的操作,它比重载函数的要求更严格。 47 【正确答案】 修改本对象的值 【试题解析】 本题巧妙的使用 this 指针来完成类的不同实例进行的修改自身数据成员的操作。 48 【正确答案】 非多态调用,多态调用 【试题解析】 非多态调用和多态调用是 C+中调用虚函数的两种方式。 49 【正确答案】 基本类型 导出类型 用户定义类型 50 【正确答案】 int或整型 【试题解析】 本题考查的是指针的声明语句。在一个声明语句中,如果变量名称前面有 *号,则就会使该变量成为一个指针变量。而题目中的变量 b之前没有 *号,所以变量 b就是一般的 int型变量,而不是指针变量。故应该填 int或整型。