1、国家二级( C+)笔试模拟试卷 177及答案与解析 1 数据的存储结构是指 ( A)存储在外存中的数据 ( B)数据所占的存储空间量 ( C)数据在计算机中的顺序存储方式 ( D)数据的逻辑结构中计算机中的表示 2 下列关于栈的描述中错误的是 ( A)栈是先进后出的线性表 ( B)栈是先进后出的线性表 ( C)栈具有记忆作用 ( D)对栈的插入与删除操作中,不需要改变栈底指针 3 对于长度为 n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是 ( A)冒泡排序为 n/2 ( B)冒 泡排序为 n ( C)快速排序为 n ( D)快速排序为 n(n-1)/2 4 下列对于线性链表的
2、描述中正确的是 ( A)存储空间不一定是连续的,且各元素的存储顺序是任意的 ( B)存储空间不一定是连续的,且前件元素一定存储在后件元素的前面 ( C)存储空间必须连续,且前件元素一定存储在后件元素的前面 ( D)存储空间必须连续,且各元素的存储顺序是任意的 5 在软件设计中,不属于过程设计工具的是 ( A) PDL(过程设计语言 ) ( B) PAD图 ( C) N-s图 ( D) DFD图 6 下列叙述中正确的是 ( A)软件交付使用后还需要进行维护 ( B)软件一旦交付使用就不需要再进行维护 ( C)软件交付使用后其生命周期便结束 ( D)软件维护是指修复程序中被破坏的指令 7 数据库设
3、计的根本目标是要解决 ( A)数据共享问题 ( B)数据安全问题 ( C)大量数据存储问题 ( D)简化数据维护 8 数据库系统的核心是 ( A)数据模型 ( B)数据库管理系统 ( C)数据库 ( D)数据库管理员 9 下列关于 C+函数的叙述中,正确的是 ( A)每个函数至少要具有一个参数 ( B)每个函数都必须返回一个值 ( C)函数在被调用之前必须先声明 ( D)函数不能自己调用自己 10 下列关于类和对象的叙述中,错误的是 ( A)一个类只能有一个对象 ( B)对象是类的具体实例 ( C)类是对某一类对象的抽象 ( D)类和对象的关系是一种数据类型与变量的关系 11 在 C+中,用于
4、实现运行时多态性的是 ( A)内联函数 ( B)重载函数 ( C)模板函数 ( D)虚函数 12 下列关于运算符重载的叙述中,正确的是 ( A)通过运算符重载,可以定义新的运算符 ( B)有的运算符只能作为成员函数重载 ( C)若重载运算符 +,则相应的运算符函数名是 + ( D)重载一个二元运算符时,必须声明两个形参 13 下列关于模板的叙述中,错误的是 ( A)模板声明中的第一个符号总是关键字 template ( B)在模板声明中用 “ ”和 “ ”括起来的部分是模板的形参表 ( C)类模板不能有数据成员 ( D)在一定条件下函数模板的实参可以省略 14 对于语句 cout endl x
5、;中的各个组成部分,下列叙述中错误的是 ( A) “cout”是一个输出流对象 ( B) “endl”的作用是输出回车换行 ( C) “x”是一个变量 ( D) “ ”称作提取运算符 15 下列字符串中,正确的 C+标识符是 ( A) foo-1 ( B) 2b ( C) new ( D) _256 16 已知枚举类型定义语句为: enunl Token NAME, NUMBER, PLUS=5,MINUS, PRINT=10 ; 则下列叙述中错误的是 ( A)枚举常量 NAME的值为 1 ( B)枚举常量 NuMBER的值为 1 ( C)枚举常量 MINus的值为 6 ( D)枚举常量 PR
6、INT的值为 10 17 执行语句序列 inti=0; while(i 25)i+=3; cout i; 输出结果是 ( A) 24 ( B) 25 ( C) 27 ( D) 28 18 要定义一个具有 5个元素的一维数组 veer,并使其各元素的初值依次是 30、50、 -88、 0和 0,则下列定义语句中错误的是 ( A) int vect =30, 50, -88; ( B) int vect =30, 50, -88, 0, 0; ( C) int vect5=30, 50, -88; ( D) int vect5=30, 50, -88, 0, 0; 19 如下程序的输出结果是 #i
7、nclude iostream void fun(int X,inty)intt=x; x=y; y=t; int main( ) int a2=23, 42; fun(a1, a0); std:cout a0 “, “ a1 std:endl; return 0; ( A) 42, 42 ( B) 23, 23 ( C) 23, 42 ( D) 42, 23 20 有如下类声明: class Fooint bar; ; 则 Foo类的成员 bar是 ( A)公有数据成员 ( B)公有成员函数 ( C)私有数据成员 ( D)私有成员函数 21 有如下类声明: class MyBASE int
8、k; public: void set(int n)k=n; int get( )constreturn k; ; class MyDERIVED: protected MyBASE protected: intj; public: void set(int m, int n)MyBASE:set(m); j=n; int get( )constreturn MyBASE:get( )+j; ; 则类 MyDERIVED中保护的数据成员和成员函数的个数是 ( A) 4 ( B) 3 ( C) 2 ( D) 1 22 已知在一个类体中包含如下函数原型 : VOLUME operator-(VOL
9、UME)const;,下列关于这个函数的叙述中,错误的是 ( A)这是运算符一的重载运算符函数 ( B)这个函数所重载的运算符是一个一元运算符 ( C)这是一个成员函 ( D)这个函数不改变类的任何数据成员的值 23 有如下函数模板定义: template class T T func(T x, T y)return x*x+y*y; 在下列对 func的调用中,错误的是 ( A) func(3, 5); ( B) func(3 0, 5 5); ( C) func(3, 5 5); ( D) fune int (3, 5 5); 24 如下程序的输出结果是 #include iostream
10、 using namespaee std; int main( ) eout.fill(*); eout.width(6); cout.fill(#): eout (123 endl: return 0; ( A) #123 ( B) 123# ( C) *123 ( D) 123* 25 在下列函数原型中,可以作为类 AA构造函数的是 ( A) void AA(int); ( B) int AA( ); ( C) AA(int)eonst; ( D) AA(int); 26 下列关于 this指针的叙述中,正确的是 ( A)任何与类相关的函数都有 this指针 ( B)类的成员函数都有 th
11、is指针 ( C)类的友元函数都有 this指针 ( D)类的非静态成员函数才有 this指针 27 如下 程序的输出结果是 #include iostream using namespace std; class Test public: Test( )n+=2; Test( )n-=3; static int getNum( )return n; private: static int n; ; int Test:n=1; int main( ) Test*P=new Test: delete P; cout “n=“ Test:getNum( ) endl; return 0; ( A)
12、 n=0 ( B) n=1 ( C) n=2 ( D) n=3 28 如下程序的输出结果是 #include iostream using namespace std; class A public: A( )cout “A“; ; class Bpublic: B( )cout“B“; ; class C: public A B b; public: C( )cout “C“; ; int main( )C obj; return 0; ( A) CBA ( B) BAC ( C) ACB ( D) ABC 29 有如下类声明: class XA int x; public: XA(int
13、U)x=n; ; class XB: public XA int y; public: XB(int a, int B) ; ; 在构造函数 XB的下列定义中,正确的是 ( A) XB:XB(int a, int B) :x(A) , y(B) ( B) XB:xB(int a, int B) : XA(A) , y(B) ( C) XB:XB(int a, int B) : x(A) , XB(B) ( D) XB:XB(int a, int B) : XA(A) , XB(B) 30 有如下程序: #include iostream using namespace std; class B
14、ASE public: BASE( )cout “BASE“; ; class DERIVED: public BASE public: DERIVED( )cout “DERIVED“; ; int main( )DERIVED x; return 0; 程序的输出结果是 ( A) BASE ( B) DERIVED ( C) BASEDERIVED ( D) DERIVEDBASE 31 在表 达式 x+y*z中, +是作为成员函数重载的运算符, *是作为非成员函数重载的运算符。下列叙述中正确的是 ( A) operator+有两个参数, operator*有两个参数 ( B) opera
15、tor+有两个参数, operator*有一个参数 ( C) operator+有一个参数, operator*有两个参数 ( D) operator+有一个参数, operator*有一个参数 32 下列关于 C+流的叙述中,正确的是 ( A) cin是一个输入流对象 ( B)可以用 ifstream定义一个输出流对象 ( C) 执行语句序列 char*y=“PQMNIt“; cout y;将输出字符串 “PQMN“的地址 ( D)执行语句序列 char x80; cin getllne(x, 80);时,若输入 Happyr new year 则 x中的字符串是 “HaPPy“。 33 有
16、如下程序: #include iostream using name。 pace std; class AA int n: public: AA(int k):n(k) in get( )return n; int get( )constreturn n+1; ; int main( ) AA a(5); const AA b(6); cout a get( )b get( ); return 0: 执行后的输出结果是 ( A) 55 ( B) 57 ( C) 75 ( D) 77 34 在深度为 7的满二叉树中,度为 2的结点个数为 _。 35 软件测试分为白箱 (盒 )测试和黑箱 (盒 )
17、测试,等价类划分法属于 _测试。 36 在数据库系统中,实现各种数据管理功能的核心软件称为 _。 37 软件生命周期可分为多个阶段,一般分为定义阶段、开发和维护阶段。编码和测试属于 _阶段。 38 在结构化分析使用的数据流图 (DFD) 中,利用 _对其中的图形元素进行确切解释。 39 C+中只有两个逻辑常量: true和 _。 40 若要访问指针变量 p所指向的数据,应使用表达式 _。 41 已知一个函数的原型是: int fn(toubie x); 若要以 5.27为实参调用该函数,应使用表达式 _。 42 有如下定义: class MA int value: public: MA(int
18、 n=0):v; alut(n) ; MA * ta, tb: 其中 MA类的对象名标识符是 _。 43 如下类定义中包含了构造函数和复制构造函数的原型声明,请在画线处填写正确的内容,使复制构造函数的声明完整。 class my(21ass private: int data: public: MyClass(int value); /构造函数 MyClass(const_anotherObject); /复制构造函数 44 用来派生新类的类称为 _,而派生出的新类称为它的子类或派生类。 45 有如下程序: #include iostream using namespace std; clas
19、s CA public: CA( )cout A; ; class CB:private CA public: CB( )cout B; ; int main( ) CA a; CB b; return 0; 运行时的输出结果是 _。 46 若将一个二元运算符重载为类的成员函数,其形参个数应该是 _个。 47 有如下程序: #include iostream using namespace std; class DA int k; public: DA(int x=1): k(X) DA( )cout k; ; int main( ) DA d =DA(3), DA(3), DA(3); DA
20、 * P=new DA2; delete P; return 0; 程序的输出结果是 _。 48 C+语言中的多态性分为编译时的多态性和 _时的多态性。 国家二级 ( C+)笔试模拟试卷 177答案与解析 1 【正确答案】 D 【试题解析】 数据的存储结构是建立一种由逻辑结构到存储空间的映射,是数据的逻辑结构在计算机中的表示 . 2 【正确答案】 B 【试题解析】 栈是一种数据结构,是在某一端进行插入和删除操作的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶。在栈顶进行插入和删除操作,不需要修改栈底指针,栈的实现可以采用顺序存储也可以采用链表存储。 3 【正
21、确答案】 D 【试题解析】 对于长度为 n的线性表,在 最坏情况下,采用冒泡排序的比较次数为 n(n-1)/2。对于快速排序,最坏情况是整个序列都已经有序或完全倒序,此时,快速排序退化为冒泡排序,比较次数为 n(n-1)/2。 4 【正确答案】 A 【试题解析】 在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。 5 【正确答案】 D 【试题解析】 PDL一种设计性语言,用于书写软件设计规约。它是软件设计中广泛使用的语言之一。 N-S图是无线的流 程图,是算法描述工具; PAD图是问题分析图,
22、它用二维树状结构的图表示程序的控制流,将这种图转换为程序代码比较容易。此 3类均是过程设计工具,数据流图 (Data Function Diagram):又名数据功能图表,简称 DFD,是采用图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。 6 【正确答案】 A 【试题解析】 软件从交付使用一直到其生命周期结束都需要不断的维护,通常有4类维护活动:改正性维护,也就是诊断 和改正在使用过程中发现的软件错误;适应性维护,即修改软件以适应环境的变化完善性维护,即根据用户的要求改进或扩充软件使它更完善;预防性维护
23、,即修改软件为将来的维护活动预先做准备。 7 【正确答案】 A 【试题解析】 数据库 (Database)是按照数据结构来组织、存储和管理数据的仓库,设计数据库的根本目标就是为解决数据的共享问题。 8 【正确答案】 B 【试题解析】 数据库管理系统是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称 DBMS。它对数据库进行统一的管理和控制 ,以保证数据库的安全性和完整性,是数据库的核心。 9 【正确答案】 C 【试题解析】 一个函数可以没有形参,也可以为 void空函数,但是函数调用前必须在主调函数中声明,函数可以递归调用自己。 10 【正确答案】 A 【试题解析】 类是对某一
24、类对象的抽象,对象是类的实例化,一个类可以有多个实例对象 11 【正确答案】 D 【试题解析】 C+支持动态联编和静态联编,动态联编是指联编要在程序运行时动态进行,可实现运行时多态,运行时多态可使用虚函数来实现。 12 【正确答案】 B 【试题解析】 运算符重载只能重载现有的运算符,不能创建新的运算符,在重载( )、 、 -、 =时必须将重载函数声明为成员函数。而不能声明为友元函数,重载二元运算符为成员函数时,该函数只有一个形参,另外一个参数则隐含为本对象自身。重载的一般形式为: 类型 类名 :operator重载运算符 (参数列表 ) 13 【正确答案】 C 【试题解析】 模板定义 temp
25、late模板参数表 类声明 (函数定义 ) 必须以 template为开头,括起来部分 是模板的类型参数,类模板有数据成员和成员函数。 14 【正确答案】 D 【试题解析】 是流插入运算符,是提取运算符 15 【正确答案】 D 【试题解析】 在 C+中,变量标识符必须以大小写字母、下画线开始,是由数字或者字母下画线等组成的一个字符串,其中 C+关键字不能作为标识符,不能包含 -、 +、 *、 /等运算符号。 16 【正确答案】 A 【试题解析】 对于枚举变量中的枚举元素,系统是按照常量来处理的。如果没有进行元素赋值操作,那么元素将会被系统自动从 0开始自动递增地进 行赋值操作,但是,如果一旦定
26、义了某一个元素,那么系统将对下一个元素进行前一个元素的值加 1操作。 17 【正确答案】 C 【试题解析】 while() 满足条件进行循环,所以当 i=24时最后一次进入循环, i=27时退出循环。 18 【正确答案】 A 【试题解析】 int vect =30, 50, -88;只能保证数组有 3个元素,而不是 5个元素。 19 【正确答案】 B 【试题解析】 参数 X是引用传递,传递的是地址:参数 Y是值传递,函数 fun( )是做 X与 Y值交 换,交换后 X的值要被回传给 a1,此时 a1=a0=23。 20 【正确答案】 C 【试题解析】 在数据成员定义时,如果没有 protect
27、ed等限定符,则自动被默认为私有数据成员。 21 【正确答案】 B 【试题解析】 在保护派生的单继承中,基类的公有数据成员和成员函数在派生类中成为保护成员。 22 【正确答案】 B 【试题解析】 二元运算符被重载为类的成员函数时,只需要定义一个参数,而另外一个参数为该对象自身。 23 【正确答案】 C 【试题解析】 在模 板函数调用中,当没有类型参数时,要求函数调用的实参必须类型相同,如果实参类型不相同,则必须有类型参数加以强制转换,否则编译会报错。 24 【正确答案】 A 【试题解析】 eout fill(#);是填充语句,它只是对跟在其后的一个 eout语句起作用,在没有使用 set(io
28、s:)设置对齐方式的情况下,默认为右对齐、左填充。 25 【正确答案】 D 【试题解析】 类的构造函数不能有返回值,也不能定义为返回空函数,或者用const修饰定义为常函数。 26 【正确答案】 D 【试题解析】 类的静态成员函数和友元函数都不能有 this指针,只有非静态成员函数和友元函数才能有 this指针。故答案为 D。 27 【正确答案】 A 【试题解析】 静态数据成员的初始值 n=1,执行 Test*p=new Test;,调用构造函数后, n= 3, deletep;调用析构函数, n-=3,所以最终 n=0。 28 【正确答案】 D 【试题解析】 派生类的构造函数的执行顺序是,先
29、调用基类的构造函数,然后调用派生类的构造函数。当类中的数据成员为对象时,先调用对象成员的构造函数。 29 【正确答案】 B 【试题解析】 在派生类的构造函数声明中,一般格式为: 派生类名 (参数总表 ):基类名 (参数总表 ),对象成员名 (参数表 ) XB继承 XA,基类 XA的构造函数带有参数,所以必须给 XA的构造函数的形参赋值,同时也可以为数据成员 Y赋值。 30 【正确答案】 D 【试题解析】 基类和派生类的析构函数的执行顺序是先执行派生类的析构函数,最后执行基类的析构函数;故先执行 DIVERED的析构函数,后执行 BASE的析构函数。 31 【正确答案】 C 【试题 解析】 +作
30、为双目成员函数运算符重载时,只有一个参数,另一个参数为对象本身, *作为非成员函数重载有两个参数。 32 【正确答案】 A 【试题解析】 在 C+中, cin作为输入流对象, cout作为输出流对象, ifstream作为文件输入流对象, ofstream作为文件输出流对象。数组指针指向的是数组的首地址,而不是整个数组地址集合。 cin getline(变量,整数 )的作用是得到整行并将其赋值给变量。 33 【正确答案】 B 【试题解析】 如果一个对象被定义为常对象,则它只能调用该类的常 成员函数而不能调用其他的成员函数。 34 【正确答案】 63 35 【正确答案】 黑盒 【试题解析】 等价
31、类划分法是将所有可能的输入数据,即程序的输入域划分为若干部分 (子集 ),然后从每个子集中选择少数具有代表性的数据作为测试用例。该方法是一种常用的黑盒用例分析方法。 36 【正确答案】 DBMS 【试题解析】 一个完整的数据库系统 (DBS)包括数据库 (DB) 和数据库管理系统(DBMs),其中,数据库管理系统实现各种数据管理功能,是数据库系统的核心。 37 【正确答案】 开发 【试题解析】 软件的生命周期一般包括 3个阶段:软件定义、软件开发及软件维护阶段。软件定义阶段包括:可行性研究与计划制定和需求分析阶段;软件的开发阶段包括了软件设计、软件实现软件的编码和测试等内容;在软件维护阶段,主
32、要是对软件的运行和维护。 38 【正确答案】 数据字典 【试题解析】 DFD图是数据处理过程的工具,是需求理解的逻辑模型的图形表示,它直接支持系统的功能建模。 DFD图从数据传递和加工的角度,来刻画数据流从输入到输出变换过程。 数据词典是结构化分析方法的核心,数据词典是对所有与 系统相关的数据元素的一个组织的列表。概括来说,数据词典的作用是对 DFD中出现的被命名的图形元素的确切解释。 39 【正确答案】 false 【试题解析】 C+规定,逻辑 bool型有两个值,即 true和 false。 40 【正确答案】 * P 【试题解析】 C+语法规定。 41 【正确答案】 fn(5.27) 【
33、试题解析】 函数调用,注意形参的个数和类型的匹配问题。 42 【正确答案】 tb 【试题解析】 对象的定义一般格式为: 类名对象名 43 【正确 答案】 myclass 【试题解析】 由拷贝构造函数的声明的结构决定,格式为:类名 (const,类名对象名 ) 。 44 【正确答案】 基类 【试题解析】 被继承的类叫基类,或者父类,用来派生其他子类。 45 【正确答案】 AAB 【试题解析】 CA a生成一个 cA类对象 a,调用 CA的构造函数一次,打印 A。CB b中的 b是派生类,在构造时先调用基类的构造函数,然后调用派生类的构造函数,故先打印 A后打印 B。 46 【正确答案】 1 【试
34、题 解析】 将一个二元运算符重载为类的成员函数,其形参个数应该是 1个;如果将二元运算符重载为类的友元函数,则其形参个数应该是 2个。 47 【正确答案】 11333 【试题解析】 DA d =DA(3), DA(3), DA(3); d 虽然有 3个元素,但是是同一个对象,所以只调用一次 DA的构造函数,打印 1, DA*p=new DA2;调用一次 DA构造函数,打印 1, delete p,删除 p数组的两个元素,调用两次析构函数,打印两次 3,最后程序结束,删除 d ,调用一次析构函数,打印一次 3。 48 【正确答案】 运行 【试题解析】 C+中的多态性分为编译多态和运行时多态性。运行时多态性通过虚函数来实现。