1、二级 C+笔试-85 及答案解析(总分:99.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.已知 outfile 是一个输出流对象,要想将 outfile 的文件指针定位到当前位置之前 321 字节处,正确的函数调用语句是_ 。(分数:2.00)A.outfile.seekp (321, ios_ base: cur);B.outfile.seekp (321,ios_ base: beg);C.outfile.seekp (-321,ios_ base: beg);D.outfile.seekp (-321,ios_ base: cur);2.有如下语句序列:i
2、nt k=0;do k+=5;cout ;while (k19);while(k- 0)cout*;执行上面的语句序列输出字符和*的个数分别是_ 。(分数:2.00)A.4 和 20B.5 和 20C.4 和 21D.5 和 213.下面是关于派生类声明的开始部分,其中正确的是_ 。(分数:2.00)A.class virtual B:public AB.virtual class B:public AC.class B:public A virtualD.class B:virtual public A4.下列描述中正确的是_ 。(分数:2.00)A.程序就是软件B.软件开发不受计算机系统的
3、限制C.软件既是逻辑实体,又是物理实体D.软件是程序、数据与相关文档的集合5.在重载一个运算符为成员函数时,其参数表中没有任何参数,这说明该运算符是 _ 。(分数:2.00)A.后缀一元运算符B.前缀一元运算符C.元操作数的运算符D.二元运算符6.已知在函数 func 中语句 this-ff=0;与语句 ff=0;的效果完全相同。对于这一现象,下列表述中错误的是_ 。(分数:2.00)A.迁是某个类的数据成员,func 是该类的友元函数B.迁是某个类的数据成员,func 是该类的成员函数C.this-ff 和 ff 是同一个变量D.func 不是一个静态成员函数7.有如下程序:#include
4、 iostream#include iomanipusing namespace std;class CSumint x,y;public:CSum(int x0,int y0):x(x0),y(y0) friend ostreamclass Demopublic: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((分数:2.00)A.;
5、ret9.关于关键字 class 和 typename,下列表述正确的是_ 。(分数:2.00)A.程序中所有的 typename 都可以替换为 classB.程序中所有的 class 都可以替换为 typenameC.和 B)都D.和 B)都不10.要定义数组 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;11.下列函数中对调用它的函数没有起到任何作用的是_ 。(分数:2.00
6、)A.void fl(double class Basepublic:Base() cout“BB“;f(); void f() cout“Bf“;class Derived:public Basepublic:Derived() cout“DD“; void f() cout“Df“; ;int main() Derived d; return 0;执行上面的程序将输出_ 。(分数:2.00)A.BBBfDDB.BBDfDDDfC.DDD.DDBBBf17.针对数组定义 int data 10;,下列表述中错误的是_ 。(分数:2.00)A.用*data 可访问到数组的首元素B.用 data
7、 9可访问到数组的末元素C.用 data 10访问数组元素会超出数组边界D.data 共有 10 个元素,其首元素是 data118.若语句coutsetfill()setw (5)3141512setw (5)”OK!”;是程序中第一个输出语句,则输出结果是_ 。(分数:2.00)A.3141512OK!B.31415120K!C.314150K!D.31415OK!19.有如下程序:#include iostreamusing namespace std;class Baseprotected: int i;public: int j;class Derived:public Basein
8、t m;public: int n;int main()Derived d;d.i=0;/1d.j=0;/2d.m=0;/3d.n=0;/4return 0;其中主函数中有两个赋值语句有错,这两个错误的赋值语句是_ 。(分数:2.00)A.1和2B.1和3C.2和3D.2和4)20.在表达式 x-y 中,“-”是作为非成员函数重载的运算符。若使用显式的函数调用代替直接使用运算符“-”,这个表达式还可表示为_ 。(分数:2.00)A.opemtor-(y)B.opemtor-(y,x)C.operator-(x)D.operator-(x,y)21.数据独立性是数据库技术的重要特点之一。所谓数据
9、独立性是指_ 。(分数:2.00)A.数据与程序独立存放B.不同的数据被存放在不同的文件中C.不同的数据只能被对应的应用程序所使用D.以上三种说法都不对22.有如下函数模板声明:template typename TT 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)23.用树型结构表示实体之间联系的模型是_ 。(分数:2.00)A.关系模型B.网状模型C.层次模型D.以上三个都是24.下面的函数
10、模板定义中错误的是_ 。(分数:2.00)A.templateclass Q QF (Q x)return Q +x;B.templateclass Q QF (Q x)returnx/x;C.template class T T F(T x) return x*x;D.template class Tbool F (T x) return x1;25.在下面的类定义中,横线处应填入的内容是_ 。class Fredpublic:void print() cout data end 1; void setData(double d) data=d; static int count;priva
11、te:double data;_count=0;/表态数据成员的定义(分数:2.00)A.intB.static intC.int Fred:D.static int Fred:26.下列对于软件测试的描述中正确的是_。(分数:2.00)A.软件测试的目的是证明程序是否正确B.软件测试的目的是使程序运行结果正确C.软件测试的目的是尽可能多地发现程序中的错误D.软件测试的目的是使程序符合结构化原则27.在 C+中,实现封装性需借助于_ 。(分数:2.00)A.枚举B.类C.数组D.函数28.为了使模块尽可能地独立,要求_。(分数:2.00)A.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强
12、B.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱C.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强29.对长度为 n 的线性表进行顺序查找,在最坏情况下所需要的比较次数为_ 。(分数:2.00)A.n-1B.n/2C.nD.n+130.有如下程序:#include iostreamusing namespace std;class Stack public:Stack(unsigned n= 10):size(n) rep_=ew intsize;top=0;Stack(Stackfor(int i=0;isize;i+)
13、rep_i=s.rep_i;top=s.top;Stack() delete rep_;void push(int(分数:2.00)A.rep_top=a; top+;class MyStringpublic: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+ Program
14、ing“);MyString b((分数:2.00)A.;return 0;在运行上面的程序时出错,二、填空题(总题数:12,分数:29.00)36.某二叉树中度为 2 的结点有 18 个,则该二叉树中有 【1】 个叶子结点。(分数:2.00)填空项 1:_37.在面向对象方法中,类的实例称为 【2】 。(分数:2.00)填空项 1:_38.诊断和改正程序中错误的工作通常称为 【3】 。(分数:2.00)填空项 1:_39.在关系数据库中,把数据表示成二维表,每一个二维表称为 【4】 。(分数:1.00)填空项 1:_40.问题处理方案的正确而完整的描述称为 【5】 。(分数:2.00)填空项
15、 1:_41.在下面函数的横线处填上适当的内容使该函数能够利用递归方法求解字符串 str 的长度(不得使用系统提供的字符串处理函数)。int GetLen(char *strif ( 【6】 ) return 【17】 ;else return 1+GetLen (str+1);(分数:4.00)填空项 1:_42.下列程序的输出结果是 【8】 。#include iostream#include cstringusing namespace std;void fun(const char *s, char int main()char str=“ABCDE“;char ch=str1;fun
16、(str, ch);coutch;return 0;(分数:2.00)填空项 1:_43.在下向程序和横线处填上适当的内容,使程序执行后的输出结果为 1/2005。#include iostreamusing namespace std;class Datepublic:Date(int m=1,int y=0):month(m),year(y)void Print() coutmonth“/“yearend 1; 【9】 operator+(eonst Dateprivate:int month,year;【10】 operator+(const Dateyear=d1 .year+d2.y
17、ear;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.在下面程序的横线处填上适当的内容,使程序执行后的输出结果为 ABCD。#include iostreamusing namespace std;class Apublic: A() coutA;class B: 【11】 public:B() coutB
18、;class C: 【12】 public: C()coutC;class D:public B,public Cpublic:D() coutD;void main() D obj;(分数:4.00)填空项 1:_45.Staff 类含有血型数据成员 ID,两个 Staff 对象相等是指它们的 ID 相同。下面的函数重载了运算符“=”,它用来判断两个 Staff 对象是否相等,相等时返回 true,否则返回 false。请将空格处缺失部分补充完整。boo Staffi: Staff =(const Smff for(int i=1 ;in;i+)if(aim) 【14】 return m;(
19、分数:2.00)填空项 1:_47.下面程序的执行结果是 【15】 。#include iostream#include iomanipusing namespace std;void main()coutsetfill(x)setw(10);cout“Hello“end1;(分数:2.00)填空项 1:_二级 C+笔试-85 答案解析(总分:99.00,做题时间:90 分钟)一、选择题(总题数:35,分数:70.00)1.已知 outfile 是一个输出流对象,要想将 outfile 的文件指针定位到当前位置之前 321 字节处,正确的函数调用语句是_ 。(分数:2.00)A.outfile
20、.seekp (321, ios_ base: cur);B.outfile.seekp (321,ios_ base: beg);C.outfile.seekp (-321,ios_ base: beg);D.outfile.seekp (-321,ios_ base: cur); 解析:解析 文件操作的相关内容。2.有如下语句序列: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,
21、5,10,15,20,19,18,17,1,所以 S4 次,*20 次。3.下面是关于派生类声明的开始部分,其中正确的是_ 。(分数:2.00)A.class virtual B:public AB.virtual class B:public AC.class B:public A virtualD.class B:virtual public A 解析:解析 类声明的部分内容。4.下列描述中正确的是_ 。(分数:2.00)A.程序就是软件B.软件开发不受计算机系统的限制C.软件既是逻辑实体,又是物理实体D.软件是程序、数据与相关文档的集合 解析:解析 软件与程序有区别,软件的相关概念。5.
22、在重载一个运算符为成员函数时,其参数表中没有任何参数,这说明该运算符是 _ 。(分数:2.00)A.后缀一元运算符B.前缀一元运算符 C.元操作数的运算符D.二元运算符解析:解析 运算符重载的相关内容。6.已知在函数 func 中语句 this-ff=0;与语句 ff=0;的效果完全相同。对于这一现象,下列表述中错误的是_ 。(分数:2.00)A.迁是某个类的数据成员,func 是该类的友元函数 B.迁是某个类的数据成员,func 是该类的成员函数C.this-ff 和 ff 是同一个变量D.func 不是一个静态成员函数解析:解析 类可以访问友元类的数据。7.有如下程序:#include i
23、ostream#include iomanipusing namespace std;class CSumint x,y;public:CSum(int x0,int y0):x(x0),y(y0) friend ostreamclass Demopublic: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((分数:2.00)A.;re
24、t解析:解析 类拷贝的相关内容。9.关于关键字 class 和 typename,下列表述正确的是_ 。(分数:2.00)A.程序中所有的 typename 都可以替换为 class B.程序中所有的 class 都可以替换为 typenameC.和 B)都D.和 B)都不解析:解析 typename 的相关内容。10.要定义数组 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;
25、解析:解析 C 中 A 是一个有 4 个数的数组。11.下列函数中对调用它的函数没有起到任何作用的是_ 。(分数:2.00)A.void fl(double class Basepublic:Base() cout“BB“;f(); void f() cout“Bf“;class Derived:public Basepublic:Derived() cout“DD“; void f() cout“Df“; ;int main() Derived d; return 0;执行上面的程序将输出_ 。(分数:2.00)A.BBBfDD B.BBDfDDDfC.DDD.DDBBBf解析:解析 类初始
26、化的相关内容。17.针对数组定义 int data 10;,下列表述中错误的是_ 。(分数:2.00)A.用*data 可访问到数组的首元素B.用 data 9可访问到数组的末元素C.用 data 10访问数组元素会超出数组边界D.data 共有 10 个元素,其首元素是 data1 解析:解析 data 首元素 data0。18.若语句coutsetfill()setw (5)3141512setw (5)”OK!”;是程序中第一个输出语句,则输出结果是_ 。(分数:2.00)A.3141512OK! B.31415120K!C.314150K!D.31415OK!解析:解析 输入/输出流的
27、操作。19.有如下程序:#include iostreamusing namespace std;class Baseprotected: int i;public: int j;class Derived:public Baseint m;public: int n;int main()Derived d;d.i=0;/1d.j=0;/2d.m=0;/3d.n=0;/4return 0;其中主函数中有两个赋值语句有错,这两个错误的赋值语句是_ 。(分数:2.00)A.1和2B.1和3 C.2和3D.2和4)解析:解析 i 是 Derived 的保护成员,m 是私有成员。20.在表达式 x-y
28、 中,“-”是作为非成员函数重载的运算符。若使用显式的函数调用代替直接使用运算符“-”,这个表达式还可表示为_ 。(分数:2.00)A.opemtor-(y)B.opemtor-(y,x)C.operator-(x)D.operator-(x,y) 解析:解析 运算符重载的相关内容。21.数据独立性是数据库技术的重要特点之一。所谓数据独立性是指_ 。(分数:2.00)A.数据与程序独立存放B.不同的数据被存放在不同的文件中C.不同的数据只能被对应的应用程序所使用D.以上三种说法都不对 解析:解析 数据库的相关概念。22.有如下函数模板声明:template typename TT Max(T
29、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)解析:解析 使用模板,应避免二义性23.用树型结构表示实体之间联系的模型是_ 。(分数:2.00)A.关系模型B.网状模型C.层次模型 D.以上三个都是解析:解析 层次多为“一对多”,可用树型结构表示。24.下面的函数模板定义中错误的是_ 。(分数:2.00)A.templateclass Q QF (Q x)return Q +x; B.templatecl
30、ass Q QF (Q x)returnx/x;C.template class T T F(T x) return x*x;D.template class Tbool F (T x) return x1;解析:解析 Q 只是模板的语法要求,不能作为一个值。25.在下面的类定义中,横线处应填入的内容是_ 。class Fredpublic:void print() cout data end 1; void setData(double d) data=d; static int count;private:double data;_count=0;/表态数据成员的定义(分数:2.00)A.
31、intB.static intC.int Fred: D.static int Fred:解析:解析 const 的使用的相关内容。26.下列对于软件测试的描述中正确的是_。(分数:2.00)A.软件测试的目的是证明程序是否正确B.软件测试的目的是使程序运行结果正确C.软件测试的目的是尽可能多地发现程序中的错误 D.软件测试的目的是使程序符合结构化原则解析:解析 软件测试的相关概念。27.在 C+中,实现封装性需借助于_ 。(分数:2.00)A.枚举B.类 C.数组D.函数解析:解析 数据和算法的封装借助于类。28.为了使模块尽可能地独立,要求_。(分数:2.00)A.模块的内聚程度要尽量高,
32、且各模块间的耦合程度要尽量强B.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱 C.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强解析:解析 程序设计的相关概念。29.对长度为 n 的线性表进行顺序查找,在最坏情况下所需要的比较次数为_ 。(分数:2.00)A.n-1B.n/2C.n D.n+1解析:解析 查不到或最后一个查到的情况。30.有如下程序:#include iostreamusing namespace std;class Stack public:Stack(unsigned n= 10):size(n) rep
33、_=ew intsize;top=0;Stack(Stackfor(int i=0;isize;i+) rep_i=s.rep_i;top=s.top;Stack() delete rep_;void push(int(分数:2.00)A.rep_top=a; top+;class MyStringpublic:MyString(const char *s);MyString() delete data;protected:unsigned len;char *data;MyString: MyString (const char *s)len=strlen(s);data=new charl
34、en+1;strcpy(data,s);int main()MyString a(“C+ Programing“);MyString b((分数:2.00)A.;return 0;在运行上面的程序时出错,解析:解析 类拷贝的相关内容。二、填空题(总题数:12,分数:29.00)36.某二叉树中度为 2 的结点有 18 个,则该二叉树中有 【1】 个叶子结点。(分数:2.00)填空项 1:_ (正确答案:19)解析:解析 叶子结点是最末端的结点。37.在面向对象方法中,类的实例称为 【2】 。(分数:2.00)填空项 1:_ (正确答案:对象)解析:解析 面向对象的相关概念。38.诊断和改正程序
35、中错误的工作通常称为 【3】 。(分数:2.00)填空项 1:_ (正确答案:调试或者程序调试或者软件调试或者 Debug 或者调试程序或者调试软件)解析:解析 调试的相关内容。39.在关系数据库中,把数据表示成二维表,每一个二维表称为 【4】 。(分数:1.00)填空项 1:_ (正确答案:关系 或者 关系表)解析:解析 关系数据库的相关概念。40.问题处理方案的正确而完整的描述称为 【5】 。(分数:2.00)填空项 1:_ (正确答案:算法 或者 程序 或者 流程图)解析:解析 算法,程序的相关内容。41.在下面函数的横线处填上适当的内容使该函数能够利用递归方法求解字符串 str 的长度
36、(不得使用系统提供的字符串处理函数)。int GetLen(char *strif ( 【6】 ) return 【17】 ;else return 1+GetLen (str+1);(分数:4.00)填空项 1:_ (正确答案:6 *str=NULL 或者!*str7 0)解析:解析 如果结束,返回 0 值。42.下列程序的输出结果是 【8】 。#include iostream#include cstringusing namespace std;void fun(const char *s, char int main()char str=“ABCDE“;char ch=str1;fun
37、(str, ch);coutch;return 0;(分数:2.00)填空项 1:_ (正确答案:C)解析:解析 strlen(s)/2 值是 2,s2值是 C。43.在下向程序和横线处填上适当的内容,使程序执行后的输出结果为 1/2005。#include iostreamusing namespace std;class Datepublic:Date(int m=1,int y=0):month(m),year(y)void Print() coutmonth“/“yearend 1; 【9】 operator+(eonst Dateprivate:int month,year;【10】
38、 operator+(const Dateyear=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:_ (正确答案:9 friend Date10 Date)解析:解析 重载及友元的相关内容。44.在下面程序的横线处填上适当的内容,使程序执行后的输出结果为 ABCD。#include
39、 iostreamusing namespace std;class Apublic: A() coutA;class B: 【11】 public:B() coutB;class C: 【12】 public: C()coutC;class D:public B,public Cpublic:D() coutD;void main() D obj;(分数:4.00)填空项 1:_ (正确答案:11 virtual public A12 virtual public A)解析:解析 继承的相关概念。45.Staff 类含有血型数据成员 ID,两个 Staff 对象相等是指它们的 ID 相同。下
40、面的函数重载了运算符“=”,它用来判断两个 Staff 对象是否相等,相等时返回 true,否则返回 false。请将空格处缺失部分补充完整。boo Staffi: Staff =(const Smff for(int i=1 ;in;i+)if(aim) 【14】 return m;(分数:2.00)填空项 1:_ (正确答案:m=ai)解析:解析 如果某一值大于 m,m 则改为该值。47.下面程序的执行结果是 【15】 。#include iostream#include iomanipusing namespace std;void main()coutsetfill(x)setw(10);cout“Hello“end1;(分数:2.00)填空项 1:_ (正确答案:xxxxx Hello)解析:解析 setw 设置输出宽度,setfill 设置填充字符 v。