1、国家二级 C+机试(选择题)模拟试卷 57 及答案与解析 一、选择题 1 下列关于栈叙述正确的是 ( )。 ( A)算法就是程序 ( B)设计算法时只需要考虑数据结构的设计 ( C)设计算法时只需要考虑结果的可靠性 ( D)以上三种说法都不对 2 下列叙述中正确的是 ( )。 ( A)有一个以上根结点的数据结构不一定是非线性结构 ( B)只有一个根结点的数据结构不一定是线性结构 ( C)循环链表是非线性结构 ( D)双向链表是非线性结构 3 下列关于二叉树的叙述中,正确的是 ( )。 ( A)叶子 结点总是比度为 2的结点少一个 ( B)叶子结点总是比度为 2的结点多一个 ( C)叶子结点数是
2、度为 2的结点数的两倍 ( D)度为 2的结点数是度为 1的结点数的两倍 4 软件生命周期中的活动不包括 ( )。 ( A)市场调研 ( B)需求分析 ( C)软件测试 ( D)软件维护 5 某系统总体结构图如下图所示: 该系统总体结构图的深度是 ( )。 ( A) 7 ( B) 6 ( C) 3 ( D) 2 6 程序调试的任务是 ( )。 ( A)设计测试用例 ( B)验证程序的正确性 ( C)发现程序中的错误 ( D)诊断和改正程序中的错误 7 下列关于数据库设计的叙述中,正确的是 ( )。 ( A)在需求分析阶段建立数据字典 ( B)在概念设计阶段建立数据字典 ( C)在逻辑设计阶段建
3、立数据字典 ( D)在物理设计阶段建立数据字典 8 数据库系统的三级模式不包括 ( )。 ( A)概念模式 ( B)内模式 ( C)外模式 ( D)数据模式 9 有三个关系 R、 S和 T如下: 则由关系 R和S得到关系 T的操作是 ( )。 ( A)自然连接 ( B)交 ( C)投影 ( D)并 10 下列选项中属于面向对象设计 方法主要特征的是 ( )。 ( A)继承 ( B)自顶向下 ( C)模块化 ( D)逐步求精 11 下列字符串中不能作为 C+ 标识符使用的是 ( A) INT ( B) test ( C) _1481 ( D) 1temp 12 下列语句中错误的是 ( A) co
4、nst int *p = 0; ( B) const int y = 99; ( C) const int x; ( D) const int *p = new int(100); 13 有如下程序: #include using namespace std; int main() int sum; for(int i = 0; i using namespace std; class Sample public: Sample() Sample() cout #include using namespace std; class MyBag public: MyBag(string br,s
5、tring cr):brand(br),color(cr) +count; MyBag() -count; static int GetCount() return count; private: string brand,color; static int count; ; _ int main() MyBag one(“CityLife“,“Gray“),two(“Micky“,“Red“); cout using namespace std; class TV public: TV(int s=41):size(s) void Print() cout using namespace s
6、td; class Point public: Point(int xx=0,int yy=0):x(xx),y(yy) void SetX(int xx) x=xx; void SetY(int yy) y=yy; private: int x,y; ; class Circle:Point public: Circle(int r):radius(r) int GetRadius() return radius; private: void SetRadius(int r) radius=r; int radius; ; int main() Circle c1(5); c1.SetX(1
7、); / c1.SetY(2); / c1.SetRadius(10); / cout #include using namespace std; class Person public: Person(string n):name(n) cout #include using namespace std; class Instrument public: Instrument(string t=“乐器 “,string n=“无名 “):type(t),name(n) virtual string GetType() const return “乐器 “; virtual string Ge
8、tName() const return “无名 “; protected: string type,name; ; class Piano:public Instrument public: Piano(string n,string t=“钢琴 “):Instrument(t,n) string GetType() const return “钢琴 “; string GetName() const return name; ; int main() Instrument *pi=new Piano(“星空 “); coutGetType()GetName(); delete pi; re
9、turn 0; 运行时的输出结果是 ( A)钢琴 -星空 ( B)钢琴 -无名 ( C)乐器 -星空 ( D)乐器 -无名 37 下列关于模板的叙述中,错误的是 ( A)调用模板函数时,在一定条件下可以省略模板实参 ( B)可以用 int、 double 这样的类型修饰符来声明模板参数 ( C)模板声明中的关键字 class 都可以用关键字 typename 替代 ( D)模板的形参表中可以有多个参数 38 下列模板 声明中,有语法错误的是 ( A) template T fun(T x)return x; ( B) template T fun(T x, int n) return x*n;
10、 ( C) template T fun(T *p) return *p; ( D) template T class AT n; 39 要利用 C+ 流实现输入输出的各种格式控制,必须在程序中包含的头文件是 ( A) fstream ( B) istream ( C) ostream ( D) iomanip 40 若目前 D盘根目录下并不存在 test.txt 文件,则下列打开文件方式不会自动创建 test.txt 文件的是 ( A) ifstream fin; fin.open(“d:test.txt“,ios_base:in); ( B) fstream fio; fio.open(“
11、d:test.txt“,ios_base:out); ( C) ofstream fout; fout.open(“d:test.txt“,ios_base:out); ( D) ofstream fout; fout.open(“d:test.txt“,ios_base:app); 国家二级 C+机试(选择题)模拟试卷 57 答案与解析 一、选择题 1 【正确答案】 D 【试题解析】 算法是指解题方案的准确而完整的描述,算法不等于程序,也不等于计算方法,所以 A)错误。设计算法时不仅要考虑对数据对象的运算和操作,还要考虑算法的控制结构。 2 【正确答案】 B 【试题解析】 线性结构应满足:有
12、且只有一个根结点与每个结点最多 有一个前件,也最多有一个后件,所以 B)正确。所以有一个以上根结点的数据结构一定是非线性结构,所以 A)错误。循环链表和双向链表都是线性结构的数据结构。 3 【正确答案】 B 【试题解析】 根据二叉树的基本性质 3:在任意一棵二叉树中,度为 0的叶子结点总是比度为 2的结点多一个。所以选择 B 4 【正确答案】 A 【试题解析】 软件生命周期可以分为软件定义、软件开发与软件运行维护三个阶段。主要活动阶段是:可行性研究与计划阶段,需求分析,软件设计,软件实现,软件测试,运行和维护,所以选择 A。 5 【正确答案】 C 【试题解析】 根据总体结构图可以看出该树的深度
13、为 3,比如: XY系统功能 2功能 2.1,就是最深的度数的一个表现。 6 【正确答案】 D 【试题解析】 程序调试的任务是诊断和改正程序中的错误。 7 【正确答案】 A 【试题解析】 数据字典是在需求分析阶段建立,在数据库设计过程中不断修改、充实和完善的。 8 【正确答案】 D 【试题解析】 数据库系统的三级模式是概念模式、外模式和内模式,所以选择D。 9 【正确答案】 A 【试题解析】 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据 T 中元组可以判断 R和 S做的是自然连接操作。 10 【正确答案】 A 【试题解
14、析】 面向对象基本方法的基本概念有对象、类和实例、消息、继承与多态性,所以选择 A。 11 【正确答案】 D 【试题解析】 用来表示变量、符号常量、函数、数组类型等实体名字的有效字符序列称为标识符,标识符由字母、数字、和下划线 3种字符组成,且第一个字符必须为字母或者下划线。所以 D选项错误。 12 【正确答案】 C 【试题解析】 const是一个 C+语言的关键字,它限定一个变量 不允许被改变, C+定义 const类型变量时必须初始化,否则编译不通过。所以 C选项错误。 13 【正确答案】 D 【试题解析】 考查 for循环语句,本题中两层 for循环,每次 i循环, sum都被重新赋值,
15、所以当 i=2时,执行完 for循环后 sum为 37。所以答案为 D。 14 【正确答案】 B 【试题解析】 本题考查字符 串的定义, A选项中,定义了一个字符,而用字符串赋值,所以错误, C选项定义了字符数组,但是赋值的字符串实际上有 6个字符,所以赋值错误, D选项定义了一个字符串指针数组,赋值错误。 15 【正确答案】 C 【试题解析】 全局变量也称为外部变量,它是在函数外部定义的变量。 它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明,本题中定义了两个全局变量 i, j,所以主函数中对全局变量重新赋值输出后为 88,所以答案为
16、 C。 16 【正确答案】 D 【 试题解析】 本题考查函数参数的相关知识,函数原型中必须声明形参类型,所以 A选项错误,调用一个函数时如果修改了形参值,那么实参可能改变也可能不改变,所以 B 选项错误,函数形参的生存期一般在函数执行整个函数中存在,除了静态变量。 17 【正确答案】 A 【试题解析】 本题考查字符串的定义, A选项中,定义了一个字符,而用字符串赋值,所以错误, C选项定义了字符数组,但是赋值的字符串实际上有 6个字符,所以赋值错误, D选项定义了一个字符串指针数组,赋值错误。 18 【正确答案】 D 【试题解析】 函数 原型中,函数名、函数返回值、函数参数列表是需要的,而函数
17、体在函数申明时不需要。所以答案为 D。 19 【正确答案】 B 【试题解析】 本题考查重载运算符, C+规定有的运算符(如赋值运算符、下标运算符、函数调用运算符)必须定义为类的成员函数。所以本题选 B。 20 【正确答案】 C 【试题解析】 本题考查函数重载相关知识,重载函数是函数的一种特殊情况,为方便使用, C+允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一 个运算符完成不同的运算功能。 ABD选项的形参都与原函数相同,所以不能作为重载函数,选项 C正确。 21 【正确答案】 D 【试题解析】 答案 D的形式是重载
18、为友元函数,而友元函数不属于类的成员函数。所以重载为友元函数需要两个参数,通过参数传递的方式得到参加运算的两个对象。其他的是重载为类的成员函数,由于对象本身代表了一个操作数,所以其参数只需要一个,其为参加运算的另一个操作数。 22 【正确答案】 A 【试题解析】 本题考查函数的调用,函数原型中第一个参数为引用,第二个参数为指针,所以只有 A选项正确。 23 【正确答案】 C 【试题解析】 本题考查默认构造函数,如果用户定义的类中没有显式的定义任何构造函数,编译器就会自动为该类型生成默认构造函数,称为合成的构造函数。 C选项正确。 24 【正确答案】 B 【试题解析】 本题考查构造函数和析构函数
19、,题中定义了对象数组,那么析构时就析构两次,输出两个 *。答案为 B。 25 【正确答案】 B 【试题解析】 友元函数不是类的成员函数,但是可以具有类的成员的一些访问权限,类的成员访问权限默认是私有的,类的成员函数可以声明为私有, 类的静态数据成员可以是常成员。 26 【正确答案】 A 【试题解析】 本题考查虚函数,在某基类中声明为 virtual 并在一个或多个派生类中被重新定义的成员函数成为虚函数,虚函数不得是静态成员函数,但可以是友元函数 27 【正确答案】 D 【试题解析】 本题考查继承与派生,派生类中的成员访问基类中的成员由派生方式决定,一个类可以有多个直接基类,如果基类中定义了缺省
20、构造函数或根本没有定义任何一个构造函数(此时,由编译器自动生成缺省构造函数)时,在派生类构造函数的定义中可以省略对基类构造函 数的调用,即省略 “()“。本题答案为 D。 28 【正确答案】 A 【试题解析】 本题考查派生类对基类成员的访问属性,派生类私有继承基类,那么基类的公用成员和保护成员在派生类中成为私有成员,所以派生类可以直接使用基类的公用成员, A选项正确。 29 【正确答案】 D 【试题解析】 本题考查如何初始化对象,其中类的数据成员是不能再声明类时初始化的,所以 D选项错误,在定义类的同时对数据成员 price进行赋值是错误的。 30 【正确答案】 B 【试题解析】 本题考查构
21、造函数和析构函数,题中定义了一个对象,以及对象数组,那么构造函数需要执行 4次,而 *net2并不执行构造函数,所以答案为 B。 31 【正确答案】 C 【试题解析】 本题考查构造函数和析构函数,以及静态数据成员,题目中要求输出 2,那么定义两个对象时,就执行构造函数,使得静态数据成员 +count,得到2,那么 count初始化就应该为 0,静态数据成员初始化时,只能在类体外进行初始化,一边形式为: 数据类型 类型:静态数据成员名 = 初值 32 【正确答案】 A 【试题解析】 本题考查构 造函数相关知识,本题中定义一个对象 room1,执行room1.Print时执行构造函数给 size赋
22、值为 41,然后执行 void Print() cout/Nsize; 输出 /N41。而定义 const TV room2(54)时,给 size赋值为54,最后输出结果为 /C54,所以答案为 A。 33 【正确答案】 C 【试题解析】 本题考查如何定义派生类以及派生类对基类成员的访问,声明派生类的一般形式为: class 派生类名: 继承方式 基类名 题目中只有公用继承才能使用基类 中 name成员,所以 C选项正确。 34 【正确答案】 D 【试题解析】 本题考查对象成员的引用,在类外引用对象的数据成员时,只能访问 public成员而不能访问 private成员所以 C选项错误, D选
23、项正确,派生类公用继承基类,但是不能继承基类的私有成员,所以执行 c1.SetX(1)错误,同理 B 选项错误。 35 【正确答案】 D 【试题解析】 本题考查派生类的构造函数,派生类的构造函数初始化时按照参数列表初始化顺序,所以先初始化 Person(n),输出 P,然后依次输出 D和 S,答案为 D选项。 36 【正确答案】 A 【试题解析】 本题考查虚函数的运用,本题中基类 Instrument,派生类 Piano,其中虚函数为 GetType,当定义 Instrument *pi=new Piano(“星空 “)时,调用派生类的 GetType函数,得到 type为钢琴, name 为
24、星空,所以输出钢琴 -星空。选项A正确。 37 【正确答案】 C 【试题解析】 本题考查类模板是是类的抽象,类是类模板的实例。模板的类型参数由关键字 class 或关键字 typename 及其后的标识符构成,(在标准 C+之前 关键字 typename 没有被支持 ,把这个关键字加入到 C+中的原因是因为有时必须要靠它来指导编译器解释模板定义。)本题 C选项错误。 38 【正确答案】 D 【试题解析】 本题考查模板的定义, B选项中 x为 T 类型的, n为 int型的,但是 x*n 就不一定是 T类型的,所以错误。 39 【正确答案】 D 【试题解析】 本题考查格式控制相关知识,属于基础知识,需要包含 iomanip,所以 D选项正确。 40 【正确答案】 A 【试题解析】 本题考查文件流的一些操作, ios: in是以输入方 式打开文件,如果没有则不会创建一个新文件,所以 A选项正确。