1、2008 年 4月国家二级( C+)笔试真题试卷及答案与解析 1 程序流程图中带有箭头的线段表示的是 ( A)图元关系 ( B)数据流 ( C)控制流 ( D)调用关系 2 结构化程序设计的基本原则不包括 ( A)多态性 ( B)自顶向下 ( C)模块化 ( D)逐步求精 3 软件设计中模块划分应遵循的准则是 ( A)低内聚低耦合 ( B)高内聚低耦合 ( C)低内聚高耦合 ( D)高内聚高耦合 4 在软件开发中,需求分析阶段产生的主要文档是 ( A)可行性分析报告 ( B)软件需求规格说明书 ( C)概要设计说明书 ( D)集成测试计划 5 算法的有穷性是指 ( A)算法程序的运行时间是有限
2、的 ( B)算法程序所处理的数据量是有限的 ( C)算法程序的长度是有限的 ( D)算法只能被有限的用户使用 6 对长度为 n的线性表排序,在最坏情况下,比较次数不是 n(n-1)/2的排序方法是 ( A)快速排序 ( B)冒泡排序 ( C)直接插入排序 ( D)堆排序 7 下列关于栈的叙述正确的是 ( A)栈按 “先进先出 ”组织数据 ( B)栈按 “先进后出 ”组织数据 ( C)只能在栈底插入数据 ( D)不能删除数据 8 在数据库设计中,将 E-R图转换成关系数据模型的过程属于 ( A)需求分析阶段 ( B)概念设计阶段 ( C)逻辑设计阶段 ( D)物理设计阶段 9 有三个关系 R.
3、S和 T如下:由关系 R和 S通过运算得到关系 T,则所使用的运算为 ( A)并 ( B)自然连接 ( C)笛卡尔积 ( D)交 10 设有表示学生选课的三张表,学生 S(学号 ,姓名 ,性别 ,年龄 ,身份证号 ),课程C(课号 ,课名 ),选课 SC(学号 ,课号 ,成绩 ),则表 SC的关键字 (键或码 )为 ( A)课号,成绩 ( B)学号,成 绩 ( C)学号,课号 ( D)学号,姓名,成绩 11 下列有关函数重载的叙述中,错误的是 ( A)函数重载就是用相同的函数名定义多个函数 ( B)重载函数的参数列表必须不同 ( C)重载函数的返回值类型必须不同 ( D)重载函数的参数可以带有
4、默认值 12 下列有关类成员的叙述中,正确的是 ( A)友元函数是类的成员函数 ( B)类成员的默认访问权限是私有的 ( C)类成员函数必须声明为公有的 ( D)类的静态数据成员不能是常成员 13 下列有关类继承的叙述中,错误的是 ( A)继承可以实现软件 复用 ( B)虚基类可以解决由多继承产生的二义性问题 ( C)派生类构造函数要负责调用基类的构造函数 ( D)派生类没有继承基类的私有成员 14 下列有关运算符重载的叙述中,正确的是 ( A)运算符重栽是多态性的一种表现 ( B) C+中可以通过运算符重载创造新的运算符 ( C) C+中所有运算符都可以作为非成员函数重载 ( D)重载运算符
5、时可以改变其结合性 15 下列有关模板的叙述中,正确的是 ( A)函数模板不能含有常规形参 ( B)函数模板的一个实例就是一个函数定义 ( C)类模板的成员函数不 能是模板函数 ( D)用类模板定义对象时,绝对不能省略模板实参 16 下列有关 C+流的叙述中,错误的是 ( A) C+操作符 setw设置的输出宽度永久有效 ( B) C+操作符 endl可以实现输出的回车换行 ( C)处理文件 I/O时,要包含头文件 fstream ( D)进行输入操作时, eof()函数用于检测是否到达文件尾 17 下列符号中能够作为 C+标识符的是 ( A) const ( B) 2a ( C) -shap
6、e ( D) -count 18 已知枚举类型声明语句为: enum COLORWHITE,YELLOW,GREEN 5,RED,BLACK 10; 则下列说法中错误的是 ( A)枚举常量 YELLOW的值为 1 ( B)枚举常量 RED的值为 6 ( C)枚举常量 BLACK的值为 10 ( D)枚举常量 WHITE的值为 1 19 执行下列语句段后,输出字符 “*”的个数是 for(int i 50; i 1; i2)count *; ( A) 24 ( B) 25 ( C) 26 ( D) 50 20 有如下定义: int a5 1,3,5,7,9, * p=a; 下列表达式中不能得到数
7、值 5的是 ( A) a2 ( B) a3 ( C) *(p+2) ( D) *p+4 21 已知函数 f的原形是 void f(int * a,long ,变量 v1、 v2的定义是: int v1;long v2; 下列调用语句中正确的是 ( A) f(v1, ; 则类 MyClass 的构造函数的个数是 ( A) 1个 ( B) 2个 ( C) 3个 ( D) 4个 28 有如下类和对象的定义: class Constants public: static double get PI()return 3.1416; ; Constants constants; 下列各组语句中,能输出 3
8、.1416的是 ( A) cout constants- getPI();和 cout Constants:getPI(); ( B) cout constants. getPI();和 cout Constants getPI(); ( C) cout constants- getPI();和 cout Constants- getPl(); ( D) cout constants. getPI();和 cout Constants:getPI(); 29 有如下程序: #includc iostream using namespace std; class VAC public: int
9、f()constreturn 3; int f()return 5; ; int main() VAC v1; const VAC v2; cout v1 f() v2 f(); return 0; 运行时的输出结果是 ( A) 53 ( B) 35 ( C) 55 ( D) 33 30 有如下类的声明: class Base protected: int amount; public: Base(int n 0):amount(n) int getAmount()constreturn amount; ; class Derived:public Base protected: int va
10、lue public: Derived(int m, int n):value(m), Base(n) int getData()constreturn value+amount; ;已知 x是一个 Derived对象 ,则下列表达式中正确的是 ( A) x. value+x. getAmount() ( B) x. getData()-x. getAmount() ( C) x. getData()-x. amount ( D) x. value+x. amount 31 有如下程序: #include iostream using namespace std; class Base int
11、 x; public: Base(int n0):x(n)cout n;) int getX()constreturn x; ; class Derived:public Base int y; public: Derived(int m, int n):y(m,)Base(n)cout m; Derived(int m):y(m)cout m; ; int main() Derived d1(3),d2(5,7) return 0; 运行时的输出结果是 ( A) 375 ( B) 357 ( C) 375 ( D) 357 32 下列有关抽象类和纯虚函数的叙述中,错误的是 ( A)拥有纯虚函
12、数的类是抽象类,不能用来定义对象 ( B)抽象类的派生类若不实现纯虚函数,它也是抽象类 ( C)纯虚函数的声明以 “ 0;”结束 ( D)纯虚函数都不能有函数体 33 有如下程序: #include iostream using namespace std; class Amount int amount; public: Amount(int n=0):amount(n) int getAmount()constreturn amount; Amount int main() Amount x(3),y(7); x+ y, cout x. getAmount() endl; return 0
13、; 已知程序的运行结果是 10,则下划线处缺失的表达式是 ( A) * this ( B) this ( C) class GA public: virtual int f( ) return 1; ; class GB:public GA public: virtual int f() return 2; ; void show(GA g)cout g.f(); void display(GA int main() GA a;show(A) ;display(A) ; GB b;show(B) ;display(B) ; return 0; 运行时的输出结果是 ( A) 1111 ( B)
14、1211 ( C) 1112 ( D) 1212 36 测试用例包括输入值集和【 】值集。 37 深度为 5的满二叉树有【 】个叶子结点。 38 设某循环队列的容量为 50,头指针 front 5(指向队头元素的前一位置 ),尾指针 rear =29(指向队尾元素 ), 则该循环队列中共有【 】个元素。 39 在关系数据库中,用来表示实体之间联系的是【 】。 40 在数据库管理系统提供的数据定义语言、数据操纵语言和数据控制语言中,【 】负责数据的模式定义与数据的物理存取构建。 41 在面向对象的程序设计中,将数据和处理数据的操作封装成一个整体就定义了一种事物的类型,称作 “类 ”。类是一种抽象
15、的概念,属于该类的一个实例叫做“【 】 ”。 42 指针数组是由【 】构成的数组。 43 如果使用数组名作为函数参数,形实结合时,传递的是【 】。 44 在类的对象被 创建的时候,【 】函数会被自动调用。 45 在类中,【 】成员为类的所有对象所共享。 46 有如下程序: #include iostream using namespace std; class Base public: int m,n; ; class Derived1:【 】 Base; class Derived2:public Derived1 public: void SetMN(int M,int N)m=M;n=N
16、; int GetSumMN()return(m+n); ; int main() Derived2 objD; ohjD. SetMN(3,4); cout “M+N=“ objD, m+objD, n endl; return 0 编译时只有 “cout “M+N“ objD m objD n endl;”有语法错误,程序的其他地方没有语法错误。请判断下划线处使用的关键字 是什么。 47 有如下程序: #include iostream using namespace std class Base int b; public: Base(int i) b=i; Void disp ( )
17、cout “Base:b=“ b ; ; class Base1:virtual public Base public: Base1(int i):Base(i) ; class Base2:virtual public Base public: Base2(int i):Base(i) ; class Derived:public Basepublic Base1 int d; public: Derived(int i ,int j):Base1(j),Base2(j),【 】 d=i; void disp() cout “Derived:d=“ d ; ; int main() Deri
18、ved objD(1,2);objD. disp() objD. Base:disp(); objD. Base1:disp() objD. Base2:disp(); return 0; 请将程序补充完整,使程序在运行时输出: Derivd:d=1 Base:b 2 Base:b=2 Base:b=2 48 如下程序声明了一个电话号码类 PhoneNumber,重载了流插入运算符,以便于电话号码的输出。请将程序补充完整。 # include iostream # include iomanip # include string using namespace std; class Phone
19、Number public: void setNumber(string number) this- number = number; /重载流插入操作符 friend【 】 (ostream return output; private: string number; ; int main() PhoneNumber phone; phone. setNumber(“8008100598“); cout “The phone number is:“ phone endl; return 0; 49 如下程序声明了一个二维图形类 TwoDShape,从其派生出矩形类 Rec。 #include
20、 iostream #include string using namespaee std, class TwoDShape/ 二维图形类 char name20; public: TwoDShape (char * n=“unknown“) strcpy(name, n); Char * getName()return name; 【 】 =0; ; class Rec: public TwoDShape double width, height public: Rec(double w-=0. 0,double h=0. 0):TwoDShape(“rectangle“) width=w;
21、 height=h; double getWidth() return width; double getHeight() return height; double area() return width * height; ; int main() TwoDShape * shape; Shape=new Rec(2.1,3.0); cout “object is“ shape- getName() “n“; cout “Area is“ shape- area() “n“; return 0 请将程序补充完整,使程序在运行时输出: abject is triangle Area is 6
22、.3 50 如下程序声明了一个使用两个通用数据类型的模板类 dataClass,其中构造函数用于初始化两个数据成员,成员函数 show用于输出两个数据成员的数值。 #include iostream using namespace std; 【 】 T1 i; T2 j; public: dataClass(T1 a, T2 b)i=a;j=b; void show()cout i “,“ j n; ; int main() dataClass int. double ob1(10,0.23) dataCllass char,char * ob2(X,“my data“); ob1 show(
23、); ob2 show(); return 0; 请将程序补充完整,使程序在运行时输出: 10,0.23 X, my data 2008 年 4月国家二级( C+)笔试真题试卷答案与解析 1 【正确答案】 C 【试题解析】 详细设计阶段的主要描述工具分为图形、语言和表格描述工具。程序流程图是常用的图形描述工具之一,流程图中包含的主要元素有方框:表示一个处理步骤;菱形框:表示一个逻辑条件;箭头:表示控制流向。 2 【正确答案】 A 【试题解析】 结构化程序设计方法的主要原则可以概括为自顶向下,逐步求精,模块化。程序设计时,应先从最上层总目标开始设计,逐步使问题具体化。对复杂 问题,应设计一些子目
24、标作为过渡,逐步细化。模块化是把程序要解决的总目标分解为子目标,再进一步分解为具体的小目标,把每一个小目标称为一个模块。 3 【正确答案】 B 【试题解析】 内聚性是对一个模块内部各个元素之间结合的紧密程度进行度量,它用于对模块功能强度进行衡量,内聚性越高,则模块的独立性越高;耦合性是各个模块之间的相互联系紧密程度的衡量,它用于对模块的块间联系进行度量,耦合性越低,则模块的独立性越高。模块内聚性高而耦合性低是模块划分的重要原则之一。 4 【正确答案】 B 【试题解析】 软件开发中的主要文档有,市场调研 (可行性分析 “做还是不做 ”);需求分析 (软件需求规格说明书 “做什么,不做什么 ”。
25、);概要设计 (概要设计说明书 );详细设计 (详细设计说明书 );测试 (集成测试计划 )。 5 【正确答案】 A 【试题解析】 算法的基本特征:可行性,确定性,有穷性,拥有足够的情报。算法的有穷性是指算法必须能在执行有限个步骤之后终止,即算法程序运行的时间是有限的。 6 【正确答案】 D 【试题解析】 主要考察各种排序方法的掌握情况。直接插入排序:每次将一个待排序的数据元素,插入到 前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素全部插入完为止。冒泡排序:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。快速排序:在当前无
26、序区 R1 H中任取一个数据元素作为比较的 “基准 ”,用此基准将当前无序区划分为左右两个较小的无序区: R1 I-1和 RI+1 H,且左边的无序子区中数据元素均小于等于基准元素,右边的无序子区中数据元素均大于等于基准元素,而基准则位于最终排序的位置上,即 R1 I-1X. KeyRI+1 H(1IH),当 RI I-1)和 RI+1 H均非空时,分别对它们进行上述的划分过程,直至所有无序子区中的数据元素均已排序为止。堆排序:堆排序是一树形选择排序,在排序过程中,将 R1 N看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系来选择最小的元素。 7 【正确答案
27、】 B 【试题解析】 栈是 种只能在叫做栈的一段进行进栈或者出栈操作的线性数据结构。栈的主要特点是 “后进先出 ”,即后进栈的元素先处理。 8 【正确 答案】 C 【试题解析】 E-R图就是实体关系图, E 就是实体, R就是关系形象的表示实体之间的联系。逻辑结构设计阶段是将概念结构转换为某个 DBMS 所支持的数据模型,并将其性能进行优化。 9 【正确答案】 D 【试题解析】 关系 R与 s并,由属于 R或属于 s的元组构成的集合组成; R和 S的广义笛卡儿积是一个 (n+m)列的元组的集合。元组的前 n列是关系 R的一个元组,后 m列是关系 S的一个元组;关系 R与 S 的交既属于 R同时
28、又属于 S的元组构成的集合。自然连接,要求两个关系中进行比较的分量必须是相同的属性组,并 且在结果集中将重复属性列去掉。 10 【正确答案】 C 【试题解析】 本题考查数据库关键字和表之间关系的相关知识。所谓关键字就是指表中的某个属性的值具有能唯一标识关系中元组。 11 【正确答案】 C 【试题解析】 函数重载的函数名是相同的,而参数列表不同。可行函数的参数个数与调用的函数参数个数相同,或者可行函数的参数可以多一些,但是多出来的函数参数都要有相关的缺省值,即参数的默认值。 12 【正确答案】 B 【试题解析】 从类的定义可以知道类的私有成员只能由本类中的成员函数访问 ,外界不能访问一个对象的私
29、有部分,所以,在 C+中类成员的默认访问权限是私有的。在类中,类成员函数可以是公有的,也可以是私有的,友元函数属于类的外部函数。 13 【正确答案】 D 【试题解析】 派生方式分为两种: private派生或 public派生,分别被称为私有派生和公有派生,使用 public派生,基类的所有成员在派生类中的访问权限不变。 14 【正确答案】 A 【试题解析】 所谓运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型,所以它不是创造新的运 算符;三元运算符“?”“、 ”“:”点运算符、作用域等运算符都不可以重载;运算符重载不改变运算符的优先级和结合性,不改变其语法结
30、构,也就是不能改变操作数的个数,即单目的只能重载为单目运算符,双目的只能重载为双目运算。 15 【正确答案】 B 【试题解析】 类模板可以成为另外一个类模板的成员 (叫 “成员模板 ”),函数模板没有实参和形参之分,函数模板可以看成一个无参函数,它的参数要根据调用对象的参数而定。 16 【正确答案】 A 【试题解析】 C+操作符 endl可以实现输出的回车换行的功能;在 处理文件 I/O时,要包含头文件 iostream,是为了说明引用的参数或函数的位置;函数 eof()用来检测是否到达文件尾,如果到达件尾返回非 0值,否则返回 0。 17 【正确答案】 C 【试题解析】 作为标识符必须满足以
31、下规则:所有标识符必须由一个字母 (az, A Z)或下划线 “_”开头;标识符的其它部分可以用字母、下划线或数字 (0 9)组成;大小写字母表示不同意义,即代表不同的标识符;标识符只有前 32个字符有效;标识符不能使用关键字。 count是设备保留字不能作为标识符。 18 【正确答案】 D 【试题解析】 枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值;枚举元素本身由系统定义了一个表示序号的数值,从 0开始顺序定义为 0, 1,2 。所以枚举函数中对象的值应从。开始,依次加 1,如果有的对象已赋值,则后面也按照前面的值依次加 1的原则。 19 【正确答案】 B 【试题解析】 coun
32、t是输出的意思, for是循环语句共执行了 25 次,应输出25个 *。 20 【正确答案】 B 21 【正确答案】 D 【试题解析】 * a是指针变量,对指针变量的引用应加 &。 22 【正确答案】 C 【试题解析】 static int n;是定义静态全局变量, int point是定义类的。 23 【正确答案】 B 【试题解析】 在 C+中继承主要有三种关系: public、 protected 和 private。这三种继承关系中 public继承是最为常用的一种继承关系。 24 【正确答案】 B 【试题解析】 类名 operator+(类名 String & s1,类名 String
33、 & s2)。 25 【正确答案】 A 【试题解析】 类模板说明的一般形式是: template类型形参表 class类名 /类说明体 ? ; 函数模板的一般说明形式如下 template模板形参表 返回值类型函数名 (模板函数形参表 ) /函数定义体 26 【正确答案】 C 【试题解析】 setfill设置填充字符为 *;默认输出有效位是 6; setw(n)设置域宽,cout字符 endl。 27 【正确答案】 A 28 【正确答案】 D 29 【正确答案】 A 30 【正确答案】 B 31 【正确答案】 C 32 【正确答案】 B 【试题解析】 只要是拥有了纯虚函数的类,就是一个抽象类,
34、也就是说你不能根据它产生任何一个对象;纯虚函数的声明格式如下: virtual函数返回类型说明符函数名 (参数表 ) 0;纯虚函数根本就没有函数体;所以不能进行调用。 33 【正确答案】 A 34 【正确答案】 B 35 【正确答案】 C 36 【正确答案】 输出 【试题解析】 测试用例是为测试设计的数据。测试用例由测试输入数据和与之对应的预期输出结果两部分组 成。 37 【正确答案】 16 【试题解析】 根据二叉树的性质:二叉树第 i(i 1)层上至多有 2i-1个结点。得到第5层的结点数最多是 16。 38 【正确答案】 24 【试题解析】 考查数据结构的循环队列的知识。队列元素数为: r
35、ear front 29-5 24个 39 【正确答案】 二维表 【试题解析】 在关系模型中,实体以及实体间的联系都是用关系表示的。关系模型中数据的逻辑结构;一张二维表。 40 【正确答案】 数据定义语言 【试题解析】 数据定义语言用于定义 数据库的所有特性和属性,尤其是行布局、列定义、键列 (有时是选键方法 )、文件位置和存储策略。数据库操纵语言用于查询和操纵模式对象中的数据,数据库控制语言控制用户对数据库的存取能力,控制数据库的安全性。 41 【正确答案】 对象 【试题解析】 对象是一个可视化的或非可视化的元件,而在 C+程序代码中,对象是类的一个实例 (有时指向对象的指针也称为对象 )。
36、 42 【正确答案】 指针 【试题解析】 如果一个数组中的每个元素均为指针类型,即由指针变量构成的数组,这种数组称之为指针数组,它是指针的集合 。 43 【正确答案】 首地址 【试题解析】 调用函数的实参用数组名,被调用函数的形参用数组,这种调用的机制是形参和实参共用内存中的同一个数组。因此,在被调用函数中改变了数组中某个元素的值,对调用函数该数组的该元素值也被改变,因为它们是共用同一个数组,参数传递时将数据的首地址传递过去就可以了。 44 【正确答案】 构造函数 【试题解析】 构造函数在对象创建时自动被调用。程序员不能在程序中调用构造函数。 45 【正确答案】 类的静态 【试题解析】 类的非
37、静态成员属于类的实例所有, 每创建一个类的实例都在内存中为非静态成员开辟了一块区域。而类的静态成员属于类所有,为这个类的所有实例所共享。 46 【正确答案】 protected 【试题解析】 protected:可以被该类中的函数、子类的函数以及其友元函数访问。但不能被该类的对象访问。 47 【正确答案】 Base(j) 【试题解析】 因为程序在运行时输出: Derivde:d 1 Base:b 2 Base:b 2 Base:b 2,而前两个 Base:b 2 Base:b 2分别来自 Base1(j), Base2(j),而在程序类的声明中, Base类也具有输出 Base:b 2的功能。
38、所以,程序中应补充的代码为 Base(j)。 48 【正确答案】 PhoneNumber Opcrator 【试题解析】 运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。运算符重载实质上是函数的重载。重载运算符的函数一般格式为:函数类型 operator运算符名称 (形参列表 )对运算符的重载处理 ,即函数名是由 operator和运算符组成,如operator+意思是 “对运算符 +重载 ”。所以重载流插入操作符为: PhoneNumber Operator,其中符号 “ ”为输出符。 49 【正确答案】 virtual double area() 【试题解析】 这里需要添加一个纯虚函数,即 virtual double area()=0。 50 【正确答案】 template typename T1, typename T2 calss dataClass 【试题解析】 类模板说明的一般形式是: template类型形参表 class类名 /类说明体 ;