1、2011年 3月国家二级( C+)笔试真题试卷及答案与解析 1 下列关于栈叙正确的是 ( )。 A) 栈顶元素最先能被删除 B) 栈顶元素最后才能被删除 C) 栈底元素永远不能被删除 D) 以上三种说法都不对 2 下列叙述中正确的是 ( )。 A) 有一个以上根结点的数据结构不一定是非线性结构 B) 只有一个根结点的数据结构不一定是线性结构 C) 循环链表是非线性结构 D) 双向链表是非线性结构 3 某二叉树共有 7个结点,其中叶子结点只有 1个,则该二叉树的深度为 (假设根结点在第 1层 )( )。 A) 3 B) 4 C) 6 D) 7 4 在软件开发中,需求分析阶段产生的主要文档是 (
2、)。 A) 软件集成测试计划 B) 软件详细设计说明书 C) 用户手册 D) 软件需求规格说明书 5 结构化程序所要求的基本结构不包括 ( )。 A) 顺序结构 B) GOTO跳转 C) 选择 (分支 )结构 D) 重复 (循环 )结构 6 下面描述中错误的是 ( )。 A) 系统总体结构图支持软件系统的详细设计 B) 软件设计是将软件需求转换为软件表示的过程 C) 数据结构与数据库设计是软 件设计的任务之一 D) PAD图是软件详细设计的表示工具 7 负责数据库中查询操作的数据库语言是 ( )。 A) 数据定义语言 B) 数据管理语言 C) 数据操纵语言 D) 数据控制语言 8 一个教师可讲
3、授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是 ( )。 A) 1:1联系 B) 1:m联系 C) m:1联系 D) m:n联系 9 定义无符号整数类为 UInt,下面可以作为类 UInt实例化值的是 ( )。 A) -369 B) 369 C) 0.369 D) 整数 集合 1, 2, 3, 4, 5 10 为了提高函数调用的实际运行速度,可以将较简单的函数定义为 ( )。 A) 内联函数 B) 重载函数 C) 递归函数 D) 函数模板 11 若 AA为一个类, a为该类的非静态数据成员,在该类的一个成员函数定义中访问 a时,其书写格式为 ( )。 A) a B) AA.a
4、 C) a D) AA:a 12 当派生类从一个基类保护继承时,基类中的一些成员在派生类中成为保护成员,这些成员在基类中原有的访问属性是 ( )。 A) 任何 B) 公有或保护 C) 保护或私有 D) 私有 13 若要对 Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。 A) Data+(DatA) ; B) Data operator+Data; C) Data+operatorData; D) operator+(Data, DatA) ; 14 下列关于函数模板的描述中,正确的是 ( )。 A) 函数模板是一个实例函数 B) 使用函数模板定义的函数没有返回类型 C
5、) 函数模板的类型参数与函数的参数相同 D) 通过使用不同的类型参数,可以 从函数模板得到不同的实例函数 15 C+系统预定了 4个用于标准数据流的对象,下列选项中不属于此类对象的是( )。 A) cout B) cin C) cerr D) cset 16 Windows环境下,由 C+源程序文件编译而成的目标文件的扩展名是 ( )。 A) cpp B) exe C) obj D) lik 17 字符串 “a+b=12nt”的长度为 ( )。 A) 12 B) 10 C) 8 D) 6 18 有如下程序: #include iostream using namespace std; int
6、main() int f, f1=0, f2=1; for(int i=3; i =6; i+) f=f1+f2; f1=f2; f2=f; cout f end1; return 0; 运行时的输出结果是 ( )。 A) 2 B) 3 C) 5 D) 8 19 有如下程序: #include iostream using namespace std; int main() int a6=23, 15, 64, 33, 40, 58; int s1, s2; s1, s2=a0; for(int*p=a+1; p a+6; p+) if(s1 *p)s1=*p; if(s2 *p)s2=*p;
7、 cout s1+s2 end1; return 0; 运行时的输出结果是 ( )。 A) 23 B) 58 C) 64 D) 79 20 有如下程序: #include iostream using namespace std; void f1(int x=y; y=z;) void f2(int x, int y)int z=x; x=y; y=z; intmain() int x=10, y=26; f1(x, y); f2(x, y); cout y end1; return 0; 运行时的输出结果是 ( )。 A) 10 B) 16 C) 26 D) 36 21 有如下程序: #in
8、clude iostream using namespace std; class XA int a; public: static int b; XA(int a A) : a(aA) b+; XA() int get()return a; ; int XA:b=0; int main() XA d1(2), d2(3); cout d1. get()+d2. get()+XA:b end1; return 0; 运行时的输出结果是 ( )。 A) 5 B) 6 C) 7 D) 8 22 有如下程序: #include iostream using namespace std; class
9、Point int x, y; public: Point(int x1=0, int y1=0):x(x1), y(y1) int get()return x+y;) ; class Circle Point center; int radius; public: Circle(int CX, int cy, int r):center(cx, cy), radius(r) int get()return center. get()+radius; ; int main() circle c(3, 4, 5); cout c. get() end1; return (): 运行时的输出结果是
10、 ( )。 A) 5 B) 7 C) 9 D) 12 23 若要对类 BigNumber中重载的类型转换运算符 long进行声明,下列选项中正确的是 ( )。 A) operator long()const; B) operator long(bigNumber); C) long operator long() const; D) long operator long(BigNumber); 24 有如下函数模板定义: template typename T1, Typename T2 T1 Fun(T2 n)return n*5.0; 若要求以 int型数据 9作为函数实参调用该模板,并返
11、回一个 double型数据,则该调用应表示为 ( )。 A) FUN(9) B) FUN 9 C) FUN double 9 D) FUN 9 (doubl 25 下列语句都是程序运行时的第 1条输出语句,其中一条语句的输出效果与其他三条语句不同,该语句是 ( )。 A) cout internal 12345; B) cout left 12345; C) cout right 12345; D) cout setw(6) 12345; 26 下列关于析构函数的描述中,错误的是 ( )。 A) 析构函数可以重载 B) 析构函数由系统自动调用 C) 每个对象的析构函数只被调用一次 D) 每个类
12、都有析构函数 27 下列关于构造函数的描述中,错误的是 ( )。 A) 构造函数名与类名相同 B) 构造函数可以有返回值 C) 构造函数可以重载 D) 每个类都有构造函数 28 若 PAT是一个类,则程 序运行时,语句 “PAT*aD) 3;”调用 PAT的构造函数的次数是 ( )。 A) 0 B) 1 C) 2 D) 3 29 下列描述中,错误的是 ( )。 A) 公有继承时基类中的公有成员在派生类中仍是公有成员 B) 公有继承时基类中的保护成员在派生类中仍是保护成员 C) 保护继承时基类中的公有成员在派生类中仍是公有成员 D) 保护继承时基类中的保护成员在派生类中仍是保护成员 30 生成派
13、生类对象时,派生类构造函数调用基类构造函数的条件是 ( )。 A) 无需任何条件 B) 基类中 显示定义了构造函数 C) 派生类中显式定义了构造函数 D) 派生类构造函数明确调用了基类构造函数 31 下列关于派生类和基类的描述中,正确的是 ( )。 A) 派生类成员函数只能访问基类的公有成员 B) 派生类成员函数只能访问基类的公有和保护成员 C) 派生类成员函数可以访问基类的所有成员 D) 派生类对基类的默认继承方式是公有继承 32 有如下类模板定义: template typename T class BigNumber long n; public: BigNumber(T i):n(i)
14、 BigNumber operator+(BigNumber B) return BigNumber(n+b.n); 已知 b1、 b2是 BigNumber的两个对象,则下列表达式中错误的是 ( )。 A) b1+b2 B) b1+3 C) 3+b1 D) 3+3 33 下列关于文件流的描述中,正确的是 ( )。 A) 文件流只能完成针对磁盘文件的输入和输出 B) 建立一个文件流对象时,必须同时打开一个文件 C) 若输入流要打开的文件不存在,将建立一个新文件 D) 若输出流要打开的文件不存在,将建立一个新文件 34 有如下程序: #include iostream using namespa
15、ce std; class Pair int m, n; public: Pair(int j, int k):m(j), n(k) int get()return m; int get()constreturn m+n;) ; int main() Pair a(3, 5); const Pair b(3, 5); cout a. get() b. get(); return 0; 运行时的输出结果是 ( )。 A) 33 B) 38 C) 83 D) 88 35 有序线性表能进行二分查找的前提是该线性表必须是 _存储的。 36 一棵二叉树的中序遍历结果为 DBEAFC,前序遍历结果为 AB
16、DECF,则后序遍历结果为 _。 37 对软件设计的最小单位 (模块或程序单元 )进行的测试通常称为 _测试。 38 实体完整性约束要求关系数据库中元组的 _属性值不能为空。 39 在关系 A(S, SN, D) 和关系 B(D, CN, NM)中, A的主关键字是 S, B的主关键字是 D,则称 _是关系 A的外码。 40 若有定义语句 “int x=10, y=20 z=20;”,则表达式 x zwhile(+x) 运行时 while循环体的执行次数为 _。 42 有如下语句序列 int arr22=9, 8), 7, 6; int*p=arr0+1; cout *p end1; 运行时的
17、输出结果是 _。 43 函数 fun的功能是将一个数字字符串转换为一个整数,请将函数补充完整。 int fun(char*str) int hum=0; while(*str) num*=10; num+=_ str+; return num; 44 若要将函数 “void FriFun;”声明为类 MyClass的友元函数,则应在类 MyClass的定义中加入语句 _。 45 下列程序的输出结果为 012,请根据注释将横线处的缺失部分补充完整。 #include iostream using namespace std; class Test public: Test(int A) data
18、=a; Test() void print()cout data;) private: int data; ; int main() Test t3=_;/对有 3个元素的 Test类对象数组 t初始化 for(int i=0; i 3; i+) ti. print(); return 0; 46 请在横线处填写派生类 Derived的继承方式,使得程序的输出结果为 Base。 #include iostream using namespace std; class Base public: void print()cout “Base“;) ; class Derived:_Base; in
19、t main() Derived d; d.print(); return 0; 47 下列程序的输出结果为 1 2.3 2 4.6,请将横线处的缺失部分补充完整。 #include iostream using namespace std; class Base public: Base(int A) :idata(A) void print()cout idata ; private: int idata; ; class Derived: public Base public: Derived(int a, double B) :_, ddata(B) void priat()Base:
20、print(); cout ddata ; private: double ddata; ; int main() Derived d1(1, 2.3), d2(2, 4.6); d1. print(); d2. print(); return 0; 48 下列程序的输出结果为 -5/8-3/4,请将横线处的缺失部分补充完整。 #include iostream using namespace std; class Fraction/“分数 “类 public: Fraction(double a, double B) : num(A) , den(B) Fraction() Fraction
21、 operator -() _; f. num=-f. num; return f; void print()cout num / den private: double num; double den; /分母 ; int main() Fraction f1(5,8), f2(3, 4); (-f1) print(); (-f2). print(); return 0: 49 函数 Min的功能是返回具有 n个元素的数组 array中的最小值。请将横线处的缺失部分补充完整,使得程序的输出结果为 1.24。 #include iostream using namespace std; tem
22、plate typename T T Min(T*array, int n) T min=array0; for(int i=1; i n; i+) if(arrayi min)min=arrayi; return min; int main() double art8=5.2, 48.45, 41.01, 42, 51.2, 1.24, 14.12, 42; cout _; return 0: 2011年 3月国家二级( C+)笔试真题试卷答案与解析 1 【正确答案】 A 2 【正确答案】 B 3 【正确答案】 D 4 【正确答案】 D 5 【正确答案】 B 6 【正确答案】 A 7 【正确
23、答案】 C 8 【正确答案】 D 9 【正确答案】 B 10 【正确答案】 A 11 【正确答案】 A 12 【正确答案】 B 13 【正确答案】 B 14 【正确答案】 D 15 【正确答案】 D 16 【正确答案】 C 17 【正确答案】 C 18 【正确答案】 C 【试题解析】 在主函数中 for循环语句执行 4次,第一次循环结束时,变量 f的值等于 1, f1的值等于 1, f2的值等于 1;第二次循环结束时 ,变量 f的值等于2, f1的值等于 1, f2的值等于 2;第三次循环结束时,变量 f的值等于 3, f1的值等于 2, f2的值等于 3;第四次循环结束时,变量 f的值等于
24、5, f1的值等于 3, f2的值等于 5;结束循环。 19 【正确答案】 D 【试题解析】 变量 s1和 s2的初值都等于 23,那么在执行第一次 for循环时, *p的值等于 15,它小于 23,所以把 15赋给变量 s1;执行第二次 for循环时, *p的值等于 64,它大于 23,所以把 64赋给变量 s2;而数组 a中 a2后面的元素的值都大于 15,小于 64,因而变量 s1, s2的值不会再发生变化,最终值为 15+6=79,所以程序输出 79。 20 【正确答案】 A 21 【正确答案】 C 22 【正确答案】 D 23 【正确答案】 A 24 【正确答案】 C 25 【正确答
25、案】 D 26 【正确答案】 A 27 【正确答案】 B 28 【正确答案】 A 29 【正确答案】 C 30 【正确答案】 A 31 【正确答案】 B 32 【正确答案】 C 33 【正确答案】 D 34 【正确答案】 B 35 【正确答案】 顺序 36 【正确答案】 DEBFCA 37 【正确答案】 单元 38 【正确答案】 主键 39 【正确答案】 D 40 【正确答案】 0 41 【正确答案】 9 42 【正确答案】 8 43 【正确答案】 (*str-0) 44 【正确答案】 friend void FriFun(); 45 【正确答案】 0, 1, 2 46 【正确答案】 public 47 【正确答案】 Base(A) 48 【正确答案】 Fraction f(-num, den); 49 【正确答案】 Min(arr, 8)