1、国家二级( C+)机试模拟试卷 88及答案与解析 一、选择题 1 模板对类型的参数化提供了很好的支持,因此 ( )。 ( A)类模板的主要作用是生成抽象类 ( B)类模板实例化时,编译器将根据给出的模板实参生成一个类 ( C)在类模板中的数据成员都具有同样类型 ( D)类模板中的成员函数都没有返回值 2 字面常量 42、 4.2、 42L的数据类型分别是 ( )。 ( A) long、 double、 int ( B) long、 float、 int ( C) int、 double、 long ( D) int、 float、 long 3 下列关于类定义的说法中,正确的是 ( )。 (
2、A)类定义中包括数据成员和函数成员的声明 ( B)类成员的缺省访问权限是保护的 ( C)数据成员必须被声明为私有的 ( D)成员函数只能在类体外进行定义 4 C+系统预定义了 4个用于标准数据流的对象,下列选项中不属于此类对象的是( )。 ( A) cout ( B) cin ( C) cerr ( D) cset 5 有如下程序段: int i=9; while ( int i=0 ) coutTfun(Tx)returnx*x; ( B) templateTfun(Tx,intn)returnx+n; ( C) templateTfun(T*p)return*p; ( D) templat
3、eTfun()returnT; 13 下面对软件测试描述错误的是 ( A)严格执行测试计划,排除测试的随意性 ( B)随机地选取测试数据 ( C)随机地选取测试数据 ( D)软件测试是保证软件质量的重要手段 14 有如下程序: #include using namespace std; void fun(int a,_) int c; c=a; a=*b; *b=c; int main() int x,y; x=1; y=2; fun(x, cout using namespace std; class Base1 public: Base1(int d) cout p2; MyTemp p3
4、3; 编译系统在处理上钢琴 -无名面的语句序列时,所生成的模板 MyTemp 的实例的个数是 ( A) 1 ( B) 2 ( C) 3 ( D) 4 26 有如下程序: #include using namespace std; int main() int a10; for(int* p=a;p using namespace std; void fun(int x=y/4; x+; int main() int x=4,y=5; fun(x,y); cout using namespace std; class AA char c; public: AA():c(X) AA(AA clas
5、s Point public: static int number; public: Point() number+; Point() number-; ; int Point:number=0; int main() Point *ptr; Point A, B; Point* ptr_point=new Point 3 ; ptr=ptr_point; Point C; cout using namespace std; void f(int x, int x=y; y=z; int main() int x=0,y=1; f(x,y); cout usingnamespacestd; c
6、lassScore public: Score(constchar*thecourse, constchar*theid, intthenormal, intthemidterm, inttheendofterm) : course(thecourse), normal(the normal), midterm(themidterm), end _of_term(the_end_of_term) ERROR*found* strcpy(theid, studentid); constchar*getCourse()constreturncourse; 返回课程名称 ERROR*found* c
7、onstchar*getID()constreturn 所以 C选项正确。 10 【正确答案】 A 【试题解析】 二叉树遍历可以分为 3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。本题中前序遍历为 ABDEGCFH,中序遍历为 DBGEAFHC,后序遍历为 DGEBHFCA,故 A选项正确。 11 【正确答案】 D 【试题解析】 出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,称为重载函数。选项 A中,仅 当形参是引用或指针时,形参是否为 const对重载才有影
8、响,这里 const对重载没有影响,另外函数不能仅仅基于不同的返回类型实现重载, A错误;选项 B 中,当调用函数 fun(x)只带有一个实参时,两个函数都匹配,该调用具有二义性, B 错误;选项 C中形参列表只有默认参数不同,默认参数并不改变形参个数, C错误;选项 D正确,形参列表中参数个数不同;答案为 D。 12 【正确答案】 D 【试题解析】 模板形参表中, class关键字修饰的是类型形参,代表在函数中使用的数据类型,而 return语句返回的应该是整型值,选 项 D错误,答案为 D。 13 【正确答案】 B 【试题解析】 在测试之前制定测试计划,并严格执行,测试用例的选择不可随意,
9、应选择有代表性的,尽可能发现迄今为止尚未发现的错误, A选项叙述正确, B选项叙述错误。测试根本目的是尽可能多地发现并排除软件中隐藏的错误, C选项叙述正确。软件测试是保证软件质量、可靠性的关键步骤, D选项叙述正确。故正确答案为 B 选项。 14 【正确答案】 B 【试题解析】 由于输出结果为 11,所以函数 fun 的功能是将实参 y的值修改为1。通过函数修改实参的值,只能通过引用或指 针的方式,由函数调用 fun(x,&y)可知形参为整型指针,即 int*b,答案为 B。 15 【正确答案】 D 【试题解析】 本题考查派生类的构造函数和析构函数,在定义一个派生类的对象时,先调用基类的构造
10、函数,然后再执行派生类的构造函数,对象释放时,先执行派生类的析构函数,再执行基类的析构函数。本题中定义一个派生类对象时,分别调用基类的构造函数,所以分别输出 21。 16 【正确答案】 A 【试题解析】 一般来说,实体集之间必须通过联系来建立联接关系,分为三类:一对一联系( 1:1)、一对多联系 ( 1:m)、多对多联系( m:n)。 A与 B 是 1:1联系, B与 C是 m:1联系,则 A与 C是 m:1联系,即多对一,故 A选项正确。 17 【正确答案】 A 【试题解析】 一旦函数在基类中声明为虚函数,它就一直是虚函数,派生类无法改变该函数为虚函数这一事实,所以派生类从基类中继承来的虚函
11、数,不加virtual 修饰,也是虚函数,选项 A正确;普通成员函数在派生类中也可以重新定义,重新定义后的成员函数会屏蔽对基类同名函数的直接访问,选项 B 错误;多态调用只能是通过基类对象的指针或引用调用虚函数来实现,基类对象调用虚函数不是多态调用,选项 C错误;构造函数不能声明为虚函数,因为构造函数是在对象完全构造之前运行的,在构造函数运行时,对象的动态类型还不完整,选项D错误;答案为 A。 18 【正确答案】 D 【试题解析】 双向链表与二叉链表均是有两个指针域的链表, A选项错误。在单链表的第一个结点前增加一个表头结点,队头指针指向表头结点,最后一个结点的指针域的值由 NULL 改为指向
12、表头结点,这样的链表称为循环链表。循环队列是队列的一种顺序存储结构。循环链表与循环队列是两种存储结构, B 选项错误。双向链表结点有两个指针域,指向前 一个结点的指针和指向后一个结点的指针,而带链的栈是单链表形式, C选项错误。故正确答案为 D选项。 19 【正确答案】 C 【试题解析】 函数 huiwen 通过递归地比较字符串 s的首尾字符是否相等,来判断字符串 s是否是回文串,所以字符串 “radar“需要判断 “radar“的首尾字符、“ada“的首尾字符、 “d“的首尾字符,函数 huiwen 需要被调用 3次,答案为 C。 20 【正确答案】 D 【试题解析】 在调用一个模板函数时,
13、编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两 个不同的渠道获得这样的信息:从模板实参表 (用 “也可以不要,因此选项 D错误。反之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的信息,就不能省略;或者虽然能够获得同样的信息,但在它后面还有其他不能省略的实参,则其自身还是不能省略。 21 【正确答案】 A 【试题解析】 本题考查指针和地址,题目中定义了一个指向变量 k的一个指针p,那么与题目中等效的表达式 A选项,即先定义一个指向整型的指针,然后指向k 的地址。 22 【正确答案】 B 【试题解析】 本题考查类的默认构造函数和自定义的构造函数。本题中MyCla
14、ss(intn):value(n)为自定义的构造函数,加上默认构造函数,一共有 2个构造函数。 23 【正确答案】 A 【试题解析】 软件危机主要表现在:软件需求的增长得不到满足;软件开发成本和进度无法控制 ;软件质量难以保证;软件不可维护或维护程度非常低;软件的成本不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。所以选择 A)。 24 【正确答案】 C 【试题解析】 本题考查运算符重载,不能重载的运算符只有 5个: .、 .*、 :、sizeof、 ?:所以本题选择 C。 25 【正确答案】 B 【试题解析】 编译时没有实例化,只是申明了一个 double型的类 p2,以及
15、long型的类 p3,并且 p3是一个数组类,含有 2个元素,即 2个 long类。 26 【正确答案】 C 【试题解 析】 本题考查使用指针对一维数组赋值,可以看出一维数组的元素值为下标 *2+1,所以 a2=2*2+1=5,a8=8*2+1=17,那么 a2+a8=22。 C选项错误。 27 【正确答案】 C 【试题解析】 本题考查常成员函数,其定义的一般形式如下: 28 【正确答案】 A 【试题解析】 对象的基本特点是:标识唯一性、分类性、多态性、封装性、模块独立性好。类是具有共同属性、共同方法的对象的集合,是关于对象的抽象描述,反映属于该对象类型的所有对象的性质。对象具有的性质,类也具
16、有。 故 A选项正确。 29 【正确答案】 B 【试题解析】 复制构造函数用于以下情况:根据另一个同类型的对象显式或隐式初始化一个对象;复制一个对象,将它作为实参传给一个函数;从函数返回时复制一个对象;初始化顺序容器中的元素;根据元素初始化列表初始化数组元素。选项 B中调用赋值运算符,而不是复制构造函数,答案为 B。 30 【正确答案】 B 【试题解析】 具有两个指针域的链表可能是双向链表, A选项错误。双向链表是线性结构,二叉树为非线性结构,二者结点中均有两个指针域, B 选项正确。二叉树通常采用链式存 储结构,也可采用其他结构, C选项错误。循环链表是线性结构, D选项错误。 31 【正确
17、答案】 B 【试题解析】 函数 fun 的形参 x为引用类型,函数功能是将形参 x与 y之和除以4的结果赋给 x,再对 x自增 1,通过引用类型修改实参; main 函数中定义 x=4,y=5,所以通过函数 fun 的调用, x的值被修改为: (4+5)/4+1=3,而 y的值不变,所以程序输出 3,5;答案为 B。 32 【正确答案】 A 【试题解析】 程序使用默认构造函数创建 AA 类对象 m,使得 m中数据成员c=X,然后调用 f1函数,由 于函数 f1形参为 AA类对象,需要创建局部对象 a,并使用实参 m初始化,所以需要调用复制构造函数,输出 “2“;再执行 f1函数体,输出 “X“
18、, f1函数执行完后,需要销毁局部对象 a,调用 AA的析构函数,输出 “3“;再调用 f2函数, f2函数的形参为 AA类引用,因而不需要调用构造函数,直接执行函数体输出 “X“,当然,由于没有创建局部对象, f2函数执行完之后也不需要销毁任何数据;最后 main 执行结束,需要销毁对象 m,调用 AA的析构函数,输出 “3“;整个程序输出结果为: “2X3X3“,答案为 A。 33 【正确答案】 A 【试题解析】 本题考查指针和引用。 为引用,使用正确; 中 &r表示一个地址,而 *p 已经是一个值了,不能将一个指针赋值给一个值,所以编译错误。 34 【正确答案】 C 【试题解析】 本题考
19、查默认构造函数,题目中定义一个对象 A、 B以及对象数组Point 3,又定义了对象 C,共执行 6次构造函数, number变为了 6,所以本题答案为 C。 35 【正确答案】 D 【试题解析】 层次模型的基本结构是树形结构,网状模型是一个不加任何条件限制的无向图,关系模型采用二维表来表示,所以三种数据库的 划分原则是数据之间的联系方式。 36 【正确答案】 B 【试题解析】 友元函数不是类的成员函数,但是可以具有类的成员的一些访问权限,类的成员访问权限默认是私有的,类的成员函数可以声明为私有,类的静态数据成员可以是常成员。 37 【正确答案】 D 【试题解析】 根据二叉树的基本性质 3:在
20、任意一棵二叉树中,多为 0的叶子结点总比度为 2的结点多一个,所以本题中度为 2的结点为 1 1 0个,所以可以知道本题目中的二叉树的每一个结点都有一个分支,所以共 7个结点共 7层,即度为 7。 38 【正确答案】 A 【试题解析】 参数传递有三种: 传值 (value),传址 (address),和传引用 (reference) 传值时子函数(被调用者)复制父函数(调用者)传递的值,这样子函数无法改变父函数变量的值。 传址时父函数将变量的地址传递给子函数,这样子函数可以能过改写地址里的内容改变父函数中的变量。传引用则是一种看起来像传值调用,而实际上功能同传址一样的传递方式。子函数可以改写父
21、函数的变量值。本题中函数 f 中第一个参数为传值调用,第二个参数为传引用,其中 y的值在执行完函数 f就变为了 x值,所以输出 00, A选项 正确。 39 【正确答案】 C 【试题解析】 在数据流图中,用标有名字的箭头表示数据流。在程序流程图中,用标有名字的箭头表示控制流。所以选择 C)。 40 【正确答案】 A 【试题解析】 构造函数初始化列表为类的成员提供初始值,它并不指定初始化的执行次序,成员初始化根据成员在类定义中的声明次序执行;派生类构造函数初始化列表首先初始化基类,然后根据声明次序初始化派生类的成员,所以 Derived对象在创建时,首先初始化 Base对象,然后初始化自己成员
22、q,在初始化 Base时,成员初始化次序为 m、 n;综上所述,结果为 m、 n、 q;答案为 A。 二、基本操作题 41 【正确答案】 (1)strcpy(student_id, the_id); (2)constchar*getID()constretumstudent_id; (3)intScore: getFinal()const 【试题解析】 (1)主要考查考生对 strcpy()函数的掌握情况, strcpy(参数一,参数二 )函数的功能是将参数二的字符串复制给参数一,因此在这里 student_id 应该位于参数一的位置,即 strcpy(student_id, the_id);
23、。 (2)主要考查考生对函数返回值的掌握情况,根据注释:返回学号可知学号应该由一个字符串组成。再看函数要返回的类型: constchar*,可知要返回一个 char型指针,也就是一个 char型数组,而 &student_id 是一个 char型数组指针,因此直接写 student_id 即可。 (3)主要考查考生对类的成员函数的掌握情况,因为 getFinal 函数是 Score类的成员函数,所以在定义时要加上类名和作用域符,即 Score:。 三、简单应用题 42 【正确答案】 (1)x(xValue), y(yValue) (2)virtual void Disp() (3): Poin
24、t(xValue,yValue), radius(radiusValue) 【试题解析】 (1)主要考查考生对构造函数的掌握 ,使用成员列表初始化。 (2)主要考查考生对虚函数的掌握 ,先看语句注释 :声明虚函数 Disp()。可知该函数为虚函数 ,注意虚函数要使用关键字 virtual。 (3)主要考查考生对构造函数的掌握 ,使用成员列表初始化。 四、综合应用题 43 【正确答案】 MiniComplexsum;定义复数对象 sumsurn imagPart=this-imagPart+otherComplex imagPart; 把 this中的虚部 (this-imaglPart)和 o
25、thercomplex 虚部相加赋值给 Sum虚部sum realPart=this-realPart+otherCompl ex realPart; 把 this中的实部 (this-reapart)加上 othercomplex 实部赋值给 sum实部returnsum;返回对象 sum 【试题解析】 主要考查考生对运算符重载的掌握,题目要求编写 operater+运算符函数,以实现复数的求和与运算。复数的和的实部等于两个复数的实部之和,虚部等于两个复数的虚部之和。函数要返回的类型是 MiniComplex,因此要先定义一个 MiniComplex 类型变量 sum,然后对它们的实部和虚部各自求和,返回sum即可。