1、国家二级( C+)笔试模拟试卷 262及答案与解析 1 有如下程序: #include iostream using namespace std; class Sample friend long fun(Sample s); public: Sample(long A) x=a; private: long x; ; long fun(Sample s) if(s x 2)return 1; return s x*fun(Sample(s x-1); int main( ) int sunl=0; for(inti=0; i 6; i+)sum+=fun(Sample(i); tout su
2、m: return 0; 程序的输出结果是 A) 120 B) 16 C) 154 D) 34 2 下列叙述中正确的是 ( )。 ( A)在模块化程序设计中,一个模块应该尽量多的包括与其他模块联系的信息 ( B)在自 顶向下、逐步细化的设计过程中,首先应设计解决问题的第一个细节 ( C)在模块化程序设计中,一个模块内部的控制结构也要符合结构化原则 ( D)在程序设计过程中,不能同时采用结构化程序设计方法与模块化程序设计方法 3 下列对模板的声明中,正确的是 ( )。 ( A) template T ( B) template class T1.T2 ( C) template class T1
3、.class T2 ( D) template class T1;class T2 4 5 有如下程序 : #include iostream using namespace std; class Base public: virtual void func1()cout “Base 1“; void rune2()cout “Base 2“; ; class Derived:public Base public: void func1()cout “Derived 1“; void func2()cout “Derived 2“; ; int main() Base *p=new Deriv
4、ed; P-func1(); P- func2(); return 0: 运行此程序 ,屏幕上将显示输出 _。 ( A) Derived 1 Base 2 ( B) Base 1 Base 2 ( C) Derived 1 Derived 2 ( D) Base 1 Derived 2 6 数据 库设计中反映用户对数据要求的模式是 ( A)内模式 ( B)概念模式 ( C)外模式 ( D)设计模式 7 用树形结构来表示实体之间联系的模型称为 ( )。 ( A)关系模型 ( B)层次模型 ( C)网状模型 ( D)数据模型 8 对下列二叉树进行中序遍历的结果是 ( A) ZBTYCPXA ( B
5、) ATBZXCYP ( C) ZBTACYXP ( D) ATBZXCPY 9 算法的时间复杂度是指 ( )。 ( A)算法的执行时间 ( B)算法所处理的数据量 ( C)算法程序中的语句或指令条 数 ( D)算法在执行过程中所需要的基本运算次数 10 下列代码段声明了 3个类: class Person(); class Student: public Person;class Undergraduate: Student;下列关于这些类之间关系的描述中,错误的是 ( )。 ( A)类 Person是类 Undergraduate的基类 ( B)类 Undergraduate 从类 Stu
6、dent公有继承 ( C)类 Student是类 Person的派生类 ( D)类 Undergraduate是类 Person的派生类 11 下面有关重载函数的说法中正确的是 ( A)重载函数必须具有不同的返回值类型 ( B)重载函数形参个数必须不同 ( C)重载函数必须有不同的形参列表 ( D)重载函数名可以不同 12 已知枚举类型定义语句为: enum TokenNAME, NUMBER, PLUS=5,MINUS, PRINT=10); 则下列叙述中错误的是 ( A)枚举常量 NAME的值为 1 ( B)枚举常量 NUMBER的值为 1 ( C)枚举常量 MINUS的值为 6 ( D)
7、枚举常量 PRINT的值为 10 13 下列有关拷贝构造函数的描述中错误的是 ( )。 ( A)拷贝构造函数是一种构造函数 ( B)拷贝构造函数与一般的构造函数一样,可以设置多个形参 ( C)每一个类中都必须有一个拷贝构造函数 ( D)拷贝构造函数的功能是用一个已知对象去初始化一个正在创建的对象。 14 下面程序的运行结果是 #include“iostream.h“ #define sum(a,b)a*b void main() int x; X sum(1+2,3); cout x; ( A) 0 ( B) 9 ( C) 7 ( D) 5 15 关于模板,下列说法不正确的是 ( A)用类模板
8、定义一个对象时,不能省略实参 ( B)类模板只能有虚拟类型参数 ( C)类模板本身在编译中不会生成任何代码 ( D)类模板的成员函数都是模板函数 16 以下程序的输出的结果是 ( )。 #include intx=3: void main() void fun(); inti; for(i=1; ix; i+) fun(); voidfun() static int x=1: x*=x+1: coutx“”; ( A) 3, 3 ( B) 2, 2 ( C) 2, 6 ( D) 2, 5 17 下列关于虚函数与函数重载区别的叙述中不正确的是 ( A)函数说明形式上不同 ( B)函数重载允许是非
9、成员函数,虚函数只能是成员函数 ( C)函数重载的调用依据 参数和类型的差别,虚函数则依据对象 ( D)函数重载的本体可以在类外定义,虚函数不可以 18 下列关于 C+函数的叙述中,正确的是 ( )。 ( A)每个函数至少要具有一个参数 ( B)每个函数都必须返回一个值 ( C)函数在被调用之前必须先声明 ( D)函数不能自己调用自己 19 有如下程序: #include iostream.h Using namespace std; Class Demo public: Demo() cout “default constructorn”; Demo(const Demo int main(
10、) ( A) 1和 1 ( B) 1和 2 ( C) 2和 3 ( D) 2和 4 20 下列有关继承和派生的叙述中,正确的是 ( )。 ( A)如果一个派生类私有继承其基类,则该派生类对象 不能访问基类的保护成员 ( B)派生类的成员函数可以访问基类的所有成员 ( C)基类对象可以赋值给派生类对象 ( D)如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类 21 下面程序的结果是 _。 #include iostream.h class A public: virtual void fun()=0; ; class B:public A public: void fun () co
11、ut “new file“ ; ; class C: public A public: void fun ()cout “open file“ “ “ ; class D: public A public: void fun () cout “save filen“ ; ; void main() A a,*p; B b; C c; D d; p= p- fun (); p= p- fun (); p= p- fun(); ( A) new file open file save file ( B) new file new file new file ( C)编译出错 ( D) open f
12、ile new file save file 22 以下程序的输出结果是 _。 #define NULL 0 #include iostream.h void main() int a=1, 2, 3, 4, 5, 6, 7, 8, 9, 10; int *p=a+5,*q=NULL; *q=*(p+5); cout *p *q; ( A)运行后报错 ( B) 6 6 ( C) 6 11 ( D) 5 5 23 虚函数必须是类的 ( A)成员函数 ( B)友元函数 ( C)构造函数 ( D)析 构函数 24 类模板 template class T class x ,其中,友元函数 f对特定类
13、型 T(如int),使函数 f(x int ) ( C) friend voidA:f() ( D) friend void C T :f(x T );,后变量 i的值是 ( A) 3 ( B) 4 ( C) 5 ( D)不定 26 以下选项中, ( )是合法的用户标识符。 ( A) long ( B) _2Test ( C) 3Dmax ( D) A.dat 27 对于下面定义的类 MyClass,在函数 f()中将对象成员 n的值修改为 50的语句应该是 ( )。 class MyClass public: MyClass(int i) n=i; void SetNum(int x) n=
14、X; private: int n; ; int f() MyClas ( A) ptr- SetNum(50) ( B) SetNum(50) ( C) ptr- n=50 ( D) *ptr- SetNum(50) 28 若有以下函数调用语句: f( m+n, x+y, f(m+n, z, (x,y); 在此函数调用语句中实参的个数是 ( )。 ( A) 6 ( B) 5 ( C) 4 ( D) 3 29 假定 MyClass为一个类,则执行 MyClassa,b(2), *p;语句时,自动调用该类构造函数 ( )次。 ( A) 2 ( B) 3 ( C) 4 ( D) 5 30 类 My
15、Class的定义如下: class MyClass public: MyClass()value=0; SetVariable(int i)value=i; private: int value; ; 则对下列语句序列正确的描述是 ( )。 ( A) MyClass*p,my; p= iht main() Derived obj 44 下列程序段的输出结果是【 】。 #include iostream.h void main() int i=10, sum=0; do sum=+sum+i; i=i-2; while(i 2); cout sum end1; 45 下面 程序的功能是输出数组
16、s中最小元素,请填空。 #include iostream.h void main() int k, p, s=1, -9, 7, 2, -10, 3; k=s0; for(p=0; p 6; p+) if(sp k) 【 】; cout k; 46 【 】允许用户为类定义一种模式,使得类中的某些数据成员及某些成员函数的返回值能取任意类型。 47 有如下的类的模板定义: template class T class MyClass private: T number; public: MyClass(T k); ; 其中构造函数 MyClass()用 k的值初始化数据成员 n。因此在模板类体外
17、,构造函数 MyClass应定义为【 】。 48 下列函数的功能是【 】。 #include iostream. h int Func(int a,int b) if (a b) return 1; else if(a=b) return 0; else return -1; 49 下列程序的输出结果是非曲直【 】。 #include iostream, h class base int x, y; public: base(int i, int j)x=i; y=j; virtual int add()return x+ y; ; class three: public base int z
18、; public: three(int i, int j, int k) :base(i, j)z=k; int add() return (base: add()+z); ; void main() three * q=new three(lO,20,30); cout q- add() end1; 50 下面是一个栈类的模板,其中 push函数将元素 i压入栈顶, pop函数弹出栈顶元素。栈初始为空, top值为 0, 栈顶元素在 stacktop-1中,在下面横线处填上适当的语句,完成栈类模板的定义。 template class t class Tstack enumsize=1000
19、; T stacksize int top; public: Tsack():top(0) void push(const T T pop() if(top=O)exit(1); /栈空时终止运行 retum【 】 ; ; 国家二级( C+)笔试模拟试卷 262答案与解析 1 【正确答案】 C 2 【正确答案】 C 【试题解析】 在模块化程序设计中,模块之间的联系可以通过程序的控制结构来实现,在自顶向下、逐步细化的设计过程中,首先要考虑全局目标,而不是细节。在程序设计中,模块化和结构化可以同时使用,一个模块的内 部结构也要符合结构化设计原则。 3 【正确答案】 C 4 【正确答案】 B 5 【
20、正确答案】 A 【试题解析】 派生类 Derived由基类 Base公有继承而来。调用 p- func1();后,执行派生类 Derived的函数 void func1();调用 p- rune2();后,执行基类的函数 void func2(),因为虚拟函数是根据对象的实际类型调用,非虚拟函数是根据指针类型调用。故通过指针 p调用 func2 时将直接调用基类中的 void func2()。 6 【正确答案】 C 7 【 正确答案】 B 【试题解析】 本题考核几种数据模型的表示方法。其中,关系模型采用二维表来表示,简称表:层次模型用树形结构来表示:网状模型是一个不加任何限制的无向图。 8 【
21、正确答案】 C 【试题解析】 按照二叉树中序遍历的方法:在访问根结点、遍历左子树与遍历右手树这三者中:首先遍历左子树,然后访问根结点,最后遍历右子树;并且,在遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。对本题中的二叉树进行中序遍历的结果应是: TZBACYXP。 9 【正确答案】 D 【试题 解析】 算法的时间复杂度是指算法需要消耗的时间资源。一般来说,计算机算法是问题规模 n 的函数 f(n),算法的时间复杂度也因此记做 T(n)=O(Rn)因此,问题的规模 n越大,算法执行的时间的增长率与 f(n)的增长率正相关,称作渐进时间复杂度 (Asymptotic Time
22、 Complexity)。简单来说就是算法在执行过程中所需要的基本运算次数。 10 【正确答案】 B 【试题解析】 类 Undergraduate从类 Student私有继承,继承方式缺省则默认是Private。 11 【正确答 案】 C 【试题解析】 函数重载允许用同一个函数名定义多个函数。被重载的函数必须要有不同的形参列表。不可以根据函数返回值类型来重载函数。 12 【正确答案】 A 【试题解析】 本题考核 C+的数据类型。枚举类型定义了一些整型符号常量的集合,使用枚举类型数据时,应该注意的是:枚举类型的第一个常量默认值是 0;枚举类型常量的值允许彼此相同;虽然枚举类型常量是整数类型,但是
23、,不允许使用整数直接赋值给枚举类型变量,也不允许与整数进行运算,只可以与整数进行比较。由此可知枚举常量 NAME 的值应该为 0。 13 【正确答案】 B 【试题解析】 拷贝构造函数是一个特殊的构造函数,它用一个已知的对象初始化一个正在创建的同类对象,它不能指定函数返回类型;只有一个参数,是同类的某个对象名的引用。每一个类中都必须有一个拷贝构造函数,如果类中未声明,编译器会自动生成一个公有的拷贝构造函数。 14 【正确答案】 C 15 【正确答案】 B 16 【正确答案】 C 【试题解析】 由主函数入手,在 for循环中调用 fun函数,其中调用次数为 2次。 fun中 x为静态变量,有效到文
24、件结束,所以第一次调用为x=x*(x+1)=1*(1+1)=2,第二次调用 2*2+1)=6。 17 【正确答案】 D 【试题解析】 A项, B 项, C项均为虚函数与函数重载的不同之处。但有一点它们是相同的:在类内外定义均可。故 D项错误。 18 【正确答案】 C 【试题解析】 此题考查的是函数的性质。当调用无参函数时主函数并不将数据传送给被调函数,且可以带回或不带回函数值。函数的递归调用就是直接或间接的调用自己。 19 【正确答案】 D 【试题解析】 本题考查的是引用调用,因为函数 swap引用调用参数 a,所以 在swap 函数中 a的变化会改变主函数中 a的值,即 a自加 1,但 b的
25、值并未改变。 20 【正确答案】 D 21 【正确答案】 C 22 【正确答案】 A 23 【正确答案】 A 【试题解析】 虚函数只能是类的成员函数,不能是构造函数或析构函数。注意:虚函数可以是另 个类的友元函数。 24 【正确答案】 B 25 【正确答案】 C 【试题解析】 for语句中的表达式可以部分或全部省略,但两个 “;”不能省略,若3个表达式均省略,会因为缺少条件判断,导致循环无限执行,而形成死循环。 本题中当 i的值为 5的时候,循环终止。 26 【正确答案】 B 【试题解析】 有关用户标识符的考题经常在考试中出现,考生应该重视。选项 A中 long是 C+语言保留字,不能用于用户
26、标识符。选项 C中的 3Dmax,它的第一个字符是数字 3,不是所规定字母或下划线,所以也不是合法的用户标识符。选项 D中的 A.dat,它中间出现了符号 “.”,不符合标识符的定义规则。所以只有选项 B 中的标识符是合法的 C+标识符。 27 【正确答案】 A 【试题解析】 C+中定义对象后,可以使用 “.”和 “- ”运算符访问 对象的成员。其中, “.”运算符适用于一般对象和引用对象,而 “- ”运算符适用于指针对象。本题定义的 ptr为指针对象,使用运算符 “- ”访问其成员。 28 【正确答案】 D 29 【正确答案】 A 30 【正确答案】 D 31 【正确答案】 A 【试题解析】
27、 本题考查的是内联函数的使用,它的引入是为了解决程序中函数调用的效率问题,在编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来替换。 32 【正确答案】 C 【试题解析】 析构函数可以被函数调用,也可以系统 调用:函数体内的对象在函数结束时调用析构函数和使用 delete释放对象所占有用的资源。 33 【正确答案】 A 【试题解析】 本题考察自增运算符和赋值运算符的运算顺序。考生要注意区分+n 和 n+的区别。 34 【正确答案】 A 【试题解析】 题中的 a=b, b=c;是一个语句书写在了两行,因 a b 为假,所以此句不执行,又 “c =a”与 if语句无关,总要执行,
28、故 a、 b值不变, c值为 20。 35 【正确答案】 D 【试题解析】 本题考查的知识点是继承和派生。无论是公有、保护还是私有 继承,派生类都能够访问基类的公有和保护成员,而不能访问基类的私有成员,故选项 A和 B不正确。公有继承时,派生类的对象可以作为基类的对象处理,派生类是基类的子类型。子类型关系是可以传递的,但是不可逆的。因此,基类的对象不可作为派生类的对象处理,即基类对象不可赋值给派生类对象。所以选项 C不正确。 4个选项中,只有选项 D正确。 36 【正确答案】 E-R图 【试题解析】 数据库逻辑设计的任务是将概念模型进一步转化成相应的数据模型。而 E-R图是主要的概念模型,因此
29、数据库的逻辑设计的主要工作是将 E-R图转换成关 系模式。 37 【正确答案】 ACBEGFD 38 【正确答案】 元组 【试题解析】 在关系模型中,数据结构用单一的二维表结构来表示实体及实体间的联系。一个关系对应一个二维表。二维表中的列称为属性,属性值的取值范围称为值域。二维表中的一行称为一个元组。 39 【正确答案】 this- data=data; 【试题解析】 this- data=data; 40 【正确答案】 多个 41 【正确答案】 类 【试题解析】 本题考核类模板的使用,使用类模板时是将其定义实 例化为一个真正的类。 42 【正确答案】 1 【试题解析】 此题考查的是运算符重载
30、。当运算符重载为类的成员函数时,第一操作数就是对象本身,并不是显式的出现在参数表中。因此,对于一元运算符参数表是空的;对于二元运算符参数表中只有一个参数,它代表第二操作数。 43 【正确答案】 Derived(int i; Base(i)。 【试题解析】 程序中,类 Derived是基类 Base的公有派生。在类 Derived的构造函数应该包括调用基类构造函数使基类的数据成员得以初始化, 44 【正确答 案】 30 45 【正确答案】 k=sp 46 【正确答案】 类模板 【试题解析】 本题考核类模板的基本概念。类模板就是一系列相关类的模型或样板,这些类的成员组成相同,成员函数的源代码形式相
31、同,所不同的只是所针对的类型 (成员的类型以及成员函数的参数和返回值的类型 )。对于类模板,数据类型本身成了它的参数,因而是一种参数化类型的类,是类的生成器。类模板中声明的类称为模板类。 47 【正确答案】 template classT /MyClass T: MyClass(T k): number(k) 【试题解析】 类模板的成员函数的类体外的定义以 “template class T ”开头。 48 【正确答案】 比较两个整数 a和 b的大小,若 a b则返回 1,若 a等于 b,则返回 0,否则返回 -1。 49 【正确答案】 60 【试题解析】 本题考察继承中子类对父类的继承方式,注意子类的 add成员函数,它直接使用了父类的成员函数进行运算。 50 【正确答案】 stack-top 【试题解析】 + -运算符;注意栈顶元素在 stacktop-1中。