1、国家计算机二级(C+)77 及答案解析(总分:460.00,做题时间:120 分钟)一、选择题(每小题 2分,共 70分) 下列各(总题数:35,分数:70.00)1.对长度为 n的线性表排序,在最坏情况下,比较次数不是 n(n-1)/2的排序方法是(分数:2.00)A.快速排序B.冒泡排序C.直接插入排序D.堆排序2.以下对结构体类型变量 td 的定义中,错误的是_。 (分数:2.00)A.B.C.D.3.派生类对象对其基类中的什么成员是可访问的?(分数:2.00)A.公有继承的私有成员B.私有继承的公有成员C.私有继承的保护成员D.保护继承的保护成员4.有如下说明 int a10: 1,2
2、,3,4,5,6,7,8,9,10 ,* p=a; 则数值为 9的表达式是( )。 (分数:2.00)A.*p+9B.*(p+8)C.*p+=9D.p+85.C+语言函数中不能由系统自动生成的是( )。(分数:2.00)A.结合型B.非结合型C.计算型D.非计算型6.下列语句不能够用于打开 C根目录下文件 testtxt 的语句是( )。(分数:2.00)A.3B.6C.10D.207.设有定义 int x;float y;,则 10+x+y值的数据类型是( )。(分数:2.00)A.intB.doubleC.floatD.不确定8.数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和【 】
3、(分数:2.00)A.编码设计B.测试阶段C.运行阶段D.物理设计9.有以下程序 #includeiostreamh float fun(int x,int y) return(x+y); void main( ) int a=2,b=5,c=8; tout fun( (int)fun(a+c,B) ,a-C) ; 程序运行后的输出结果是( )。 (分数:2.00)A.MenuBar和 Menu都没有必要注册监听器,只需要对 Menultem添加监听器 ActionLis-tener,完成相应操作B.javaawtColor 提供了颜色的构造方法 Color(int r,int g,int B
4、) ,其中 r,g 和 b代表了三维空间的长、宽和高C.对话框 Dialog是 Window类的子类,对话框和一般窗口的区别在于它依赖于其他窗口D.按钮 Button是个最常用的构件,当按钮被点击后,会产生 ActionEvent事件,需 Ac-tionListener接口进行监听和处理事件10.下列符号中,正确的 C+标识符是【 】(分数:2.00)A.enumB.2bC.foo-9D._3211.“商品”与“顾客”两个实体集之间的联系一般是_。 (分数:2.00)A.一对一B.一对多C.多对一D.多对多12.下列程序的运行结果是( )。 # include iostreamh class
5、A int a; public: A( ) a=0; A(int aa) a=aa; cout a+; ; void main( ) A x,y (2),z(3); cout endl; (分数:2.00)A.0B.23C.34D.2513.已知各变量的定义如下 int i=8,k,a,b; unsigned long w=5; double x=142,y=52; 则以下符合 C+语言语法的表达式是( )。 (分数:2.00)A.a+=a-=(b=4) * (a=3)B.a=a * 3+2C.x(-3)D.y=float i14.所有在函数中定义的变量,连同形式参数,都属于( )。(分数:2
6、.00)A.局部变量不能被本层模块程序调用B.私有变量只能被本层模块程序调用C.局部变量能被本层模块和下层模块程序调用D.私有变量能被本层模块和下层模块程序调用15.下面程序输出的结果为( )。 #include“ iostreamh“ class A public: A( ) cout “CLASS A“ end1; A( ) ; class B:public A public: B( ) cout “CLASS B“ end1; B( ) ; void main( ) A * p; p=new B; B * q; q=new B; (分数:2.00)A.DEHNE POPUPB.DEFIN
7、E MENUC.DEHNE PADD.DEFINE BAR16.关于 C+语言与 C语言关系描述中错误的是( )。(分数:2.00)A.将 5个初值依次赋给 a1至 a5B.将 5个初值依次赋给 a0至 a4C.将 5个初值依次赋给 a6至 a10D.因为数组长度与初值的个数不相同,所以此语句不正确17.以下叙述中错误的是_。 (分数:2.00)A.对于 double 类型数组,不可以直接用数组名对数组进行整体输入或输出B.数组名代表的是数组所占存储区的首地址,其值不可改变C.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息D.可以通过赋初值的方式确定数组元
8、素的个数18.决定 C+语言中函数的返回值类型的是( )。(分数:2.00)A.Call ff(5,7,z)B.Call ff(x,y,z)C.Call ff(3+x,5+y,z)D.Call ff(x+y,x-y,z)19.下列程序的输出结果为( )。 # include iostreamh void main( ) char * a =“hello“,“the“,“world“; char * * pa=a; pa +; cout * pa endl; (分数:2.00)A.helloB.theC.worldD.hellotheworld20.关于 continue语句叙述不正确的是( )
9、。(分数:2.00)A.continue语句用于循环体中,结束循环B.continue语句用于循环体中,它使执行流跳出循环体中尚未执行的语句,并进行下一循环判断C.continue可以用于 if语句中D.continue语句不能代替 break语句21.C+语言对 C语言做了很多改进,C+语言相对于 C语言的最根本的变化是( )。(分数:2.00)A.12 32B.6 29C.2 3D.12 322.下列程序的运行结果是( )。 #include iostreamh class Location private: int X,Y; public: void init(int=0,in=0);
10、Void valueX(int val) X=val; int valueX( ) return X; void valueY(int val) Y=val; int valueY( ) return Y; ; void Location:init(int initX,int initY) X=initX; Y=initY; void main( ) Location A,B; Ainit( ); AvalueX(5); cout AvalueX( ) end1 AvalueY( ) end1; Binit(6,2);BvaleY(4); cout BvalueX( ) end1 Bvalue
11、Y( ) end1; (分数:2.00)A.A(A * B);B.A(A B);C.A(A i3;i+)ai=i; for(i=0;ik;i+) for(j=0;jk;j+) aj=ai; couta2; (分数:2.00)A.2B.3C.1D.030.下面关于数组的描述错误的是( )。(分数:2.00)A.报表页眉B.页面页眉C.组页眉D.以上说法都不对31.对于类定义 class A public: virtual void func1( ) void func2( ) ; class B:public A public: void func1( )cout“class B func 1“
12、endl; virtual void func2( )cout“class B func2“endl; ; 下面正确的叙述是( )。 (分数:2.00)A.public A a=new A( );B.public A a=A();C.A a=new class();D.a A;32.对下列二叉树,进行中序遍历的结果是【 】 (分数:2.00)A.ACBDFEGBACBDFGEC.ABDCGEFD.FCADBEG33.C+语言中关于构造函数的说法正确的是( )。(分数:2.00)A.B.#C.!D.$34.下列运算符中哪些是不能够被重载的?(分数:2.00)A.a =c =zB.(c =A) 1
13、 T1 i; T2 j; public: dataClass(T1 a, T2 b)i=a;j=b; void show2couti“,“j/n; ; int main3 dataClassint. doubleob1(10,0.23) dataCllasschar,char *ob2(X,“my data“); ob1show4; ob2show5; return 0; 请将程序补充完整,使程序在运行时输出: 10,0.23 X,my data (分数:30.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_填空项 1:_40.一个关系表的行称为 1。(分数:30.00)填空项
14、1:_41.下列软件系统结构图 (分数:30.00)42.以下函数 sstrcat1 的功能是实现字符串的连接,即将 t 所指字符串复制到 s 所指 字符串的尾部。例如:s 所指字符串为 abcd,t 所指字符串为 efgh,函数调用后 s 所指字符串为 abcdefgh。请填空。 #include void sstrcat(char *s,char *t) int n; n=strlen(s); while(*(s+n)= 2)s+; t+; (分数:30.00)填空项 1:_43.若要在 C盘根目录下作为二进制文件打开文件 testdat,则应该用的语句是 1。(分数:30.00)填空项
15、1:_44.在 MyClass类的定义中,对赋值运算符“=“进行重载。请将画线处缺失的部分补充完整。 1 MyClass:operator=(const MyClassi3;i+)ai=i; for(i=0;ik;i+) for(j=0;jk;j+) aj=ai; couta2; (分数:2.00)A.2 B.3C.1D.0解析:本题里有三个 for循环,但要分清楚,第一个是单独的给三个元素赋值,赋完值后三个 a0=0,a1=1,a2=2;后面的两个 for是嵌套循环,对数组元素的赋值,但由于 k=2,初值已定 for里的条件是小于 k,所以不管怎么处理都影响不到 a 2,故答案为 2。30.
16、下面关于数组的描述错误的是( )。(分数:2.00)A.报表页眉B.页面页眉 C.组页眉D.以上说法都不对解析:将标题移动到页面页眉中,则标题在每一页上都显示。如果将标题移动到报表页眉中,则打印时只在第一页的开始位置出现。31.对于类定义 class A public: virtual void func1( ) void func2( ) ; class B:public A public: void func1( )cout“class B func 1“endl; virtual void func2( )cout“class B func2“endl; ; 下面正确的叙述是( )。 (
17、分数:2.00)A.public A a=new A( ); B.public A a=A();C.A a=new class();D.a A;解析:本题考查简单的 ifelse语句。先执行条件 if(aB) ,显然不成立,则执行 else语句。32.对下列二叉树,进行中序遍历的结果是【 】 (分数:2.00)A.ACBDFEG BACBDFGEC.ABDCGEFD.FCADBEG解析:二叉树中序遍历的含义是:首先遍历左子树,然后访问根结点,最后遍历右子树,其左右子树中也按这样的顺序遍历,中序遍历二叉树的过程是一个递归的过程。根据题目中给出的二叉树的结构可知中序遍历的结果是:ACBDFEG。3
18、3.C+语言中关于构造函数的说法正确的是( )。(分数:2.00)A. B.#C.!D.$解析:只有公有继承的公有成员才能被派生类的对象直接访问,其他的 情况都会因为访问权限问题产生错误。34.下列运算符中哪些是不能够被重载的?(分数:2.00)A.a =c =zB.(c =A) 1 T1 i; T2 j; public: dataClass(T1 a, T2 b)i=a;j=b; void show2couti“,“j/n; ; int main3 dataClassint. doubleob1(10,0.23) dataCllasschar,char *ob2(X,“my data“);
19、ob1show4; ob2show5; return 0; 请将程序补充完整,使程序在运行时输出: 10,0.23 X,my data (分数:30.00)填空项 1:_ (正确答案:templatetypename)填空项 1:_ (正确答案:T1)填空项 1:_ (正确答案:typename)填空项 1:_ (正确答案:T2calss)填空项 1:_ (正确答案:dataClass)解析:类模板说明的一般形式是: template类型形参表 class类名 /类说明体 ; 40.一个关系表的行称为 1。(分数:30.00)填空项 1:_ (正确答案:元组)解析:在关系中,水平方向的行称为元
20、组,垂直力向的列称为属性,每一列有一个属性名。41.下列软件系统结构图 (分数:30.00)解析:42.以下函数 sstrcat1 的功能是实现字符串的连接,即将 t 所指字符串复制到 s 所指 字符串的尾部。例如:s 所指字符串为 abcd,t 所指字符串为 efgh,函数调用后 s 所指字符串为 abcdefgh。请填空。 #include void sstrcat(char *s,char *t) int n; n=strlen(s); while(*(s+n)= 2)s+; t+; (分数:30.00)填空项 1:_ (正确答案:*t)解析:本题解题的关键在理解“*(s+n)”,其中
21、s 代表字符串 s 的首地址,n 是字符串 s 的长度,*(s+n)代 表了字符串 s 最后一个字符的后一个字符,即“/0”,根据题意,“/0”所在位置应该赋值为字符串 t 的第 一个字符,字符串 t 的其他字符根据循环,依次赋值到 s 所指字符串的尾部,所以本题应填“*t”。43.若要在 C盘根目录下作为二进制文件打开文件 testdat,则应该用的语句是 1。(分数:30.00)填空项 1:_ (正确答案:ifstream fin(“C:/testdat“,ios_binary);或ifstream fin;finopen(c:/test daf“ios_binary);)解析:C+中打开
22、文件有两种方式ifstream fin(“testdat“);ifstream fin;finopen(“testdat“);,ios_binary 的意义是以二进制文件打开。44.在 MyClass类的定义中,对赋值运算符“=“进行重载。请将画线处缺失的部分补充完整。 1 MyClass:operator=(const MyClass&rhs) if(this=&rhs )return*this; value=rhs.value; retum*this; (分数:30.00)填空项 1:_ (正确答案:const)解析:赋值运算符“=“的重载返回值声明为引用,而函数体中总是用语句 retum
23、*this返回。45.下面程序的运行结果是 1 和 2。 #includeiostreamh #define N 10 #define s(x)x * x #define f(x)(x * x) void main3 int i1,i2; i1=1000/s(N);i2=1000/f(N); cout i1 “ “ i2; (分数:30.00)填空项 1:_ (正确答案:1000)解析:对于 define宏定义语句,系统会在编译前进行替换。本题替换过程如下: i1=1000/s(N) i1=1000/s(10) i1=1000/10*10 i1=1000 i2=1000/f(N) i2=100
24、0/f(10) i2=1000/(10*10) i2=10 46.有如下程序: #include using namespace std; class DA int k; public: DA(int x=1):k(x) DA1cout2 DA d=DA(3),DA(3),DA(3); DA *p=new DA2 delete p! return 0 这个程序的输出结果是 3。 (分数:30.00)填空项 1:_ (正确答案:11333)解析:本题是按析构函数执行的顺序输出结果,由于为指针 p创建的对象采取默认参数 x=1,数组对象中DA(3)k=3,最后释放,所以输出结果为 11333。 4
25、7.常数据成员和静态数据成员在使用前共同的要求是要进行 1。(分数:30.00)填空项 1:_ (正确答案:初始化)解析:C+语言中常数据成员和静态数据成员都要进行初始化,只是初始化的方法不一样。 48.用以下语句调用库函数 malloc,使字符指针 st指向具有 11个字节的动态存储空间,请填空。 st=(char*) 1; (分数:30.00)填空项 1:_ (正确答案:malloc(11)或 malloc(sizeof(char) * 11 ))解析:malloc 函数的参数可以是一个具体的常数,也可以是一个表达式。在本题中, 可以是 malloc(11),也可以借助于 sizeof运算符来表示。