1、国家二级( C+)笔试模拟试卷 191及答案与解析 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 设有表示学
3、生选课的 3张表:学生 S(学号,姓名,性别,年龄,身份证号 ),课程 C(课号,课名 ),选课 SC(学号,课号,成绩 ),则表 SC的关键字 (键或码 )为 ( A)课号,成绩 ( B)学号,成绩 ( C)学号,课号 ( D)学号,姓名,成绩 10 下列有关函数重载的叙述中,错误的是 ( A)函数重载就是用相同的函数名定义 多个函数 ( B)重载函数的参数列表必须不同 ( C)重载函数的返回值类型必须不同 ( D)重载函数的参数可以带有默认值 11 下列有关类成员的叙述中,正确的是 ( A)友元函数是类的成员函数 ( B)类成员的默认访问权限是私有的 ( C)类成员函数必须声明为公有的 (
4、 D)类的静态数据成员不能是常成员 12 下列有关类继承的叙述中,错误的是 ( A)继承可以实现软件复用 ( B)虚基类可以解决由多继承产生的二义性问题 ( C)派生类构造函数要负责调用基类的构造函数 ( D)派生类没有继承基类 的私有成员 13 下列有关运算符重载的叙述中,正确的是 ( A)运算符重载是多态性的一种表现 ( B) C+中可以通过运算符重载创造新的运算符 ( C) C+中所有运算符都可以作为非成员函数重载 ( D)重载运算符时可以改变其结合性 14 下列有关模板的叙述中,正确的是 ( A)函数模板不能含有常规形参 ( B)函数模板的一个实例就是一个函数定义 ( C)类模板的成员
5、函数不能是模板函数 ( D)用类模板定义对象时,绝对不能省略模板实参 15 下列有关 C+流的叙述中,错误的是 ( A) C+操作符 setw设置的输出宽度永久有效 ( B) C+操作符 endl可以实现输出的回车换行 ( C)处理文件 I/O时,要包含头文件 fstream ( D)进行输入操作时, eof( )函数用于检测是否到达文件尾 16 下列符号中能够作为 C+标识符的是 ( A) const ( B) 2a ( C) _shape ( D) -connt 17 已知枚举类型声明语句为: enumCOLORWHITE, YELLOW, GREEN=5,RED, BLACK=10; 则
6、下列说法中错误的是 ( A)枚举常量 YELLOW的值为 1 ( B)枚举常量 RED的值为 6 ( C)枚举常量 BLACK的值为 10 ( D)枚举常量 WHITE的值为 1 18 执行下列语句段后,输出字符 “*”的个数是 for(inti=50; i 1; i-=2)tout*; ( A) 24 ( B) 25 ( C) 26 ( D) 50 19 有如下定义: inta5=1, 3, 5, 7, 9, *p=a; 下列表达式中不能得到数值 5的是 ( A) a2 ( B) a3 ( C) *(p+2) ( D) *p+4 20 已知函数 f的原型是 void f(int *a, lo
7、ng B) ;,变量 v1、 v2的定义是: int v1: long v2: 下列调用语句中正确的是 ( A) f(v1, v2); ( B) f(v1, v2); ( C) f(vl, v2); ( D) f(vl, v2); 21 有如下类定义: class Point private: static int how_many; ; _how_many=0; 要初始化 Point类的静态成员 how_many,在下画线处应填入的内容是 ( A) int ( B) static int ( C) int Point: ( D) static int Point: 22 在下列关键字中,不能
8、用来表示继承方式的是 ( A) private ( B) static ( C) public ( D) protected 23 已知 Value是一个类, value是 Value的一个对象。下列以非成员函数形式重载的运算符函数原形中,正确的是 ( A) Value operator+(Value v, int i); ( B) Value operator+(Value v=value, int i); ( C) Value operator+(Value V, int i=0); ( D) Value operator+(Value v=value, int i=0); 24 下面是一
9、个模板声明的开始部分: template typename T double 由此可知 ( A)这可能是一个函数模板的声明 ( B)这可能是一个类模板的声明 ( C)这既可 能是一个函数模板的声明,也可能是一个类模板的声明 ( D)这肯定是一个错误的模板声明 25 有如下 4个语句: eout A setfill($) lefl setw(7) Bendl; eout setfill(*) lefl setw(7) A B endl; eout A setfill(*) right setw(7) B endl; eout setfill(*) right setw(7) A B endl;
10、其中能显示 A*B的是 ( A) 和 ( B) 和 ( C) 和 ( D) 和 26 有如下类定义: ClaSS MyClass int value; public: MyClass(int n):value(n) int getValue( )constreturn value; l; 则类 MyClass的构造函数的个数是 ( A) 1个 ( B) 2个 ( C) 3个 ( D) 4个 27 有如下类和对象的定义: class Constants public: static double getPI( )return 3 1416; ; Constants constants; 下列各组
11、语句中,能输出3.1416的是 ( A) cout constants- getPI( );和 cout Constants:getPI( ); ( B) cout constants getPI( );和 cout Constants.getPI( ); ( C) cout constants- getPI( );和 cout Constants- getPI( ); ( D) cout eonstants getPI( );和 cout Constants:getPI( ); 28 有如下程序: #include iostream using namespaee std; class VA
12、C public: int f( )COUStreturn 3; int f( )return 5; ; int main( ) VAC vl; const VAC v2; eout v1.f( ) v2.f( ); return 0; 程序的输出结果是 ( A) 53 ( B) 35 ( C) 55 ( D) 33 29 有如下类声明: class Base protected: int amount; public: Base(int n=0):araount(n) int getAmount( )constretum amount; ; class Derived:public Base
13、 protected; int value; public: Derived(int m, int n):value(n1), 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 30 有如下程序: #include iostream using namespace st
14、d; class Base int x; public: Base(int n=0):x(n)cout n; int getX( )constreturn x; ; class Derived: public Base int y; public: Derived(int m, int n): y(m),Base(n)tout m; Derived(int m):y(m)cout m; ; int main( ) Derived dl(3), d2(5, 7); return 0; 程序的输出结果是 ( A) 375 ( B) 357 ( C) 0375 ( D) 0357 31 下列有关抽象
15、类和纯虚函数的叙述中,错误的是 ( A)拥有纯虚函数的类是抽象类,不能用来定义对象 ( B)抽象类的派生类若不实现纯虚函数,它也是抽象类 ( C)纯虚函数的声明以 “=0; ”结束 ( D)纯虚函数都不能有函数体 32 有如下程序: #include iostream using namespace std; class Amount int amount; public: Amount(int n=0): amount(n) int getAmount( )constreturn amount; Amountoperator+=(Amount A) amount+=a.amount; ret
16、urn; ; int main( ) Amount x(3), y(7); x+=y: cout x.getAmount( ) endl; return 0; 已知程序的运行结果是 10,则下画线处缺失的表达式是 ( A) *this ( B) this ( C) amount ( D) amount 33 下列语句分别是不同程序中的第一个输入 /输出语句,若去掉其中的 “ left”,则输出效果将发生变化的是 ( A) eout left setfill(*)357; ( B) cout left setw(5) 357; ( C) eout left setw(5) “ABCDE“; (
17、D) eout left “ABCDE“; 34 有如下程序: #include iostream using namespace std; class GA public: virtual int f( )return 1; ; class GB: public GA public: virtual int f( )return 2; ; void show(GA g)eout g.f( ); void display(GA g)cout g.f( ); int main( ) GA a; show(A) ; display(A) ; GB b; show(B) ; display(B) ;
18、 return 0; 程序的输出结果是 ( A) 1111 ( B) 1211 ( C) 1112 ( D) 1212 35 软件需求规格说明书应具有完整性、无歧义性、正确性、可验证性、可修改性等特性,其中最重要的是 _。 36 在两种基本测试方法中, _测试的原则之一是保证所测试的模块中每一个独立路径至少要被执行一次。 37 线性表的存储结构主要分为顺序存储结构和链式存储结构。队列是一种特殊的线性表,循环队列是队列的 _存储结构。 38 对下列二又树进行中序遍历的结果为 _。 39 若有定义语句: inta=3, b=2, c=1;,则表达式 b b?a:b的值是 _。 40 执行下列语句,
19、变量 sum的值是 _。 int sum=0; for(inti=1;i =3; i+) for(intj=1; j =i; j+) sum+; 41 已知有函数 f的定义如下: int f( ) static int s=0; s+=2: return s; 则在某程序中第二次执行函数调用语句 f( );时,函数 f的返回值是 _。 42 已知如下程序的输出结果是 23,请将画线处缺失的部分补充完整。 #include iostream using namespace std; class MyClass public: void Print( )consteout 23; ; int ma
20、in( ) MyClass*P=new MyClass( ); _.Print( ); return 0; 43 有如下程序: #include iostream using namespaee std; class A public: A( )cout “A“; A( )cout “A“; ; class B A a; public: B( )cout “B“; B( )t cout “B“; ; int main( ) B b; return 0; 程序的输出结果是 _。 44 请在如下程序中的空格处填写正确的语句; #include iostream using namespaee st
21、d; cass Base public: void fun( )cout “Base fun“ endl; ; class Derived: public Base public: void fun( ) _/调用基类的函数 fun( ) cout “Derived fun“ endl; ; 45 已知类 sample是一个抽象类,其成员函数 display是无形参、无返回类型的纯虚函数,请完成其声明: sample public: sample( ) ; _ ; 46 有以下复数类的声明,请补充完整。 Class complex double real; /实部 double imag; /
22、虚部 public: complex(double x, double y) real=x: imag=y; complex operator+(complex e) /重载加法运算符 “+” return complex(_) ; 47 请将如下程序补充完整,使得输出结果为: bbaa。 #include iostream using naluespace std; class A public: _eout “aa“; ; class B: public A public: B( )eont “bb“; ; int ulain( ) B*P=new B; delete P; return
23、0; 48 请将下列栈类 Stack补充完整。 class Stack private: int pList100; /int数组,用于存储占的元素 int top; /栈顶元素 (数组下标 ) public: Stack( ): top(0) void Push(const intitem); /新元素 item压入栈 int Pop(void); /将栈顶元素弹出栈 ; void Stack:Push(const intitem) if(top=99) exit(1); /如果栈满,则程序终止 top+; /栈顶指针增 1 _; int Stack:Pop( ) if(top 0) exi
24、t(1); /如果栈空,则程序终止 return Plisttop-; 国家二级( C+)笔试模拟试卷 191答案与解析 1 【正确答案】 C 【试题解析】 在程序流程图中,图框表示各种操作的类型;图框中的文字和符号表示操 作的内容;流程线表示操作的先后次序。带箭头的线段在数据流程图中表示数据流,而带箭头的线段在程序流程图中表示控制流。题中给出的选项中,在图元之间用带有箭头的线段表示图元关系,在模块之间用带有箭头的线段表示调用关系。 2 【正确答案】 A 3 【正确答案】 B 4 【正确答案】 B 5 【正确答案】 A 【试题解析】 算法具有: 有穷性。一个算法必须总是 (对任何合法的输入值
25、)在执行有穷步之后结束,每一步都可在有限时间内完成,即运行时问是有限的。 确定性。算法中每一条指令必须有确切的含义, 读者理解时不会产生歧义。 可行性。一个算法是可行的,即算法中描述的操作都可以通过已经实现的基本运算执行有限次来实现。 输入。一个算法有 0个或多个输入,这些输入取自于某个特定的对象的集合。 输出。一个算法有一个或多个输出。 6 【正确答案】 D 7 【正确答案】 B 8 【正确答案】 C 【试题解析】 数据库的逻辑设计分为: 将概念模型转换成一般的数据模型; 将一般的数据模型转换为特定的数据库管理系统所支持的数据模型。把概念模型转换成关系数据模型就是把 E R图转换成一组关系模
26、式。 9 【正确答案】 C 10 【正确答案】 C 【试题解析】 当两个或者两个以上的函数共用一个相同的函数名时,称为函数的重载。函数重载时函数名必须相同。函数的参数个数和类型不同;函数的返回值类型可以相同,也可以不同。 11 【正确答案】 B 【试题解析】 即可以是不属于任何类的非成员函数,也可以是另外一类的成员函数,统称为成员函数。友元函数不是当前类的成员函数,而是独立于当前类的外部函数。类成员函数可以声明为任何访问权限。类的静态成员可以定义为常成员,只是其值不能改变。 12 【正确 答案】 D 【试题解析】 派生类继承基类,即继承了基类的所有成员,包括公有成员、私有成员和保护成员,只是私
27、有成员在派生类中不能被访问。 13 【正确答案】 A 【试题解析】 进行运算符重载时,不能改变运算符的优先级和结合特性,也不能创造新的运算符, “=”、 “ ”、 “( )”运算符不能作为非成员函数重载。 14 【正确答案】 B 【试题解析】 函数模板和类模板均允许使用多个类型参数,也允许常规形参出现。类模板的成员函数可以为模板函数。使用模板定义对象时,类模板的实际类型名不能 省略,而模板的实参表则不一定必须有。 15 【正确答案】 A 16 【正确答案】 C 【试题解析】 C+中,变量标识符必须以大小写字母或下画线开始,是由数字或者字母、下画线等组成的一个字符串,其中 C+关键字不能作为标识
28、符,不能包含 -、 +、 *、 /等运算符号。 C+变量区分大小写。 17 【正确答案】 D 【试题解析】 枚举变量中的枚举元素系统是按照常量来处理的。如果没有进行元素赋值操作,那么元素将会被系统从 0开始自动递增地进行赋值操作,但是,如果一旦定义了某一个元素的值,那么系统 将对下一个元素进行按前一个元素的值加 1操作,故 wHITE=1, YELLOW=2, GREEN=5, RED=6, BLACK=10。 18 【正确答案】 B 19 【正确答案】 B 20 【正确答案】 D 21 【正确答案】 C 22 【正确答案】 B 23 【正确答案】 B 24 【正确答案】 A 【试题解析】 函
29、数模板声明的格式: template typename类型参数返回类型函数名 (模板形参表 )函数体 类模板的声明格式: template typename类型参数 class类名 类成员声明 故答案为 A。 25 【正确答案】 C 【试题解析】 预定义操作符中, setfill(C) 设置 c为填充字符。 setw(n), n为宽度; left为左对齐,右填充, right为右对齐,左填充。所有的预定义操作符均只对紧跟其后的输出语句起作用。 26 【正确答案】 A 【试题解析】 对于类的构造函数,如果有显式定义,那么在构造该类对象时就自动调用显式定义的构造函数,否则系统将给类一个默认的空构造
30、函数。 27 【正确答案】 D 【试题解析】 Constants定义了一个类对象,对象对类的成员函数引用时,用的是 “ ”而不是 “- ”操作符。或者在类外部对类中的成员函数进行显式调用为: 类名:成员函数名 ( ) 28 【正确答案】 A 29 【正确答案】 B 30 【正确答案】 C 【试题解析】 有如下程序: #include iostream using namespace std; class Base int x; public: Base(int n=0):x(n)cout n; int getX( )constreturn x; ; class Derived: public
31、Base int y; public: Derived(int m, int n): y(m), Base(n)tout m; Derived(int m):y(m)cout m; ; int main( ) Derived dl(3), d2(5, 7); return 0; 程序的输出 结果是 31 【正确答案】 D 【试题解析】 纯虚函数的声明格式为: virtual函数类型函数名 (参数表 )=0 拥有纯虚函数的类就叫抽象类,如果在派生类中不实现纯虚函数,则派生类也是抽象类。纯虚函数在派生类可以被重新定义,即可以拥有函数体。 32 【正确答案】 A 33 【正确答案】 B 34 【正确
32、答案】 C 【试题解析】 基类对象作为实参进行传递时,无论使用的是对象还是对象引用作为形参,都只能在该函数中调用基类成员函数,因此当 GA a作为实参时,调 用的只能是 GA的成员函数。而当派生类对象作为实参传递时,函数的形参则要分情况而定:如果是普通的对象传递,则是值传递,那么在函数中也只能调用基类的成员函数;如果是对象引用作为形参,则是地址传递,这个时候函数就可以调用重载后的虚成员函数。 35 【正确答案】 无歧义性 【试题解析】 软件需求规格说明书是需求分析阶段的最后成果,是软件开发中的重要文档之一。包括正确性、无歧义性、完整性、可验证性、一致性、可理解性、可修改性和可追踪性等。其中最重
33、要的特性是无歧义性,即需求规格说明书应该是精确的、无二义的,需 求说明书越精确,则以后出现错误、混淆、反复的可能性越小。 36 【正确答案】 白盒 【试题解析】 白盒测试的基本原则:保证所测模块中每一个独立路径至少执行一次;保证所测模块所有判断的每一分支至少被执行一次;保证所测模块每一循环都在边界条件和一般条件下至少被各执行一次;验证所有内部数据结构的有效性。按照白盒测试的基本原则, “白盒 ”法是穷举路径测试。 37 【正确答案】 链式 【试题解析】 数据结构包括数据的逻辑结构和存储 (物理 )结构,其中逻辑结构分为线性结构和非线性结构,存储结构包括顺序结 构和链式结构。在循环队列中,队尾的
34、指针指向队首元素,是队列的链式存储结构。 38 【正确答案】 ACBDFEHGP 【试题解析】 二叉树中序遍历的含义:首先按中序遍历根结点的左子树。然后访问根结点,最后按中序遍历根结点的右子树。中序遍历二叉树的过程是一个递归的过程。根据题目中给出的二叉树的结构可知,中序遍历的结果是ACBDFEHGP。 39 【正确答案】 2 40 【正确答案】 6 41 【正确答案】 4 42 【正确答案】 (* p) 43 【正确答案】 ABBA 44 【正确答案】 Base:fun( ) 45 【正确答案】 virtual void display( )=0; 46 【正确答案】 real+c.real, imag+c.imag 47 【正确答案】 A( ) 【试题解析】 派生类和基类的析构函数调用顺序是先调用派生类的析构函数,然后调用基类的析构函数,打印 “bb”说明已经在调用派生类的析构函数,则要继续打印 “aa”,显然就只有定义在基类的析构函数中去打印,故答案为 A( )。 48 【正确答案】 plisttop=item