1、国家二级( C+)笔试模拟试卷 45及答案与解析 1 下列叙述中错误的是 ( A)一种数据的逻辑结构可以有多种存储结构 ( B)数据的存储结构与数据处理的效率无关 ( C)数据的存储结构与数据处理的效率密切相关 ( D)数据的存储结构在计算机中所占的空间不一定是连续的 2 下列关于栈的叙述正确的是 ( A)在栈中只能插入数据 ( B)在栈中只能删除数据 ( C)栈是先进先出的线性表 ( D)栈是先进后出的线性表 3 一棵二叉树中共有 70个叶子结点与 80个度为 1的结点,则该二叉树中的总结点数为 ( A) 221 ( B) 219 ( C) 231 ( D) 229 4 下列叙述中正确的是
2、( A)线性链表中的各元素在存储空间中的位置必须是连续的 ( B)线性链表中的表头元素一定存储在其他元素的前面 ( C)线性链表中的各元素在存储空间中的位置不一定是连续的,但表头元素一定存储在其他元素的前面 ( D)线性链表中的各元素在存储空间中的位置不一定是连续的,且各元素的存储顺序也是任意的 5 下面对对象概念描述错误的是 ( A)任何对象都必须有继承性 ( B)对象是属性和方法的封装体 ( C)对象间的通讯靠消 息传递 ( D)操作是对象的动态属性 6 在结构化设计方法中生成的结构图 (SC)中,带有箭头的连线表示 ( A)模块之间的调用关系 ( B)程序的组成成份 ( C)控制程序的执
3、行顺序 ( D)数据的流向 7 下列叙述中正确的是 ( A)接口复杂的模块,其耦合程度一定低 ( B)耦合程度弱的模块,其内聚程度一定低 ( C)耦合程度弱的模块,其内聚程度一定高 ( D)上述三种说法都不对 8 在关系模型中, ( A)为了建立一个关系,首先要构造数据的逻辑关系 ( B)表示关系的二维表中各元组的每一个分 量还可以分成若干数据项 ( C)一个关系的属性名表称为关系模式 ( D)一个关系可以包括多个二维表 9 下列关系运算中,能使经运算后得到的新关系中属性个数多于原来关系中属性个数的是 ( A)选择 ( B)连接 ( C)投影 ( D)并 10 下列关于 E-R图的描述中正确的
4、是 ( A) E-R 图只能表示实体之间的联系 ( B) E-R 图只能表示实体和实体之间的联系 ( C) E-R 图只能表示实体和属性 ( D) E-R 图能表示实体、属性和实体之间的联系 11 面向对象程序设计将数据和 ( )放 在一起,作为一个相互依存、不可分割的整体来处理。 ( A)对数据的操作 ( B)信息 ( C)数据隐藏 ( D)数据抽象 12 设 a和 b均为 double型变量,且 a=5.5、 b=2.5,则表达式 (int)a+b/b的值是 ( A) 6.5 ( B) 6 ( C) 5.5 ( D) 6 13 for(int x=0,y=0; !x ( C) obj3 s
5、how1(); ( D) obj2 show2(); 23 如果算符函数调用格式的表达式: x.operator-(operator+(y, 0)中的 “-”是作为成员函数重载的, “+”是作为友元函数重载的,那么该表达式还可以表示为: ( ) ( A) x-y+ ( B) x-(+y) ( C) (x+)-y ( D) +x-y 24 有以下程序: #include iostream #include math using namespace std; class point private: double x; double y; public: point(double a,double
6、 B) x=a; y=b; friend double distance (point a,point B) ; ( A) 1 ( B) 5 ( C) 4 ( D) 6 25 在进行了任何 C+流的操作后,都可以用 C+流的有关成员函数检测流的状态,其中只能用于检测刚进行的操作是否失败函数名 是 ( A) fail ( B) eof ( C) bad ( D) good 26 下列有关拷贝构造函数的描述中错误的是 ( A)拷贝构造函数是一种构造函数 ( B)拷贝构造函数与一般的构造函数一样,可以设置多个形参 ( C)每一个类中都必须有一个拷贝构造函数 ( D)拷贝构造函数的功能是用一个已知对象
7、去初始化一个正在创建的对象。 27 带有虚基类的多层次派生类构造函数的成员初始化列表中都要列出虚基类的构造函数,这样对虚基类的子对象初始化 ( A)与虚基类下面的派生类个数有关 ( B)多次 ( C)二次 ( D)一次 28 下列关于 this指针的叙述中,正确的是 ( A) this指针是一个隐含指针,它隐含于类的成员函数中 ( B)只有在使用 this时,系统才会将对象的地址赋值给 this ( C)类的友元函数也有 this指针 ( D) this指针表示了成员函数当前操作的数据所属的对象 29 有以下程序 #include iostream using namespace std; c
8、lass Base private: char c; public: Base(char n): c(n) Base() cout c; ; class Derived: public Base private: char c; public: Derived(char n): Base(n+1), c(n) Derived() coutc; ; int main() Derived obj(x); return 0; 执行后的输出结果是 ( A) xy ( B) yx ( C) x ( D) y 30 以下程序的输出结果是 #include iostream using nameSpace
9、std; int main() cout.fill(*); cout width(5); cout hex 100 end1; return 0; ( A) *100 ( B) *64 ( C) 100* ( D) 64* 31 有以下程序 #include iostream using namespace std; class Base private: char c; public: Base(char n): c(n) Base() cout c; ; class Derived: public Base private: char c; public: Derived(char n):
10、 Base(n+1), c(n) Derived() coutc; ; int main() Derived obj(x); return 0; 执行后的输出结果是 ( A) 10 ( B) 20 ( C) 30 ( D) 0 32 有如下程序: #include iostream using namespace std; class Base private: char c; piblic: Base(char n): c(n) Base() cout C; ; class DeriVed: public Base private: char c; public: Derived(char
11、n): Base(n+1), c(n) Derived() cout c; ; int main() Derived obj(x); return 0; 执行上面的程序将输出 ( A) xy ( B) yx ( C) x ( D) y 33 关于在调用模板函数时实参的使用,下列表述中正确的是 ( A)对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获得相同的信息,则都可以省略 ( B)对于虚拟类型参数所对 应的模板实参,如果它们是参数表中的最后的若干个参数,则都可以省略 ( C)对于虚拟类型参数所对应的模板实参,若能够省略则必须省略 ( D)对于常规参数所对应的模板实参,任何情况下都
12、不能省略 34 有如下程序: #include iostream using namespace std; class point int x, y; public: point(int vx, int vy) x=vx; y=vy; point() x=0; y=0; point operator+(point p1) point p; int px=x+p1.x; int py=y+p1.y; return point(px, py); point operator-(point p1) point p; int px=x-p1.x; int py=y-p1.y; return point
13、(px,py); void print() cout x “,“ y end1; ; int main() point p1(10, 10), p2(20, 20); p1=p1+p2; p1.print(); retrun 0; 执行后的输出结果是 ( A) 10, 10 ( B) 20, 20 ( C) 10, 20 ( D) 30, 30 35 有如下程序 #include iostream using nameSpace std; class base public: vinual void f1() cout “F1 Base“; virtual void f2() cout “F2
14、Base“; ; class derive: public base void f1() cout “F1Derive“; void f2(int x) cout“F2Derive“; ; int main() base obj1, *p; derive obj2; p= int main() int n,m, jc = 1; cin m; for(n=2;jc =m;n+) jc = jc*n; cout “n=“【 】 end1; return 0; 42 以下函数的功能是删除字符串 s中的所有数字字符。请填空。 void dele (char *s) int n=O; for(i=0;s
15、i;i+) if(【 】 ) sn+=si; sn= 0; 43 下面程序的运行结果是【 】 #include iostream using namespace std; int fun(int n) static int m = 2; m=m+n; return m; int main ( ) int a = 3, b = 4; int x; x = fun( a ); x = fun( b ); cout x end1; return O; 44 如果类 Alpha继承了类 Beta,则类 Alpha称为派生类,类 Beta称为【 】类。 45 下面程序是一个堆栈的类模板,在横线处填上适当
16、语句,完成类模板的定义。 #define MAXSIZE 100 template class T class Stack T sMAXSIZE; int top; public: stack() top=1; void push(T newValue) if(top MAXSIZE) top=top+1; stop=newValue; else cout “堆栈满,无法进栈 “ end1; void pop(); ; 【 】 if(top 1) cout stop end1; top=top-1; else cout “堆栈空 ! “ end1; 46 下面程序的输出结果是【 】。 #inc
17、lude iostream using namespace std; class A int a, b; public: A() a = b = 0; A(int aa, int bb ) : a(aA) , b(bB) cout “a=“ a “,“ “b=“ b “,“; A() cout “D“; ; int main ( ) A x, y(2, 3); return 0; 47 若有以下程序: #include iostream using namespace std; class Base public: void who() cout “class Base“ end1; ; cl
18、ass Derivedl : public Base public: 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; 则该程序运行后的输出结果是【 】。 48 有以下程序: #include fstream #include string using n
19、amespace std; int main () char ch = “The end“; ofstream outstr( “d:put.txt“, ios_base: :app); for (int i = 0; i strlen( ch ); i+ ) outstr.put(chi); outstr.close(); return 0; 程序实现的功能是【 】。 国家二级( C+)笔试模拟试卷 45答案与解析 1 【正确答案】 B 【试题解析】 一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、索引等,选项 A和选项 D正确。采用不同的存储结构,其数据处理的
20、效率不同,因 此,在进行数据处理时,选择合适的存储结构是很重要的,选项 C正确,选项 B错误,应为所选。 2 【正确答案】 D 【试题解析】 栈是一种特殊的线性表,其插入与删除运算都只在线性表的一端进行。在这种线性表的结构中,一端封闭,不允许插入与删除元素;另一端开口,允许插入与删除元素。 在栈中不仅能插入数据,也能删除数据,选项 A与 B都错。栈是后进先出的线性表,而不是先进先出的线性表,选项 C的说法错误,选项 D正确。 3 【正确答案】 B 【试题解析】 在任意一棵二叉树中,度为 0的结点 (也就是叶子结点 )总 比度为 2的结点多一个。由于本题中的二叉树有 70个叶子结点,所以有 69
21、个度为 2的结点。该二叉树中总结点数为:度为 2的结点数 +度为 1的结点数 +度为 0的结点数 =69+80+70=219。 4 【正确答案】 D 【试题解析】 在线性表的链式存储结构中,各数据结点的存储序号不连续,且各结点在存储空间中的位置关系与逻辑关系也不一致。在线性链表中,各数据元素之间的前后件关系是由各结点的指针域来指示的。所以,选项 D正确。 5 【正确答案】 A 【试题解析】 继承是面向对象的方法的一个主要特征。继承是使 用已有的类定义做为基础建立新类的定义技术。已有的类可当做基类来引用,则新类相应地可当做派生类来引用。但并不是所有的对象都必须有继承性。因此,选项 A中的说法是错
22、误的,应为所选。 6 【正确答案】 A 【试题解析】 在结构图中,用带有箭头的连线表示模块之间的调用关系。箭头由前一个模块指向后一个模块,表示前一个模块调用后一个模块。本题的正确答案为 A。 7 【正确答案】 C 【试题解析】 影响模块之间耦合的主要因素有两个:模块之间的连接形式,模块接口的复杂性。一般来说,接口复杂的模块,其耦合程度 要比接口简单的的模块强,所以选项 A的说法错误;耦合程度弱的模块,其内聚程度一定高,选项 B错误;选项 C正确。 8 【正确答案】 C 【试题解析】 在关系模型中,不需要事先构造数据的逻辑关系,只要将数据按照一定的关系存入计算机,也就是建立关系,选项 A错误。对
23、于表示关系的二维表,其最基本的要求是,表中元组的每一个分量必须是不可分的数据项,即不允许表中再有表,选项 B和 D错误。本题的正确答案是 C。 9 【正确答案】 B 【试题解析】 连接运算是对两个关系进行的运算,其意义是从两个关系的笛卡尔积中选 出满足给定属性间一定条件的那些元组。而两个关系的笛卡尔积中的属性个数是两个原关系中的属性个数之和。即两个关系经连接运算后得到的新关系中属性个数多于原来关系中属性个数。正确答案是 B。 10 【正确答案】 D 【试题解析】 E-R 图中,用 3种图框分别表示实体、属性和实体之间的联系:矩形框表示实体,框内标明实体名;椭圆状框表示实体的属性,框内标明属性名
24、;菱形框表示实体间的联系,框内标明联系名;实体与其属性之间以无向边连接,菱形框与相关实体之间也用无向边连接,并在无向边旁标明联系的类型。 综上所述,用 E-R 图不仅可以简单明了地描述实体及其相互之间的联系,还可以方便地描述多个实体集之间的联系和一个实体集内部实体之间的联系。选项 A、 B、 C的说法都错误,本题的正确答案是 D。 11 【正确答案】 A 【试题解析】 面向对象语言包含 3个要素,即对象、类和继承。这 3个要素反映了面向对象的传统观念。面向对象程序设计的本质是把数据和对数据的操作当成一个整体即对象。 12 【正确答案】 D 【试题解析】 本题考核运算符的优先级和数据类型转换,此
25、方面的知识点应该着重掌握。在表达式中,优先级最高的是 (int)a,结果是 5。其次是 b/b,结果是1.0,最后相加结果为 6.000000(表达式的最终结果为 double型 )。 13 【正确答案】 C 【试题解析】 本题考核 for循环语句。题中 x=0,则 !x永远为真,对于条件表达式 “!x&y =5”只考虑 “y =5”,由于每次循环 y都增加 1,而且 y从 0开始到5。所以可知总共循环了 6次。 14 【正确答案】 A 【试题解析】 本题考核类的定义。类的成员函数描述类所表达的问题的行为。类中所有的成员函数都必须在类体中进行说明。但成员函数的定义既可以在 类体内给出,也可以在
26、类体外给出。在类定义体中实现的函数都是内联函数。在定义体外实现的函数可以通过在函数说明和定义上分别加上 inline来表示该函数是内联的,否则不是内联函数。 15 【正确答案】 C 【试题解析】 本题考核函数调用。函数 strcpy的函数原型为: char*strcpy (char*strDest, const char*trSrC) ;,其功能是复制 strSrc所有字符到 strDest,并返回 strDest。根据函数 strcpy的原型可知选项 A) 、 B) 和 D) 的调用都是正确的。在 C) 选项中,由于指针 *str3没有初始化其字符长度,容易引起访问越界,故是不正确的。 16
27、 【正确答案】 B 【试题解析】 本题考核函数重载。所谓函数重载,是指同一个函数名可以对应多个函数的实现。进行函数重载时,要求同名函数在参数个数上不同,或者参数类型上不同。即重载函数不许具有相同的形参列表。函数的返回类型不能作为函数重载的判断依据。 const是函数的一部分参与函数的重载 17 【正确答案】 A 【试题解析】 本题考核对数组的引用。在 C+语言中,数组的下标是从 0开始的,最大的下 标值比所定义的数组长度的值小 1。同时需要注意的是, C+语言中,编译和执行时并不检查数组下标是否越界。因此 value30在编译阶段是正确的,但是在运行时会出现错误。 18 【正确答案】 D 【试
28、题解析】 本题考核数组与指针。 A选项中, p为指针,数组名 a代表数组的首地址,所以 p-a就是指针到数组首地址的偏移量。 B选项中, &ai是取数组 a中第 i个元素的地址,而对于 *(&ai,由指针运算符 *的运算规则可知,语句*(&ai就是返回地 址 &ai空间中存放的值,也即 ai。 C) 选项,由 于指针 p已指向数组 a,所以 pi就等于 ai。这是常用的一种数组元素引用方式。 D) 选项是以指针方式对数组元素进行引用,由于 a只是代表数组的首地址,并不是指针,所以表达式 *(*(a+i)是错误的,正确的引用应该为: *(*(p+i)。 19 【正确答案】 C 【试题解析】 本题
29、考核变量的作用域、生存周期和存储类别 (自动、静态、存储器、外部 )。先来了解外部变量:外部变量用关键字 extern表示。由于外部变量可以被程序中的所有函数共同访问,其作用域为全局,因此也称为全局变量。对于外部变量而言, “定义变量 ”和 “说明变量 ”是两个不同的概念。定义 a为外部变量是告诉编译程序, a是一个外部变量,并要求系统为 a分配一个固定的永久存储空间。 a的值在整个程序的运行期间都存在,只有当定义它的程序运行结束时,它的存储空间才释放。外部变量定义后,当程序中的函数要引用外部变量时,应在函数中作引用说明。在此程序中,在第二行定义了一个外部变量 a,主函数 main给外部变量赋
30、的初始值为 100,当调用函数 fun()时,外部变量 a的值传到函数 fun()中,因此函数所返回的值为 100*10=1000。 20 【正确答案】 A 【试题解析】 本题考核 while循环语句和指针的使用。在该函数中,循环开始时,指针 p指向字符串的第 1个字符,指针 q指向字符串的最后一个字符,首先交换这两个字符:然后,指针 p前进一个字符位置 (指向下一个字符 ),指针 q后退一个字符位置 (指向前一个字符 );经过若干次循环,条件 p q将为假 (即指针 p和指针 q相遇 ),循环结束。从而实现了将一个字符串首尾颠倒的功能。 21 【正确答案】 A 【试题解析】 本题考核静态数据
31、成员和静态成员函数。类的静态成员函数只可以直接访问类中的静态成员,不能直接访问类中的非 静态成员。对于上述类的定义,由于在静态成员函数 change()访问了类 MyClass的数据成员 x和 y,只能把 x和 y定义为静态数据成员。 22 【正确答案】 C 【试题解析】 本题考核派生类的使用以及访问权限问题。 C+中,通过类的对象只能访问类的公有成员,不能访问类的保护成员和私有成员。 A2是 A1的公有派生类, A3是 A2的保护派生类,所以类 A1的成员函数 show1()在类 A3中呈现保护属性,不能通过 A3类的对象访问。 23 【正确答案】 A 【试题解析】 本题考核运算符的重载。假
32、定已经 作为某个类的成员函数重载了二元运算符 +,且 c1、 c2都是该类的对象,则 c1.operator+(c2)与 c1+c2含义相同。如果 +作为该类的非成员函数重载,则 operator+(c1, c2)与 c1+c2含义相同。同时一元运算符 “+”重载函数调用中采用了虚拟参数,说明 +为后缀的,所以其等价的表达式为 “x-y+”。 24 【正确答案】 C 【试题解析】 本题考核友元函数的应用。分析程序:类 point中定义了两个私有成员 x和 y,以及一个友元函数 distance。从而,函数 distance可以访 问类 point中的任何成员。在函数 distance中,返回值
33、为 sqrt(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)。由此可知,函数 distance的功能是计算 a、 b两点之间的距离。在主函数 main中,先定义两点: p1(1, 2)和 p2(5, 2)。然后调用函数 distance计算两点之间的距离为 4,所以程序最后输出为 4。 25 【正确答案】 A 【试题解析】 C+中可以用文件流对象的下列成员函数来判别文件流的当前状态。函数 is open()判定流对象是否与一 个打开的文件相联系,若是,返回 true,否则返回 false;函数 good()刚进行的操作成功时返回 true,否则返回 false:函
34、数fail()与 good()相反,刚进行的操作失败时返回 true,否则返回 false:函数 bad()如果进行了非法操作返回 true,否则返回 false;函数 eof()进行输入操作时,若到达文件尾返回 true,否则返回 false。其中, eof函数只能用于输入流操作。 26 【正确答案】 B 【试题解析】 本题考核拷贝构造函数的概念。拷贝初始化构造函数实际上也是构造函数 ,它是在初始化时被调用,将一个已知对象的数据成员的值拷贝给正在创建的另一个同类的对象。拷贝构造函数具有的特点是:拷贝构造函数也是一种构造函数,因此函数名与类相同,并且不能指定函数返回类型;只有一个参数,是对同类
35、的某个对象的引用; 每一个类中都必须有一个拷贝构造函数。如果类中没有声明拷贝构造函数,编译器会自动生成一个具有上述形式的公有的拷贝构造函数。 27 【正确答案】 D 【试题解析】 本题考核虚基类以及构造函数。使用虚基类解决二义性问题的关键是在派生类中只产生一个虚基类对象。虚基类子对象由最派 生类的构造函数通过调用虚基类的构造函数进行初始化 (最派生类的构造函数的成员初始化列表中必须列出对虚基类构造函数的调用,否则,表示使用该虚基类的缺省构造函数 )。由于最派生类总是相对,因此,从虚基类直接或间接派生的派生类中的构造函数的成员初始化列表中都要列出对虚基类构造函数的调用。但只有用于建立对象的最派生
36、类的构造函数才调用虚基类的构造函数,此时最派生类的所有基类中列出的对虚基类的构造函数的调用在执行过程中都被忽略,从而保证对虚基类子对象只初始化一次。 28 【正确答案】 D 【试题解析】 本题考核 this。类的每一个成员函数都有一个隐含定义的常量指针,称为 this指针。它是成员函数所属对象的指针,它指向类对象的地址。成员函数可以通过这个指针知道自己属于哪一个对象。当对一个对象调用成员函数时,编译程序先将对象的地址赋值给 this指针,然后调用成员函数,每次成员函数存取数据时,则隐含使用 this指针。但是在使用 this指针时需要注意的是: this指针只能在类的成员函数中使用,它指向该成
37、员函数被调用的对象。 this指针一般用于返回当前对象自身;静态成员函数没有 this指针。因为类只有一个静态成员函数实例,所 以使用 this指针没有什么意义。在静态成员函数中使用 this指针会引起编译错误。 29 【正确答案】 A 【试题解析】 本题考核继承与派生中继承基类的数据成员与成员函数。在 C+中,由于析构函数不能被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。执行顺序是先执行派生类的析构函数,再执行基类的析构函数,其顺序与执行构造函数的顺序正好相反。在此题的程序中,在主函数 main结束时,派生类 Derived对象 obj将被删除,所以就会调用对象的析构函数。
38、先调用派生类的析构函数,输出 x,然后调 用基类的析构函数,输出 y。 30 【正确答案】 B 【试题解析】 本题考核格式控制数据的输入输出。语句 “cout.fill(*); ”是将填充字符设置成 *,在输出数据时,如果数据宽度小于设置的宽度,则空闲位置要用*填满,语句 “cout.width(5); ”是将数据的输出宽度设置成 5,关键字 hex的作用是将整数按十六进制输出,即输出 64,又由于初始状态为右对齐,所以程序最终输出 *64。 31 【正确答案】 B 【试题解析】 本题考核虚基类。本题中,虽然 Derived1和 Derived2都是由共同的基类 x派生而来的,但由于引入了虚基
39、类,使得它们分别对应基类的不同副本。这时数据成员 x只存在一份拷贝,不论在类 Derived1修改,还是在类Derived2中修改,都是直接对这惟一拷贝进行操作。本题程序执行语句 “Derived obj”时,就会先调用虚基类 Base的构造函数,使得 x=0,然后执行类 Derived1的构造函数使得 x=10,再执行类 Derived2的构造函数,使得 x=20。最后输出 x的值为 20。 32 【正确答案】 A 【试题解析】 在 C+中,由于析构函数不能 被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。执行顺序是先执行派生类的析构函数,再执行基类的析构函数,其顺序与执行构
40、造函数的顺序正好相反。在此题的程序中,在主函数 main结束时,派生类 Derived对象。 obj将被删除,所以就会调用对象的析构函数。先调用派生类的析构函数,输出 x,然后调用基类的析构函数,输出y。 33 【正确答案】 D 【试题解析】 模板函数的实参可以省略,但模板实参的省略并不是必然的,而是有条件的。在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类型参 数所对应的实际类型,可以从两个不同的渠道获得这样的信息:从模板实参表 (用和括起来的参数表 )或从模板函数实参表 (用 ()括起来的参数表 ),模板实参的信息优先于函数实参的信息。如果从后者获得的信息已经能够判定其中部分或
41、全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若干个参数,则模板实参表中的那几个参数可以省略。如果模板实参表中的实参都被省略了,则连空表也可以不要。反之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的信息,就不能省略:或者虽然能够获得同样的信息,但在它后面还有其他 不能省略的实参,则其自身还是不能省略。由此可知只有 D) 选项的说法是正确的。 34 【正确答案】 D 【试题解析】 本题主要考查 C+中运算符重载的机制与实现。运算符重载函数一般分为成员函数形式和友元函数形式,这两种形式都可以访问类中的私有成员。本题中的运算符重载形式为成员函数形式。 程序在类 poin
42、t中声明了私有数据成员 int x和 int y,并定义了两种形式的构造函数以完成对对象的初始化;之后,程序对运算符 “+”进行了重载,另其输入参数为类 point的对象,输出为操作符 “+”右侧该对象的私有 数据成员 x和 y与操作符 “+”左侧同类型对象的私有数据成员 x和y的加和: print()函数则输出对象中数据成员的值。程序 main()函数中,实例化了类 point的两个对象 p1和 p2,并完成对对象的初始化。在语句 “p1=p1+p2; ”中,由于操作符 “+”左右两端的操作数为 point类的对象,复合类 point定义中的操作符 “+”的重载函数,因此程序将调用重载后的操
43、作符函数,并返回两 point对象数据成员的加和值,覆盖对象 p1的数据成员。因此 print()函数输出对象 p1的数据成员值应该为: x=10+20=30, y=10+20=30 35 【正确答案】 A 【试题解析】 本题主要考查 C+中虚函数机制及其继承过程中的要点。虚函数在基类中加关键字 virtual声明,在派生类中重新定义;如果派生类没有覆盖虚函数,则程序执行中将会执行基类的虚函数版本。题目程序中,建立了基类 base,其内函数 void f1()和 voidf2()均被声明为虚函数,并在调用时会显式的发出声明。派生类 derive利用 public方式继承基类 base,并覆盖其
44、基类 base中的虚函数f1();对于 base中的虚函数 f2(),由于派生类 derive中的同名函数 f2()中带有参数int x,因此被编译器认为是函数重载,而不作虚函数覆盖处理,因此实际上派生类 derive中包含两个 f2()函数,一个不带参数,调用时执行基类 base中的 f2()函数版本,一个带参数 int x,调用时执行重载后的版本。题目 main()函数中,定义了基类对象。 obj1和基类指针 *p,同时定义了派生类对象。 obj2。 p指向。 obj2时: p f1()函数调用执行派生类覆盖后的版本,输出 D1: p- f2()由于不带参数,因此执行未经派生类覆盖的函数版
45、本,即基类 base中的 f1()函数版本。 36 【正确答案】 度 【试题解析】 在一个树结构中,一个节点拥有子节点个数称为该节点的度。所有节点中最大的度称为树的度。 37 【正确答案】 实例 【试题解析】 在面向对象方法中,将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。所以,类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是其对应类的一个实例。 38 【正确答案】 系统测试 【试题解析】 软件测试按 4个步骤进行,即单元测试、组装测试、确认测试和系统 测试。通过这些步骤地实施来验证软件是否合格。 39 【正确答案】 程序调试 【试题解析
46、】 本题考查软件测试和软件调试的区别。软件测试贯穿整个软件生命期,它是尽可能的发现软件中的错误。软件调试主要在开发阶段,它是在测试成功后开始,诊断和改正程序中潜在的错误。 40 【正确答案】 数据库管理系统 【试题解析】 本题考查数据库系统的组成部分,其中硬件平台包括计算机、网络。软件平台包括操作系统、数据库系统开发工具和接口软件。 41 【正确答案】 (n-2) 【试题解析】 研究本题中包含 的语句 “jc =m; ”和 “jc=jc*n: ”,可发现本题是通过求出 “n!”的值 jc并检查该值是否大于 m;如果小于等于,继续循环求出“(n+1)!”直到 jc m。跳出循环后,得到 n的值并
47、输出。题中要填出 n的输出值,但应注意:如果直接填 n,是错误的。因为在循环语句中先求出 jc=jc*n,如果这时的 jc m,循环还没结束, n的值就比要求的值大 1,结束循环后,执行 n+后,再判断 jc =m,所以 n的值比所求的大 2,故应填入 n-2。 42 【正确答案】 si 0|si 9 【试题解析】 从 一个字符串中删除某个字符的方法是从字符串的第 1个字符开始一一判断该字符是否是要删除的字符,若不是,则把它放到结果字符串中;若是,则不放入结果字符串中。由此可知,本题空白处应判断 si是否为数字字符,只有在不是数字字符的情况下才存入结果字符串中,所以应填入: si 0|si9。最后应在结