[计算机类试卷]国家二级(C++)笔试模拟试卷224及答案与解析.doc

上传人:medalangle361 文档编号:502688 上传时间:2018-11-29 格式:DOC 页数:23 大小:109.50KB
下载 相关 举报
[计算机类试卷]国家二级(C++)笔试模拟试卷224及答案与解析.doc_第1页
第1页 / 共23页
[计算机类试卷]国家二级(C++)笔试模拟试卷224及答案与解析.doc_第2页
第2页 / 共23页
[计算机类试卷]国家二级(C++)笔试模拟试卷224及答案与解析.doc_第3页
第3页 / 共23页
[计算机类试卷]国家二级(C++)笔试模拟试卷224及答案与解析.doc_第4页
第4页 / 共23页
[计算机类试卷]国家二级(C++)笔试模拟试卷224及答案与解析.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

1、国家二级( C+)笔试模拟试卷 224及答案与解析 1 下列叙述中正确的是 ( A)程序设计就是编制程序 ( B)程序的测试必须由程序员自己去完成 ( C)程序经调试改错后还应进行再测试 ( D)程序经调试改错后不必进行再测试 2 下列叙述中正确的是 ( )。 ( A)线性链表是线性表的链式存储结构 ( B)栈与队列是非线性结构 ( C)双向链表是非线性结构 ( D)只有根结点的二叉树是线性结构 3 设有下列二叉树: 对此二叉树前序遍历的结果为 ( A) ZBTYCPXA ( B) ATBZXCYP ( C) ZBTACYXP ( D) ATBZXCPY 4 下列选项中不符合良好程序设计风格的

2、是 ( )。 ( A)源程序要文档化 ( B)数据说明的次序要规范化 ( C)避免滥用 goto语句 ( D)模块设计要保证高耦合、高内聚 5 关于函数重载,下列叙述中错误的是 ( A)重载函数的函数名必须相同 ( B)重载函数必须在参数个数或类型上有所不同 ( C)重载函数的返回值类型必须相同 ( D)重载函数的函数体可以有所不同 6 7 8 在结构化方法中,用数据流程图 (DFC) 作为描述工具的软件开发阶段是 ( )。 ( A)可行性分析 ( B)需求分析 ( C)详细设计 ( D)程序编码 9 在深度为 7的满二叉树中,叶子结点的个数为 ( )。 ( A) 32 ( B) 31 ( C

3、) 64 ( D) 63 10 下列选项中,不属于模块间耦合的是 ( A)数据耦合 ( B)同构耦合 ( C)异构耦合 ( D)公用耦合 11 下面关于对象概念的描述中,错误的是 ( A) C+中的对象就是 C语言中的结构变量 ( B)对象代表着正在创建的系统中的一个实体 ( C)对象是一个状态和操作 (或方法 )的封装体 ( D)对象之间的信息传递是通过消息进行的 12 下列程序的输出结果是 ( )。 #include iostream using namespace std; int main() char a=“Hello,Test“; char *p=a; while(*p) if(*

4、p =a else cout *p; p+; return 0; ( A) hello,test ( B) Hello,Test ( C) HELLO,TEST ( D) hELLO,tEST 13 已知 n是一个 int型变量,下列语句中错误的是 ( )。 ( A) long*p=new longn; ( B) long pn; ( C) long*p=new long(n); ( D) long p10; 14 下列运算符中,在 C语言中不能 重载的是 ( A) * ( B) ( C) : : ( D) / 15 有以下程序: #include iostream using namespa

