1、国家二级( C+)笔试模拟试卷 223及答案与解析 1 2 数据管理技术发展的三个阶段中, ( )没有专门的软件对数据进行管理。 人工管理阶段 文件系统阶段 数据库阶段 ( A)仅 ( B)仅 ( C) 和 ( D) 和 3 下面函数的作用是以双倍行距输出文件 : void test(ifstream while(_) _; if(c=n)outc.put(C) ; 下划线处缺失的代码是 ( )。 ( A) outf.put(C) 与 outc.get(C) ( B) outf.put(C) 与 outc.get(C) ( C) outf.get(C) 与 outc.put? ( D) out
2、f.get(C) 与 outc.put? 4 5 6 数据库系统的核心是 ( )。 ( A)数据模型 ( B)数据库管理系统 ( C)软件工具 ( D) 数据库 7 假设 AB为一个类, pa为指向该类动态对象数组 px的指针,该数组长度为 n,则执行 “delete pa; ”语句时,自动调用该析构函数的次数为 _ 。 ( A) 0 ( B) 1 ( C) n ( D) n+1 8 树是结点的集合,它的根结点数目是 ( A)有且只有 1 ( B) 1或多于 1 ( C) 0或 1 ( D)至少 2 9 下列叙述中正确的是 ( A)用 E-R图能够表示实体集之间一对一的联系、一对多的联系、多对
3、多的联系 ( B)用 E-R图只能表示实体集之间一对一的联系 ( C)用 E-R图只 能表示实体集之间一对多的联系 ( D)用 E-R图表示的概念数据模型只能转换为关系数据模型 10 下列关于类模板的描述中,错误的是 ( )。 ( A)类模板的成员函数都是模板函数 ( B)可以为类模板参数设置默认值 ( C)类模板描述了一组类 ( D)类模板中只允许有一个类型参数 11 请阅读以下程序 main( ) int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0:a+;break; case 1:b+;break; case 2: a+;b+;
4、break; cout “a=“ a “b=“ b endl; 上面程序的输出结果是 ( A) a=2,b=1 ( B) a=1,b=1 ( C) a=1,b=0 ( D) a=2,b=2 12 若有以下程序: #include iostream using namespace std; class A private: int a; public: A(int i) a=i; void disp() cout a“, ”; ; class B private: int b; public: B(int j b j; void disp() cout b ( A) 10, 10, 10 ( B
5、) 10, 12, 14 ( C) 8, 10, 12 ( D) 8, 12, 10 13 以下程序的输出结果是 #include iostream.h void reverse(int a , int n) int i,t; for(i 0;i n/2;i ) t ai ;ai an 1 i ;an 1 i t; void main( ) int b10 1,2,3,4,5,6,7,8,9,10;int i,s 0; reverse(b,8) ; for(i 6;i 10;i ) s bi ; cout S; ( A) 22 ( B) 10 ( C) 34 ( D) 30 14 表示在输出时
6、显示小数位,以及在文件输入时判断文件尾的函数分别是 ( A) showbase ( ) 和 eof ( ) ( B) showpoint ( ) 和 eof ( ) ( C) showpoint ( ) 和 bad ( ) ( D) showpoint ( ) 和 good ( ) 15 下列定义中 p指向的地址可更改,但 * p不能够更改的是 ( A) const int * p; ( B) int * const p; ( C) const int * const p; ( D) int * p; 16 执行如下程序将输出 ( ): #include using namespace std
7、; classBase public: Base()cout“BB”; fun(); void fun ()cout“Bfun”; ; class Derived: public Base public: Derived()cout“DD”; void fun ()cout“Dfun”; ; int main()Derived d; return 0; ( A) DD ( B) BBDfunDDDfun ( C) BBBfunDD ( D) DDBBBfun 17 下面的符号中可以用作 C+标识符的是 ( )。 ( A) 3test ( B) fcc-othcr ( C) else ( D)
8、radius 18 下列语句都是程序运行时的第 1条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是 ( )。 A) cout internal 12345; B) cout left 12345; C) cout right 12345; D) cout setw(6) 12345; 19 若有以下调用语句,则不正确的 fun 函数的首部是 ( )。 void main() int a50,n; fun(n, ( A) void fun(int m,int x) ( B) void fun(int s,int h) ( C) void fun(intp,int * s) ( D)
9、 void fun(int n,int a) 20 下列关于数组初始化的说法,正确的是 ( )。 ( A)对于 int a5;它的数组元素初值为 0 ( B) int a5=1,3,5,7,8,9;是可以的,这时数组 长度自动变为 6 ( C) static int a5;的数组元素初值为 0 ( D) int a5=1.3,5;是不合法的,因为数组长度为 5,而仅有 3个数据,不知赋给哪个元素 21 有如下类定义: class Pointint x_, y_;public:Point(): x_(0), y_(0) Point(int x, int y =0): x_(x), y_(y) 若
10、执行语句 Point a(2), b3, *c4;则 Point 类的构造函数被调用的次数是 ( )。 ( A) 2次 ( B) 3次 ( C) 4次 ( D) 5次 22 已知 p是一个指向类 Sample数据成员 m的指针, s是类 Sample 的一个对象。如果要给 m赋值为 5, ( )是正确的。 ( A) s.p=5 ( B) s- p=5 ( C) s.*p=5 ( D) *s.p=5 23 带有虚基类的多层派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样将对虚基类的子对象初始化 ( )。 ( A)与虚基类下面的派生类个数有关 ( B)多次 ( C)两次 ( D)一次
11、 24 下列各项中不符合函数 重载必须满足的条件的是 _。 ( A)必须有不同的参数个数 ( B)对应的参数类型必须不相同 ( C) A和 B必须同时满足 ( D) A和 B只要满足一个即可 25 下列变量名中, _ 是合法的。 ( A) CHINA ( B) byte-size ( C) double ( D) A+a 26 虚函数必须是类的 ( A)成员函数 ( B)友元函数 ( C)构造函数 ( D)析构函数 27 一个函数功能不太复杂但要求被频繁调用,应选用 ( A)内联函数 ( B)重载函数 ( C)递归函数 ( D)嵌套函数 28 下列关于常数据成员的描述中,错误的是 ( )。 (
12、 A)常数据成员必须进行初始化,并且不能更新 ( B)使用 const说明的数据成员称为常数据成员 ( C)可以在类体外面定义常数据成员 ( D)常数据成员的初始化只能通过构造函数的成员初始化列表进行 29 关于类型转换的说法中,错误的是 ( )。 ( A)如果 a为血型变量, b为 char型变量,则 a+b的值为血型 ( B)如果 a为 float型变量, b为 int型变量,则 a-b的值为 float型 ( C)如果 a为 double型 变量, b为 float型变量,则 a*b的值为 double型 ( D)如果 a为血型变量, b为血型变量,则 a (double)b的值为 in
13、t 型 30 有以下程序: #include iostream using namespace std; int main () int n; cin n; if (n+ 10) cout n end1; else cout n- end1; return 0; 若执行该程序时从键盘上输入 9,则输出结果是( )。 ( A) 11 ( B) 10 ( C) 9 ( D) 8 31 有以下函数: char fun(char*p) return p; ) 则该函数的返回值是 ( )。 ( A)无确切的值 ( B)形参 p中存放的地址值 ( C)一个临时存储单元的地址 ( D)形参 p自身的地址值
14、32 下面程序的运行结果为 #include iostream.h class A int num; public: A(int i)num=i; A(A x=x y=xy z=!(x!=y)(y=z), 则 x=false, y=false, z=【 】。 45 在 C+中,若需要在程序文件中进行标准输入输出操作,则必须在开始处加入预处理命令 #include iostream.h,若使用到数学库中的函数时,要在源程序的开始处加入预处理命令【 】。 46 内联函数是通过【 】来实现的,因此内联函数是真正的函数。 47 表达式 c3=c1 operator+(c2)或 c3=operator+
15、(c1,c2)还可以表示为【 】。 48 表达式 operator+(x,int)还可以表示为【 】。 49 内联函数是通过【 】来实现的,因此内联函数是真正的函数。 50 若将一个二元运算符重载为类的成员函数,其形参个数应该是【 】个。 国家二级( C+)笔试模拟试卷 223答案与解析 1 【正确答案】 A 2 【正确答案】 A 【试题解析】 数据管理技术发展的三个阶段中,只有人工管理阶段,没有操作系统,没有管理数据的软件,数据处理方式是批处理。在文件系统阶段,操作系统中已经有了专门数据管理软件,一般称为文件系统。在数据库系统阶段,出现了统一管理数据的专门软件系统,即数据库管理系统。 3 【
16、正确答案】 D 【试题解析】 ifstream是文件输入流类,只能用于输入,它没有提供任何用于输出的操作。 ofstream是文件输出流类,只能用于输出,它没有提供任何用于输入的操作。从文件中输入字符要用文件输入流类引用 outf,并调用 其输入字符的成员函数 get()。根据题目中的要求,可以看出当输入文件中读到换行符时,程序将在输出文件中两次输出换行符,即双倍行距。 outc.put(C) 为输出一个字符,因为“if(c=n)coutc.put(C) ; ”此句,当 c为间格字符 (行距字符 )时,再多输出一次outc.put(C) 。 4 【正确答案】 D 【试题解析】 c+语言中析构函
17、数为符号 “ ”加类名,且析构函数没有返回值和参数,故前不加 void关键字。所以正确的形式应该是 Myclass()。 5 【正确答案】 B 6 【正确答案】 B 7 【正确答案】 B 【试题解析】 由于调用的是 delete pa,而不是 deletepa,所以只析构了一次,调用该析构函数的次数为 1次。 8 【正确答案】 A 【试题解析】 树是一个或多个结点组成的有限集合,其中一个特定的结点称为根,其余结点分为若干个不相交的集合。每个集合同时又是一棵树。树有且只有 1个根结点。 9 【正确答案】 A 【试题解析】 用 E-R图可以简单明了地描述实体及其相互之间的联系,用 E-R图还可以方
18、便地描述多个实体集之间的联系和 一个实体集内部实体之间的联系。因此,选项 A中的说法是正确的,而选项 B与 C中的说法都是错误的。 为了建立用户所要求的数据库必须把概念结构 (用 E-R图表示的概念数据模型 )转换为某个具体的数据库管理系统所支持的数据模型,这就是逻辑结构设计所要完成的任务。 在已给定数据库管理系统的情况下,数据库的逻辑设计可以分两步来进行: 将概念模型转换成一般的数据模型; 将一般的数据模型转换为特定的数据库管理系统所支持的数据模型。 由此可知,用 E-R图表示的概念数据模型不仅能转换为关系数据模型,还可 以转换为其他数据模型,如网状模型和层次模型等。因此,选项 D中的说法也
19、是错误的。 10 【正确答案】 D 【试题解析】 类模板是一系列相关类的模板,类成员组成相同,成员函数的源代码形式相同,所不同的是所针对的类型。类模板的成员函数都是模板函数,在用类模板定义对象时,由于没有像函数实参表这样的额外信息渠道,因此无法按函数模板的方式省略模板实参。但可以为类模板的参数设置默认值。由此可知应选D。 11 【正确答案】 A 【试题解析】 本题考察 switch 语句的嵌套,以及 break 语句的使用规则 ,不再执行下面的 case语句,如果没有 break 语句,则会顺序执行随后语句。据此,读程序可知,内层 switch执行 case 0分支,故 a增 1,跳出内层 s
20、witch后,由于没有 break 语句;随后执行外层 switch 的 case 2分支, a又增 1, b增 1。故答案为A。 12 【正确答案】 D 【试题解析】 本题考查派生类构造函数的使用。派生类 C具有多重继承关系,所以在派生类 C的构造函数中应该包含基类 A和 B 的成员初始化列表。 13 【正确答案】 A 【试题解析】 在 main 函数中,调用 reverse函数将 b数组中的前 8个成员进行互置,执行完毕后, b数组中的成员为 8,7,6,5,4,3,2,1,9,10,在执行 for循环结构后,将 b6 ,b7 b9 的值相加,结果为 1 2 9 10 22。注意 :在计算
21、累加和时,应将累加变量赋值为零。 14 【正确答案】 B 【试题解析】 表示在输出时显示小数位,以及在文件输入时判断文件尾的函数分别是 showpoint( )和 eof ( )。 15 【正确答案】 A 【试题解析】 const int * p;是只能改变指 针地址, int * const p;是只能改变 * p的内容, const int * const p;是指针的地址和 * p的内容都不能改变, int * p;是两者都能改变。 16 【正确答案】 C 【试题解析】 C+中创建一个类的实例时,如果该类存在基类,将首先执行基类的构造函数,然后执行该类本身的构造函数。本题中首先执行类 B
22、ase的构造函数,所以将先输出 “BB”,然后调用基类成员函数 fun(),输出 “Bfun”,最后调用子类 Derived的构造函数输出 “DD”。 17 【正确答案】 D 【试题解析】 C+标识符是以字母、下划线开头的,由字母、数字及下划线组成的,不与关键字相同的字符串。选项 C中 else为关键字。 18 【正确答案】 D 19 【正确答案】 D 【试题解析】 &a9表示对变量 a9的引用,与它对应的形参必须是表示地址的变量,而 D的第 2个形参是一个普通变量。 20 【正确答案】 C 【试题解析】 数组一旦定义,其长度就不可变了;初始化数组的数据个数不要大于数组长度,否则会出现逻辑错;
23、初始化数组的数据个数若小于数组长度,则先赋给前边的元素, 后边的元素值自动初始化为 0;静态数组如果没有初始化自动初始化为 0。 21 【正确答案】 C 22 【正确答案】 C 23 【正确答案】 D 24 【正确答案】 A 25 【正确答案】 A 【试题解析】 B 中不该有 “-”字符, C为保留字, D中 “+”,字符不合法。 26 【正确答案】 A 【试题解析】 虚函数只能是类的成员函数,不能是构造函数或析构函数。注意:虚函数可以是另一个类的友元函数。 27 【正确答案】 A 【试题解析】 本题考查的是内联函数的使用,它的引入 是为了解决程序中函数调用的效率问题,在编译时,编译器将程序中
24、出现的内联函数的调用表达式用内联函数的函数体来替换。 28 【正确答案】 C 【试题解析】 常数据成员的定义与一般常量的定义方式相同,只是它的定义必须出现在类体中。常数据成员同样也必须进行初始化,并且不能被更新,但常数据成员的初始化只能通过构造函数的成员初始化列表进行。 29 【正确答案】 D 【试题解析】 C+中数据类型转换有两类,即隐式类型转换和显式类型转换。 隐式类型转换是由编译器自动完成的类型转换。当编译器遇到 不同类型的数据参与同一运算时,会自动将它们转换为相同类型后再进行运算。赋值时,会把所赋值的类型转换为与被赋值变量类型一样。隐式类型转换按从低到高的顺序进行。 显式类型转换是由程
25、序员显式指出的类型转换,使用显式类型转换的好处是,编译器不必自动进行两次转换,而由程序员负责类型转换的正确性。 由此可知选项 D中 a (double)b 的值应为 double型。 30 【正确答案】 B 【试题解析】 程序的功能是从键盘输入一个整数,然后执行 if 语句的条件表达式“n+ 10”,表达式 “n+ 10”等价于 “n 10; n+; ”这两条语句。所以输出结果n 的值为 10。 31 【正确答案】 B 32 【正确答案】 C 【试题解析】 本题考查考生对拷贝构造函数的掌握。因为 +运算是右结合的,所以在使用 a对 b赋值时, b的 num变为 1而 a的 num变为 2(先赋
26、值再自加 )。 33 【正确答案】 C 【试题解析】 构造函数的目的是对象初始化。 34 【正确答案】 A 【试题解析】 oct八进制。 35 【正确答案】 D 【试题解析】 本题考查的是指针的运用。在使用任何指针 变量之前必须先给它赋一个所指合法具体对象的地址值。本题中,在给 *p 赋值前,指针变量 p 并没有指向一个具体对象。此时可以通过编译,但运行时由于 p 中为随机值,该赋值可能会破坏内存中某个重要的地址空间中的内容,导致程序运行出错。故应该选择D。 36 【正确答案】 x+ 37 【正确答案】 循环结构 (或重复结构 ) 【试题解析】 符合结构化原则的三种基本控制结构为:顺序结构,选
27、择结构和循环结构 (或重复结构 )。 38 【正确答案】 n 【试题解析】 对具有 n 个结点的线性表进行顺序查找,最坏情况下 需要比较 n次。 39 【正确答案】 动态分析 【试题解析】 程序的测试方法分为静态分析和动态分析。使用测试用例在计算机上运行程序,使程序在运行过程中暴露错误,这种方法称为动态分析。 40 【正确答案】 关系 41 【正确答案】 void 【试题解析】 void 表明该函数不带返回值,如果没有 void,则系统会返回一个默认类型的随机值,这对程序可能造成不必要的问题。 42 【正确答案】 基类 【试题解析】 对于派生类的构造函数,在定义对象时构造函数的执行顺序:先执行
28、调用基类的 构造函数,再执行调用子对象类的构造函数,最后执行派生类的构造函数体中的内容。所以本题填:基类。 43 【正确答案】 0perator 【试题解析】 C+中运算符重载一般是和。 operator结合使用的。 44 【正确答案】 真 45 【正确答案】 #include 46 【正确答案】 编译器 【试题解析】 内联函数是通过编译器,只是在调用的时候,像宏一样展开。注意:内联函数比普通函数的效率更高。 47 【正确答案】 c3=c1+c2 【试题解析】 本题考核运算符的重载 。这是运算符重载应用的两种形式。 48 【正确答案】 x+ 【试题解析】 本题考核运算符函数的两种调用方式。 49 【正确答案】 编译器 【试题解析】 内联函数是通过编译器,只是在调用的时候,像宏一样展开。注意:内联函数比普通函数的效率更高。 50 【正确答案】 1 【试题解析】 本题考查的知识点是:运算符重载。当运算符重载为类的成员函数时,第一操作数就是对象本身,并不显式地出现在参数表中。或者换句话说,第一操作数仅以 this 指针的形式隐含存在于参数表中。因此,对于一元运算 符参数表是空的;对于二元运算符参数表中只有一个参数,它代表第二操作数。故本题应该填 1。