1、二级 C+笔试-235 及答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:30,分数:70.00)1.下列叙述中,正确的是( )。(分数:2.00)A.线性表是线性结构B.栈与队列是非线性结构C.线性链表是非线性结构D.二叉树是是线性结构2.有以下程序:#include iestreamusing namespace std;int f(int n)if(n=1)return 1;elsereturn f(n-1)+1;int main()int i,j=0;for(i=1;idatai;for (i=1; ij = i-1;temp = datai;while (da
2、ta j tempj-;dataj+1 = temp;for(i=O;isetvalue(20);ps-fun(5);ps-disp();return 0;程序运行后,输出的结果是( )。(分数:2.00)A.15B.20C.25D.3016.在下列排序方法中,平均时间性能为 O(nlogn)且空间性能最好的是( )。(分数:2.00)A.快速排序B.堆排序C.归并排序D.基数排序17.有以下程序:#include iostreamusing namespace std;class Apublic:virtual void setx(int i,int j=0)x=i;y=j;virtual
3、void print()=0;protected:int x,y;class B : public Apublic:void print()coutx*x“, “;class C : public Apublic:void print()coutx*x*xend1;int main()A *pa;B b;C c;pa=pa-setx(5);pa-print ();pa=pa-setx(2);pa-print();return 0;程序运行后的输出结果是( )。(分数:2.00)A.25,8B.2,5C.5,2D.8,2518.采用面向对象技术开发的应用系统的特点是( )。(分数:2.00)A.
4、重用性更强B.运行速度更快C.占用存储量小D.维护更复杂19.软件生命周期是指( )。(分数:2.00)A.软件产品从提出、实现、使用维护到停止使用退役的过程B.软件产品从提出、实现到使用维护的过程C.软件产品从提出到实现的过程D.软件产品从提出、实现到使用的过程20.有如下程序:#include iostreamusing namespace std;class Baseprivate:char c;public:Base(char n) :c(n) Base ( )coutc;class Derived : public Baseprivate:char c;public:Derived(
5、char n) :Base(n+1),c(n) Derived ()coutc;int main ( )Derived obj (x);return 0;执行上面的程序将输出( )。(分数:2.00)A.xyB.yxC.xD.y21.数据库的数据模型所描述的内容有三个部分,它们是( )。(分数:3.00)A.数据结构、数据操作和数据约束B.概念数据模型、逻辑数据模型和物理数据模型C.现实世界、信息世界和计算机世界D.概念模式、外模式和内模式22.下列有关算法的描述中,错误的是( )。(分数:3.00)A.所谓算法是指解题方案的准确而完整的描述B.算法的基本特征有:可行性、确定性、有穷性和拥有足
6、够的情报等C.算法的复杂度主要包括时间复杂度和空间复杂度D.算法的时间复杂度是指执行算法程序所需要的时间23.有以下程序:#include iostream#include stringusing namespace std;class visitedprivate:int number;char *name;public:static int glob;void set mes(char *(分数:3.00)A.;void visited:set mes(char *a) name=new charstrlen(A) +1;strcpy(name,A) ;number=+glob;int v
7、isited:glob-O;int main()visited person10;int i;char str8;for(i=0;istr;personi .set mes(str);coutB) ?a:B) C) ?y:c”的值为 【6】 。(分数:2.00)填空项 1:_36.求 1100 的和,可写成“for(s=0,i=1; 【7】 ;i+) s+=i;”的形式。(分数:2.00)填空项 1:_37.以下程序调用 findmax()函数返回数组中的最大值。请填空完成此函数。#includeiostreamusing namespace std;int findmax(int*a,int
8、 n)int +p、*s;for(p=a,s=a;p-an;p+)if(u 【8】 /u)*s=*p;return(*S);int main()int x5=12,21,14,16;coutfindmax(X,5)end1;return 0;(分数:2.00)填空项 1:_38.下面程序的输出结果是u 【9】/u。#include iostreamusing namespace std;void f(int x)if(x)coutput(0+x%10);f(x10);int main()f(11001);return 0;(分数:2.00)填空项 1:_39.非成员函数只有在声明为类的 【10
9、】 才能访问这个类的所有 private成员。(分数:2.00)填空项 1:_40.有一种特殊的虚函数,重定义时不要求同名,这种虚函数是 【11】 。(分数:2.00)填空项 1:_41.cout是 IO 流库预定义的 【12】 。(分数:2.00)填空项 1:_42.以下程序实现栈的入栈和出栈的操作。其中有两个类:一个是节点类 node,它包含点值和指向上一个节点的指针 prev;另一个类是栈类 stack, 它包含栈的头指针 top。生成的链式栈如下图所示。img src=“tp/jsj/2jc+j28.1.gif“下面是实现程序,请填空完成此程序。#include iostreamusi
10、ng namespace std;class stack;class nodeint data;node *prev;public:node(int d, node *n)data=d;prev=n;friend class stack;class stacknode *top; /栈头public:stack()top=0;void push(int i)node *n=u 【13】 /u;top=n;int pop()node *t=top;if (top)top=top-prev;int c= t-data;delete t;return c;return 0;int main ()st
11、ack s;s.push(6);s.push(3);s.push (1);return 0;(分数:2.00)填空项 1:_43.在下面的程序的横线处填上适当的语句,使该程序的输出为 12。#include iostreamusing namespace std;class Basepublic:int a;Base(int i) a=i;;class Derived : public Baseint a;public:Derived(int x) : Base(x),b(x+1) void show()u 【14】 /u; /输出基类数据成员 a的值coutbend1;int main()D
12、erived d(1);d.show();return 0;(分数:2.00)填空项 1:_44.若有以下程序:#includeiostreamusing namespace std;class Basepublic:Base ( )x=0;int x;class Derived1 : virtual public Basepublic:Derived1()x=10;class Derived2 : virtual public Basepublic:Derived2()x=20;class Derived : public Derived1,protected Derived2;int ma
13、in()Derived obj;coutobj.xend1;return 0;该程序运行后的输出结果是u 【15】 /u。(分数:2.00)填空项 1:_二级 C+笔试-235 答案解析(总分:100.00,做题时间:90 分钟)一、选择题(总题数:30,分数:70.00)1.下列叙述中,正确的是( )。(分数:2.00)A.线性表是线性结构 B.栈与队列是非线性结构C.线性链表是非线性结构D.二叉树是是线性结构解析:解析 一个线性结构需要满足以下两个条件:一是有且只有一个根节点,二是每个节点最多有一个前件,也最多有一个后件。选项中的线性表、栈与队列、线性链表都满足这两个条件,所以它们都是线性
14、结构,而二叉树虽然只有一个根节点,但它的每个节点可以有两个子树,不满足线性结构的每个节点最多有一个前件,也最多有一个后件这一条件。所以它不是线性结构。2.有以下程序:#include iestreamusing namespace std;int f(int n)if(n=1)return 1;elsereturn f(n-1)+1;int main()int i,j=0;for(i=1;idatai;for (i=1; ij = i-1;temp = datai;while (data j tempj-;dataj+1 = temp;for(i=O;isetvalue(20);ps-fun(
15、5);ps-disp();return 0;程序运行后,输出的结果是( )。(分数:2.00)A.15B.20C.25 D.30解析:解析 本题考核对象指针的应用。程序首先定义了一个类 sample,其中包含一个私有成员 i和 3个公有成员函数。函数 setvalue()的功能是给私有成员 i赋值,函数 fun()的功能是将私有成员 i的值增加 m,函数 disp的功能是输出变量 i的值。在主函数中,先定义了类 sample的一个耐象指针 ps,并申请了一块内存空间。执行语句 ps-setvalue(20);后,类中 i的值为 20,执行语句“ps-fun(5);”后,类中 i的值为 25。所
16、以程序最后输出 25。16.在下列排序方法中,平均时间性能为 O(nlogn)且空间性能最好的是( )。(分数:2.00)A.快速排序B.堆排序 C.归并排序D.基数排序解析:解析 堆排序先把序列看成一棵大根堆或小根堆,摘取最大或最小元素后再建成新的根堆,再排序。因此它的平均时间性能为 O(nlogn)且空间性能最好。17.有以下程序:#include iostreamusing namespace std;class Apublic:virtual void setx(int i,int j=0)x=i;y=j;virtual void print()=0;protected:int x,y
17、;class B : public Apublic:void print()coutx*x“, “;class C : public Apublic:void print()coutx*x*xend1;int main()A *pa;B b;C c;pa=pa-setx(5);pa-print ();pa=pa-setx(2);pa-print();return 0;程序运行后的输出结果是( )。(分数:2.00)A.25,8 B.2,5C.5,2D.8,25解析:解析 该程序中定义了 A类、B 类和 C类共 3个类。其中,类 A是抽象类,它的类体内有一个纯虚函数 pnnt()。抽象类不可以定
18、义对象,但可以定义指向对象的指针。类 B和类 C都是类 A的公有派生类,这些类是具体类,它们对 A类中纯虚函数都有不同的实现。该程序的主函数中,定义一个指向类 A对象的指针 pa,又定义了类 B和类 C的 2个对象,并使指针 pa分别指向这些对象。这里,采用动态联编,在运行时选择 print()函数。所以,执行语句序列“pa=class Baseprivate:char c;public:Base(char n) :c(n) Base ( )coutc;class Derived : public Baseprivate:char c;public:Derived(char n) :Base(
19、n+1),c(n) Derived ()coutc;int main ( )Derived obj (x);return 0;执行上面的程序将输出( )。(分数:2.00)A.xy B.yxC.xD.y解析:解析 在 C+中,由于析构函数不能被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。执行顺序是先执行派生类的析构函数,再执行基类的析构函数,其顺序与执行构造函数的顺序正好相反。在此题的程序中,在主函数结束时,派生类 Derived对象。obj 将被删除,所以就会调用对象的析构函数。先调用派生类的析构函数,输出 x,然后调用基类的析构函数,输出 y。21.数据库的数据模型所描述
20、的内容有三个部分,它们是( )。(分数:3.00)A.数据结构、数据操作和数据约束 B.概念数据模型、逻辑数据模型和物理数据模型C.现实世界、信息世界和计算机世界D.概念模式、外模式和内模式解析:解析 数据模型是数据特征的抽象,它所描述的内容有三个部分,它们是数据结构、数据操作和数据约束。22.下列有关算法的描述中,错误的是( )。(分数:3.00)A.所谓算法是指解题方案的准确而完整的描述B.算法的基本特征有:可行性、确定性、有穷性和拥有足够的情报等C.算法的复杂度主要包括时间复杂度和空间复杂度D.算法的时间复杂度是指执行算法程序所需要的时间 解析:解析 算法的时间复杂度是指算法执行过程中所
21、需要的基本运算次数。23.有以下程序:#include iostream#include stringusing namespace std;class visitedprivate:int number;char *name;public:static int glob;void set mes(char *(分数:3.00)A.;void visited:set mes(char *a) name=new charstrlen(A) +1;strcpy(name,A) ;number=+glob;int visited:glob-O;int main()visited person10;i
22、nt i;char str8;for(i=0;istr;personi .set mes(str);coutB) ?a:B) C) ?y:c”的值为 【6】 。(分数:2.00)填空项 1:_ (正确答案:14)解析:解析 条件运算符是一种在两个表达式中选择一个的操作,它是 C+中惟一的三元运算符。在本题中,先计算“(aB) ?a:b”,因为 ac的逻辑值为真,所以表达式的值为 y的值,即 14。36.求 1100 的和,可写成“for(s=0,i=1; 【7】 ;i+) s+=i;”的形式。(分数:2.00)填空项 1:_ (正确答案:i*s)解析:解析 函数 findmax()的功能是找出
23、数组中的最大值。在函数 findmax()中,先定义两个整型指针p和 s(指针 s用于保存数组中的最大值,指针 p用于指向数组的各个元素),并将指针 p和 s指向传入数组的首元素,然后通过 for循环找出最大值。所以 if语句的条件表达式应该为“*p*s”,即当 p指向的元素值大于 s所指向的元素值时,就把*p 值保存在*s 中。38.下面程序的输出结果是u 【9】/u。#include iostreamusing namespace std;void f(int x)if(x)coutput(0+x%10);f(x10);int main()f(11001);return 0;(分数:2.0
24、0)填空项 1:_ (正确答案:10011)解析:解析 本程序中 f函数的功能是将传入的实参按倒序方式将各位数字输出。39.非成员函数只有在声明为类的 【10】 才能访问这个类的所有 private成员。(分数:2.00)填空项 1:_ (正确答案:友元函数)解析:解析 类具有数据封装和隐藏的特性。只有类的成员函数才能访问类的私有成员,外部函数只能访问类的公有成员。为了解决这个问题,引入了友元。友元可以在类外部直接访问类的私有成员。40.有一种特殊的虚函数,重定义时不要求同名,这种虚函数是 【11】 。(分数:2.00)填空项 1:_ (正确答案:虚析构函数)解析:解析 析构函数也可以通过 virtual修饰而声明为虚函数。虚析构函数与一般虚函数的不同之处在于:重定义函数就是派生类的析构函数,不要求同名。一个虚析构函数的版本被调用执行后,接着就要调用执行其基类版本,依次类推,直到调用执行了派生序列的最开始的那个虚析构函数版本为止。41.cout是 IO 流库预定义的 【12】 。(分数:2.00)