5、ce std; Class sample private: int n; public: sample() sample(int m) n=m; sample add(sample s1, samplc s2) this- n=s1.n+s2.n; return(*this); void disp( ( A) n 10 ( B) n 5 ( C) n 20 ( D) n=15 16 在下面的类定义中,错误的语句是 ( )。 class Sample public: Sample(int val); Sample(); private: int a=2 5; Sample(); ; ( A) (

6、 B) ( C) ( D) 17 运算符重载是对已有的运算符赋予多重的含义,所以 ( )。 ( A)能够对基本类型数据 (如 double),重新定义 “+”运算符的含义 ( B)只能重载 C+中己经有的运算符,不能重新定义新运算符 ( C)能够改变一个已有运算符的优先级和操作数个数 ( D) C+中现有的所有运算符都可以重载 18 重载输入流运算符 “”必须使用的原型为 ( )。 ( A) istreami=8; p= ( B) int * p,i; p= ( C) float * p;int i;p= ( D) float * p;cout * p; 20 MyClock为一个类,则指向

7、“MyClock a,* p;”语句时,调用该类构造函数 ( )次。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 21 下列各项中不符合函数重载必须满足的条件的是 _。 ( A)必须有不同的参数个数 ( B)对应的参数类型必须不相同 ( C) A和 B必须同时满足 ( D) A和 B只要满足一个即可 22 对类的构造函数和析构函数描述正确的是 ( A)构造函数可以重载,析构函数不能重载 ( B)构造函 数不能重载,析构函数可以重载 ( C)构造函数可以重载,析构函数也可以重载 ( D)构造函数不能重载,析构函数也不能重载 23 有以下程序: #include iostream us

8、ing namespace std; class A private: iht a; public: A(int i) a=i; void disp() cout a “,“; class B private: int b; public: B(int j) b-j; void disp() cout b “,“; ; class C: public B,public A private: int c; public: C(int k):A(k-2),B(k+2) c=k; void disp() A:disp(); B:disp(); cout cendl; , int main() C o

9、bj(l0); obj.disp(); return 0; 程序执行后的输出结果是 ( A) 10,10,10 ( B) 10,12,14 ( C) 8,10,12 ( D) 8,12,10 24 下列虚基类的声明中正确的是 ( A) class virtual B: public A ( B) virtual class B: public A ( C) class B: public A virtual ( D) class B: virtual public A 25 下列关于 C+运算符结合性的说法中,错误的是 ( )。 ( A)赋值运算符是右结合性的 ( B)复合运算符是右结合的 (

10、 C)单目运算符是左结合的 ( D)双目算术运算符是左结合的 26 若有以下程序: #include iostream using namespace std; class Base public: Base ( ) x=0; int x; ; class Derivedl : virtual public Base public: Derivedl () x=10; ; class Derived2 : virtual public Base public: Derived2 () x=20; ; class Derived : public Derivedl,protected Deriv

11、ed2 ; int main ( ) Derived obj; cout obj .x end1; return 0; 该程序运行后的输出结果是 ( )。 ( A) 20 ( B) 30 ( C) 10 ( D) 0 27 用链表表示线性表的优点是 ( )。 ( A)便于随机存取 ( B)花费的存储空间较顺序存储少 ( C)便于插入和删除操作 ( D)数据元素的物理顺序与逻辑顺序相同 28 在 C+中,关于下列 设置参数默认值的描述中,正确的是 ( )。 ( A)不允许设置参数的默认值 ( B)设置参数默认值只能在定义函数时设置 ( C)设置参数默认值时,应该是先设置右边的再设置左边的 ( D

12、)设置参数默认值时,应该全部参数都设置 29 以下程序的结果是 #include iostream h void main( ) char * p=“abcdefgh“, * r; long * q; q=(long * )p; q+; r=(char * )q; cout r end1; ( A) defg ( B) cdef ( C) ghab ( D) efgh 30 下列语句的输出结果 cout strlen(“t“065xffn“); ( A) 5 ( B) 14 ( C) 8 ( D)输出项不合法,无正常输出 31 通常拷贝构造函数的参数是 ( A)某个对象名 ( B)某个对象的成

13、员名 ( C)某个对象的引用名 ( D)某个对象的指针名 32 有以下程序 main() char a,b,c, *d; a=;b=xbc; c 0xab;d “0127“; cout a b c *d endl; 编译时出现错误,以下叙述中正确的是 ( A)程序中只有 a=;语句不正确 ( B) b xbc;语句不正确 ( C) d “0127“;语句不正确 ( D) a ;和 c 0xab;语句都不正确 33 在某类的公共部分有声明 string operator+();和 string operator+(int);则说明 ( A) string operator+();是前置自增运算符

14、声明 ( B) string operator+();是后置自增运算符声明 ( C) string operator+(int); 是前置自增运算符声明 ( D)两条语句无区别 34 下列描述中正确的是 ( A)类中可以定义与类名相同的数据成员 ( B)直接于类中可以定义与父类名相同的数据成员 ( C)孙子类中可以定义与爷爷类名相同的数据成员。 ( D)类的所有子孙中都不可以定义与该类同名的数据成员。 35 下列实现 C语言语句 printf(“Hello!“)的相同功能的语句 是 ( )。 ( A) cout “Hello!“ ( B) cin “Hello!“ ( C) cout “Hel

15、lo!“ ( D) cin “Hello!“ 36 设 p是指向一个类动态对象的指针变量,则执行 “delete p;“语句时,将自动调用该类中的 _函数。 37 创建对象数组时,对数组的每一个元素都将调用一次构造函数,如果没有显示给出数组元素的初值,则调用缺省构造函数。下列程序涉及对象数组的创建和单个对象的创建,其输出结果是 _。 #include iostream using namespace std; class Foo public: Foo(int x)cout A; Foo() ; int main() Foo f3, g(3); return 0; 38 39 40 在深度为

16、5的完全二叉树中,叶子结点的个数最多为【 】。 41 请在下列程序中的横线处填写正确的语句。 #include iostream using namespace std; class Base public: void fun()cout “Base fun“ endl; ; class Derivde:public Base public: void fun() _/调用基类的函数 fun() cout “Derived fun“ endl; ; 42 函数重载要求重载的函数必须有和原函数一样的 _。 43 下面是一个栈类的模板,其中 push函数将元素 i压入栈顶, pop函数弹出栈顶元素

17、。栈初始为空, top值为 0,栈顶元素在 stacktop-1中,在下面横线处填上适当语句,完成栈类模板的定义。 template class Tstack enumsize=1000; T stacksize; int top; public: Tstack(): top(0) void push(const T&i) if(top”和输出运算符 “”须使用以下原型: istream&operator(istream&, );。 19 【正确答案】 B 【试题解析】 选项 A中的变量 i没有定义就使用了;选项 C(float)i 把 i中的数据取出后变为 float型,就是一个数值, “&

18、(float)i”不能得到 i的地址;选项 D中的指针变量, p没有赋值就使用,它到底指向哪个存储单元没有指明,它可能指向不可读取的存储单元,这时的破坏性很大。 20 【正确答案】 A 【试题解析】 *p 不调用类的构造函数, *p并不定义类对象,而是定义了一个指针指向一个 MyClock 的对象。 21 【正确答案】 A 22 【正确答案】 A 【试题解析】 一个类中只能定义一个析构函数,否则会造成对同一对象的多次删除;而构造函数可以根据不同的参数个数和类型进行多次重载。 23 【正确答案】 D 【试题解析】 本题考核派生类构造函数的使用。本题中,派生类 C具有多重继承关系,所以在派生类 C

19、的构造函数中应该包含基类 A和 B的成员初始化列表。 24 【正确答案】 D 【试题解析】 本题考核虚基类的声明方式。虚基类说明格式如下: Virtual继承方式基类名 其中, virtual是虚基类的关键词。虚基类的说明是用在定义派生类时,写在派生类名的后面。即: class派生类名: Virtual继承方式基类名。 25 【正确答案】 C 【试题解析】 运算符的结合方式有两种:左结合和右结合。左结合表示运算符优先与其左边的标识符结合进行运算,如加法;右结合表示运算符优先与其右边的标识符结合,如单目算术运算符 +和 -。赋值运算符、复合运算符和单目运算符都是右结合的。双目算术运算符是左结合的

20、。所以选项 C是错误的。 26 【正确答案】 A 【试题解析】 本题中,虽然 Derivedl 和 Derived2 都是由共同的基类 x派生而来的,但由于引入了虚基类,使得它们分别对应基类的不同副本。这时数据成员 x只存在一份拷贝,不论在类 Derived1修改,还是在类 Derived2 中修改,都是直接对这惟一拷贝进行操作。本题程序执行语句 “Derived obj”时,就会先调用虚基类Base的构造函数,使得 x=0,然后执行类 Derived1的构造函数,使得 x=10,再执行类 Derived2的构造函数,使得 x=20。最后输出 x的值为 20。 27 【正确答案】 C 28 【

21、正确答案】 C 29 【正确答案】 D 【试题解析】 C+语言规定,如果指针变量 q 已指向数组中的一个元素,则 (q+指向同一数组中的下一个元素 (而不是将 q 的值简单的加 1)。本题中 q 是 long型指针,每个 long型数据占内存字节数为 4,所以 q+则由当前位置向右移动 4个字节,所以最后显示出的是 efgh。注意:请注意 * (P+)与 ( * p)+的区别。 30 【正确答案】 A 【试题解析】 该字符串中包含的字符是 t (跳格符 )、 “(双引号 )、 065(ASCII值为八进制 065,也 即十进制为 51的字符 )、 xff(ASCII值为十六进制 ff,也即十进

22、制为 255的字符 )、 n(换行符 )。 31 【正确答案】 C 【试题解析】 拷贝初始化构造函数的作用是用一个已知的对象来初始化一个被创建的同类的对象,该函数只有一个参数,并且是对同类的某个对象的引用。 32 【正确答案】 D 【试题解析】 本题考察 C+中各种类型在输出时的转化关系。斜杠为转义控制字符,其后必须紧跟一个字符,故首先可以确定的是 a的赋值语句是错误的,根据选项我们直接看 c的赋值语句是否正确。斜杠后跟 。表示其后为八进制,其值从 0到 7,因此 c的赋值语句也是错误的据此可以判断本题的正确答案应该为 D。 33 【正确答案】 A 【试题解析】 在重载单操作符的过程中,对于像

23、 +和 -这样的操作符,不易区分属于前置还是后置,因此 C+规定了用一个虚的形参来区分前置和后置。 34 【正确答案】 C 【试题解析】 本题所有选项中均提到了同名数据成员的现象。是否允许同名数据成员存在,关键要看这种同名现象编译器是否能够判断出采,如果可以判断,则是允许的,否则则是禁止的。 35 【正确答案】 C 【试题解析】 C+输出语句语法。 36 【正确答案】 析构 37 【正确答案】 A 38 【正确答案】 32 39 【正确答案】 tb 【试题解析】 此题考查的是对象的定义。对象的定义格式如下:类名对象名 (参数表 );所以题目中的 tb 是对象名标识符,而 ta 被定义成类 MA

24、 的指针,故空格处应填 tb。 40 【正确答案】 16 【试题解析】 在深度为 5的完全二叉树中,就属深度为 5的满二叉树中的叶子结点的个数最多,这些叶子结点均在最后一层 (即第 5层 )上。又根据二叉树的性质1:在二叉树 的第 k层上,最多有 2k-1(k1)个结点。因此,在第 5层上最多的结点数为 25-1 16。 41 【正确答案】 Base:fun() 【试题解析】 此题考查的是派生类对基类成员的访问。本题中派生类 Derived覆盖了基类 Base中的 fun(),如果需要调用基类中的 fun(),则需要使用域运算符“:”。故应填写 Base:fun()。 42 【正确答案】 函数

25、名 43 【正确答案】 Stack-top或 sIacktop-=1 或 stacktop=top-1 【试题 解析】 此题考查的是堆栈数据结构。分析题目,首先利用函数voidpush(constT i)将 i压入栈,然后 Tpop()将元素弹出,但由于在压入栈的时候, top值已经增加 1;要弹出元素,须使 top 先减 1,才能把栈顶元素弹出。 44 【正确答案】 8 45 【正确答案】 ID=s. D 或 s. ID=ID 或 this- ID=s. ID 或 s. ID= this- ID 46 【正确答案】 BBBBAACC 【试题解析】 本题考核虚函数。本题中,函数 f()在基类

26、AA中派生 类 CC中都声明为虚函数,所以采用动态联编。主函数首先定义类 AA的对象 aa和指针对象p,然后定义了类 BB的对象 bb,此时调用了类 BB的构造函数输出 BB。再定义类 CC的对象 cc,由于类 CC是类 BB的派生类,所以此时又调用类 BB的构造函数输出 BB。最后执行语句 “p=&cc; p- f(); ”,输出 AA和 CC。 47 【正确答案】 This 【试题解析】 本题考核 C+的标准输入 /输出。提取符可以从输入流中读取一个字符序列,即一个字符串。在处理这种字符序列时,字符串被认为是一个以空白字符结束的字符序列。因此 ,本题得到的输入仅仅是第一个空白符之前的字符序

27、列 This。所以程序最后的输出是 This。 48 【正确答案】 内联 【试题解析】 C+中的成员函数如果它的实现写在了类中,那么该函数就是一个内联函数。注意: C+中内联函数的相关概念。 49 【正确答案】 Sample(int m): con(m+1)n m; 【试题解析】 本题考察常数据成员的初始化方法。常数据成员的定义必须出现在类体中,而且初始化只能通过构造函数的成员初始化列表进行,而且不能被更新。 50 【正确答案】 A() 【试题解析】 本题考查的知识点是:类的构造与析构。本题要求的输出结果中包含 aa,所以基类 A中填空位置处的函数一定要被执行。但主函数中仅仅创建了一个 B 类对象,然后释放了它,并没有调用什么函数。所以可以肯定填空处一定是要定义基类的构造或者析构函数。如果定义的是构造,那么盼肯定在 new操作的时候就会被输出,而下面的 bb 是在析构函数中,会在 delete时被输出。故可肯定应填入基类 A的析构函数定义: A()。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1