1、国家二级( C+)笔试模拟试卷 263及答案与解析 1 有如下语句序列: int k=0: d0k+=5; cout $; wbile(k 19); while(k- 0)cout *; 执行上面的语句后,序列输出字符 $和 *的个数分别是 A) 4和 20 B) 5和 20 C) 4和 21 D) 5和 21 2 下述各描述中不属于白盒测试法概念的是 ( A)至少执行一次模块中的所有独立路径 ( B)执行边界条件下的所有循环 ( C)所有判断的每一分支至少执行一次 ( D)执行边界条件下的所有接口 3 下列不属于结构化分析的常用工具的是 ( A)数据流图 ( B)数据字典 ( C)判定树 (
2、 D) PAD图 4 5 下面数据结构中 ,属于非线性的是 ( ) ( A)线性表 ( B)队列 ( C)树 ( D)栈 6 在软件测试设计中,软件测试的主要目的是 ( )。 ( A)实验性运行软件 ( B)证明软件正确 ( C)演示软件的正确功能 ( D)发现软件错误而执行程序 7 以下不使用线性结构表示实体之间联系的模型的是 ( )。 ( A) 线性表 ( B)栈和队列 ( C)二叉树 ( D)以上三个都不是 8 数据库的数据模型所描述的内容有三个部分,它们是 ( )。 ( A)数据结构、数据操作和数据约束 ( B)概念数据模型、逻辑数据模型和物理数据模型 ( C)现实世界、信息世界和计算
3、机世界 ( D)概念模式、外模式和内模式 9 下列定义中, Sample是一个类, ( )是定义指向对象数组的指针 p. ( A) Sample*P 5 ( B) Sample (*p) 5 ( C) (Sample*) P5 ( D) Sample *P 10 下列叙述中正确的是 ( A)软件测试的主要目的是发现程序中的错误 ( B)软件测试的主要目的是确定程序中错误的位置 ( C)为了提高软件测试的效率,最好由程序编制者自己来完成软件测试的工作 ( D)软件测试是证明软件没有错误 11 对于重载的运算符,它是一个 ( A)用于输入的友元函数 ( B)用于输入的成员函数 ( C)用于输出的友
4、元函数 ( D)用于输出的成员函数 12 下列程序的执行结果是 ( )。 #include iostream.h #include stdlib.h class TestClass public: intx,y; TestClass()x=y=0; TestClass(int a,int b)x=a;y=b; void disp() cout “X“=“ X “,y=“ y endl; ( A) x=2,y=2 ( B) x=3,y=3 ( C) x=2,y=3 ( D) x=3,y=2 13 下列定义中 p指向的地址可更改,但 * p不能够更改的是 ( A) const int * p; (
5、 B) int * const p; ( C) const int * const p; ( D) int * p; 14 对于一个类定义,下列叙述中错误的是 ( )。 ( A)如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数 ( B)如果没有定义缺省的构造函数,编译器将一定生成一个缺省的构造函数 ( C)如果没有定义构造函数,编译 器将生成一个缺省的构造函数和一个拷贝构造函数 ( D)如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造函数 15 有以下程序,在横线应添加 ( )。 #include using namespace std; class TestClass pu
6、blic: TestClass(int n)number=n; _拷贝构造函数 TestClass () private: intnumber; ; TestClass fun(TestClass p) TestClass temp(p); return temp; int main() TestClass obj1(10), obj2(0); TestClass obj3(obj1); obj2=fun(obj3); return0: ( A) TestClass(TestClassclass CSum int x,y; public: CSum (int x0,int y0):x(x0),
7、y(y0) friend ostream return os; ;int main() CSum y(3,5); cout setfill(*) 8; cout y; return 0;执行上面程序的输出是 ( )。 ( A) 88 ( B) *88 ( C) *8*8 ( D) 8*8 20 下面关于纯虚函数和抽象类的描述中, _ 是错误的。 ( A)纯虚函数是一种特殊的虚函数,它没有具体意义 ( B)一个基类中的说明有纯虚函数,该基类的派生类一定不再是抽象类 ( C)抽象类只能作为基类来使用,其纯虚函数的定义由派生类给出 ( D)抽象类是指具有纯虚函数的类 21 下选项中不属于 c+的类型
8、的是 _。 ( A) signed Short int ( B) unsigned long int ( C) unsigned int ( D) long short 22 下列程序的运行结果为 #include iostream, h Template class TT class FF TT a1, a2, a3; public; FF(TTb1, TTb2, TTb3)a1=b1; a2=b2;a3=b3; TT Sum()return a1+a2+a3; ; void main() FF intx(in(1.1), 2, 3), y(int(4.2), 5, 6); cout x S
9、um() y Sum() end1; ( A) 6.1 15.2 ( B) 6 15 ( C) 615.2 ( D) 6.1 15 23 以下 ( )成员函数表示纯虚函数。 ( A) virtual int vf(int) ( B) void vf(int)=0 ( C) virtual void vf()=0 ( D) virtual void vf(int) 24 若有说明 int a34;,则 a数组元素 的非法引用是 ( A) a02*1) ( B) a13 ( C) a4-2O ( D) a04) 25 若已定义: int a =0, 1, 2, 3, 4, 5, 6, 7, 8,
10、9, *p=a, i; 其中0i9,则对 a数组元素不正确的引用是 ( A) ap a ( B) *( 其中0i9,则对 a数组元素不正确的引用是 ( A) ap a ( B) *( void fun2() cout“Derivedn“; ; void f(Base b.fun2(); int main() Derived obj; f(obj); return 0; 执行这个程序的输出结果是 ( A) Base Base ( B) Base Derived ( C) Derived Base ( D) Derived Derived 35 有如下函数定义; void func(int a,
11、int i =3; i+) for(intj=1; j =i; j+) sum+; 39 请将下列类定义补充完整。 class Basepublic: void fun( )cout “Base:fun“ endl; ; class Derived: public Base public: void fun( ) _ /显式调用基类的 fun函数 cout “Derived:fun“ endt; ; 40 利用表达式 ai可以访问 int型数组 a中下标为 i的元素。在执行了语句int*p=a;后,利用指针 p也可访问该元素,相应的表达式是 _。 41 表达式 operator (x, y)
12、还可以表示为 _。 42 已知一个函数模板定义为 template typename T1 typenaine T2 T1 FUN(T2 n)return n*5.0; 若要求以 int型数据 7为函数实参调用该模板函数,并返回一个 double型数据,则该调用应表示为 _。 43 语句 cout n还可表示为【 】。 44 若有以下程序: #include iostream using namespace std; class Base public: void who() cout “class Base“ end1; ; class Derivedl : public Base publ
13、ic: void who() cout “class Derivedl“ end1; ; class Derived2 : public Base public: void who() cout “class Derived2“ end1; ; int main() Base *p; Derivedl obj1; Derived2 obi2; p= p= p- who ( ); return 0; 则该程序运行后的输出结果是【 】。 45 若有以下程序: #include iostream using namespace std; int main() char a; a=H-A+0; cou
14、t a end1; return 0; 执行后输出的结果是【 】。 46 对基类数据成员的初始化必须在派生类构造函数中的 _ 处执行。 47 常用的黑箱测试有等价分类法、 _ 、因果图法和错误推测法 4种。 48 C+语言提供的基本控制结构可以分为 3种类型:顺序结构、【 】和循环结构。 49 在派生类中,对类对象成员,基类成员和非类对象成员的初始化程序是【 】。 50 在 C+语言的结构化程序设计中,【 】是程序的基本组成单元;在 C+语言的面向对象设计框架中,【 】是程序的基本组成单元。 国家二级( C+)笔试模拟试卷 263答案与解析 1 【正确答案】 A 2 【正确答案】 D 【试题解
15、析】 白箱测试用例的设计准则有:语句覆盖,分支 覆盖,条件覆盖和组合条件覆盖。语句覆盖准则是企图用足够多的测试用例,使程序中的每个语句都执行一遍,以便尽可能多地发现程序中的错误。分支覆盖准则也称为判定覆盖准则。它要求通过足够多的测试用例,使程序中的每个分支至少通过一次。条件覆盖准则是通过执行足够多的测试用例,使每个判定中的每个条件都能取到两种不同的结果 (“真 ”与 “假 ”)。组合条件覆盖准则要求通过足够多的测试用例,使每个判定中各条件的各种可能组合至少出现一次。由此可知,选项 D不属于白盒测试法概念。 3 【正确答案】 D 【试题解析】 结构化分析的 常用工具有数据流图、数据字典、判定树和
16、判定表。而 PAD图是常见的过程设计工具中的图形设计工具。 4 【正确答案】 B 5 【正确答案】 C 6 【正确答案】 D 【试题解析】 使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。软件测试是为了发现错误而执行程序的过程。测试要以查找错误为中心,而不是为了演示软件的正确功能。 7 【正确答案】 C 8 【正确答案】 A 【试题解析】 数据模型是数据特征的抽象,它所描 述的内容有三个部分,它们是数据结构、数据操作和数据约束。 9 【正确答案】 B 10 【正确答案】 A 【试题解析】 本题考查软件工程中测试的目的和方法。
17、仅就软件测试而言,它的目的是发现软件的中的错误,但是,发现错误并不是最终目的,最终目的是通过测试发现错误之后还必须诊断并改正错误,这就是调试的目的。由于测试的目标是暴露程序中的错误,从心理学角度看,由程序的编写者自己进行测试是不恰当的。因此,在软件测试阶段通常由其他人员组成测试小组来完成测试工作。因此,经过上述分析可知选项 A的说法是正确的,而 选项 B、 C、 D的说法是错误的。 11 【正确答案】 A 12 【正确答案】 C 【试题解析】 由主函数入手,定义了类 TestClass 的对象 s1(2, 3),当类对象进入其作用域时调用构造函数,构造函数应该是调用具有参数的 “TestCla
18、ss(int a,int b) x=a; y=b; )”。然后引用成员函数 disp(),则输出为 “cout ”x=“ x ”, y=“ y endl; ”。即 x=2,y=3。 13 【正确答案】 A 【试题解析】 const int * p;是只能 改变指针地址, int * const p;是只能改变 * p的内容, const int * const p;是指针的地址和 * p的内容都不能改变, int * p;是两者都能改变。 14 【正确答案】 B 【试题解析】 此题考查的是构造函数。如果一个类中没有定义任何构造函数,编译器将生成一个不带参数的公有缺省构造函数。但只要定义了一个任
19、意的构造函数,就不会生成缺省构造函数了。 15 【正确答案】 A 【试题解析】 拷贝构造函数也是构造函数,但它只有一个参数。这个参数是本类的对象,即 other,所以赋值操作将本类的参数 other number赋值给 number;而且采用对象的引用的形式,也就是 &other。 16 【正确答案】 B 【试题解析】 C+中的四个预定义流对象: cout, cin, corr, clog。 17 【正确答案】 A 【试题解析】 头结点不仅标识了表中首结点的位置,而且根据单链表 (包含头结点 )的结构,只要掌握了表头,就能够访问整个链表,因此增加头结点目的是为了便于运算的实现。 18 【正确答
20、案】 A 19 【正确答案】 D 20 【正确答案】 B 21 【正确答案】 D 22 【正确答案】 B 【试题解析】 本题考查模板函数的应用,表达式 int(1.1)和 int(4.2)是将 1.1和 4.2强制转换为整型。 23 【正确答案】 C 24 【正确答案】 D 【试题解析】 本题定义 a为 3行 x4列的数组,它可用的行下标最大为 2,列下标最大为 3。注意: a0)4超过了数组的范围。注意:数组的下标是从 0开始的。 25 【正确答案】 D 【试题解析】 通常,引用一个数组元素可以用下标法,如 ap-a形式,或指针法, 如 *(&ai)的形式。本题中 a9=9, a10显然超出
21、了数组范围,注意,数组的下标是从 0开始的。 26 【正确答案】 D 【试题解析】 对于选项 A,由于表达式 “p=&my; ”只是把对象 my 的地址赋值给指针变量 p,而不是对象 my 本身。所以选项 A的描述是错误的。 对于选项 B,语句 “MyClass*p, my; ”仅调用一次类 MyClass 的构造函数,因为指针 p 本身不定义类对象,而是定义了 p 可以指向一个 MyClass 的对象,所以在定义指针对象时系统不会调用类的构造函数。所以选项 B 的描述也是 错误的。 对于选项 C,根据运算符的优先级,语句 “*p.SetVariable; ”等价于“*(p SetVariab
22、le)”,显然这与原来的语句不同,正确的调用方式是(*p) SetVariable。所以选项 C的描述也是错误。 对于选项 D,由于 p是对象指针,所以调用 p 的成员要用符号 “- ”。而 my 是一般的类对象,所以调用 my 的成员用 “.”符。所以选项 D是正确。 27 【正确答案】 B 【试题解析】 使用虚函数时必须注意下列事项: 只有类的成员函数才能说明为虚函数。这是因为虚函数 仅适用于有继承关系的类对象,所以普通函数不能说明为虚函数。 静态成员函数不能是虚函数,因为静态成员函数不受限于某个对象。 内联函数不能是虚函数,因为内联函数是不能在运行中动态确定其位置。即使虚函数在类的内部定
23、义,编译时仍将其看作是非内联的。 构造函数不能是虚函数,因为构造时对象还是一片未定型的空间。只有在构造完成后,对象才能成为一个类的名副其实的实例。 析构函数可以是虚函数,而且通常说明为虚函数。说明虚函数的目的在于;使用 delete运算符删除一个对象时,能确保析构函数被正 确地执行。这是因为设置虚析构函数后,可以利用动态联编方式选择析构函数。 一般要求基类中说明了虚函数后,派生类说明的虚函数应该与基类中虚函数的参数个数相等,对应参数的类型相同。如果不相同,则将派生类虚函数的参数类型强制转换为基类中虚函数的参数类型。 28 【正确答案】 A 【试题解析】 本题考核纯虚函数和抽象类的定义。 基类的
24、虚函数有时候不可能被调用到,这时可定义该虚函数为纯虚函数。纯虚函数没有函数体,但一定要进行说明,它告诉编译器,它的具体实现在派生类中。所以选项 A的说法是错误的 。 抽象类是指至少有一个纯虚函数的类。它往往表示一些抽象的概念,它的成员函数没有什么意义。所以选项 B 的描述是正确的。 抽象类是一种特殊的类,它是为了抽象和设计的目的而建立的,它处于继承层次结构的上层。抽象类的主要作用是将有关的类组织在一个继承层次结构中,由它来为它们提供一个公共的根,相关的子类是从这个根派生出来的。 对于抽象类的使用有几点规定:抽象类只能用作其他类的基类,不能建立抽象类对象。抽象类不能用作参数类型、函数返回类型或显
25、式转换的类型。可以说明指向抽象类的指针和引用,此指针可以 指向它的派生类,进而实现多态性。 由此可知选项 C和 D的描述是正确的。 29 【正确答案】 C 【试题解析】 本题考核模板函数的使用。在说明一个函数模板后,当编译系统发现有一个对应的函数调用时,将根据实参中的类型来确认是否匹配函数模板中对象的形参,然后生成一个重载函数。由此可知模板函数的真正代码是在函数调用时产生的。 30 【正确答案】 C 【试题解析】 本题主要考核作用域分辨符的使用。作用域分辨符 “:”可以用来限定要访问的成员所在类的名称。 31 【正确答案】 C 32 【正确答案】 D 【试题解析】 在 C+语言中,逻辑运算符有
26、 4个,它们分别是 !(逻辑非 )、 (逻辑或 )、 &(逻辑与 )、 (异或 )。在位运算里面还有 &(位与 )、 |(位或 )的运算。本题考查逻辑与运算符的用法,在语句 x=(a&b)&(c B);中,先判断 a&b 条件,逻辑与条件的两边都要保证为 1,即 a和 b都成立,当然 c B是成立的,显然,该表达式的值为 1。 33 【正确答案】 D 【试题解析】 通常,引用一个数组元素可以用下标法,如 ap-a形式,或指针法,如 *(&ai)的形式 。本题中 a9=9, a10显然超出了数组范围,注意,数组的下标是从 0开始的。 34 【正确答案】 B 【试题解析】 本题考查的是虚函数的概念
27、。在 C+中,一个派生类的对象可以被它的任何一个基类的指针所指向 (或被基类类型的引用所引用 )。若基类和派生类中存在一模一样的成员函数,那么通过该基类指针 (或引用 )调用这样的成员函数,究竟是应该调用基类中的还是调用派生类中的呢 ?答案是:若这个成员函数被定义成虚函数,那么就调用派生类中的;否则会调用基类中的。本题是一个典型的例子, funl()是一般成员函数, fun2()是虚函数,而且在派生类与基类中都存在两个这样的函数。在 f()函数中,形参 b是一个基类的引用,它引用的是主函数中定义的派生类对象 obi。所以在调用 fun()时,运行的是基类的版本,而 fun2()运行的是派生类的
28、版本。故选项 B 中的结果是正确的。 35 【正确答案】 C 【试题解析】 本题考查的知识点是:函数参数的传递方式。 C+的默认参数传递方式是传值,即将实参值的副本传递 (拷贝 )给被调用函数的形参。如果需要传地址,可通过传递指针、引用或数组类型的参数来实现。传值时,对形参的改变不会影响 到实参;而传地址,则会同时改变实参。本题中形参 a是普通参数,即传值调用,函数中对 a增 1不会影响到实参 x的值;而形参 b 是引用,即传址调用,函数中对 b 增 1同时也改变了实参 y的值 (y 也增 1了 )。故最终结果是 0和2,应该选择 C。 36 【正确答案】 顺序存储 (或顺序方式存储 ) 【试
29、题解析】 二分法查找对表的要求是有序的顺序表,即第一要求是数据元素有序,第二要求是按顺序方式存储。 37 【正确答案】 队列。 【试题解析】 队列是一种特殊的线性表,只允许在表的一端插入元素,在表的另一端删除元素,插 入元素的一端叫做 “队尾 ”,删除元素的一端叫做 “队头 ”,先插入的元素先被删除,是按先进先出的原则组织数据的。 38 【正确答案】 6 39 【正确答案】 Base:fun( ); 【试题解析】 显式调用基类的成员函数的一般格式为: 基类名 :成员函数名 ( ); 40 【正确答案】 *(p+i) 【试题解析】 指针 p指向数组首地址, p+i指向第 i个元素地址,则 *(p
30、+i)表示第i个元素的值。 41 【正确答案】 x y 【试题解析】 本题考查的是运算符函数的调用,可 以像一般函数那样用函数名进行调用,也可通过运算符构成表达式的形式进行调用。 42 【正确答案】 FUN double (7) 【试题解析】 实参类型和返回值类型不匹配时,需要强制转换参数类型,所以在函数模板调用时要显式地定义参数数据类型 double,将整数 7转换为 double型。 43 【正确答案】 cout endl; 【试题解析】 n 表示换行, endl也可表示换行。注意: endl和 “n“可以通用。 44 【正确答案】 class Derived2 【试题解析】 本题 考核对
31、象指针的应用。主函数中定义了一个 Base类对象指针p,然后逐步被赋值为 obj1和 obj2,最后通过对象指针 p调用函数 who(),也即调用 Derived2中的函数 who(),输出 class Derived2。 45 【正确答案】 7 【试题解析】 字符型数据可作为整型参加算术运算,其值为其对应的 ASCII码。 H-A的结果是 7,加 0后是 7的 ASCII码,所以输出的是字符 7。 46 【正确答案】 成员初始化列表 47 【正确答案】 边值分析法 48 【正确答案】 选择 结构 【试题解析】 顺序结构 (也叫连续结构 )和循环结构是经常被使用的,不过选择结构 (if 和 switch)也是一种重要的流程控制结构。 49 【正确答案】 基类成员 类对象成员 非类对象成员 【试题解析】 在派生类的初始化过程中,最先初始化的是基类对象,然后是其他类的对象成员,包括自身类对象的引用或指针,或其他类的对象,最后在是非类对象成员。析构的时候则反之。 50 【正确答案】 函数 类 【试题解析】 函数是程序功能实现的主要方式,是实现结构化设计 (将程序分成若干个函数实现 )的基本 组成;类是一种用户定义的类型,是实现数据封装和数据抽象的工具,是面向对象设计中的基本组成。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1