1、计算机等级考试二级(C+)45 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(每小题 2 分,共 70 分) 下列各(总题数:35,分数:70.00)1.关于友元的概念错误的是( )。(分数:2.00)A.If x=y Then z=x:z=yB.If x=y Then z=x Else z=yC.z=y:If x=y Then z=xD.If xnext=q-next;B.p-next=p-next-next;C.p-next=r;D.p=q-next;27.下面叙述不正确的是( )。(分数:2.00)A.派生类一般都用公有派生B.对基类成员的访问必须是无两义性的C.赋值
2、兼容规则也适用于多重继承的组合D.基类的公有成员在派生类中仍然是公有的28.下列关于运算符重载不正确的是( )。(分数:2.00)A.throwsB.throwC.ThrowableD.Exception29.以下程序的输出结果是( )。 #includeiostreamh void main( ) inti,j,x=0; for(i=0;i 2;i+) x+; for(j=0;j 3;j+) if (j% 2)continue; x+; x+; cout “x=“ x; (分数:2.00)A.若干个二维表B.一个 DBF 文件C.一个 DBC 文件D.若干个 DBC 文件30.下面程序错误的
3、语句是( )。 #include“ iostreamh“ void main( ) int A=0; int B.X( ) i=6;C.X(double m,double n) i=m;j=n;D.double X(double k) i=k;return i;二、填空题(每空 2 分,共 30 分)(总题数:15,分数:30.00)36.若已知 a=10,b=20,则表达式 l a b 的值为 1。(分数:2.00)填空项 1:_37.下列程序的输出结果是 1 #includeiostream using namespace std; templatetypenameT Tfun(Ta,TB
4、) return (aB) ?a:b; int main 2 coutfun(3,6),fun(3.14F,6.28F)end1; return 0; (分数:2.00)填空项 1:_38.设置虚基类的目的是 1,通过 2 表示虚基类。(分数:2.00)填空项 1:_39.以下程序的输出结果是 1。 #includeiostreamh unsignedfun(unsignednum) unsignedk=1; do k * =num%10;num/=10;while(num); returnk; voidmain( ) unsignedn=26; coutfun(n)endl; (分数:2.0
5、0)填空项 1:_40.语句 cout /n还可表示为 1。(分数:2.00)填空项 1:_41.在 c+语言的面向对象程序设计框架中, 1 是程序的基本组成单元。(分数:2.00)填空项 1:_42.要采用“cin,tout”进行输入输出时,必须包含的头文件是 1。(分数:2.00)填空项 1:_43.以下程序运行后的输出结果是 1 。 ; main2 struct NODE s3=1,/0,2,/0,3,/0,*p,*q,*r; int sum=0; s0.next=s+1; s1.next=s+2; s2.next=s; p=s; q=p-next; r=q-next; sum+=q-n
6、ext-num; sum+=r-next-next-num; printf(“%d/n“,sum); (分数:2.00)填空项 1:_44.数据结构分为线性结构和非线性结构,带链的队列属于 1 。(分数:2.00)45.C+语言的参数传递机制包括传值和传地址两种,如果调用函数时,需要改变实参或者返回多个值,应该采取 1 方式。(分数:2.00)填空项 1:_46. 1 是一系列相关函数的模型或样板,这些函数的 2 形式相同,只是所针对的 3 不同。(分数:2.00)填空项 1:_47.已知数组 a 中的元素个数为 n,下列语句的作用是将下标为 i 的元素移动到下标为 i-1 的单元,其中1i1
7、; (分数:2.00)填空项 1:_48.在面向对象方法中,类的实例称为 1。(分数:2.00)填空项 1:_49.某二叉树中度为 2 的结点有 18 个,则该二叉树中有 1 个叶子结点。(分数:2.00)填空项 1:_50.下列程序的输出结果是 1 #include using namespace std; class A int a public: A2:a(9) virtual void print3 const coutprint10; show(d1); show(d2); return 0; (分数:2.00)计算机等级考试二级(C+)45 答案解析(总分:100.00,做题时间:
8、90 分钟)一、选择题(每小题 2 分,共 70 分) 下列各(总题数:35,分数:70.00)1.关于友元的概念错误的是( )。(分数:2.00)A.If x=y Then z=x:z=y B.If x=y Then z=x Else z=yC.z=y:If x=y Then z=xD.If xnext=q-next;B.p-next=p-next-next;C.p-next=r;D.p=q-next; 解析:要想将 q 所指结点从链表中删除,同时保持链表的连续,必需使 p 结点的 next 指向 r,在四个选项 中,只有选项 D 不能做到。27.下面叙述不正确的是( )。(分数:2.00)
9、A.派生类一般都用公有派生B.对基类成员的访问必须是无两义性的C.赋值兼容规则也适用于多重继承的组合D.基类的公有成员在派生类中仍然是公有的 解析:C+语言中如果基类的成员是公有的,它被继承后在子类中该成员可能是公有的,也可能不是,主要看继承的权限。28.下列关于运算符重载不正确的是( )。(分数:2.00)A.throwsB.throw C.ThrowableD.Exception解析:字符型数据在计算机内部是以 ASCII 码存储的,英文大写字母和小写字母在 ASCII 码表中都是连续的。大写字母 AZ 是从 6590,小写字母 az 是从 97122。所以只要变量 c 大于等于 a 并且
10、等于小于 2 就能保证其为小写字母。29.以下程序的输出结果是( )。 #includeiostreamh void main( ) inti,j,x=0; for(i=0;i 2;i+) x+; for(j=0;j 3;j+) if (j% 2)continue; x+; x+; cout “x=“ x; (分数:2.00)A.若干个二维表 B.一个 DBF 文件C.一个 DBC 文件D.若干个 DBC 文件解析:在 Access 数据库中表之间的关系也一般为一对多型。30.下面程序错误的语句是( )。 #include“ iostreamh“ void main( ) int A=0; i
11、nt B.X( ) i=6;C.X(double m,double n) i=m;j=n;D.double X(double k) i=k;return i; 解析:对象的生成包括声明、实例化和初始化 3 个方面的内容。一般格式是先定义一个对象变量,再用关键字 new 生成一个对象,并为对象中的变量赋初值。注意:选项 B)public A a=A();应在 A()前加关键字new。选项 C)A a=new class();把 new 后的 class 应改为字母 A。选项 D)a A;两个字母互换顺序即可。二、填空题(每空 2 分,共 30 分)(总题数:15,分数:30.00)36.若已知
12、a=10,b=20,则表达式 l a b 的值为 1。(分数:2.00)填空项 1:_ (正确答案:1)解析:计算表达式!ab,先计算!a,因 a 的值为 10,!a 的值为 0。关系表达式 0 20 为真,所以表达式!ab 的值为 1。37.下列程序的输出结果是 1 #includeiostream using namespace std; templatetypenameT Tfun(Ta,TB) return (aB) ?a:b; int main 2 coutfun(3,6),fun(3.14F,6.28F)end1; return 0; (分数:2.00)填空项 1:_ (正确答案:
13、3,3.14)解析:本题考核模板函数的使用。C编译系统将根据实参表中的实参的类型来确定函数的形参列表中的类型。函数 fun 的功能是返回两者中较小的值,函数调用 fun(3,6)返回的值为 3,函数调用fun(3.14F,6.28F)返回的值为 3.14。38.设置虚基类的目的是 1,通过 2 表示虚基类。(分数:2.00)填空项 1:_ (正确答案:解决二义性问题)解析:解决二义性的两个基本方法一是用域名进行限制,二是用虚基类的方法。39.以下程序的输出结果是 1。 #includeiostreamh unsignedfun(unsignednum) unsignedk=1; do k *
14、=num%10;num/=10;while(num); returnk; voidmain( ) unsignedn=26; coutfun(n)endl; (分数:2.00)填空项 1:_ (正确答案:12)解析:函数有一个形参 num,循环前变量 k 置 1,循环中,表达式 num%10 是取 num 的个位,将 num 的个位值累乘于 k 中,然后 num 除以 10。循环直至 num 为。结束,这是 逐一求出 num 十进制表示的各位数字,并累乘于变量 k 的循环。函数最后返回 k。函数 fun 的功能是求整数的各位十进数字积。 40.语句 cout /n还可表示为 1。(分数:2.0
15、0)填空项 1:_ (正确答案:cout end1;)解析:“/n”表示换行,end1 也可表示换行。end1 和“/n”可以通用。41.在 c+语言的面向对象程序设计框架中, 1 是程序的基本组成单元。(分数:2.00)填空项 1:_ (正确答案:类)解析:C+语言面向对象程序设计的基本组成单元是 class,面向过程的程序设计的 基本组成单元是函数。42.要采用“cin,tout”进行输入输出时,必须包含的头文件是 1。(分数:2.00)填空项 1:_ (正确答案:iostreamh)解析:iostreamh 是与输入输出有关的类文件。 43.以下程序运行后的输出结果是 1 。 ; mai
16、n2 struct NODE s3=1,/0,2,/0,3,/0,*p,*q,*r; int sum=0; s0.next=s+1; s1.next=s+2; s2.next=s; p=s; q=p-next; r=q-next; sum+=q-next-num; sum+=r-next-next-num; printf(“%d/n“,sum); (分数:2.00)填空项 1:_ (正确答案:5)解析:程序通过语句“s0.next=s+1; s1.next=s+2; s2.next=s;”将结构体变量 s 中各结点链接成了一个 循环链表,即最后一个结点的指针域指向了头结点(s2.next=s;
17、),整个链表形成一个环,并通过语句“p=s; q=p-next; r=q-next;”将结构体指针变量 p、q、r 指向了各结点,故本题输出的 sum=3+2=5。44.数据结构分为线性结构和非线性结构,带链的队列属于 1 。(分数:2.00)解析:45.C+语言的参数传递机制包括传值和传地址两种,如果调用函数时,需要改变实参或者返回多个值,应该采取 1 方式。(分数:2.00)填空项 1:_ (正确答案:传地址)解析:本题考查的是传值调用和传址调用的区别-传值调用只是进行值的简单复制,返回之后不会改变原来的值;而传址调用是把参数的地址传入,会改变原来的值。 46. 1 是一系列相关函数的模型
18、或样板,这些函数的 2 形式相同,只是所针对的 3 不同。(分数:2.00)填空项 1:_ (正确答案:函数模板)解析:本题考查 C+中函数模板的定义。函数模板是一系列相关函数的模型或样板,这些函数的源代码形式相同,只是所针对的数据类型不问。注意:声明一个函数的模板格式是:template 模板形参表声明 函数声明 47.已知数组 a 中的元素个数为 n,下列语句的作用是将下标为 i 的元素移动到下标为 i-1 的单元,其中1i1; (分数:2.00)填空项 1:_ (正确答案:i+1)解析:下标 i 先自加,然后用 ai+1代替 ai的值。要将数组中后一位的值赋给前一位,只需将 i+1 位的
19、数组元素值赋给 i 位,表达式为 ai=ai+1。48.在面向对象方法中,类的实例称为 1。(分数:2.00)填空项 1:_ (正确答案:对象)解析:将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。所以,类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是其对应类的一个实例。49.某二叉树中度为 2 的结点有 18 个,则该二叉树中有 1 个叶子结点。(分数:2.00)填空项 1:_ (正确答案:19)解析:二叉树的性质 3:在任意一棵二叉树中,度为 0 的结点(即叶子结点)总是比度为 2 的结点多一个。 本题中度为 2 的结点数为 18,故叶子结点数为 18+1=19 个。50.下列程序的输出结果是 1 #include using namespace std; class A int a public: A2:a(9) virtual void print3 const coutprint10; show(d1); show(d2); return 0; (分数:2.00)解析: