1、二级 C+笔试-61 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.( )是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。(分数:2.00)A.模板B.类C.对象D.函数2.下面的描述中表达错误的是(分数:2.00)A.公有继承时基类中的 public 成员在派生类中仍是 public 的B.公有继承时基类中的 private 成员在派生类中仍是 private 的C.公有继承时基类中的 protected 成员在派生类中仍是 protected 的D.私有继承时基类中的 public 成员在派生类中是 pri
2、vate 的3.假定 MyClass 为一个类,那么下列的函数说明中,( )为该类的析构函数。(分数:2.00)A.voidMyClass();B.MyClass(int n);C.MyClass();D.MyClass();4.在长度为 n 的有序线性表中进行二分查找,需要的比较次数为(分数:2.00)A.log2nB.nlog2nC.n/2D.(n+1)/25.结构化程序设计的主要特点是(分数:2.00)A.每个控制结构要模块化B.每个控制结构具有封装性C.每个控制结构具有独立性D.每个控制结构只有一个入口和一个出口6.下面关于对象概念的描述中,错误的是(分数:2.00)A.C+中的对象就
3、是 C 语言中的结构变量B.对象代表着正在创建的系统中的一个实体C.对象是一个状态和操作(或方法)的封装体D.对象之间的信息传递是通过消息进行的7.下面不属于软件工程 3 个要素的是(分数:2.00)A.工具B.过程C.方法D.环境8.设有下列二叉树:(分数:2.00)A.B.C.D.9.若有以下程序:#includeiostreamusingnamespacestd;voidsub(intx,inty,int*2)*z=y+x;int main()int a,b,C;sub(8,4,public:sample(int i,int j)x=i;y=j;void disp()cout“disp1
4、“end1;void disp()constcout“disp2“end1;int main()const sample a(1,2);a.disp();return 0;该程序运行后的输出结果是(分数:2.00)A.disp1B.disp2C.disp1 disp2D.程序编译时出错29.有如下程序:#includeiostreamusing namespace std;int main()cout.fill(*);cout.width(5);coutscientific314.15926535end1;return 0;程序运行后,输出的结果是(分数:2.00)A.3.141593e+00
5、2B.3.1416e+002C.*3.14e+002D.314.1630.若有以下程序:#includeiostreamusing namespace std;class Aprivate:int a;public:void seta(int x)a=x;void showa()couta“,“;class Bprivate:int b;public:void setb(int x)b=x;void showb()coutb“,”;class C:pUblic A,private Bprivate:int c;public:void setc(int x,int y,int z)c=z;set
6、a(x);setb(y);void showc()showa();showb();coutcend1;int main()Cc;c.setc(1,2,3);c.showc();retrun 0;程序执行后的输出结果是(分数:2.00)A.1,2,3B.1,1,1C.2,2,2D.3,3,331.有以下程序:#includeiostrearnusing namespace std;class sampleprivate:int x;static int y;public:sample (int(分数:2.00)A.;static void print (sample s);sample:samp
7、le(intA) x=a;y+=x;void sample:print(sample s)cout“x“s.x“,y=“yend1;int sample:y=0;int main()sample s1(10);sample s2(20);sample:print(s2);return 0;程序运行后的输出结果是 A) x=10,y=20B.x=20,y=30C.x=30,y=20D.x=30,y=3032.在下面的类定义中,错误的语句是class Samplepublic:Sample(int val); /Sample(): /private:int a=2.5; /Sample(); /;
8、(分数:2.00)A.B.C.D.33.数据库设计包括两个方面的设计内容,它们是(分数:2.00)A.概念设计和逻辑设计B.模式设计和内模式设计C.内模式设计和物理设计D.结构特性设计和行为特性设计34.若有定义:int k,*q;,则下列各选项中赋值表达式正确的是(分数:2.00)A.q=(那么表达式 x+a%3*(int)(x+y)%2/4 的值为 【6】 。(分数:2.00)填空项 1:_42.函数 swap(arr,n)可完成对 arr 数组从第 1 个元素到第 n 个元素两两交换。在运行调用函数中的语句后,a0和 a1的值分别为上 【7】 。a0=1;a1=2;swap(a,2);(
9、分数:2.00)填空项 1:_43.下列程序的输出结果是 【8】 #includeiostreamusing namespace std;int main()int Bum=500;intpublic:sample(int i,int j)x=i;y=j;void disp()cout“disp1“end1;void disp()constcout“disp2“end1;int main()const sample a(1,2);a.disp();return 0;该程序运行后的输出结果是(分数:2.00)A.disp1B.disp2 C.disp1 disp2D.程序编译时出错解析:解析 本
10、题考核常对象、常数据和常函数。C+中,在定义常对象时必须进行初始化,而且不能被更新。如果将一个对象说明为常对象,则通过该对象只能调用它的常成员函数。题中,对象 a 被定义成类sample 的常对象,所以通过对象 a 只能调用其常成员函数 disp()。所以程序最后输出 disp2。29.有如下程序:#includeiostreamusing namespace std;int main()cout.fill(*);cout.width(5);coutscientific314.15926535end1;return 0;程序运行后,输出的结果是(分数:2.00)A.3.141593e+002
11、B.3.1416e+002C.*3.14e+002D.314.16解析:解析 本题考核格式控制数据的输入输出。函数 setfill(char C) 用于设置填充字符,在输出数据时,如果数据宽度小于设置的宽度,则空闲位置要用填充字符填满,设置的填充符一直有效,直到再次设置填充字符为止,如题中调用函数 setfill(*)将填充字符设置为,引,后又调用函数 setfill(#)将填充字符设置为#。函数 setw(int n)用于设置输入输出宽度,当实际数据的宽度大于设置的宽度时,仍按实际的宽度输出,如题中数据 314.15926535 的宽度大于 5,所以将会按实际输出。关键字scientific
12、 将浮点数按指数格式(科学表示法)输出。30.若有以下程序:#includeiostreamusing namespace std;class Aprivate:int a;public:void seta(int x)a=x;void showa()couta“,“;class Bprivate:int b;public:void setb(int x)b=x;void showb()coutb“,”;class C:pUblic A,private Bprivate:int c;public:void setc(int x,int y,int z)c=z;seta(x);setb(y);v
13、oid showc()showa();showb();coutcend1;int main()Cc;c.setc(1,2,3);c.showc();retrun 0;程序执行后的输出结果是(分数:2.00)A.1,2,3 B.1,1,1C.2,2,2D.3,3,3解析:解析 本题考核派生类的应用。本题中类 A 和类 B 都是基类。而类 C 从类 A 公有派生,从类 B 处私有派生。所以类 C 中的函数成员可以访问类 A 和类 B 中的公有成员。在类 C 的函数成员 setc 中,调用基类 A 的函数成员 seta 对 A 的数据成员 a 赋值,还调用了基类 B 的函数成员 setb 对类 B
14、的数据成员 b 赋值,然后对类 C 自己的数据成员 c 赋值。在类 C 的函数成员 showc 中,调用基类 A 的函数成员 showa 显示数据成员 a 的值,还调用基类 B 的函数成员 showb 显示数据成员 b 的值,然后输出类 C 自己的数据成员 c的值。在主函数 main 中,先定义派生类的对象 c,然后调用 setc 对 c 中的数据成员赋值,然后输出赋值结果。所以程序最后输出应该为:1,2,3。31.有以下程序:#includeiostrearnusing namespace std;class sampleprivate:int x;static int y;public:s
15、ample (int(分数:2.00)A.;static void print (sample s);sample:sample(intA) x=a;y+=x;void sample:print(sample s)cout“x“s.x“,y=“yend1;int sample:y=0;int main()sample s1(10);sample s2(20);sample:print(s2);return 0;程序运行后的输出结果是 A) x=10,y=20B.x=20,y=30 C.x=30,y=20D.x=30,y=30解析:解析 本题考核静态数据成员和静态成员函数的应用。类 sample
16、 中定义两个私有成员 x 和 y,其中 y 为静态数据成员。并定义函数 print()为静态成员函数。在主函数中,定义对象 s1(10)时,通过构造函数使对象 s1 的私有成员 x=10,静态数据成员 y=10。定义 s2(20)时,通过构造函数使对象 s2 的私有成员 x=20,静态数据成员 y=10+20=30。程序最后调用静态成员函数 print 输出对象 s2 的私有成员 x 的值20,对象 s1、s2 共享的静态数据成员 y 的值 30。32.在下面的类定义中,错误的语句是class Samplepublic:Sample(int val); /Sample(): /private:
17、int a=2.5; /Sample(); /;(分数:2.00)A.B.C. D.解析:解析 本题考核类的定义。C+不能类的定义中给数据成员赋初值。33.数据库设计包括两个方面的设计内容,它们是(分数:2.00)A.概念设计和逻辑设计 B.模式设计和内模式设计C.内模式设计和物理设计D.结构特性设计和行为特性设计解析:解析 数据库设计包括两个方面的设计内容:概念设计和逻辑设计。选项 A 正确。34.若有定义:int k,*q;,则下列各选项中赋值表达式正确的是(分数:2.00)A.q=(那么表达式 x+a%3*(int)(x+y)%2/4 的值为 【6】 。(分数:2.00)填空项 1:_
18、(正确答案:2.5)解析:解析 本题考核运算符的使用(包括类型、优先级、结合性)。强制类型转换符()将表达式 x+y 的值转换为 int 型,那么表达式“a%3*(int)(x+y)%2/4”结果将为整型,计算:7%3*7%2/4 的结果为 0,而x 为 double 型,所以最后的结果为 2.542.函数 swap(arr,n)可完成对 arr 数组从第 1 个元素到第 n 个元素两两交换。在运行调用函数中的语句后,a0和 a1的值分别为上 【7】 。a0=1;a1=2;swap(a,2);(分数:2.00)填空项 1:_ (正确答案:2,1)解析:解析 本题考核函数参数的传递。数组名作为函
19、数参数传递的是数组的首地址,即实参数组名把实参数组的首地址传给了形参数组名,形参数组名就指向了相应的实参数组,就是说形参数组和实参数其实就是同一个数组,对形参数组元素的修改也同样影响到对应的实参数组元素。43.下列程序的输出结果是 【8】 #includeiostreamusing namespace std;int main()int Bum=500;int& ref=num;ref+=100;coutnumend1;return 0;(分数:2.00)填空项 1:_ (正确答案:600)解析:解析考核引用的使用。题中整型变量 ref 定义为 num 的引用,所以对 ref 的作用等同于对
20、num 的作用,所以 ref 加上 100 后,num 的值也就变成了 600。44.类模板的使用实际上是将类模板实例化成一个具体的 【9】 。(分数:2.00)填空项 1:_ (正确答案:类)解析:解析 本题考核类模板的使用,使用类模板时是将其定义实例化为一个真正的类。45.在下面横线上填上适当的语句,完成程序。#includeiostreamusing namespace std;class Baseint x;public:Base(int i)x=i;Base();class Derived:public Basepublic:【10】 完成类 Derive 构造函数的定义;int m
21、ain()Derived Obj;return 0;(分数:2.00)_解析:46.下面是“二维向量”vector2D 的定义,其中作为成员函数重载的运算符“+”的功能是将两向量的分量 x 和 y 对应相加,然后返回作为相加结果的新对象;请填空补充完整。class vector2Ddouble x; /x 分量double y; /y 分量public:vector2D(double x0=0,double y0=0):x(x0),y(y0)void show(cout(,y);vector2D operator+(vector2D) ;【11】 operator + (vector2D A)
22、 return vector2D( 【12】 );(分数:4.00)填空项 1:_ (正确答案:11vector2D: 12x+ax,y+a.y)解析:解析 本题考核运算符的重载。程序将运算符“+”重载为类 vector2D 的成员函数,所以在函数定义处要加上类域控制,即 vector2D:。运算符“+”重载函数返回的是两个分量分别相加的值。47.已知:double A(double A) return +a;和 int A(int A) return+a;是一个函数模板的两个实例,则该函数模板定义为 【13】 (分数:2.00)_解析:48.有以下程序:#includeiostream.hclassAint x;public:A(int A) x=a;friend class B;