1、国家二级( C+)机试模拟试卷 111及答案与解析 一、选择题 1 下列运算符不能重载为友元函数的是 ( )。 ( A) =()()- ( B) +-+- ( C) x1=x1; this-y1=y1; this-x2=x2; this-y2=y2; doublegetX1()constreturnx1; doublegetY1()constreturny1; doublegetX2()constreturnx2; doublegetY2()constreturny2; voidshow()const cout “Endpoint1=(“ usingnamespacestd; classPer
2、son public: *found* _name=NULL; Person(char*s) name=newcharstrlen(s)+1; strcpy(name, s); Person() if(name!=NULL)deletename; *found* _Disp()声明虚函数 coutDisp(); Studenty(“Wang“, 3 88); P=&y; P-Disp(); Professorz; z setName(“Li“); z setPubls(8); p= z; P-Disp(); return0; 四、综合应用题 43 请使用 VC6或使用【答题】菜单打开考生文件夹
3、 proj3下的工程 proj3,其中包含了类 Integers和主函数 main的定义。一个 Integers对象就是一个整数的集合,其中包含 0个或多个可重复的整数。成员函数 add的作用是将一个元素添加到集合中,成员函数 remove的作用是从集合中删除指定的元素 (如果集合中存在该元素 ),成员函数 filter的作用是去除集合中的所有负整数。请编写这个 filter函数。此程序的正确输出结果应为: 528245327527663l 52824532752766316 5282453275276631619 5282453752766316一 19 528245375276631619
4、4 52825327663164 要求: 补充编制的内容写在 “ *333*”与 “*666*”之间,不得修改程序的其他部分。 注意:相关文件包括: main cpp、 Integers h。 程序最后将调用 writeToFile函数,使用另一组不同的测试数据,将不同的运行结果输出到文件 out dat中。输出函数 writeToFile已经编译为 obj文件。 Integevs h #fndefINTEGERS #defineINTEGERS #include usingnamespacestd; constintMAXELEMENTS=100; 集合最多可拥有的元素个数 classInt
5、egers intelemMAXELEMENTS; 用于存放集合元素的数组 intcounter; 用于记录集合中元素个数的计数器 public: Integers(): counter(0) 创建一个空集合 Integers(intdata, intsize); 利用数组提供的数据创建一个整数集合 voidadd(intelement); 添加一个元素到集合中 voidremove(intelement); 删除集合中指定的元素 intgetCount()constfreturncount。 er; 返回集合中元素的个数 intgetElement(inti)constreturn elem
6、i; ) 返回集合中指定的元素 voidfilter(); 删除集合中的负整数 voidshow()const; 显示集合中的全部元素 ; voidwriteToFile(constchar*path); #endif main cpp #include“Integers h“ #include Integers: Integers(intdata, int Size): counter(0) for(inti=0; i=0; j-) if(elemj=element)break; for(inti=j; i“不能重载为类的友元函数。所以本题答案为 A。 2 【正确答案】 C 【试题解析】 本
7、题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数;对象释放时,先执行派生类的析构函数,再执行基类的析构函数。本题中定义了一个派生类对象d1,首先执行基类的构造函数,输出 A;然后执行派生类的构造函数,输出 B。所以答案为 C。 3 【正确答案】 C 【试题解析】 N S图提出了用方框图来代替传统的程序流程图,所以 A)不对。PAD图是问题分析图,它是继承程序流程图和方框图之后提出的又一种主要用于描述软件详细设计的图形表示工具,所以 B)不对。 E R图是数据库中的用于表示E R模型的图示工具,所以 D)不对。根据图中所示表示方法是进行
8、软件详细设计时使用的程序流程图。 4 【正确答案】 A 【试题解析】 本题考查运算符重载,其中重载运算符的函数不能有默认的参数,所以本题答案为 A。 5 【正确答案】 D 【试题解析】 本 题考查派生类的构造函数,派生类的构造函数初始化时按照参数列表初始化顺序,所以先初始化 Person(n),输出 P,然后依次输出 D和 S,答案为 D选项。 6 【正确答案】 D 【试题解析】 关系 T中的元组是关系 R中有而关系 S 中没有的元组的集合,即从关系 R中除去与关系 S 中相同元组后得到的关系 T。所以做的是差运算。 7 【正确答案】 B 【试题解析】 本题考查对象的定义,定义一个类对象就需要
9、占用空间,其中c1、 c3 都占用了空间, c2、 c4 为指针只占一个指针空间,所以 B选项正确。 8 【正确答案 】 C 【试题解析】 本题考查模板相关知识,一个类中存在纯虚函数,这个类不一定就是类模板。函数模板需要形式参数表,类模板中可以包含构造函数。所以 C选项正确。 9 【正确答案】 D 【试题解析】 本题考查 C+关键字,属于基础知识,只有 D选项不是关键字。 10 【正确答案】 A 【试题解析】 执行派生类析构函数的顺序是:先执行派生类析构函数,再执行基类的析构函数,所以 A选项正确。 11 【正确答案】 D 【试题解析】 文件流类的标识符由:输入文件流类 ifstream、输出
10、文 件流类ofstream和输入输出文件流类 fstream; operator是重载运算符的标识符,答案为D。 12 【正确答案】 D 【试题解析】 函数可以自己调用自己,称为递归调用;函数返回类型为 void时,没有返回值;函数的参数列表中可以没有参数;函数在被调用前必须先进行函数声明或定义。 A、 B、 C错误, D正确;答案为 D。 13 【正确答案】 A 【试题解析】 派生类的对象结束生命周期时,系统先调用派生类的析构函数,然后按继承层次依次向上调用各个基类的析构函数,这是为了每次调用析构函数,都 有完整的类对象与析构函数对应,当然如果某个类没有定义析构函数,编译器会自动合成对应的析
11、构函数并调用之,答案为 A。 14 【正确答案】 A 【试题解析】 白盒测试又称为结构测试或逻辑驱动测试,它允许测试人员利用程序内部的逻辑结构及有关信息来设计或选择测试用例,对程序所有的逻辑路径进行测试,故 A选项正确。 15 【正确答案】 C 【试题解析】 重载运算符的规则如下: C+不允许用户自己定义新的运算符,只能对已有的 C+运算符进行重载; C+不能重载的运算符只有 5个; 重载不能改变运算符运 算对象的个数; 重载不能改变运算符的优先级和结合性; 重载运算符的函数不能有默认的参数; 重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是 C+
12、的标准类型。故本题答案为 C。 16 【正确答案】 A 【试题解析】 dA公有继承 Parents, dB私有继承 Parents,所以 Parents中的公有成员 publicData 在 dA 中是公有成员,对 x可见,在 dB中是私有成员,对 y不可见, Parents中的私有成员 privateData 对 x和 y都不可见;由此可知: 只有 x可以访问 publicData,答案为 A。 17 【正确答案】 B 【试题解析】 需求分析阶段的工作可以分为个方面:需求获取、需求分析、编写需求规格说明书和需求评审。故 B 选项正确。 18 【正确答案】 C 【试题解析】 创建对象数组时,需
13、要用默认构造函数初始化每个元素,所以ClassAa2需要调用 2次构造函数;创建对象指针数组 b,数组 b的元素是对象指针,没有生成新的对象,不需要调用构造函数;创建对象指针 c,并使用动态分配方式创建新的对象,将新对象的指针赋给 c,需要调用构造函数; 综上所述,答案为 C。 19 【正确答案】 D 【试题解析】 一个非空的数据结构如果满足以下两个条件:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件,则称为线性结构,在数据结构中习惯称为线性表。双向链表结点具有两个指针域,属于线性结构, A选项错误。循环链表所有结点的指针域都为非空,属于线性结构, B选项错误。循环链表是链表,
14、循环队列属于队列,队列只能在队尾入队,在排头退队,链表可以在任何位置插入、删除, C选项错误。双向链表结点具有多个指针域, D选项正确。 20 【正确答案】 D 【试题解析】 本题考查运算符重载的一些规则: 一般情况下,单目运算符最好重载为类的成员函数,双目运算符则最好重载为类的友元函数; 双目运算符 =、 ()、 -不能重载为类的友元函数; 类型转换函数只能定义为一个类的成员函数,而不能定义为类的友元函数; 若一个运算符的操作需要修改对象的状态,选择重载为成员函数较好; 若运算符所需的操作数 (尤其是第一个操作数 )希望有隐式类型转换,则只能选用友元函数; 当运算符函数是一个成员函数时,最左
15、边的操作数 (或者只有最左边的操作数 )必须是运算符类的一个类对 象 (或者是对该类对象的引用 );如果左边的操作数必须是一个不同类的对象,或者是一个内部类型的对象,该运算符函数必须作为一个友元函数来实现。所以答案为 D。 21 【正确答案】 C 【试题解析】 本题考查派生类的构造函数和基类的构造函数。本题中类 B继承类 A,定义了一个类 B的对象并初始化 b(2),此时会执行类 B 的构造函数,执行的结果是继承类 A中的私有成员赋值了 12,给类 B自身的数据成员 x赋值了 2,执行 b.dispb()后,输出类 A的私有成员 x,输出类 B自身的数据成员,所以答案为 C。 22 【正确答案
16、】 C 【试题解析】 本题考查 C+标识符的命名规则,其规则有如下几点: 所有标识符必须由字母、数字或下画线组成,且必须由字母或下画线开头; 所有标识符不能使用 C+已有的关键字; 大、小写字母表示不同意义,即代表不同的标识符。选项 A是关键字,选项 B不能以数字开头,选项 D包含了字符 “-“,且不能以此字符开头。故答案为 C。 23 【正确答案】 A 【试题解析】 本题考查派生类对基类成员的访问属性,派生类私有继承基类,那么基类的公用成员和保护成员在派生类中成为私有成员,所以派生类可以直接使用基类的 公用成员, A选项正确。 24 【正确答案】 D 【试题解析】 根据二叉树的基本性质 3:
17、在任意一棵二叉树中,多为 0的叶子结点总比度为 2的结点多一个,所以本题中度为 2的结点为 1 1 0个,所以可以知道本题目中的二叉树的每一个结点都有一个分支,所以共 7个结点共 7层,即度为 7。 25 【正确答案】 C 【试题解析】 本题考查重载运算符,题目中要求将运算符 -重载为 Incr的非成员函数,只有 C选项能够将运算符重载为非成员函数。 26 【正确答案】 B 【试题解析】 执行派生类构造函数的顺 序是: 1、调用基类构造函数, 2、调用子对象构造函数, 3、再执行派生类析构函数, 4、执行基类的析构函数,所以本题中定义 room1时,先调用基类构造函数输出 A,然后执行 TV的
18、构造函数输出T41,而定义对象指针,并不会调用构造函数,所以什么也不输出,结果为AT41, B 选项正确。 27 【正确答案】 D 【试题解析】 本题考查 C+关键字,属于基础知识,只有 D选项不是关键字。 28 【正确答案】 D 【试题解析】 派生类保护继承基类,那么基类的公用成员和保护成员在派生类中成为保护成员,私有成员不 可访问,所以 D选项正确。 29 【正确答案】 D 【试题解析】 算法是指对解题方案的准确而完整的描述,简单地说,就是解决问题的操作步骤。算法不同于数学上的计算方法,强调实现, A选项叙述正确。算法的有穷性是指,算法中的操作步骤为有限个,且每个步骤都能在有限时间内完成,
19、 B选项叙述正确。算法复杂度包括算法的时间复杂度和算法的空间复杂度。算法设计必须考虑执行算法所需要的资源,即时间与空间复杂度,故 C选项叙述正确。算法的优劣取决于算法复杂度,与程序的环境无关,当算法被编程实现之后,程序的运行受到计算机系统运 行环境的限制,故正确答案为 D选项。 30 【正确答案】 A 【试题解析】 C+中,派生类构造函数的初始化列表只能初始化派生类的成员,不能直接初始化继承成员。所以派生类构造函数需要将基类构造函数包含在初始化列表中来间接初始化继承成员,选项 B错误; AA中的成员 a是 private成员,对 BB不可见,选项 C,D错误;答案为 A。 31 【正确答案】
20、B 【试题解析】 首先,构造函数的工作过程: 1、派生类的构造函数在执行函数体之前调用基类的构造函数初始化基类; 2、在执行函数体之前根据声明次序初始化自己的成员; 3、执行自身函数体。所以程序中在创建 BB对象时,首先调用 AA的构造函数,输出 “A“,然后初始化类 BB中的成员 aa,调用 AA的构造函数,输出 “A“,最后执行函数体,输出 “B“;程序执行结束时,系统会自动调用类的析构函数,析构函数工作过程: 1、执行析构函数的函数体; 2、如果该类中拥有类对象成员,且类对象有析构函数,则以类对象成员声明次序的相反顺序调用其析构函数,销毁类对象成员; 3、按原来构造顺序的相反顺序向上依次
21、调用基类的析构函数。所以程序运行结束时,首先调用 BB的析构函数并执行函数体,输出 “b“;然后调用 aa的析构函数,销毁 aa成员,输出 “a“;最后调用基类 AA的析构函数,输出 “a“;综上所述,程序运行的输出是: “AABbaa“;答案为 B。 32 【正确答案】 B 【试题解析】 由于重载运算符并不改变运算符的优先级,所以 c1+c2*c1首先进行 c2*c1运算,由于 c2 是运算符 “*“的左操作数,所以 c2*c1相当于 c2 对象调用重载运算符函数 operator*,参数为 c1,即 c2.operator*(c1);同理 c1 作为运算符“+“的左操作数, c1+c2*c
22、1相当于 c1 对象调用重载运算符函数 operator+,参数为c2*c1,即 c1.operator+(c2.operator*(c1),答案为 B。 33 【正确答案】 B 【试题解析】 本题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造函数,然后再执行派生类的构造函数。对象释放时,先执行派生类的析构函数,再执行基类的析构函数。所以本题答案为 B。 34 【正确答案】 B 【试题解析】 本题考查 for循环语句, -i表示用之前先减 1,那么这个 for循环语句只有 50到 2时才会输出 “*“,所以总共输出 49次。 35 【正确答案】 B 【试题解析】 本题考查类的析构函数,题目中定义了类的一个对象 a,对象指针*b,对象数组 d 2,当程序执行完后,析构函数执行了 3次,输出 “CCC“,对象指针不会执行析构函数。所以本题答案为 B。 36 【正确答案】 A 【试题解析】 软件生命周期可以分为软件定义、软件开发与软件运行维护三个阶段。主要活动阶段是:可行性研究与计划阶段,需求分析,软件设计,软件实现,软件测试,运行和维护,所以选择 A)。 37 【正确答案】 B
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1