1、二级 C+笔试 303及答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.为了使模块尽可能独立,要求( )。(分数:2.00)A.模块的内聚程序要尽量高,且各模块间的耦合程度要尽量强B.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱C.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强2.在结构化程序设计思想提出之前,在程序设计中强调程序的效率。与程序的效率相比,结构化程序设计思想更重视程序的( )。(分数:2.00)A.安全性B.一致性C.可理解性D.合理性3.设有如下程序
2、:#include iostream. hclass Apublic:int i;display() cout“class A/n“; ;class Bpublic:int i;display() cout“class B/n“; ;class C: public: A, public: Bint j;public:int i;show() j=i*i; display(); ;void main()C demo;demo. show();则主程序运行时,将( )。(分数:2.00)A.因为变量 i的重复定义而报错B.因为对象 demo间接调用 display函数时产生歧义性而报错C.因为类定
3、义的语法错误而不能运行D.没有语法错误,能够正常输出结果4.调试程序过程中主要会发现三类错误,不包括( )。(分数:2.00)A.语法错误B.逻辑错误C.例外错误D.常规错误5.关系 R和关系 S的并运算是( )。(分数:2.00)A.由关系 R和关系 S的所有元组合并组成的集合,再删去重复的元组B.由属于 R而不属于 S的所有元组组成的集合C.由既属于 R又属于 S的元组组成的集合D.由 R和 S的元组连接组成的集合6.下面是类 MyChss的定义,对定义中语句描述正确的是( )。class MyClasspublic:void MyClass(int a)X=a;) /int f(int
4、a, int b) /X=a;Y=b;int f(int a,int b,int c=0) /X=a;Y=b;Z=c;stahc void g ()X=10;) /private:int X,Y,Z;(分数:2.00)A.语句是类 MyClass的构造函数定义B.语句和语句实现类成员函数的重载C.语句实现对类成员变量 X的更新操作D.语句和都不正确7.下列叙述中正确的是( )。(分数:2.00)A.在模块化程序设计中,一个模块应尽量多的包括与其他模块联系的信息B.在自顶向下、逐步细化的设计过程中,首先应设计解决问题的每一个细节C.在模块化程序设计中,一个模块内部的控制结构也要符合结构化原则D.
5、在程序设计过程中,不能同时采用结构化程序设计方法与模块化程序设计方法8.下列关于运行符重载的描述中,正确的是( )。(分数:2.00)A.运算符重载可以改变操作数的个数B.运算符重载可以改变操作数的优先级C.运算符重载可以改变运算符的结合性D.运算符重载可以使运算符实现特殊功能9.下列选项中,不属于模块间耦合的是( )。(分数:2.00)A.数据耦合B.同构耦合C.异构耦合D.公用耦合10.数据库系统的核心是( )。(分数:2.00)A.数据模型B.数据库管理系统C.软件工具D.数据库11.下列描述中错误的是( )。(分数:2.00)A.派生类可以作为墓类派生其他的子类B.派生类继承基类的所有
6、数据成员C.派生类可以有多个基类D.派生类不能继承一些函数成员12.下列叙述中正确的是( )。(分数:2.00)A.线性链表中的各元素在存储空间中的位置必须是连续的B.线性链表中的表头元素一定存储在其他元素的前面C.线性链表中的各元素在存储空间中的位置不一定是连续的,但表头元素一定存储在其他元素的前面D.线性链表中的各元素在存储空间中的位置不一定是连续的,且各元素的存储 J顷序也是任意的13.函数定义为 Fun(int public:Sample() x=y=0; Sample(int a, int b) x=a; y=b; void (lisp()cout“x=“x“,y=“yend1;vo
7、id main()Sample s(2,3), *p=p-disp();(分数:2.00)A.x=1, y=2B.x=2, y=4C.x=2, y=3D.x=4, y=315.有如下程序:#include iostreamusing namespace std;class BASEpublic: BASE()cout“BASE“;class DERIVED: public BASEpublic: DERIVED() cout“DERIVED“; int main() DERIVED x; return 0; 执行后的输出结果是( )。(分数:2.00)A.BASEB.DERIVEDC.BASE
8、DERIVEDD.DERIVEDBASE16.若有以下程序:#include iostreamusing namespace std;class Aprivate: int a;public: void seta(int x) a=x; void showa() couta“,“; ;class Bprivate: int b;public: void setb(int x) b=x; void showb() coutb“,“; ;class C: public A, private Bprivate: int c;public: void setc(int x, int y, int z)
9、 c=z; seta(x); setb(y); void showc() showa(); showb(); coutcend1; ;int main() C c; c.setc(1,2,3); c.showc(); return 0;程序执行后的输出结果是( )。(分数:2.00)A.1,2,3B.1,1,1C.2,2,2D.3,3,317.设 x和 y均为 int型变量,则执行下面的循环后,y 值为( )。#include iostream.hvoid main()int x, y;for(y= 1,x= 1 ;y=50;y+) if(x=10) break;if (x%2=1) x+=5
10、; continue; x-=3; couty;(分数:2.00)A.2B.4C.6D.818.有如下的程序:#include cstring.h#include iostream. husing 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(data,
11、s);int main() MyString a(“C+ Programing“); MyString b(a); return0;在运行上面的程序时出错,出错的原因是( )。(分数:2.00)A.构造函数的实参不允许是本类的对象B.没有定义实现深层复制(深拷贝)的复制构造函数C.构造对象 a时实参与形参类型不符D.系统不能生成默认的复制构造函数19.下面程序的输出结果是( )。#include iostreamusing namespace std;void main()int s;for(int k=2;k6;k+=2)s=1;for(int j=k; j6;j+) s+=j;coutse
12、nd1;(分数:2.00)A.9B.1C.11D.1020.以下关于数据库系统的叙述中,正确的是( )。(分数:2.00)A.数据库只存在数据项之间的联系B.数据库的数据之间和记录之间都存在着联系C.数据库的数据之间和记录之间都不存在着联系D.数据库的数据项之间无联系,记录之间存在联系21.有如下程序:#include iostreamusing namespace std;class Base public: Base()cout“BB“; f(); Void f()cout“Bf“; ;class Derived: public Base public: Derived() cout“DD
13、“; void f() cout“Df“; ;int main() Derived d; return 0; 执行上面的程序将输出( )。(分数:2.00)A.BBBfDDB.BBDfDDDfC.DDD.DDBBBf22.下面各派生类的定义中,正确的是( )。(分数:2.00)A.class A类的成员;class B:A public类 B 中新增的成员;B.class A类的成员;private class B: A类 B中新增的成员;C.class A类的成员;class B: protected A类 B中新增的成员;D.class A类的成员;class B:A类 B中新增的成员;2
14、3.下列说法中错误的是( )。(分数:2.00)A.公有继承时基类中的 public成员在派生类中仍是 public的B.公有继承时基类中的 private成员在派生类中仍是 Private的C.私有继承时基类中的 public成员在派生类中是 private的D.保护继承时基类中的 public成员在派生类中是 protected的24.以下程序的输出结果是( )。#include iostream.hVoid main() int a33= 1,2 , 3,4 , 5,6 , i, j, s=0; for(i=1;i3;i+) for(j=0;ji; j+) s+=aij; coutsen
15、d1;(分数:2.00)A.14B.19C.20D.2125.下述内容中( )不属于软件工程管理的范畴。(分数:2.00)A.软件管理学B.软件心理学C.软件工程经济D.软件工程环境26.下列语言不属于高级语言的是( )。(分数:2.00)A.C语言B.机器语言C.FORTRAN 语言D.C+语言27.下列关于动态联编的描述中,错误的是( )。(分数:2.00)A.动态联编是以虚函数为基础的B.动态联编是在运行时确定所调用的函数代码的C.动态联编调用函数操作是指向对象的指针或对象引用D.动态联编是在编译时确定操作函数的28.下列关于构造函数的描述中,错误的是( )。(分数:2.00)A.构造函
16、数可以设置默认参数B.构造函数在定义类对象时自动执行C.构造函数可以是内联函数D.构造函数不可以重载29.对于语句 cinx;中的各个组成部分,下列叙述中错误的是( )。(分数:2.00)A.“cin”是一个输出流对象B.“;”的作用是表示语句结束C.“x”是一个变量D.“”称作提取运算符。30.若有以下程序:# inclcude iostream.hvoid main()int i;int a3 3= 1,2,3,4,5,6,7,8,9 ;for(i=0;i3;i+)couta2-i i“ “;coutend1;执行后的输出结果是( )。(分数:2.00)A.1 5 9B.7 5 3C.3
17、5 7D.5 9 131.对于 int*pa5;的描述,( )是正确的。(分数:2.00)A.pa是一个指向数组的指针,所指向的数组是 5个 int型元素B.pa是一个指向某数组中第 5个元素的指针,该元素是 int型变量C.pa5表示某个数组的第 5个元素的值D.pa是一个具有 5个元素的指针数组,每个元素是一个 int 型指针32.下列关于 C+函数的描述中正确的是( )。(分数:2.00)A.主函数是程序的入口,它由用户定义的函数调用B.函数在调用之前必须先被声明C.每个用户定义的函数只能被其他函数调用一次D.函数是 C+中面向对象程序设计框架的基本组成单元33.针对数组定义 int d
18、ata 10;,下列表述中错误的是( )。(分数:2.00)A.用*data 可访问到数组的首元素B.用 data9可访问到数组的末元素C.用 data10访问数组元素会超出数组边界D.data共有 10个元素,其首元素是 data134.重载输入流运算符必须使用的原型为( )。(分数:2.00)A.ostream static int c=3; b+; c+; return(a+ b+ c); void main() int a=2,i; for(i=0;i3;i+) coutf(a)end1; (分数:2.00)填空项 1:_46.已知数组 a中的元素个数为 n,下列语句的作用是将下标为
19、i的元素移动到下标为 i-1的单元,其中1in。例如,当 n=4,a 中原有数据为 1,2,3,4 时,则移动后 a中元素变为 2,3,4,4。请将语句补充完整: for(int i=0;in-1;i+) ai=aU 【11】 /U;(分数:2.00)填空项 1:_47.有如下程序: #includeiostream.h void main() int x=2,y=3,a,b,c,d; a=(x+=-y); b=(x=+y); c=(x-!=y); d=(+xy-); Coutabcdend1; 则程序执行后变量a,b,c,d 的值分别是U 【12】 /U。(分数:2.00)填空项 1:_48
20、.下面程序的运行结果是U 【13】 /U。 #include iostream.h double fun( double a, double b, char c=* ) double d; switch (c) case +:d=a+ b; break; case -:d=a-b; break; case *:d=a*b; break; case /:d=a/b; break; return d; void main() double d=1.0; d=d-fun(fun(2.5,3.5,+),fun(3,5),/); cout“d=“dend1; (分数:2.00)填空项 1:_49.在下面
21、横线上填上适当的语句,完成程序。 #includeiostream using namespace std; class Base int x; public: Base(int i) x=i; Base() ; class Derived: public Base public: U 【14】 /U/完成类 Derive 构造函数的定义 ; int main() Derived Obj(); return 0; (分数:2.00)填空项 1:_50.下列程序的输出结果是U 【15】 /U。 #include iostream using namespace std; class base p
22、ublic: int n; base(int x) n=x; virtual void set(int m) n=m; coutn ; ; class deriveA :public base public: deriveA(int x):base(x) void set(int m) n+=m; coutn ; ; class derive B: public base public: derive B(int x):base(x) void set(int m) n+=m; coutn ; ; int main() derive A, d1(1); derive B, d2(3); bas
23、e *pbase; pbase= pbase-set(1); pbase= phase-set(2); return 0; (分数:2.00)填空项 1:_二级 C+笔试 303答案解析(总分:100.00,做题时间:90 分钟)一、B选择题/B(总题数:35,分数:70.00)1.为了使模块尽可能独立,要求( )。(分数:2.00)A.模块的内聚程序要尽量高,且各模块间的耦合程度要尽量强B.模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱 C.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D.模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强解析:2.在结构化程序设计思想提出之前
24、,在程序设计中强调程序的效率。与程序的效率相比,结构化程序设计思想更重视程序的( )。(分数:2.00)A.安全性B.一致性C.可理解性 D.合理性解析:3.设有如下程序:#include iostream. hclass Apublic:int i;display() cout“class A/n“; ;class Bpublic:int i;display() cout“class B/n“; ;class C: public: A, public: Bint j;public:int i;show() j=i*i; display(); ;void main()C demo;demo.
25、show();则主程序运行时,将( )。(分数:2.00)A.因为变量 i的重复定义而报错B.因为对象 demo间接调用 display函数时产生歧义性而报错 C.因为类定义的语法错误而不能运行D.没有语法错误,能够正常输出结果解析:4.调试程序过程中主要会发现三类错误,不包括( )。(分数:2.00)A.语法错误B.逻辑错误C.例外错误D.常规错误 解析:5.关系 R和关系 S的并运算是( )。(分数:2.00)A.由关系 R和关系 S的所有元组合并组成的集合,再删去重复的元组 B.由属于 R而不属于 S的所有元组组成的集合C.由既属于 R又属于 S的元组组成的集合D.由 R和 S的元组连接
26、组成的集合解析:6.下面是类 MyChss的定义,对定义中语句描述正确的是( )。class MyClasspublic:void MyClass(int a)X=a;) /int f(int a, int b) /X=a;Y=b;int f(int a,int b,int c=0) /X=a;Y=b;Z=c;stahc void g ()X=10;) /private:int X,Y,Z;(分数:2.00)A.语句是类 MyClass的构造函数定义B.语句和语句实现类成员函数的重载C.语句实现对类成员变量 X的更新操作D.语句和都不正确 解析:7.下列叙述中正确的是( )。(分数:2.00)
27、A.在模块化程序设计中,一个模块应尽量多的包括与其他模块联系的信息B.在自顶向下、逐步细化的设计过程中,首先应设计解决问题的每一个细节C.在模块化程序设计中,一个模块内部的控制结构也要符合结构化原则 D.在程序设计过程中,不能同时采用结构化程序设计方法与模块化程序设计方法解析:8.下列关于运行符重载的描述中,正确的是( )。(分数:2.00)A.运算符重载可以改变操作数的个数B.运算符重载可以改变操作数的优先级C.运算符重载可以改变运算符的结合性D.运算符重载可以使运算符实现特殊功能 解析:9.下列选项中,不属于模块间耦合的是( )。(分数:2.00)A.数据耦合B.同构耦合C.异构耦合 D.
28、公用耦合解析:10.数据库系统的核心是( )。(分数:2.00)A.数据模型B.数据库管理系统 C.软件工具D.数据库解析:11.下列描述中错误的是( )。(分数:2.00)A.派生类可以作为墓类派生其他的子类B.派生类继承基类的所有数据成员 C.派生类可以有多个基类D.派生类不能继承一些函数成员解析:12.下列叙述中正确的是( )。(分数:2.00)A.线性链表中的各元素在存储空间中的位置必须是连续的B.线性链表中的表头元素一定存储在其他元素的前面C.线性链表中的各元素在存储空间中的位置不一定是连续的,但表头元素一定存储在其他元素的前面D.线性链表中的各元素在存储空间中的位置不一定是连续的,
29、且各元素的存储 J顷序也是任意的 解析:13.函数定义为 Fun(int public:Sample() x=y=0; Sample(int a, int b) x=a; y=b; void (lisp()cout“x=“x“,y=“yend1;void main()Sample s(2,3), *p=p-disp();(分数:2.00)A.x=1, y=2B.x=2, y=4C.x=2, y=3 D.x=4, y=3解析:15.有如下程序:#include iostreamusing namespace std;class BASEpublic: BASE()cout“BASE“;class
30、 DERIVED: public BASEpublic: DERIVED() cout“DERIVED“; int main() DERIVED x; return 0; 执行后的输出结果是( )。(分数:2.00)A.BASEB.DERIVEDC.BASEDERIVEDD.DERIVEDBASE 解析:16.若有以下程序:#include iostreamusing namespace std;class Aprivate: int a;public: void seta(int x) a=x; void showa() couta“,“; ;class Bprivate: int b;pu
31、blic: void setb(int x) b=x; void showb() coutb“,“; ;class C: public A, private Bprivate: int c;public: void setc(int x, int y, int z) c=z; seta(x); setb(y); void showc() showa(); showb(); coutcend1; ;int main() C c; c.setc(1,2,3); c.showc(); return 0;程序执行后的输出结果是( )。(分数:2.00)A.1,2,3 B.1,1,1C.2,2,2D.3
32、,3,3解析:17.设 x和 y均为 int型变量,则执行下面的循环后,y 值为( )。#include iostream.hvoid main()int x, y;for(y= 1,x= 1 ;y=50;y+) if(x=10) break;if (x%2=1) x+=5; continue; x-=3; couty;(分数:2.00)A.2B.4C.6 D.8解析:18.有如下的程序:#include cstring.h#include iostream. husing namespace std;class MyString public: MyString(const char*s);
33、 MyString() deletedata; 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); return0;在运行上面的程序时出错,出错的原因是( )。(分数:2.00)A.构造函数的实参不允许是本类的对象B.没有定义实现深层复制(深拷贝)的复制构造函数 C.构造对象 a时实参与形参类型不符D
34、.系统不能生成默认的复制构造函数解析:19.下面程序的输出结果是( )。#include iostreamusing namespace std;void main()int s;for(int k=2;k6;k+=2)s=1;for(int j=k; j6;j+) s+=j;coutsend1;(分数:2.00)A.9B.1C.11D.10 解析:20.以下关于数据库系统的叙述中,正确的是( )。(分数:2.00)A.数据库只存在数据项之间的联系B.数据库的数据之间和记录之间都存在着联系 C.数据库的数据之间和记录之间都不存在着联系D.数据库的数据项之间无联系,记录之间存在联系解析:21.有
35、如下程序:#include iostreamusing 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 B.BBDfDDDfC.DDD.DDBBBf解析:22.下面各派生类的定义中,正确的是( )。(分数:2.00)A.cl
36、ass A类的成员;class B:A public类 B 中新增的成员;B.class A类的成员;private class B: A类 B中新增的成员;C.class A类的成员;class B: protected A类 B中新增的成员; D.class A类的成员;class B:A类 B中新增的成员;解析:23.下列说法中错误的是( )。(分数:2.00)A.公有继承时基类中的 public成员在派生类中仍是 public的B.公有继承时基类中的 private成员在派生类中仍是 Private的 C.私有继承时基类中的 public成员在派生类中是 private的D.保护继承时
37、基类中的 public成员在派生类中是 protected的解析:24.以下程序的输出结果是( )。#include iostream.hVoid main() int a33= 1,2 , 3,4 , 5,6 , i, j, s=0; for(i=1;i3;i+) for(j=0;ji; j+) s+=aij; coutsend1;(分数:2.00)A.14 B.19C.20D.21解析:25.下述内容中( )不属于软件工程管理的范畴。(分数:2.00)A.软件管理学B.软件心理学C.软件工程经济D.软件工程环境 解析:26.下列语言不属于高级语言的是( )。(分数:2.00)A.C语言B.
38、机器语言 C.FORTRAN 语言D.C+语言解析:27.下列关于动态联编的描述中,错误的是( )。(分数:2.00)A.动态联编是以虚函数为基础的B.动态联编是在运行时确定所调用的函数代码的 C.动态联编调用函数操作是指向对象的指针或对象引用D.动态联编是在编译时确定操作函数的解析:28.下列关于构造函数的描述中,错误的是( )。(分数:2.00)A.构造函数可以设置默认参数B.构造函数在定义类对象时自动执行C.构造函数可以是内联函数D.构造函数不可以重载 解析:29.对于语句 cinx;中的各个组成部分,下列叙述中错误的是( )。(分数:2.00)A.“cin”是一个输出流对象 B.“;”
39、的作用是表示语句结束C.“x”是一个变量D.“”称作提取运算符。解析:30.若有以下程序:# inclcude iostream.hvoid main()int i;int a3 3= 1,2,3,4,5,6,7,8,9 ;for(i=0;i3;i+)couta2-i i“ “;coutend1;执行后的输出结果是( )。(分数:2.00)A.1 5 9B.7 5 3 C.3 5 7D.5 9 1解析:31.对于 int*pa5;的描述,( )是正确的。(分数:2.00)A.pa是一个指向数组的指针,所指向的数组是 5个 int型元素B.pa是一个指向某数组中第 5个元素的指针,该元素是 in
40、t型变量C.pa5表示某个数组的第 5个元素的值D.pa是一个具有 5个元素的指针数组,每个元素是一个 int 型指针 解析:32.下列关于 C+函数的描述中正确的是( )。(分数:2.00)A.主函数是程序的入口,它由用户定义的函数调用B.函数在调用之前必须先被声明 C.每个用户定义的函数只能被其他函数调用一次D.函数是 C+中面向对象程序设计框架的基本组成单元解析:33.针对数组定义 int data 10;,下列表述中错误的是( )。(分数:2.00)A.用*data 可访问到数组的首元素B.用 data9可访问到数组的末元素C.用 data10访问数组元素会超出数组边界D.data共有
41、 10个元素,其首元素是 data1 解析:34.重载输入流运算符必须使用的原型为( )。(分数:2.00)A.ostream static int c=3; b+; c+; return(a+ b+ c); void main() int a=2,i; for(i=0;i3;i+) coutf(a)end1; (分数:2.00)填空项 1:_ (正确答案:7)解析:8 946.已知数组 a中的元素个数为 n,下列语句的作用是将下标为 i的元素移动到下标为 i-1的单元,其中1in。例如,当 n=4,a 中原有数据为 1,2,3,4 时,则移动后 a中元素变为 2,3,4,4。请将语句补充完整
42、: for(int i=0;in-1;i+) ai=aU 【11】 /U;(分数:2.00)填空项 1:_ (正确答案:i+1)解析:47.有如下程序: #includeiostream.h void main() int x=2,y=3,a,b,c,d; a=(x+=-y); b=(x=+y); c=(x-!=y); d=(+xy-); Coutabcdend1; 则程序执行后变量a,b,c,d 的值分别是U 【12】 /U。(分数:2.00)填空项 1:_ (正确答案:1 1 0 0)解析:48.下面程序的运行结果是U 【13】 /U。 #include iostream.h double
43、 fun( double a, double b, char c=* ) double d; switch (c) case +:d=a+ b; break; case -:d=a-b; break; case *:d=a*b; break; case /:d=a/b; break; return d; void main() double d=1.0; d=d-fun(fun(2.5,3.5,+),fun(3,5),/); cout“d=“dend1; (分数:2.00)填空项 1:_ (正确答案:d=0.6)解析:49.在下面横线上填上适当的语句,完成程序。 #includeiostrea
44、m using namespace std; class Base int x; public: Base(int i) x=i; Base() ; class Derived: public Base public: U 【14】 /U/完成类 Derive 构造函数的定义 ; int main() Derived Obj(); return 0; (分数:2.00)填空项 1:_ (正确答案:Derived(int i):Base (i) )解析:50.下列程序的输出结果是U 【15】 /U。 #include iostream using namespace std; class bas
45、e public: int n; base(int x) n=x; virtual void set(int m) n=m; coutn ; ; class deriveA :public base public: deriveA(int x):base(x) void set(int m) n+=m; coutn ; ; class derive B: public base public: derive B(int x):base(x) void set(int m) n+=m; coutn ; ; int main() derive A, d1(1); derive B, d2(3); base *pbase; pbase= pbase-set(1); pbase= phase-set(2); return 0; (分数:2.00)填空项 1:_ (正确答案:25)解析: