1、全国计算机等级考试二级 C+真题 2005年 4月及答案解析(总分:94.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.数据的存储结构是指(分数:2.00)A.存储在外存中的数据B.数据所占的存储空间量C.数据在计算机中的顺序存储方式D.数据的逻辑结构在计算机中的表示2.下列关于栈的描述中错误的是(分数:2.00)A.栈是先进后出的线性表B.栈只能顺序存储C.栈具有记忆作用D.对栈的插入与删除操作中,不需要改变栈底指针3.对于长度为 n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是(分数:2.00)A.冒泡排序 n/2B.冒泡排序为 nC.快
2、速排序为 nD.快速排序为 n(n-1)/24.对长度为 n的线性表进行顺序查找,在最坏情况下所需要的比较次数为(分数:2.00)A.log2nB.n/2C.nD.n+15.下列对于线性链表的描述中正确的是(分数:2.00)A.存储空间不一定是连续,且各元素的存储顺序是任意的B.存储空间不一定是连续,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且前件元素一定存储在后件元素的前面D.存储空间必须连续,且各元素的存储顺序是任意的6.下列对于软件测试的描述中正确的是(分数:2.00)A.软件测试的目的是证明程序是否正确B.软件测试的目的是使程序运行结果正确C.软件测试的目的是尽可能多地发
3、现程序中的错误D.软件测试的目的是使程序符合结构化原则7.为了使模块尽可能独立,要求(分数:2.00)A.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱C.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强8.下列描述中正确的是(分数:2.00)A.程序就是软件B.软件开发不受计算机系统的限制C.软件既是逻辑实体,又是物理实体D.软件是程序、数据与相关文档的集合9.数据独立性是数据库技术的重要特点之一。所谓数据独立性是指(分数:2.00)A.数据与程序独立存放B.不同的数据被
4、存放在不同的文件中C.不同的数据只能被对应的应用程序所使用D.以上三种说法都不对10.用树形结构表示实体之间联系的模型是(分数:2.00)A.关系模型B.网状模型C.层次模型D.以上三个都是11.要定义数组 A,使得其中每个元素的数据依次为:3、9、4、8、0、0、0,错误的定义语句是(分数:2.00)A.int A =3,9,4,8,0,0,0;B.int A7=3,9,4,8,0,0,0;C.int A =3,9,4,8);D.int A7=3,9,4,8);12.在 C+中,实现封装性需借助于(分数:2.00)A.枚举B.类C.数组D.函数13.下列关于虚函数的描述中,正确的是(分数:2
5、.00)A.虚函数是一个 static类型的成员函数B.虚函数是一个非成员函数C.基类中采用 virtual说明一个虚函数后,派生类中定义相同原型的函数时可不必加 virtual说明D.派生类中的虚函数与基类中相同原型的虚函数具有不同的参数个数或类型14.下列关于运算符重载的描述中,正确的是(分数:2.00)A.运算符重载可以改变操作数的个数B.运算符重载可以改变运算符的优先级C.运算符重载可以改变运算符的结合性D.运算符重载可以使运算符实现特殊功能15.有如下函数模板声明: templatetypename T T Max(Ta,Tb)return(a=b)?a:b;) 下列对函数模扳 Ma
6、x的调用中错误是(分数:2.00)A.Max(3.5,4,5)B.Max(3.5,4)C.Maxdouble(3.5,4.5)D.Maxdouble(3.5,4)16.若语句: coutsetfill()setw(5)3141512setw(5)“OK!“; 是程序中第一个输出语句,则输出结果是(分数:2.00)A.3141512OK!B.31415120K!C.414150K!D.31415OK!17.有如下语句序列; int k=0; dok+=5;couk$;) while(k19); while(k-0)cout*; 执行上面的语句序列输出字符$和。的个数分别是(分数:2.00)A.4
7、和 20B.5和 20C.4和 21D.5和 2118.针对数组定义 int data10;,下列表述中错误的是(分数:2.00)A.用*data 可访问到数组的首元素B.用 data9可访问到数组的末元素C.用 data10访问数组元素会超出数组边界D.data共有 10个元素,其首元素是 data119.已知 n是一个 int型变量,下列语句中错误的是(分数:2.00)A.long *p=new long;B.long p;C.long *p=new long(;D.longpr10;20.下列函数中对调用它的函数没有起到任何作用的是(分数:2.00)A.void f1(double)C.
8、void f3(double -x;)D.double f4(double *-*x;retum *x;21.在下面的类定义中,横线处应填入的内容是 class Fred public: void print()coutdataendl; void setData(double d)(data=d; static int count; private: double data; ; count=0; /静态数据成员的定义(分数:2.00)A.intB.static intC.int Fred:D.static int Fred:22.有如下程序: #includeiostream using
9、namespace std; class Base protected: in i; public: int j; ; class Derived:public Base int m; public:int n; ; int main() Derived d; d.i=0; /1 d.j=0; /2 d.m=0; /3 d.n=0; /4 retum 0; 其中主函数中有两个赋值语句有错,这两个借误的赋值语句是(分数:2.00)A.1和2B.1和3C.2和3D.2和423.在表达式 x-y中,“_”是作为非成员函数重载的运算符。若使用显式的函数调用代替直接使用运算符“_”,这个表达式还可表示为
10、(分数:2.00)A.operator-(B.operator-(y,C.operator-(D.operator-(x,24.下面的函数模板定义中错误的是(分数:2.00)A.templateB.template Q F(Q retum Q+x;) Q F(Q return x+x;C.templateclassTD.templateclass T TF(T return x*x;) Bool F(treturn x1;)25.已知 outfile是一个输出流对象,要想将 outfile的文件指针定位到当前位置之前 321字节处,正确的函数调用语句是(分数:2.00)A.outfilseek
11、p(321,ios_base:cu;B.outfilseekp(321,ios_base:bg;C.outfilseekp(-321,ios_base:be;D.outfilseekp(-321,ios_base:cu;26.有如下的程序: #includecstring #includeiostream using namespace std; class MyString public: MyString(const char*s); MyString()deletedata; Protected: unsigned len; char*data; ; MyString:MyString(
12、const char*s) len=strlen(s); data=new charlen+1; strcpy(data,s); int main() MyString a(“C+Programing“); MyString b(a); return 0; 在运行上面的程序时出错,出错的原因是(分数:2.00)A.构造函数的实参不允许是本类的对象B.没有定义实现深层复制(深拷贝)的拷贝构造函数C.构造对象 a时实参与形参类型不符D.系统不能生成缺省的拷贝构造函数27.有如下程序: #includeiostream using namespace std; class Demo public:
13、Demo() cout“default constructor/n“; Demo(const Demo Demo userCode(Demo b)DemoC(b);return c; int main() Demo a,d; cout“calling userCode()/n“; d=userCode(a); return 0; 执行上面程序的过程中,构造函数 Demo()和 Demo(const Demo 与语句 ff=O;的效果完全相同。对于这一现象,下列表述中错误的是(分数:2.00)A.ff是某个类的数据成员,func 是该类的友元函数B.ff是某个类的数据成员,func 是该类的成员
14、函数C.this-ff 和 ff是同一个变量D.func不是一个静态成员函数29.有如下程序: #includeiostream using namespace std; class Base pubfic: Base()cout“BB“;f(); void f()cout“Bf“: ; class Derived:public Base public: Derived()cout“DD“;) voidf()cout“Df“: ; intmain()Derived d;retum 0; 执行上面的程序将输出(分数:2.00)A.BBBfDDB.BBDfDDDfC.DDD.DDBBBf30.下列
15、说法中错误的是(分数:2.00)A.公有继承时基类中的 public成员在派生类中仍是 public成员B.私有继承时基类中的 protecte成员在派生类中仍是 protected成员C.私有继承时基类中的 public成员在派生类中是 private成员D.保护继承时基类中的 public成员在派生类中是 protected成员31.下面是关于派生类声明的开始部分,其中正确的是(分数:2.00)A.class virtual B:public AB.virtual class B:public AC.class B:public A virtualD.class B:virtual pub
16、lic A32.在重载一个运算符为成员函数时,其参数表中没有任何参数,这说明该运算符是(分数:2.00)A.后缀一元运算符B.前缀一元运算符C.无操作数的运算符D.二元运算符34.有如下程序: #qncludeiostream #includeiomanip using namespace std; class CSum int x,y; public: CSum(int x0,int y0):x(xo),y(yo) friend ostream return os; ; int main() CSum y(3.5; coutsetfill(*)8 couty; return0; 执行上面程序
17、的输出是(分数:2.00)A.88B.*88C.*8*8D.8*835.有如下程序: #ncludeiostremn using namespace std; class Stack public: Stack(unsigned n=10:size(n)rep_=new intsize;top=O; Stack(Stack for(int i=0;isize;i+)rep_i=s.rep_i; top=s.top; Stack()deleterep_; void push(int a)rep_top=a; top+; int opo()-top;return rep_top; bool is
18、Empty()constreturn top=O; pavate: int*rep_; unsigned size,top; ; int main() Stack s1; for(int i=1;i5;i+) s1.push(i); Stack s2(s1); for(i=1;i3;i+) couts2.pop(),; s2.push(6); s1.push(7); while(!s2.isEmpty() couts2.pop(),; return 0; 执行上面程序的输出是(分数:2.00)A.4,3,2,1B.4,3,6,7,2,1C.4,3,6,2,1D.1,2,3,4二、B填空题/B(
19、总题数:12,分数:24.00)36.某二叉树中度为 2的结点有 18个,则该二叉树有 【1】 个叶子结点。(分数:2.00)填空项 1:_37.在面向对象方法中,类的实例称为 【2】 。(分数:2.00)填空项 1:_38.诊断和改正程序中错误的工作通常称为 【3】 。(分数:2.00)填空项 1:_39.在关系数据库中,把数据表示成二维表,每一个二维表称为 【4】 。(分数:2.00)填空项 1:_40.问题处理方案的正确而完整的描述称为 【5】 。(分数:2.00)填空项 1:_41.在下面函数的横线处填上适当的内容,使该函数能够利用递归方法求解字符串 sb的长度(不得使用系统提供的字符
20、串处理函数)。 int GetLen(char*str) it(U 【6】 /U)returnU 【7】 /U; else return 1+GetLen(str+1); (分数:2.00)填空项 1:_42.下列程序的输出结果是U 【8】 /U。 #includeiostream #includecstring using namespace std; void fun(const char *s,char int main() char str=“ABCDE“; char ch=str1; fun(str,ch); coutch; return 0; (分数:2.00)填空项 1:_43.
21、在下面程序的横线处填上适当的内容,使程序执行后的输出结果果为 1/2005。 #includeiostmam using namespace std; class Date public: Date(int m=1,int y=0):month(m),year(y) void Print()coutmonth“/“yearendl; operator+(const Date private: int month,year; ; operator+(const Date year=d1.year+d2.year; month=d1.month+d2.month; year+=(month-1)/
22、12; month=(month-1)%12+1; return Date(month,year); void main() Date d1(3,2004),d2,d3(10); d2=d3+d1; d2.Print(); (分数:2.00)填空项 1:_44.在下面程序的横线处填上适当的内容,使程序执行后的输出结果为 ABCD。 #includeiostream using namespace std; class A public: A()coutA; ; class B:U 【11】 /U public:B()coutB;) ; class C: U【12】 /U public;C()c
23、outC; ; class D:public B,public C public:D()coutD; ; void main()D obi;(分数:2.00)填空项 1:_45.Staff类含有 int型数据成员 ID,两个 Staff对象相等是指它们的 ID相同。下面的函数重载了运算符=,它用来判断两个 Staff对象是否相等,相等时返回 true,否则返回 false。请将横线处缺失部分补充完整。 bool Staff:Staff=(const Staff for(int i=1;in;i+) if(aim)U 【14】 /U; return m; (分数:2.00)填空项 1:_47.下
24、面程序的执行结果是U 【15】 /U。 #includeiostream #includeiomanip using namespace std; void main() coutsetfill(x)setw(10); cout“Hello“endl; (分数:2.00)填空项 1:_全国计算机等级考试二级 C+真题 2005年 4月答案解析(总分:94.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.数据的存储结构是指(分数:2.00)A.存储在外存中的数据B.数据所占的存储空间量C.数据在计算机中的顺序存储方式D.数据的逻辑结构在计算机中的表示 解析:2.
25、下列关于栈的描述中错误的是(分数:2.00)A.栈是先进后出的线性表B.栈只能顺序存储 C.栈具有记忆作用D.对栈的插入与删除操作中,不需要改变栈底指针解析:3.对于长度为 n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是(分数:2.00)A.冒泡排序 n/2B.冒泡排序为 nC.快速排序为 nD.快速排序为 n(n-1)/2 解析:4.对长度为 n的线性表进行顺序查找,在最坏情况下所需要的比较次数为(分数:2.00)A.log2nB.n/2C.n D.n+1解析:5.下列对于线性链表的描述中正确的是(分数:2.00)A.存储空间不一定是连续,且各元素的存储顺序是任意的 B.存
26、储空间不一定是连续,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且前件元素一定存储在后件元素的前面D.存储空间必须连续,且各元素的存储顺序是任意的解析:6.下列对于软件测试的描述中正确的是(分数:2.00)A.软件测试的目的是证明程序是否正确B.软件测试的目的是使程序运行结果正确C.软件测试的目的是尽可能多地发现程序中的错误 D.软件测试的目的是使程序符合结构化原则解析:7.为了使模块尽可能独立,要求(分数:2.00)A.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱 C.模块的内聚程度要尽量低,且各模块间的耦合程度要尽
27、量弱D.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强解析:8.下列描述中正确的是(分数:2.00)A.程序就是软件B.软件开发不受计算机系统的限制C.软件既是逻辑实体,又是物理实体D.软件是程序、数据与相关文档的集合 解析:9.数据独立性是数据库技术的重要特点之一。所谓数据独立性是指(分数:2.00)A.数据与程序独立存放B.不同的数据被存放在不同的文件中C.不同的数据只能被对应的应用程序所使用D.以上三种说法都不对 解析:10.用树形结构表示实体之间联系的模型是(分数:2.00)A.关系模型B.网状模型C.层次模型 D.以上三个都是解析:11.要定义数组 A,使得其中每个元素的数据依
28、次为:3、9、4、8、0、0、0,错误的定义语句是(分数:2.00)A.int A =3,9,4,8,0,0,0;B.int A7=3,9,4,8,0,0,0;C.int A =3,9,4,8); D.int A7=3,9,4,8);解析:12.在 C+中,实现封装性需借助于(分数:2.00)A.枚举B.类 C.数组D.函数解析:13.下列关于虚函数的描述中,正确的是(分数:2.00)A.虚函数是一个 static类型的成员函数B.虚函数是一个非成员函数C.基类中采用 virtual说明一个虚函数后,派生类中定义相同原型的函数时可不必加 virtual说明 D.派生类中的虚函数与基类中相同原型
29、的虚函数具有不同的参数个数或类型解析:14.下列关于运算符重载的描述中,正确的是(分数:2.00)A.运算符重载可以改变操作数的个数B.运算符重载可以改变运算符的优先级C.运算符重载可以改变运算符的结合性D.运算符重载可以使运算符实现特殊功能 解析:15.有如下函数模板声明: templatetypename T T Max(Ta,Tb)return(a=b)?a:b;) 下列对函数模扳 Max的调用中错误是(分数:2.00)A.Max(3.5,4,5)B.Max(3.5,4) C.Maxdouble(3.5,4.5)D.Maxdouble(3.5,4)解析:16.若语句: coutsetfi
30、ll()setw(5)3141512setw(5)“OK!“; 是程序中第一个输出语句,则输出结果是(分数:2.00)A.3141512OK! B.31415120K!C.414150K!D.31415OK!解析:17.有如下语句序列; int k=0; dok+=5;couk$;) while(k19); while(k-0)cout*; 执行上面的语句序列输出字符$和。的个数分别是(分数:2.00)A.4和 20 B.5和 20C.4和 21D.5和 21解析:18.针对数组定义 int data10;,下列表述中错误的是(分数:2.00)A.用*data 可访问到数组的首元素B.用 da
31、ta9可访问到数组的末元素C.用 data10访问数组元素会超出数组边界D.data共有 10个元素,其首元素是 data1 解析:19.已知 n是一个 int型变量,下列语句中错误的是(分数:2.00)A.long *p=new long;B.long p; C.long *p=new long(;D.longpr10;解析:20.下列函数中对调用它的函数没有起到任何作用的是(分数:2.00)A.void f1(double)C.void f3(double -x;) D.double f4(double *-*x;retum *x;解析:21.在下面的类定义中,横线处应填入的内容是 cla
32、ss Fred public: void print()coutdataendl; void setData(double d)(data=d; static int count; private: double data; ; count=0; /静态数据成员的定义(分数:2.00)A.intB.static intC.int Fred: D.static int Fred:解析:22.有如下程序: #includeiostream using namespace std; class Base protected: in i; public: int j; ; class Derived:
33、public Base int m; public:int n; ; int main() Derived d; d.i=0; /1 d.j=0; /2 d.m=0; /3 d.n=0; /4 retum 0; 其中主函数中有两个赋值语句有错,这两个借误的赋值语句是(分数:2.00)A.1和2B.1和3 C.2和3D.2和4解析:23.在表达式 x-y中,“_”是作为非成员函数重载的运算符。若使用显式的函数调用代替直接使用运算符“_”,这个表达式还可表示为(分数:2.00)A.operator-(B.operator-(y,C.operator-(D.operator-(x, 解析:24.下面
34、的函数模板定义中错误的是(分数:2.00)A.template B.template Q F(Q retum Q+x;) Q F(Q return x+x;C.templateclassTD.templateclass T TF(T return x*x;) Bool F(treturn x1;)解析:25.已知 outfile是一个输出流对象,要想将 outfile的文件指针定位到当前位置之前 321字节处,正确的函数调用语句是(分数:2.00)A.outfilseekp(321,ios_base:cu;B.outfilseekp(321,ios_base:bg;C.outfilseekp(
35、-321,ios_base:be;D.outfilseekp(-321,ios_base:cu; 解析:26.有如下的程序: #includecstring #includeiostream using namespace std; class MyString public: MyString(const char*s); MyString()deletedata; Protected: unsigned len; char*data; ; MyString:MyString(const char*s) len=strlen(s); data=new charlen+1; strcpy(da
36、ta,s); int main() MyString a(“C+Programing“); MyString b(a); return 0; 在运行上面的程序时出错,出错的原因是(分数:2.00)A.构造函数的实参不允许是本类的对象B.没有定义实现深层复制(深拷贝)的拷贝构造函数 C.构造对象 a时实参与形参类型不符D.系统不能生成缺省的拷贝构造函数解析:27.有如下程序: #includeiostream using namespace std; class Demo public: Demo() cout“default constructor/n“; Demo(const Demo De
37、mo userCode(Demo b)DemoC(b);return c; int main() Demo a,d; cout“calling userCode()/n“; d=userCode(a); return 0; 执行上面程序的过程中,构造函数 Demo()和 Demo(const Demo 与语句 ff=O;的效果完全相同。对于这一现象,下列表述中错误的是(分数:2.00)A.ff是某个类的数据成员,func 是该类的友元函数 B.ff是某个类的数据成员,func 是该类的成员函数C.this-ff 和 ff是同一个变量D.func不是一个静态成员函数解析:29.有如下程序: #i
38、ncludeiostream using namespace std; class Base pubfic: Base()cout“BB“;f(); void f()cout“Bf“: ; class Derived:public Base public: Derived()cout“DD“;) voidf()cout“Df“: ; intmain()Derived d;retum 0; 执行上面的程序将输出(分数:2.00)A.BBBfDD B.BBDfDDDfC.DDD.DDBBBf解析:30.下列说法中错误的是(分数:2.00)A.公有继承时基类中的 public成员在派生类中仍是 pu
39、blic成员B.私有继承时基类中的 protecte成员在派生类中仍是 protected成员 C.私有继承时基类中的 public成员在派生类中是 private成员D.保护继承时基类中的 public成员在派生类中是 protected成员解析:31.下面是关于派生类声明的开始部分,其中正确的是(分数:2.00)A.class virtual B:public AB.virtual class B:public AC.class B:public A virtualD.class B:virtual public A 解析:32.在重载一个运算符为成员函数时,其参数表中没有任何参数,这说明
40、该运算符是(分数:2.00)A.后缀一元运算符B.前缀一元运算符 C.无操作数的运算符D.二元运算符解析:解析:34.有如下程序: #qncludeiostream #includeiomanip using namespace std; class CSum int x,y; public: CSum(int x0,int y0):x(xo),y(yo) friend ostream return os; ; int main() CSum y(3.5; coutsetfill(*)8 couty; return0; 执行上面程序的输出是(分数:2.00)A.88B.*88 C.*8*8D.
41、8*8解析:35.有如下程序: #ncludeiostremn using namespace std; class Stack public: Stack(unsigned n=10:size(n)rep_=new intsize;top=O; Stack(Stack for(int i=0;isize;i+)rep_i=s.rep_i; top=s.top; Stack()deleterep_; void push(int a)rep_top=a; top+; int opo()-top;return rep_top; bool is Empty()constreturn top=O; p
42、avate: int*rep_; unsigned size,top; ; int main() Stack s1; for(int i=1;i5;i+) s1.push(i); Stack s2(s1); for(i=1;i3;i+) couts2.pop(),; s2.push(6); s1.push(7); while(!s2.isEmpty() couts2.pop(),; return 0; 执行上面程序的输出是(分数:2.00)A.4,3,2,1B.4,3,6,7,2,1C.4,3,6,2,1 D.1,2,3,4解析:二、B填空题/B(总题数:12,分数:24.00)36.某二叉树
43、中度为 2的结点有 18个,则该二叉树有 【1】 个叶子结点。(分数:2.00)填空项 1:_ (正确答案:19)解析:37.在面向对象方法中,类的实例称为 【2】 。(分数:2.00)填空项 1:_ (正确答案:对象)解析:38.诊断和改正程序中错误的工作通常称为 【3】 。(分数:2.00)填空项 1:_ (正确答案:程序调试)解析:39.在关系数据库中,把数据表示成二维表,每一个二维表称为 【4】 。(分数:2.00)填空项 1:_ (正确答案:关系)解析:40.问题处理方案的正确而完整的描述称为 【5】 。(分数:2.00)填空项 1:_ (正确答案:算法)解析:41.在下面函数的横线
44、处填上适当的内容,使该函数能够利用递归方法求解字符串 sb的长度(不得使用系统提供的字符串处理函数)。 int GetLen(char*str) it(U 【6】 /U)returnU 【7】 /U; else return 1+GetLen(str+1); (分数:2.00)填空项 1:_ (正确答案:【6】*str=/0)解析:【7】042.下列程序的输出结果是U 【8】 /U。 #includeiostream #includecstring using namespace std; void fun(const char *s,char int main() char str=“ABC
45、DE“; char ch=str1; fun(str,ch); coutch; return 0; (分数:2.00)填空项 1:_ (正确答案:C)解析:43.在下面程序的横线处填上适当的内容,使程序执行后的输出结果果为 1/2005。 #includeiostmam using namespace std; class Date public: Date(int m=1,int y=0):month(m),year(y) void Print()coutmonth“/“yearendl; operator+(const Date private: int month,year; ; operator+(const Date year=d1.year+d2.year; month=d1.month+d2.month; year+=(month-1)/12; month=(month-1)%12+1; return Date(month,year); void main() Date d1(3,2004),d2,d3(10); d2=d3+d1; d2.Print(); (分数:2.00)填空项 1:_ (正确答案:【9】friend Date)解析:【10】Date44.在下面程序的横线处填上适当的内容,使程序执行后的输出结果为 ABCD。 #includeiost