1、计算机二级(C+)56 及答案解析(总分:4230.00,做题时间:90 分钟)一、选择题(每小题 2分,共 70分) 下列各(总题数:60,分数:4200.00)1.对于长度为 n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是_。 (分数:70.00)A.冒泡排序为 n/2B.冒泡排序为 nC.快速排序为 nD.快速排序为 n(n-1)/22.已知有定义 constintD=5; inti=1; doublef=0.32; charc=15; 则下列选项错误的是( )。 (分数:70.00)A.Private Sub Form_MouseDown(Button As Inte
2、ger, Shift As Integer,_ X As Single, Y As Single) If Button=2 Then PopupMenu Bt, 2 End SubB.Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _ X As Single, Y As Single) PopupMenu Bt End SuhC.Private Sub Form MouseDown(Button As Integer, Shift As Integer, _ X As Single, Y As Single) Po
3、pupMenu Bt,0 End SubD.Private Sub Form_MouseDown(Button As Integer, Shift As Integer, _ X As Single, Y As Single) If (Button=vbLeftButton) Or ( Button=vbRightButton) Then PopupMenu Bt End Sub3.有以下程序 int fun(int n) if(n=1) return 1; else return(n+fun(n-1); main() int x; scanf(“%d“,x=fun(x);printf(“%d
4、/n“,x); 执行程序时,给变量 x输入 10,程序的输出结果是_。 (分数:70.00)A.55B.54C.65D.454.执行下列程序段,结果是( )。 #includeiostreamh void main( ) int x=40; char y=C; int n; n=(x c=a(bD.929.设有定义 int x;float y;,则 10+x+y值的数据类型是( )。(分数:70.00)A.intB.doubleC.floatD.不确定30.表达式 10 5 则能通过 scanf语句正确给输入项读入数据的程序段是_。 (分数:70.00)A.*p= scanf(“%lf“,p)
5、;B.*p= scanf(“%f“,p);C.p= scanf(“%lf“,*p);D.p= scanf(“%lf“,p);39.C+语言是以哪种语言为基础逐渐发展演变而成的一种程序设计语言( )。(分数:70.00)A.ASPB.CC.VBD.Java40.已知各变量的定义如下 int i=8,k,a,b; unsigned long w=5; double x=142,y=52; 则以下符合 C+语言语法的表达式是( )。 (分数:70.00)A.第一个B.最后一个C.全部D.字段值不惟一,不能存储41.下列程序的运行结果为( )。 #includeiostreamh void main(
6、 ) int a=2; int b=a+1; cout a/b endl; (分数:70.00)A.实体完整性B.域完整性C.参照完整性D.以上各项都需要定义42.以下叙述中错误的是_。 (分数:70.00)A.C 语句必须以分号结束B.复合语句在语法上被看作一条语句C.空语句出现在任何位置都不会影响程序运行D.赋值表达式末尾加分号就构成赋值语句43.有如下程序 #include using namespace std; class Obj static int i; public: Obj()i+; Obj()i-; static int getVal()teturn i; ; int Ob
7、j:i=0; void f ()Obj ob2;cout1;i+) f*=i;D.f=1; for(i=n;i=2;i-) f*=i;48.有以下类定义 classPoint public: Point(int x0,int y0)_xx;_yy; void Move (int xOff,int yOff _x xOff;_yyOff void Print() const cout(_x,_y)endl; private: int_x_y; ; 下列语句中会发生编译错误的是【 】 (分数:70.00)A.Pointpt;pt;Print();B.const Point pt;pt.Print(
8、);C.Pointpt;pt.Move(1,2);D.const Point pt;pt.Move(1,2);49.下面程序错误的语句是( )。 # include iostreamh void main( ) int * p=new int1; p=9; cout * p endl; delete p; (分数:70.00)A.ValueB.VisibleC.DefaultD.Enabled50.在 C+语言中,不合法的实型数据的是( )。(分数:70.00)A.0.123B.123000C.21e35D.12351.有如下程序 #includeiostreamh int func(int
9、a,int B) return(a+B) ; void main( ) int x=2,y=5,z=8,r; r=func(func(x,y),z); cout r; 该程序的输出的结果是( )。 (分数:70.00)A.12B.13C.14D.1552.类 A是类 B的友元,类 B是类 C的友元,则下列说法正确的是( )。(分数:70.00)A.构造函数可以重载,析构函数不能重载B.构造函数不能重载,析构函数可以重载C.构造函数可以重载,析构函数也可以重载D.构造函数不能重载,析构函数也不能重载53.有如下程序 #include using namespace std; class Base
10、 protected; Base()cout0;-j) if(t=aj-1)break; aj:aj-1; aj=t; protected: int*a,n;指针 a用于存放数组首地址,n 用于存放数组元素个数 ; (分数:1.50)填空项 1:_65.以下程序的结果为 1。 #include”iostreamh” templatetypename T T total(T * data) T s=0; while( * data) s+= * data +; return s; int main2 int x = 2,4,6,8,0,12,14,16,18 ; cout total(x); r
11、eturn 0; cout end1; (分数:1.50)填空项 1:_66.以下程序运行后的输出结果是 1。 main2 int x=0210; printf(“%X/n“,x); (分数:1.50)填空项 1:_67.创建对象数组时,对数组的每一个元素都将调用一次构造函数,如果没有显式给出数组元素的初值,则调用缺省构造函数,下列程序涉及到对象数组的创建和单个对象的创建,其输出结果是 1。 #include using namespace std; class Foo public: Foo(int X)cout D.9 解析:结构复合索引文件是 Visual FoxPro数据库中最普通的,
12、也是最重要的一种索引文件,它会随着表的打开而自动打开。29.设有定义 int x;float y;,则 10+x+y值的数据类型是( )。(分数:70.00)A.intB.doubleC.float D.不确定解析:由算术运算符组成的表达式中,若含有不同类型的操作数,则系统隐含 地将低类型转化为高类型,由低至高的顺序为 int-float-double。30.表达式 10 5 则能通过 scanf语句正确给输入项读入数据的程序段是_。 (分数:70.00)A.*p= scanf(“%lf“,p);B.*p= scanf(“%f“,p);C.p= scanf(“%lf“,*p);D.p= sca
13、nf(“%lf“,p); 解析:p=”,它等效于:int *p; p=, scanf()语句的格式是“scanf(格式控制,地址表列)”, 在选项 D 中,“p”本身就代表着一个地址,故选项 D 正确。39.C+语言是以哪种语言为基础逐渐发展演变而成的一种程序设计语言( )。(分数:70.00)A.ASPB.C C.VBD.Java解析:C+语言是对 C语言进行了扩充,继承了它的语法,并增加了面向对象的设计方法。40.已知各变量的定义如下 int i=8,k,a,b; unsigned long w=5; double x=142,y=52; 则以下符合 C+语言语法的表达式是( )。 (分数
14、:70.00)A.第一个 B.最后一个C.全部D.字段值不惟一,不能存储解析:本题考查的是在继承中派生类的对象调用构造函数的顺序,应该 是先调用基类的构造函数,然后是成员中的对象对应类的构造函数,最后是派生类自己 的构造函数。41.下列程序的运行结果为( )。 #includeiostreamh void main( ) int a=2; int b=a+1; cout a/b endl; (分数:70.00)A.实体完整性B.域完整性 C.参照完整性D.以上各项都需要定义解析:随机文件流提供了访问文件中任意一段位置。如果是一个比较大的文件,我们采用略去前面不必要的内容,直接去读取需要的内容,
15、随机文件流提供了这样的方法,这样会有很多的时间和资源。所以我们用 Random Stream来访问这个文件。在 Random Stream中有一个方法 public int skipBytes(int n)throws IOException,随机文件访问跳过指定的字节。这个方法比较有用,在本题的情况下,用它比较快捷的读取必要的内容。 42.以下叙述中错误的是_。 (分数:70.00)A.C 语句必须以分号结束B.复合语句在语法上被看作一条语句C.空语句出现在任何位置都不会影响程序运行 D.赋值表达式末尾加分号就构成赋值语句解析:“空语句出现在任何位置都不会影响程序运行”这句话是错误的,例如在
16、 for 循环中,循环条件语 句为空时,则不判断循环条件,循环将无终止地进行下去,导致了此循环为死循环。43.有如下程序 #include using namespace std; class Obj static int i; public: Obj()i+; Obj()i-; static int getVal()teturn i; ; int Obj:i=0; void f ()Obj ob2;cout1;i+) f*=i;D.f=1; for(i=n;i=2;i-) f*=i; 解析:n!=n*(n-1)*2*1,由于选项 A 中 f 的初值为 0,所以循环 n 次后,f 值依然为 0
17、,故选项 A 错误; 选项 B 中循环的终止条件是“i1 时,由于初值“i=n”是符合条件“i1”的,且增量为+1,故循环中永远不会出 现不满足条件“i1”的值,所以出现死循环。48.有以下类定义 classPoint public: Point(int x0,int y0)_xx;_yy; void Move (int xOff,int yOff _x xOff;_yyOff void Print() const cout(_x,_y)endl; private: int_x_y; ; 下列语句中会发生编译错误的是【 】 (分数:70.00)A.Pointpt;pt;Print();B.co
18、nst Point pt;pt.Print();C.Pointpt;pt.Move(1,2);D.const Point pt;pt.Move(1,2); 解析:本题考核常对象、常数据成员与常成员函数。如果将一个对象说明为常对象,则通过该常对象只能调用它的常成员函数,不能调用其他的成员函数,D 选项中对象 pt 为常对象,而成员函数 Move()不是常成员函数,所以这样调用会发生编译错误。49.下面程序错误的语句是( )。 # include iostreamh void main( ) int * p=new int1; p=9; cout * p endl; delete p; (分数:7
19、0.00)A.ValueB.VisibleC.DefaultD.Enabled 解析:将标题移动到页面页眉中,则标题在每一页上都显示;如果将标题移动到报表页眉中,则打印时只在第一页的开始位置出现。50.在 C+语言中,不合法的实型数据的是( )。(分数:70.00)A.0.123B.123000C.21e35 D.123解析:在 C+语言中,实数有两种形式表示,即十进制数形式和指数形式,在指数形式中,e3,21e35,e3,e 等都是不合法的指数形式。再如 123e3或 123E3都代表 123乘以 10的 3次方。注意,字母 e的前面必须有数字,且 e的后面必须是整数。51.有如下程序 #i
20、ncludeiostreamh int func(int a,int B) return(a+B) ; void main( ) int x=2,y=5,z=8,r; r=func(func(x,y),z); cout r; 该程序的输出的结果是( )。 (分数:70.00)A.12B.13C.14D.15 解析:语句 r= unc (func(x,y),z);中,fun(x,y)是一次调用函数,它的值作为 func另一次调用的实参。注意本题调用两次函数。52.类 A是类 B的友元,类 B是类 C的友元,则下列说法正确的是( )。(分数:70.00)A.构造函数可以重载,析构函数不能重载 B.
21、构造函数不能重载,析构函数可以重载C.构造函数可以重载,析构函数也可以重载D.构造函数不能重载,析构函数也不能重载解析:所谓的访问控制只包含公有类型、私有类型和保护类型 3种,友元可以是一个函数,也可以是一个类。53.有如下程序 #include using namespace std; class Base protected; Base()cout0;-j) if(t=aj-1)break; aj:aj-1; aj=t; protected: int*a,n;指针 a用于存放数组首地址,n 用于存放数组元素个数 ; (分数:1.50)填空项 1:_ (正确答案:j=n-l)解析:给变量 j
22、赋初值。65.以下程序的结果为 1。 #include”iostreamh” templatetypename T T total(T * data) T s=0; while( * data) s+= * data +; return s; int main2 int x = 2,4,6,8,0,12,14,16,18 ; cout total(x); return 0; cout end1; (分数:1.50)填空项 1:_ (正确答案:20)解析:本题考查模板函数的运用。要理解 * data 的含意。 66.以下程序运行后的输出结果是 1。 main2 int x=0210; print
23、f(“%X/n“,x); (分数:1.50)填空项 1:_ (正确答案:88)解析: 由于八进制数以 0 开头,所以 0210 表示八进制数;“%X”的格式指以十六进制形式输出,输出十 六进制的“af”时以大写字母输出。所以本题可以先将 0210 化为十进制,然后再化为十六进制。67.创建对象数组时,对数组的每一个元素都将调用一次构造函数,如果没有显式给出数组元素的初值,则调用缺省构造函数,下列程序涉及到对象数组的创建和单个对象的创建,其输出结果是 1。 #include using namespace std; class Foo public: Foo(int X)cout bc) d=(
24、543) 先算 54,为真,得 1,即:d=(13),此时 13,为假,得 0。 78.在 MyClass类的定义中,对赋值运算符“=“进行重载。请将画线处缺失的部分补充完整。 1 MyClass:operator=(const MyClass&rhs) if(this=&rhs )return*this; value=rhs.value; retum*this; (分数:1.50)填空项 1:_ (正确答案:const)解析:赋值运算符“=“的重载返回值声明为引用,而函数体中总是用语句 retum*this返回。79.C+语句 const char * const p= “hello“;,所定义的指针 p和它所指的内容都不能被 1。(分数:1.50)填空项 1:_ (正确答案:改变)解析:本题考查的是定义常量的关键字 const,由 sonst定义的变量的值不可以再改变,所以定义时必须进行初始化。80.C+程序是从 1 函数开始执行的。(分数:1.50)填空项 1:_ (正确答案:main)解析:所有的 C+语言程序都是从 main函数刀:始执行,而普通函数的存在是为了 简化 main函数的复杂程度。