1、二级 C+笔试 43及答案解析(总分:99.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.在 C+中,实现封装性需借助于_ 。(分数:2.00)A.枚举B.类C.数组D.函数2.在下面的类定义中,横线处应填入的内容是_ 。 class Fred public: void print() cout data end 1; void setData(double d) data=d; static int count; private: double data; ; _count=0;/表态数据成员的定义(分数:2.00)A.intB.static intC.i
2、nt Fred:D.static int Fred:3.数据独立性是数据库技术的重要特点之一。所谓数据独立性是指_ 。(分数:2.00)A.数据与程序独立存放B.不同的数据被存放在不同的文件中C.不同的数据只能被对应的应用程序所使用D.以上三种说法都不对4.有如下程序: #include iostream using namespace std; class Stack public: Stack(unsigned n= 10):size(n) rep_=ew intsize; top=0; Stack(Stack for(int i=0;isize;i+) rep_i=s.rep_i; to
3、p=s.top; Stack() delete rep_; void push(int a) rep_top=a; top+; int pop() -top;return rep_top; bool isEmpty() const return top=0; private: int *rep_; unsigned size,top; ; int main() Stack s1; for(int i= 1;i5 ;i+) s1. push(i); Stack s2(s1); for(i= 1 ;iA.4,3,2,1,B.4,3,6,7,2,1,C.4,3,6,2,1,D.1,2,3,4,5.下
4、列函数中对调用它的函数没有起到任何作用的是_ 。(分数:2.00)A.void fl(double class Demo public: Demo () cout “default constructor/n“; Demo (const Demo ;Demo userCode(Demo b) Demo c(b);return c; int main() Demo a,d; cout“calling userCode()/n“; d=aserCode(a); return 0; 执行上面程序的过程中,构造函数 Demo()和 Demo(const Demo class MyString publ
5、ic: MyString(const char *s); MyString() delete data; protected: unsigned len; char *data; ; MyString: MyString (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.没有定义实现深
6、层复制(深拷贝)的拷贝构造函数C.构造对象 a时实参与形参类型不符D.系统不能生成缺省的拷贝构造函数12.在表达式 x-y中,“-”是作为非成员函数重载的运算符。若使用显式的函数调用代替直接使用运算符“-”,这个表达式还可表示为_ 。(分数:2.00)A.opemtor-(B.opemtor-(y,C.operator-(D.operator-(x,13.下列说法中错误的是_ 。(分数:2.00)A.公有继承时基类中的 public 成员在派生类中仍是 public成员B.私有继承时基类中的 protected 成员在派生类中仍是 protected 成员C.私有继承时基类中的 public
7、成员在派生类中是 private成员D.保护继承时基类中的 public成员在派生类中是 protected成员14.有如下程序: #include iostream #include iomanip using namespace std; class CSum int x,y; public: CSum(int x0,int y0):x(x0),y(y0) friend ostream return os; int main() CSum y(3,5); coutsetfill(*)8; couty; return 0; 执行上面程序的输出是_。(分数:2.00)A.88B.*88C.*8
8、*8D.8*815.用树型结构表示实体之间联系的模型是_ 。(分数:2.00)A.关系模型B.网状模型C.层次模型D.以上三个都是16.对长度为 n的线性表进行顺序查找,在最坏情况下所需要的比较次数为_ 。(分数:2.00)A.n-1B.n/2C.nD.n+117.有如下程序: #include iostream using namespace std; class Base public: Base() cout“BB“;f(); void f() cout“Bf“; ; class Derived:public Base public: Derived() cout“DD“; void f
9、() cout“Df“; ; int main() Derived d; return 0;执行上面的程序将输出_ 。(分数:2.00)A.BBBfDDB.BBDfDDDfC.DDD.DDBBBf18.已知 outfile 是一个输出流对象,要想将 outfile 的文件指针定位到当前位置之前 321字节处,正确的函数调用语句是_ 。(分数:2.00)A.outfilseekp (321, ios_ base: cu;B.outfilseekp (321,ios_ base: be;C.outfilseekp (-321,ios_ base: be;D.outfilseekp (-321,io
10、s_ base: cu;19.若语句 coutsetfill()setw (5)3141512setw (5)”OK!”;是程序中第一个输出语句,则输出结果是_ 。(分数:2.00)A.3141512OK!B.31415120K!C.314150K!D.31415OK!20.已知在函数 func中语句 this-ff=0;与语句 ff=0;的效果完全相同。对于这一现象,下列表述中错误的是_ 。(分数:2.00)A.迁是某个类的数据成员,func 是该类的友元函数B.迁是某个类的数据成员,func 是该类的成员函数C.this-ff 和 ff 是同一个变量D.func 不是一个静态成员函数21.
11、为了使模块尽可能地独立,要求_。(分数:2.00)A.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱C.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强22.要定义数组 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 A 7=3,9,4,8;23.下列关于虚函数的描述中,正确的是_ 。
12、(分数:2.00)A.虚函数是一个 static 类型的成员函数B.虚函数是一个非成员函数C.基类中采用 virtual 说明一个虚函数后,派生类中定义相同原型的函数时可不必加 virtual 说明D.派生类中的虚函数与基类中相同原型的虚函数具有不同的参数个数或类型24.下列对于软件测试的描述中正确的是_。(分数:2.00)A.软件测试的目的是证明程序是否正确B.软件测试的目的是使程序运行结果正确C.软件测试的目的是尽可能多地发现程序中的错误D.软件测试的目的是使程序符合结构化原则25.下列关于栈的描述中错误的是_ 。(分数:2.00)A.栈是先进后出的线性表B.栈只能顺序存储C.栈具有记忆作
13、用D.对栈的插入与删除操作中,不需要改变栈底指针26.有如下函数模板声明: template typename T T Max(T a,T b)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)27.有如下语句序列: int k=0; do k+=5;cout ;while (k19); while(k- 0)cout*;执行上面的语句序列输出字符和*的个数分别是_ 。(分数:2.00)A.4和 20B.5和 20C.4和
14、21D.5和 2129.数据的存储结构是指_ 。(分数:2.00)A.存储在外存中的数据B.数据所占的存储空间量C.数据在计算机中的顺序存储方式D.数据的逻辑结构在计算机中的表示30.下列对于线性链表的描述中正确的是_ 。(分数:2.00)A.存储空间不一定是连续的,且各元素的存储顺序是任意的B.存储空间不一定是连续的,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且前件元素一定存储在后件元素的前面D.存储空间必须连续,且各元素的存储顺序是任意的31.下面是关于派生类声明的开始部分,其中正确的是_ 。(分数:2.00)A.class virtual B:public AB.virtu
15、al class B:public AC.class B:public A virtualD.class B:virtual public A32.针对数组定义 int data 10;,下列表述中错误的是_ 。(分数:2.00)A.用*data 可访问到数组的首元素B.用 data 9可访问到数组的末元素C.用 data 10访问数组元素会超出数组边界D.data共有 10个元素,其首元素是 data133.有如下程序: #include iostream using namespace std; class Base protected: int i; public: int j; ; c
16、lass 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 return 0; 其中主函数中有两个赋值语句有错,这两个错误的赋值语句是_ 。(分数:2.00)A.1和2B.1和3C.2和3D.2和4)34.下列关于运算符重载的描述中,正确的是_ 。(分数:2.00)A.运算符重载可以改变操作数的个数B.运算符重载可以改变运算符的优先级C.运算符重载可以改变运算符的结合性D.运算符重载可以使运算符实现特殊功能35.已知 n是一个 int 型变量
17、,下列语句中错误的是_ 。(分数:2.00)A.long *p=new long ;B.long p;C.long *p=new long (;D.long p10二、B填空题/B(总题数:12,分数:29.00)36.某二叉树中度为 2的结点有 18个,则该二叉树中有U 【1】 /U个叶子结点。(分数:2.00)填空项 1:_37.在面向对象方法中,类的实例称为U 【2】 /U。(分数:2.00)填空项 1:_38.诊断和改正程序中错误的工作通常称为U 【3】 /U。(分数:2.00)填空项 1:_39.在关系数据库中,把数据表示成二维表,每一个二维表称为U 【4】 /U。(分数:1.00)
18、填空项 1:_40.问题处理方案的正确而完整的描述称为U 【5】 /U。(分数:2.00)填空项 1:_41.在下面函数的横线处填上适当的内容使该函数能够利用递归方法求解字符串 str的长度(不得使用系统提供的字符串处理函数)。 int GetLen(char *str if (U 【6】 /U) return U【17】 /U; else return 1+GetLen (str+1); (分数:4.00)填空项 1:_42.下列程序的输出结果是U 【8】 /U。 #include iostream #include cstring using namespace std; void fun
19、(const char *s, char int main() char str=“ABCDE“; char ch=str1; fun(str, ch); coutch; return 0; (分数:2.00)填空项 1:_43.在下向程序和横线处填上适当的内容,使程序执行后的输出结果为 1/2005。 #include iostream using namespace std; class Date public: Date(int m=1,int y=0):month(m),year(y) void Print() coutmonth“/“yearend 1; U 【9】 /Uoperat
20、or+(eonst Date private: int month,year; ; U 【10】 /Uoperator+(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(); (分数:4.00)填空项 1:_44.在下面程序的横线处填上适当的内容,使程序执行后的输出结果
21、为 ABCD。 #include iostream using namespace std; class A public: A() coutA; ; class B:U 【11】 /U public:B() coutB; ; class C:U 【12】 /U public: C()coutC; ; class D:public B,public C public:D() coutD; ; void main() D obj; (分数:4.00)填空项 1:_45.Staff类含有血型数据成员 ID,两个 Staff 对象相等是指它们的 ID 相同。下面的函数重载了运算符“=”,它用来判断两
22、个 Staff 对象是否相等,相等时返回 true,否则返回 false。请将空格处缺失部分补充完整。 boo Staffi: Staff =(const Smff for(int i=1 ;in;i+) if(aim)U 【14】 /U return m; (分数:2.00)填空项 1:_47.下面程序的执行结果是U 【15】 /U。 #include iostream #include iomanip using namespace std; void main() coutsetfill(x)setw(10); cout“Hello“end1;(分数:2.00)填空项 1:_二级 C+笔
23、试 43答案解析(总分:99.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.在 C+中,实现封装性需借助于_ 。(分数:2.00)A.枚举B.类 C.数组D.函数解析:解析 数据和算法的封装借助于类。2.在下面的类定义中,横线处应填入的内容是_ 。 class Fred public: void print() cout data end 1; void setData(double d) data=d; static int count; private: double data; ; _count=0;/表态数据成员的定义(分数:2.00)A.intB.
24、static intC.int Fred: D.static int Fred:解析:解析 const 的使用的相关内容。3.数据独立性是数据库技术的重要特点之一。所谓数据独立性是指_ 。(分数:2.00)A.数据与程序独立存放B.不同的数据被存放在不同的文件中C.不同的数据只能被对应的应用程序所使用D.以上三种说法都不对 解析:解析 数据库的相关概念。4.有如下程序: #include iostream using namespace std; class Stack public: Stack(unsigned n= 10):size(n) rep_=ew intsize; top=0;
25、Stack(Stack for(int i=0;isize;i+) rep_i=s.rep_i; top=s.top; Stack() delete rep_; void push(int a) rep_top=a; top+; int pop() -top;return rep_top; bool isEmpty() const return top=0; private: int *rep_; unsigned size,top; ; int main() Stack s1; for(int i= 1;i5 ;i+) s1. push(i); Stack s2(s1); for(i= 1
26、;iA.4,3,2,1,B.4,3,6,7,2,1,C.4,3,6,2,1, D.1,2,3,4,解析:解析 栈是“先进后出”的数据结构。5.下列函数中对调用它的函数没有起到任何作用的是_ 。(分数:2.00)A.void fl(double class Demo public: Demo () cout “default constructor/n“; Demo (const Demo ;Demo userCode(Demo b) Demo c(b);return c; int main() Demo a,d; cout“calling userCode()/n“; d=aserCode(a
27、); return 0; 执行上面程序的过程中,构造函数 Demo()和 Demo(const Demo class MyString public: MyString(const char *s); MyString() delete data; protected: unsigned len; char *data; ; MyString: MyString (const char *s) len=strlen(s); data=new charlen+1; strcpy(data,s); int main() MyString a(“C+ Programing“); MyString b
28、(a); return 0; 在运行上面的程序时出错,出错的原因是_ 。(分数:2.00)A.构造函数的实参不允许是本类的对象B.没有定义实现深层复制(深拷贝)的拷贝构造函数 C.构造对象 a时实参与形参类型不符D.系统不能生成缺省的拷贝构造函数解析:解析 类拷贝的相关内容。12.在表达式 x-y中,“-”是作为非成员函数重载的运算符。若使用显式的函数调用代替直接使用运算符“-”,这个表达式还可表示为_ 。(分数:2.00)A.opemtor-(B.opemtor-(y,C.operator-(D.operator-(x, 解析:解析 运算符重载的相关内容。13.下列说法中错误的是_ 。(分数
29、:2.00)A.公有继承时基类中的 public 成员在派生类中仍是 public成员B.私有继承时基类中的 protected 成员在派生类中仍是 protected 成员 C.私有继承时基类中的 public 成员在派生类中是 private成员D.保护继承时基类中的 public成员在派生类中是 protected成员解析:解析 B 项私有继承时基类中的 protected 成员在派生类中应该是 private成员。14.有如下程序: #include iostream #include iomanip using namespace std; class CSum int x,y; p
30、ublic: CSum(int x0,int y0):x(x0),y(y0) friend ostream return os; int main() CSum y(3,5); coutsetfill(*)8; couty; return 0; 执行上面程序的输出是_。(分数:2.00)A.88B.*88C.*8*8D.8*8 解析:解析 setw 设置输出宽度。15.用树型结构表示实体之间联系的模型是_ 。(分数:2.00)A.关系模型B.网状模型C.层次模型 D.以上三个都是解析:解析 层次多为“一对多”,可用树型结构表示。16.对长度为 n的线性表进行顺序查找,在最坏情况下所需要的比较次
31、数为_ 。(分数:2.00)A.n-1B.n/2C.n D.n+1解析:解析 查不到或最后一个查到的情况。17.有如下程序: #include iostream using namespace std; class Base public: Base() cout“BB“;f(); void f() cout“Bf“; ; class Derived:public Base public: Derived() cout“DD“; void f() cout“Df“; ; int main() Derived d; return 0;执行上面的程序将输出_ 。(分数:2.00)A.BBBfDD
32、B.BBDfDDDfC.DDD.DDBBBf解析:解析 类初始化的相关内容。18.已知 outfile 是一个输出流对象,要想将 outfile 的文件指针定位到当前位置之前 321字节处,正确的函数调用语句是_ 。(分数:2.00)A.outfilseekp (321, ios_ base: cu;B.outfilseekp (321,ios_ base: be;C.outfilseekp (-321,ios_ base: be;D.outfilseekp (-321,ios_ base: cu; 解析:解析 文件操作的相关内容。19.若语句 coutsetfill()setw (5)314
33、1512setw (5)”OK!”;是程序中第一个输出语句,则输出结果是_ 。(分数:2.00)A.3141512OK! B.31415120K!C.314150K!D.31415OK!解析:解析 输入/输出流的操作。20.已知在函数 func中语句 this-ff=0;与语句 ff=0;的效果完全相同。对于这一现象,下列表述中错误的是_ 。(分数:2.00)A.迁是某个类的数据成员,func 是该类的友元函数 B.迁是某个类的数据成员,func 是该类的成员函数C.this-ff 和 ff 是同一个变量D.func 不是一个静态成员函数解析:解析 类可以访问友元类的数据。21.为了使模块尽可
34、能地独立,要求_。(分数:2.00)A.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱 C.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强解析:解析 程序设计的相关概念。22.要定义数组 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 A 7=3,9,4,8;解析:解析 C 中 A
35、是一个有 4个数的数组。23.下列关于虚函数的描述中,正确的是_ 。(分数:2.00)A.虚函数是一个 static 类型的成员函数B.虚函数是一个非成员函数C.基类中采用 virtual 说明一个虚函数后,派生类中定义相同原型的函数时可不必加 virtual 说明 D.派生类中的虚函数与基类中相同原型的虚函数具有不同的参数个数或类型解析:解析 虚函数的相关概念。24.下列对于软件测试的描述中正确的是_。(分数:2.00)A.软件测试的目的是证明程序是否正确B.软件测试的目的是使程序运行结果正确C.软件测试的目的是尽可能多地发现程序中的错误 D.软件测试的目的是使程序符合结构化原则解析:解析
36、软件测试的相关概念。25.下列关于栈的描述中错误的是_ 。(分数:2.00)A.栈是先进后出的线性表B.栈只能顺序存储 C.栈具有记忆作用D.对栈的插入与删除操作中,不需要改变栈底指针解析:解析 栈是“先进后出”的数据结构。26.有如下函数模板声明: template typename T T Max(T a,T b)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)解析:解析 使用模板,应避免二义性27.有如下语句序列:
37、 int k=0; do k+=5;cout ;while (k19); while(k- 0)cout*;执行上面的语句序列输出字符和*的个数分别是_ 。(分数:2.00)A.4和 20 B.5和 20C.4和 21D.5和 21解析:解析 k 值变化 0,5,10,15,20,19,18,17,1,所以 S4次,*20 次。解析:解析 typename 的相关内容。29.数据的存储结构是指_ 。(分数:2.00)A.存储在外存中的数据B.数据所占的存储空间量C.数据在计算机中的顺序存储方式D.数据的逻辑结构在计算机中的表示 解析:解析 计算机存储的相关概念。30.下列对于线性链表的描述中正
38、确的是_ 。(分数:2.00)A.存储空间不一定是连续的,且各元素的存储顺序是任意的 B.存储空间不一定是连续的,且前件元素一定存储在后件元素的前面C.存储空间必须连续,且前件元素一定存储在后件元素的前面D.存储空间必须连续,且各元素的存储顺序是任意的解析:解析 存储空间往往是分散的,也无相对关系。31.下面是关于派生类声明的开始部分,其中正确的是_ 。(分数:2.00)A.class virtual B:public AB.virtual class B:public AC.class B:public A virtualD.class B:virtual public A 解析:解析 类声
39、明的部分内容。32.针对数组定义 int data 10;,下列表述中错误的是_ 。(分数:2.00)A.用*data 可访问到数组的首元素B.用 data 9可访问到数组的末元素C.用 data 10访问数组元素会超出数组边界D.data共有 10个元素,其首元素是 data1 解析:解析 data 首元素 data0。33.有如下程序: #include iostream using namespace std; class Base protected: int i; public: int j; ; class Derived:public Base int m; public: in
40、t n; ; int main() Derived d; d.i=0;/1 d.j=0;/2 d.m=0;/3 d.n=0;/4 return 0; 其中主函数中有两个赋值语句有错,这两个错误的赋值语句是_ 。(分数:2.00)A.1和2B.1和3 C.2和3D.2和4)解析:解析 i 是 Derived 的保护成员,m 是私有成员。34.下列关于运算符重载的描述中,正确的是_ 。(分数:2.00)A.运算符重载可以改变操作数的个数B.运算符重载可以改变运算符的优先级C.运算符重载可以改变运算符的结合性D.运算符重载可以使运算符实现特殊功能 解析:解析 运算符重载的相关概念。35.已知 n是一
41、个 int 型变量,下列语句中错误的是_ 。(分数:2.00)A.long *p=new long ;B.long p; C.long *p=new long (;D.long p10解析:解析 静态数组的大小应确定。二、B填空题/B(总题数:12,分数:29.00)36.某二叉树中度为 2的结点有 18个,则该二叉树中有U 【1】 /U个叶子结点。(分数:2.00)填空项 1:_ (正确答案:19)解析:解析 叶子结点是最末端的结点。37.在面向对象方法中,类的实例称为U 【2】 /U。(分数:2.00)填空项 1:_ (正确答案:对象)解析:解析 面向对象的相关概念。38.诊断和改正程序中
42、错误的工作通常称为U 【3】 /U。(分数:2.00)填空项 1:_ (正确答案:调试或者程序调试或者软件调试或者 Debug或者调试程序或者调试软件)解析:解析 调试的相关内容。39.在关系数据库中,把数据表示成二维表,每一个二维表称为U 【4】 /U。(分数:1.00)填空项 1:_ (正确答案:关系 或者 关系表)解析:解析 关系数据库的相关概念。40.问题处理方案的正确而完整的描述称为U 【5】 /U。(分数:2.00)填空项 1:_ (正确答案:算法 或者 程序 或者 流程图)解析:解析 算法,程序的相关内容。41.在下面函数的横线处填上适当的内容使该函数能够利用递归方法求解字符串
43、str的长度(不得使用系统提供的字符串处理函数)。 int GetLen(char *str if (U 【6】 /U) return U【17】 /U; else return 1+GetLen (str+1); (分数:4.00)填空项 1:_ (正确答案:6 *str=NULL 或者!*str)解析:7 0 解析 如果结束,返回 0值。42.下列程序的输出结果是U 【8】 /U。 #include iostream #include cstring using namespace std; void fun(const char *s, char int main() char str=
44、“ABCDE“; char ch=str1; fun(str, ch); coutch; return 0; (分数:2.00)填空项 1:_ (正确答案:C)解析:解析 strlen(s)/2 值是 2,s2值是 C。43.在下向程序和横线处填上适当的内容,使程序执行后的输出结果为 1/2005。 #include iostream using namespace std; class Date public: Date(int m=1,int y=0):month(m),year(y) void Print() coutmonth“/“yearend 1; U 【9】 /Uoperator+(eonst Date private: int month,year; ; U 【10】 /Uoperator+(const Date year=d1 .year+d2.year; month=d1. month+d2.month; year+=(month-1 )/12; month=(month-1 )% 12+1; return