1、国家计算机二级(C+)76 及答案解析(总分:460.00,做题时间:120 分钟)一、选择题(每小题 2分,共 70分) 下列各(总题数:35,分数:70.00)1.对类的构造函数和析构函数描述正确的是( )。(分数:2.00)A.构造函数可以重载,析构函数不能重载B.构造函数不能重载,析构函数可以重载C.构造函数可以重载,析构函数也可以重载D.构造函数不能重载,析构函数也不能重载2.有以下程序: #include main() char c1=1,c2=2; c1=getchar(); c2=getchar(); putchar(c1); putchar(c2); 当运行时输入 a 后,以
2、下叙述正确的是_。(分数:2.00)A.变量 c1 被赋予字符 a,c2 被赋予回车符B.程序将等待用户输入第 2 个字符C.变量 c1 被赋予字符 a,c2 中仍是原有字符 2D.变量 c1 被赋予字符 a,c2 中将无确定值3.下列关于函数模板实参不能省略的情况说明不正确的是( )。(分数:2.00)A.等号=B.集合运算符C.加号+D.减号-4.有如下程序: #include using namespace std; int main() char str100,*P; coutxC.+pt-xD.(pt+)-x7.下面对于友元函数描述正确的是( )。(分数:2.00)A.友元函数的实现
3、必须在类的内部定义B.友元函数是类的成员函数C.友元函数破坏了类的封装性和隐藏性D.友元函数不能访问类的私有成员8.以下各选项组中,均是 C+语言关键字的组是( )。(分数:2.00)A.public operator thisB.shod string staticC.it while =D.private cout printf9.下列关于构造函数说法不正确的是( )。(分数:2.00)A.4个字节B.5个字节C.6个字节D.7个字节10.有以下程序 int f1(int x,int y)return xy?x:y; int f2(int x,int y)return xy?y:x; ma
4、in() int a=4,b=3,c=5,d=2,e,f,g; e=f2(f1(a,b),f1(c,d); f=f1(f2(a,b),f2(c,d); g=a+b+c+d-e-f; printf(“%d,%d,%d/n“,e,f,g); 程序运行后的输出结果是_。 (分数:2.00)A.4,3,7B.3,4,7C.5,2,7D.2,5,711.下面程序的结果是( )。 #includeiostreamh class A public: A( ) cout “construtA“ end1; virtual A( ) cout “destructA“ end1; ; class B:public
5、 A ; class C:public A ; class D:public B,public C ; void main( ) Dd; (分数:2.00)A.constructA destructAB.constructA constructA destructA destructAC.constructA constructA constructA destructA destructA destructAD.constructA constructA constructA constructA destructA destructA destructA destructA12.下面关于
6、C+语言变量的叙述错误的是( )。(分数:2.00)A.字段变量的值B.内存变量的值C.随机显示D.错误信息13.有以下结构体说明和变量的定义,且指针 p指向变量 a,指针 q指向变量 b。则不能把结点 b连接到结点 a之后的语句是( )。 structnode chardata; structnode*next; a,b,*p=a,*q=b; (分数:2.00)A.3 4 7 5B.3 5 7 4C.1 2 3 4D.1 2 3 514.下面程序输出的结果为( )。 #include“ iostreamh“ class A public: A( ) cout “CLASS A“ end1;
7、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.DEFINE MENUC.DEHNE PADD.DEFINE BAR15.拷贝构造函数的参数一般是( )。(分数:2.00)A.某对象名B.某对象成员名C.某对象的引用名D.指向对象的指针名16.C+语言中,表示一条语句结束的标号是( )。(分数:2.00)A.#B.;C./D.17.如果表达式 x * y + z中,“ * ”是
8、作为友元函数重载的,“+”是作为友元函数重载的,则该表达式还可为 ( )。(分数:2.00)A.operator+(operator*(x,y),z)B.xoperator+(operator*(x,y),z)C.yoperator*(operator+(x,y),z)D.xoperator+(operator*(x,y)18.某二叉树中有 n个度为 2的结点,则该二叉树中的叶子结点数为(分数:2.00)A.n+1B.n-1C.2nD.n219.关于 this指针的说明不正确的是( )。(分数:2.00)A.不能在程序中修改 this指针B.this指针可以给其他指针赋值,但不能修改 this
9、指针C.静态成员函数中没有 this指针D.this指针可以被赋值20.结构化程序设计的基本原则不包括(分数:2.00)A.多态性B.自顶向下C.模块化D.逐步求精21.下列程序的输出结果是( )。 #includeiostreamh void main( ) int a3,i,j,k=2; for(i=0;i3;i+)ai=i; for(i=0;ik;i+) for(j=0;jk;j+) aj=ai; couta2; (分数:2.00)A.2B.3C.1D.022.对于长度为 n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是_。 (分数:2.00)A.冒泡排序为 n/2B.冒
10、泡排序为 nC.快速排序为 nD.快速排序为 n(n-1)/223.下列语句不能够用于打开 C根目录下文件 testtxt 的语句是( )。(分数:2.00)A.3B.6C.10D.2024.有以下程序: void sum(int a) a0=a-1+a1; main() int a10= 1,2,3,4,5,6,7,8,9,10; sum( printf(“%d/n“,a2); 程序运行后的输出结果是_。 (分数:2.00)A.6B.7C.5D.825.下列关于多态性的描述,错误的是( )。(分数:2.00)A.INDEXON籍贯,学号 TO JGXHB.INDEXON籍贯+学号 TO JG
11、XHC.INDEXON籍贯,STR(学号,4)TO JGXHD.INDEXON籍贯+STR(学号,4)TO JGXH26.下列关于虚基类的描述,错误的是( )。(分数:2.00)A.SELECT * FROM订购单 WHERE供应商号 NULLB.SELECT * FROM订购单 WHERE供应商号=NULLC.SELECT * FROM订购单 WHERE供应商号 IS NULLD.SELECT * FROM订购单 WHERE供应商号 IS NOT NULL27.下面关于 C+语言的描述错误的是( )。 (分数:2.00)A.0B.15C.25D.3028.在重载一个运算符时,如果其参数表中有
12、一个参数,则说明该运算符是( )。(分数:2.00)A.包含关系B.继承关系C.关联关系D.无关系,上述类定义有语法错误29.数据库技术的根本目标是要解决数据的_。(分数:2.00)A.存储问题B.共享问题C.安全问题D.保护问题30.已知:int m10:在下列定义引用的语句中,正确的是【 】(分数:2.00)A.int aj=aj-1; aj=t; protected: int*a,n;/指针 a 用于存放数组首地址,n 用于存放数组元素个数 ; (分数:30.00)_37.以下程序中函数 fun 的功能是:构成一个如图所示的带头结点的单向链表,在结点 的数据域中放入了具有两个字符的字符串
13、。函数 disp 的功能是显示输出该单向链表 中所有结点中的字符串。请填空完成函数 disp。 head ab cd ef /0 #include typedef struct node /*链表结点结构*/ char sub3; struct node *next; Node; Node fun(char s) /* 建立链表*/ void disp(Node *h) Node *p; p=h-next; while(= -|_|- ) printf(“%s/n“,p-sub);p= -|_|- ; main() Node *hd; hd=fun(); disp(hd);printf(“/n
14、“); (分数:30.00)_38.以下程序运行后的输出结果是 -|_|-。 main() int x=0210; printf(“%X/n“,x); (分数:30.00)_39.C+中封装性、继承性和 -|_|-是面向对象思想的主要特征。(分数:30.00)_40.以下程序用于判断 a、b、c 能否构成三角形,若能,输出 YES,否则输出 NO。当给 a、b、c 输入三角形三条边长时,确定 a、b、c 能构成三角形的条件是需同时满足三 个条件:a+bc,a+cb,b+ca。请填空。 main() float a,b,c; scanf(“%f%f%f“, if(= -|_|-)printf(“
15、YES/n“); /*a、b、c 能构成三角形*/ else printf(“NO/n“); /*a、b、c 不能构成三角形*/ (分数:30.00)_41.按“行进后出”原则组织数据的数据结构是 -|_|- 。(分数:30.00)_42.创建对象数组时,对数组的每一个元素都将调用一次构造函数,如果没有显式给出数组元素的初值,则调用缺省构造函数,下列程序涉及到对象数组的创建和单个对象的创建,其输出结果是 -|_|-。 #include using namespace std; class Foo public: Foo(int X)cout str; P=str; for(int i=0;*p
16、!=0;p+,i+); coutyB.pt-xC.+pt-x D.(pt+)-x解析:此题主要考核的是结构体类型的指针。题目中定义了一个 st 结构体类型,然后定义了 st 型的结构体 指针变量*pt 及结构体数组 c,并对结构体数组进行了初始化,且将结构体指针变量 pt 指向了数组 c,则 pt-x 的值为 10,则+pt-x 的值为 11(注:“-”运算符的优先级高于“+”),故选项 C 正确。7.下面对于友元函数描述正确的是( )。(分数:2.00)A.友元函数的实现必须在类的内部定义B.友元函数是类的成员函数C.友元函数破坏了类的封装性和隐藏性 D.友元函数不能访问类的私有成员解析:友
17、元函数的定义既可以在类内部进行,也可以在类外部进行。它提高了程序的运行效率,但破坏了类的封装性和隐藏性,使得类的非成员函数可以访问类的私有成员。8.以下各选项组中,均是 C+语言关键字的组是( )。(分数:2.00)A.public operator this B.shod string staticC.it while =D.private cout printf解析:关键字是系统已预定义的单词,在程序中有不同的用途,考生应该 熟记。9.下列关于构造函数说法不正确的是( )。(分数:2.00)A.4个字节B.5个字节C.6个字节 D.7个字节解析:在本题中,Dim b(-1 To 10,2
18、To 9,20)As Integer 定义了一个三维数组,如果没有指定下界,缺省值是 0,所以计算数组中的个数就容易了,表达式为:(10 -(-1)+1)(9-2+1)(20-0+1)=2016,所以选项 B)是正确答案。10.有以下程序 int f1(int x,int y)return xy?x:y; int f2(int x,int y)return xy?y:x; main() int a=4,b=3,c=5,d=2,e,f,g; e=f2(f1(a,b),f1(c,d); f=f1(f2(a,b),f2(c,d); g=a+b+c+d-e-f; printf(“%d,%d,%d/n“
19、,e,f,g); 程序运行后的输出结果是_。 (分数:2.00)A.4,3,7 B.3,4,7C.5,2,7D.2,5,7解析: 函数 f1 的功能是返回两个数中比较大的值,f2 的功能是返回两个数中比较小的值。11.下面程序的结果是( )。 #includeiostreamh class A public: A( ) cout “construtA“ end1; virtual A( ) cout “destructA“ end1; ; class B:public A ; class C:public A ; class D:public B,public C ; void main( )
20、 Dd; (分数:2.00)A.constructA destructAB.constructA constructA destructA destructA C.constructA constructA constructA destructA destructA destructAD.constructA constructA constructA constructA destructA destructA destructA destructA解析:类 D继承了类 C和类 B,所以在构造的时候分别构造类 B和类 C。12.下面关于 C+语言变量的叙述错误的是( )。(分数:2.00)
21、A.字段变量的值 B.内存变量的值C.随机显示D.错误信息解析:使用 SET PROCEDURETO命令可以将过程或函数放在单独的程序文件中,选项 B)用于设置键盘功能键,选项 A)和选项 C)语法错误。13.有以下结构体说明和变量的定义,且指针 p指向变量 a,指针 q指向变量 b。则不能把结点 b连接到结点 a之后的语句是( )。 structnode chardata; structnode*next; a,b,*p=a,*q=b; (分数:2.00)A.3 4 7 5B.3 5 7 4 C.1 2 3 4D.1 2 3 5解析:在被调用过程中,有这样的语句“Static Sum”,因为
22、变量 Sum是局部变量,局部变量除了可以用Dim语句声明外,还可用 Static语句将变量声明为静态变量,它在程序运行过程中可保留变量的值,这就是说每次调用过程时,用 Static说明的变 量保持原来的值。具体过程分析如下: 调用 P(1),所以在被调过程中 N=1,执行 For Next循环,P(1)=Sum=1; 调用 P(2),所以在被调过程中 N=2,执行 For Next循环,P(2)=Sum=4; 调用 P(3),所以在被调过程中 N=3,执行 For Next循环,P(3)=Sum=10; 调用 P(4),所以在被调过程中 N=4,执行 For Next循环,P(4)=Sum=2
23、0; 不难看出,最后输出的结果 S值应为1+4+10+20=35,所以选项 C)正确。14.下面程序输出的结果为( )。 #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.DEFINE MENU C.DEHNE PADD.DEFINE BAR解析:SQL
24、的数据定义功能中,可以对视图进行定义,语句格式为: CREATE VIEW view_name(column_name,column_name)AS select_statement。 15.拷贝构造函数的参数一般是( )。(分数:2.00)A.某对象名B.某对象成员名C.某对象的引用名 D.指向对象的指针名解析:C+语言中拷贝构造函数的参数一般是某个对象的引用名。16.C+语言中,表示一条语句结束的标号是( )。(分数:2.00)A.#B.; C./D.解析:C+语言中语句的结束符是分号。17.如果表达式 x * y + z中,“ * ”是作为友元函数重载的,“+”是作为友元函数重载的,则该
25、表达式还可为 ( )。(分数:2.00)A.operator+(operator*(x,y),z) B.xoperator+(operator*(x,y),z)C.yoperator*(operator+(x,y),z)D.xoperator+(operator*(x,y)解析:C+中用成员函数重载 x*y为:xoperator * (y),用友元函数重载 x*y为:operator *(x,y),用成员函数重载 x/y为:xoperator+(y),用友元函数重载 x + y 为:operator+(x,y)。18.某二叉树中有 n个度为 2的结点,则该二叉树中的叶子结点数为(分数:2.00
26、)A.n+1 B.n-1C.2nD.n2解析:据二叉树性质 3,在任意一棵二叉树中,度为零的结点(即叶子结点)总比度为 2的结点多一个,即n0=n2十 1。 19.关于 this指针的说明不正确的是( )。(分数:2.00)A.不能在程序中修改 this指针B.this指针可以给其他指针赋值,但不能修改 this指针C.静态成员函数中没有 this指针D.this指针可以被赋值 解析:SQL 的超联接运算符中“*=”代表左联接,“=*”代表右联接。但在 Visual FoxPro中,不支持超联接运算符“*=”和“=*”,它 有专门的联接运算语法格式,分别用 LEFT JOIN和 RIGHT J
27、OIN表示。20.结构化程序设计的基本原则不包括(分数:2.00)A.多态性 B.自顶向下C.模块化D.逐步求精解析:结构化程序设计的原则包括:“自顶而下,逐步求精”的设计思想,“独立功能,单出、入口”的模块化设计等。多态性是面向对象程序语言的特征。21.下列程序的输出结果是( )。 #includeiostreamh void main( ) int a3,i,j,k=2; for(i=0;i3;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循环,但要分清楚,第
28、一个是单独的给三个元素赋值,赋完值后三个 a0=0,a1=1,a2=2;后面的两个 for是嵌套循环,对数组元素的赋值,但由于 k=2,初值已定 for里的条件是小于 k,所以不管怎么处理都影响不到 a 2,故答案为 2。22.对于长度为 n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是_。 (分数:2.00)A.冒泡排序为 n/2B.冒泡排序为 nC.快速排序为 nD.快速排序为 n(n-1)/2 解析:假设线性表的长度为 n,则在最坏情况下,冒泡排序需要经过 n/2 遍的从前往后扫描和 n/2 遍的从后 往前扫描,需要比较次数为 n(n-1)/2。快速排序法的最坏情况比较次
29、数也是 n(n-1)/2。23.下列语句不能够用于打开 C根目录下文件 testtxt 的语句是( )。(分数:2.00)A.3B.6C.10D.20 解析:由于大多数监听器接口都包含了我们可能不需要的方法。使用适配器类作为父类,可避免为实现接口而必须实现一些空方法的麻烦。24.有以下程序: void sum(int a) a0=a-1+a1; main() int a10= 1,2,3,4,5,6,7,8,9,10; sum( printf(“%d/n“,a2); 程序运行后的输出结果是_。 (分数:2.00)A.6 B.7C.5D.8解析:本题将主函数中 a2的地址传递给了 sum 函数中
30、的形参 a,使得 sum 函数中的(a+0)为主函数中 a2的地址,所以 a-1即*(a-1)的值为主函数中 a1的值;a1即*(a+1)的值为主函数中 a3的值,故函数 sum 中 a0=2+4,由于此函数中的 a 是指向主函数中的 a2,所以主函数中的 a2的值即为 6。25.下列关于多态性的描述,错误的是( )。(分数:2.00)A.INDEXON籍贯,学号 TO JGXHB.INDEXON籍贯+学号 TO JGXHC.INDEXON籍贯,STR(学号,4)TO JGXHD.INDEXON籍贯+STR(学号,4)TO JGXH 解析:PasswordChar 属性指定文本框控件内是显示用
31、户输入的字符还是显示占位符。当为属性指定一个占位符(例如本题中的星号“*”) ,文本框中只显示占位符。由于一个汉字占两个字符位,因此本题在文本框中将显示 8个星号。26.下列关于虚基类的描述,错误的是( )。(分数:2.00)A.SELECT * FROM订购单 WHERE供应商号 NULLB.SELECT * FROM订购单 WHERE供应商号=NULLC.SELECT * FROM订购单 WHERE供应商号 IS NULL D.SELECT * FROM订购单 WHERE供应商号 IS NOT NULL解析:“价格在 30万元60 万元之间”要使用 And语句来表示“与”。27.下面关于
32、C+语言的描述错误的是( )。 (分数:2.00)A.0B.15C.25 D.30解析:macro2 中的 Close关闭的是教师工资窗体,一次只能关闭一个窗体。28.在重载一个运算符时,如果其参数表中有一个参数,则说明该运算符是( )。(分数:2.00)A.包含关系B.继承关系 C.关联关系D.无关系,上述类定义有语法错误解析:Array 函数只能给变体变量类型数组初始化,a 为整型数组,所以选项 D)错误。29.数据库技术的根本目标是要解决数据的_。(分数:2.00)A.存储问题B.共享问题C.安全问题D.保护问题解析:30.已知:int m10:在下列定义引用的语句中,正确的是【 】(分
33、数:2.00)A.int aj=aj-1; aj=t; protected: int*a,n;/指针 a 用于存放数组首地址,n 用于存放数组元素个数 ; (分数:30.00)_正确答案:()解析:37.以下程序中函数 fun 的功能是:构成一个如图所示的带头结点的单向链表,在结点 的数据域中放入了具有两个字符的字符串。函数 disp 的功能是显示输出该单向链表 中所有结点中的字符串。请填空完成函数 disp。 head ab cd ef /0 #include typedef struct node /*链表结点结构*/ char sub3; struct node *next; Node;
34、 Node fun(char s) /* 建立链表*/ void disp(Node *h) Node *p; p=h-next; while(= -|_|- ) printf(“%s/n“,p-sub);p= -|_|- ; main() Node *hd; hd=fun(); disp(hd);printf(“/n“); (分数:30.00)_正确答案:(p!=NULL 或 p 或 p!=0 或 p!=/0 , p-next 或 (*p).next)解析:此题主要考核的是用指针处理链表。自定义结构体类型名为 Node,并定义一个指向结点类型的指针 next。用 Node 来定义头结点指针变
35、量 h,并定义另一个指针变量 p 指向了第一个结点,在满足 p 未指向最 后一个结点的空指针时,输出 p 所指向结点的字符串,所以第一个空填 p!=NULL 或 p 或 p!=0 或 p!=/0, 然后将 p 指向下一个非空结点,所以第二个空填 p-next 或与其等效的形式,反复执行直到所有的结点都输 出,即遇到 p 的值为 NULL。38.以下程序运行后的输出结果是 -|_|-。 main() int x=0210; printf(“%X/n“,x); (分数:30.00)_正确答案:(88)解析: 由于八进制数以 0 开头,所以 0210 表示八进制数;“%X”的格式指以十六进制形式输出
36、,输出十 六进制的“af”时以大写字母输出。所以本题可以先将 0210 化为十进制,然后再化为十六进制。39.C+中封装性、继承性和 -|_|-是面向对象思想的主要特征。(分数:30.00)_正确答案:(多态性)解析:面向对象系统包含了三个特征封装性、继承性和多态性,这三个特征可以 很好的实现数据抽象,进行行为共享,完成进化求解和描述一个系统的确定行为。 40.以下程序用于判断 a、b、c 能否构成三角形,若能,输出 YES,否则输出 NO。当给 a、b、c 输入三角形三条边长时,确定 a、b、c 能构成三角形的条件是需同时满足三 个条件:a+bc,a+cb,b+ca。请填空。 main()
37、float a,b,c; scanf(“%f%f%f“, if(= -|_|-)printf(“YES/n“); /*a、b、c 能构成三角形*/ else printf(“NO/n“); /*a、b、c 不能构成三角形*/ (分数:30.00)_正确答案:(a+bc) class Foo public: Foo(int X)cout _正确答案:()解析:43.如下程序声明了一个二维图形类 TwoDShape,从其派生出矩形类 Rec。 #includeiostream #includestring using namespaee std, class TwoDShape/ 二维图形类 ch
38、ar name20; public: TwoDShape (char * n=“unknown“) strcpy(name, n); Char * getName()return name; -|_|- =0; ; class Rec: public TwoDShape double width, height public: Rec(double w-=0. 0,double h=0. 0):TwoDShape(“rectangle“) width=w; height=h; double getWidth() return width; double getHeight() return h
39、eight; double area() return width * height; ; int main() TwoDShape * shape; Shape=new Rec(2.1,3.0); cout“object is“shape-getName()“/n“; cout“Area is“shape-area()“/n“; return 0 请将程序补充完整,使程序在运行时输出: abject is triangle Area is 6.3 (分数:30.00)_正确答案:(virtual double area()解析:这里需要添加一个纯虚函数,即 virtual double ar
40、ea()=0。44.若按功能划分,软件测试的方法通常分为白盒测试方法和 -|_|-测试方法。(分数:30.00)_正确答案:(黑盒(或黑箱)解析:软件测试的方法分为白箱测试方法和黑箱测试方法。白箱测试是根据对程序内部逻辑结构的分析来选取测试用例,白箱测试用例的设计准则有:语句覆盖、分支覆盖、条件覆盖和组合条件覆盖;黑箱测试方法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例。常用的黑箱测试有等价分类法、边值分析法、因果图法和错误推测法。 45.一个 C+语言程序的开发步骤通常包括编辑、 -|_|-、链接、运行和调试。(分数:30.00)_正确答案:(编译)解析:C+语言程序开
41、发的基本步骤是编辑、编译、链接、运行和调试。46.将一个函数声明为一个类的友元函数必须使用关键字 -|_|-。(分数:30.00)_正确答案:(friend)解析:本题考核友元函数。定义友元函数的方式是在类定义中用关键字 friend说明该函数,其格式为:friend类型友元函数名(参数表);47.下列软件系统结构图的宽度为 -|_|- (分数:30.00)_正确答案:(3)解析:在程序结构图的有关术语中,宽度的概念是:整体控制跨度,即各层中所含的模块数的最大值,由图可得此软件系统结构图的宽度为 3。48.operator是运算符重载时必须使用的关键字,它和被重载的运算符连在一起,作为运算符函数的专用函数名,务必把该函数说明为 -|_|-的。(分数:30.00)_正确答案:(public)解析:本题考查 c+中运算符重载的固定格式和要求。C+中不论用成员