1、C+程序设计自考题模拟 6 及答案解析(总分:100.00,做题时间:90 分钟)一、第部分 选择题(总题数:20,分数:20.00)1.C+中注释“/”的有效范围是_(分数:1.00)A.从“/”开始到行尾B.从“/”开始到下一个“/”C.“/”及其后一个字符D.从“/”开始到程序尾2.下列描述中,不属于面向对象思想主要特征的是_(分数:1.00)A.封装性B.跨平台性C.继承性D.多态性3.在 C+中,函数原型不能标识_(分数:1.00)A.函数的返回类型B.函数参数的个数C.函数参数类型D.函数的功能4.下面说法正确的是_(分数:1.00)A.内联函数在运行时是将该函数的目标代码插入每个
2、调用该函数的地方B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方C.类的内联函数必须在类体内定义D.类的内联函数必须在类体外通过加关键字 inline 定义5.下列访问成员的方式哪个是正确的_(分数:1.00)A.对象名.对象成员名B.对象指针名.对象成员名C.对象名-对象成员名D.类名-对象成员名6.在 C+程序中,对象之间的相互通信通过_(分数:1.00)A.继承实现B.封装实现C.调用成员函数实现D.函数重载实现7.对于任意一个类,析构函数的个数最多为_(分数:1.00)A.0B.1C.2D.38.有如下程序段: int *p, a7=-5,0,4,2,7,1; p=a+
3、6; 执行该程序段后,*p 的值为_(分数:1.00)A.4B.2C.1D.09.声明函数模板的关键字是_(分数:1.00)A.inlineB.templateC.constD.short10.用于标识十六进制前缀或后缀的是_(分数:1.00)A无B.后缀 L 或 eC.前缀零D.前缀 0x11.下列关于友元的描述错误的是_(分数:1.00)A.成员函数不可作友元B.类可以作友元C.普通函数可以作友元D.静态函数可以作友元12.使用输入输出操控符 setfill,可以设置_(分数:1.00)A.输出精度B.输出宽度C.对齐方式D.填充字符13.语句 int *p= 定义了指针 p,与这个语句等
4、效的语句序列是_(分数:1.00)A.int *p; p=B.int *p; p=k;C.int *p; *p=D.int *p; *p=k;14.派生类继承了基类的_(分数:1.00)A.所有成员B.部分成员C.数据成员D.成员函数15.对于类定义 class A public:virtual void func1() void func2() ; class B:public A public:void func1()cout“class B func1“endl; virtual void func2()cout“class B func2“endl; ; 下面正确的叙述是_(分数:1.
5、00)A.A:runc2()和 B:func1()都是虚函数B.A:func2()和 B:func1()都不是虚函数C.B:func1()是虚函数,而 A:func2()不是虚函数D.B:func1()不是虚函数,而 A:func2()是虚函数16.类的私有成员可在何处访问_(分数:1.00)A.通过子类的对象访问B.本类及子类的成员函数中C.通过该类对象访问D.本类的成员函数中17.语句 ofstream f(“TEMP.DAT“, ios:app | ios:binary);的功能是建立流对象 f,试图打开文件TEMP.DAT 并与之连接,并且_(分数:1.00)A.若文件存在,将文件写指
6、针定位于文件尾;若文件不存在,建立一个新文件B.若文件存在,将其置为空文件;若文件不存在,打开失败C.若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件D.若文件存在,打开失败;若文件不存在,建立一个新文件18.下列访问公有静态成员的方式,错误的是_(分数:1.00)A.类名:静态成员名B.对象名.静态成员名C.对象指针-静态成员名D.对象指针.静态成员名19.下列关于运算符重载的描述中,正确的是_(分数:1.00)A.运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符B.一元运算符只能作为成员函数重载C.二元运算符重载为非成员函数时,参数表中有一个参数D.C+中可以
7、重载所有的运算符20.下列选项中,与实现运行时多态性无关的是_(分数:1.00)A.函数重载B.虚函数C.指针D.引用二、第部分 非选择题(总题数:20,分数:20.00)21.使用 C+标准类库时,用于指定相应命名空间的语句是 1。 (分数:1.00)22.C+类的 1 函数名与类名称一样,且没有返回值。 (分数:1.00)23.执行代码: int a=96; couthexa; 程序的输出结果是 1。 (分数:1.00)24.假定 AB 为一个类,则语句 AB(int i=0); 为该类 1 函数的原型说明。 (分数:1.00)25.定义类的动态对象数组时,系统只能够自动调用该类的 1 构
8、造函数对其进行初始化。 (分数:1.00)26.假设类 X 的对象 x 是类 Y 的成员对象,则“Y Obj”语句执行时,先调用类 1 的构造函数。 (分数:1.00)27.C+中语句 const char * const p=“hello“;所定义的指针 p 和它所指的内容都不能被 1。 (分数:1.00)28.带有纯虚函数的类称为抽象类,它只能作为 1 来使用。 (分数:1.00)29.C+函数中传递对象地址值是使用 1 作为参数。 (分数:1.00)30.在 C+程序设计中,建立继承关系倒挂的树应使用 1 继承。 (分数:1.00)31.基类的公有成员在派生类中的访问权限由 1 决定。
9、(分数:1.00)32.采用私有派生方式,基类的 public 成员在派生类中是 1 成员。 (分数:1.00)33.派生的新类同时可以增加或重新定义数据和操作,这称为类的 1 性。 (分数:1.00)34.声明一个常成员函数 Fun,其返回类型为 char,第一个参数类型为 int,第二个参数类型为 double,函数 Fun 的声明原型是 1。 (分数:1.00)35.若将一个二元运算符重载为类的成员函数,其形参个数应该是 1 个。 (分数:1.00)36.C+中 istream 的直接基类是 1。 (分数:1.00)37.C+程序是从 1 函数开始执行的。 (分数:1.00)38.C+语
10、言中可以实现输出一个换行符并刷新流功能的操控符是 1。 (分数:1.00)39.UML 中对象之间的静态关系是通过对象属性之间的连接反映的,称之为 1。 (分数:1.00)40.设置 ios_base:right 的含义是 1。 (分数:1.00)三、改错题(总题数:5,分数:20.00)41.#includeiostream.h templateclass T class A private: T x, y, s; public: A(T a, T b) x=a, y=b; s=x+y; void show() cout“x+y=“sendl; ; void main() A add(10,
11、 100); add.show(); (分数:4.00)_42.#includeiostream.h class T protected: int p; public: T(int m) p=m; ; void main() T a(10); couta.pendl; (分数:4.00)_43.#include iostream.h class Bas public: Bas() cout“Bas construct“endl; virtual void f()=0; ; class Dev:public Bas public: Dev() cout“Bas construct“endl; v
12、irtual void f() cout“Dev:f“endl; ; void main () Bas *a=new Bas(); Dev p; a= a-f(); (分数:4.00)_44.#include iostream.h class A private: int a; public: void func(B A(int i)a=i; ; class B private: int b; friend void A:func(B public: B(int i)b=i; ; void A:func(B coutaendl; void main() B bt(3); A at(10); a
13、t.func (bt); (分数:4.00)_45.#include iostream.h void f(int * a, int n) int i=0, j=0; int k=0; for(;i n/2; i + ) k=ai; ai =an-i-1; an-i-1 =k; void show( int a, int n) for(int i =0; in; i + ) coutai“ “; coutendl; void main() int p5; int i =0, n =5; for(; i 5; i+) pi =i; f(* p, n); show (p, n); (分数:4.00)
14、_四、完成程序题(总题数:5,分数:20.00)46.为使下面程序输出结果为: 1 *0=0 3 *4=12 请在横线处填上适当的语句,以使程序完整。 #include iostream.h class A private: int R1, R2; public: A(int r1=5, int r2=0) _ void show(); ; void A:show() _ void main( ) A a(1); A b(3, 4); a.show(); b.show(); (分数:4.00)_47.下面程序运行的结果是:5+10 =15。 #includeiostream.h class T
15、est private: int x, y; public: Test() x=y=0; void Setxy(int x, int y) _ void show() _ ; void main() Test ptr; ptr.Setxy(5, 10); ptr.show(); (分数:4.00)_48.下面程序用来求直角三角形斜边长度。 #include iostream.h #include math.h class Point private: double x, y; _ public: Point (double i = 0, double j = 0) x=i; y=j; Poin
16、t( Point y=p.y; ; class Line private: Point p1, p2; public: Line(Point ; double Line:GetLength() double dx=p2.x-p1.x; double dy=p2.y-p1.y; return sqrt( dx * dx + dy * dy); void main() Point p1, p2(6, 8); Line L1 (p1, p2); coutL1. GetLength()endl; (分数:4.00)_49.完成下面类中成员函数的定义。 #include iostream.h #incl
17、ude iomanip.h class Arr protected: float * p; int n; /数组大小(元素个数) public: Arr( int sz = 10) n=sz; p = new floatn; Arr (void) _ int Getn(void) const return n; float ; void Arr:Print() int i; for(i=0; i this-Getn(); i +) if (i%10=0) coutendl; coutsetw(6)pi; coutendl; void main() Arr a(20); for (int i=0
18、; ia.Getn(); i + ) ai =i*2; a.Print(); (分数:4.00)_50.在下面程序横线处填上适当的语句,使其输出结果为 0,15,15。 #include iostream.h class base public: _ f() return 0; ; class derived:public base public: int a,b,c; _ set(int x, int y, int z) a =x; b =y; c =z; int f() return a + b + c ; ; void main() base b; derived d; coutb.f(
19、)“ ,“; d.set(3,5,7); coutd.f()“ ,“; base coutp.f()endl; (分数:4.00)_五、程序分析题(总题数:2,分数:10.00)51.给出下面程序输出结果。 #include iostream.h void main() int *p1; int * *p2= int b = 20; p1 = cout* * p2endl; (分数:5.00)_52.给出下面程序输出结果。 #include iostream.h class Base private: int Y; public: Base ( int y = 0 ) Y = y; cout“
20、Base (“y“ ) / n“; Base() cout“Base()/n“ ; void print() coutY“ “ ; ; class Derived:public Base private: int Z; public: Derived(int y, int z):Base(y) Z=z; cout“Derived(“y“, “z“)/n“; Derived()cout“Derived()/n“; void print() Base:print(); coutZendl; ; void main() Derived d(10, 20); d.print(); (分数:5.00)_
21、六、程序设计题(总题数:1,分数:10.00)53.下面 Shape 类是一个表示形状的抽象类,Area()为求图形面积的函数。请从 Shape 类派生梯形类(Trapezoid)、圆形类(Circle),三角形类(Triangle),并给出具体的求面积函数。其中,所有派生类计算面积需要用到的参数由构造函数给出,梯形面积计算需要上底、下底和高,三角形面积需要底和高,圆形面积需要半径。 形状的抽象类声明如下: class Shape public: virtual double Area()=0; ; (分数:10.00)_C+程序设计自考题模拟 6 答案解析(总分:100.00,做题时间:90
22、 分钟)一、第部分 选择题(总题数:20,分数:20.00)1.C+中注释“/”的有效范围是_(分数:1.00)A.从“/”开始到行尾 B.从“/”开始到下一个“/”C.“/”及其后一个字符D.从“/”开始到程序尾解析:考点 本题主要考查的知识点为 C+中的注释方式。 C+中有两种注释方式,一种是沿用 C 语言的从“/*”开始,直到“*/”结束的注释方式,另一种是从“/”开始到本行结束。2.下列描述中,不属于面向对象思想主要特征的是_(分数:1.00)A.封装性B.跨平台性 C.继承性D.多态性解析:3.在 C+中,函数原型不能标识_(分数:1.00)A.函数的返回类型B.函数参数的个数C.函
23、数参数类型D.函数的功能 解析:考点 本题主要考查的知识点为函数原型。 函数的原型,说明函数的参数、返回类型以及函数名,函数体即实现部分决定功能。所以函数的原型不能决定函数的功能。4.下面说法正确的是_(分数:1.00)A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方 C.类的内联函数必须在类体内定义D.类的内联函数必须在类体外通过加关键字 inline 定义解析:考点 本题主要考查的知识点为内联函数。 内联函数不产生函数调用,只在编译时用内联函数的函数体替换调用语句,节省了调用开销,但相应地增加了目标代码量。5.
24、下列访问成员的方式哪个是正确的_(分数:1.00)A.对象名.对象成员名 B.对象指针名.对象成员名C.对象名-对象成员名D.类名-对象成员名解析:考点 本题主要考查的知识点为访问对象成员的方式。 访问对象成员的方式为对象名.对象成员名。6.在 C+程序中,对象之间的相互通信通过_(分数:1.00)A.继承实现B.封装实现C.调用成员函数实现 D.函数重载实现解析:考点 本题主要考查的知识点为成员函数的作用。 类中包括数据成员和成员函数,通常数据成员定义为私有的,而通过公有的成员函数来访问私有的数据成员,实现通信。7.对于任意一个类,析构函数的个数最多为_(分数:1.00)A.0B.1 C.2
25、D.3解析:考点 本题主要考查的知识点为析构函数。 析构函数没有参数,所以不能重载,因此析构函数只能有一个。8.有如下程序段: int *p, a7=-5,0,4,2,7,1; p=a+6; 执行该程序段后,*p 的值为_(分数:1.00)A.4B.2C.1D.0 解析:9.声明函数模板的关键字是_(分数:1.00)A.inlineB.template C.constD.short解析:考点 本题主要考查的知识点为函数模板的声明。 声明函数模板的格式为:template模板形参表函数声明。10.用于标识十六进制前缀或后缀的是_(分数:1.00)A无B.后缀 L 或 eC.前缀零D.前缀 0x
26、解析:11.下列关于友元的描述错误的是_(分数:1.00)A.成员函数不可作友元 B.类可以作友元C.普通函数可以作友元D.静态函数可以作友元解析:考点 本题主要考查的知识点为友元。 对于一个类,可以利用 friend 关键字将一般函数、其他类的成员函数或者是其他类声明为该类的友元,使得这个类中本来隐藏的信息可以被友元所访问,故 A 项错误。12.使用输入输出操控符 setfill,可以设置_(分数:1.00)A.输出精度B.输出宽度C.对齐方式D.填充字符 解析:13.语句 int *p= 定义了指针 p,与这个语句等效的语句序列是_(分数:1.00)A.int *p; p= B.int *
27、p; p=k;C.int *p; *p=D.int *p; *p=k;解析:14.派生类继承了基类的_(分数:1.00)A.所有成员 B.部分成员C.数据成员D.成员函数解析:考点 本题主要考查的知识点为派生类。 派生类继承了基类的全部数据成员和除了构造、析构函数之外的全部成员函数。15.对于类定义 class A public:virtual void func1() void func2() ; class B:public A public:void func1()cout“class B func1“endl; virtual void func2()cout“class B func
28、2“endl; ; 下面正确的叙述是_(分数:1.00)A.A:runc2()和 B:func1()都是虚函数B.A:func2()和 B:func1()都不是虚函数C.B:func1()是虚函数,而 A:func2()不是虚函数 D.B:func1()不是虚函数,而 A:func2()是虚函数解析:考点 本题主要考查的知识点为虚函数。 基类定义了虚函数,在派生类中只要有同样的函数(返回值相同,函数名相同,形参个数相同,类型相同),即使没有 virtual 修饰,该函数也是虚函数。基类 func1 是虚函数,与派生类 func1 相同,所以派生类func1 也是虚函数。func2 在基类中是普
29、通函数,在派生类中是虚函数。16.类的私有成员可在何处访问_(分数:1.00)A.通过子类的对象访问B.本类及子类的成员函数中C.通过该类对象访问D.本类的成员函数中 解析:考点 本题主要考查的知识点为类的私有成员。 类的私有成员在派生类中是隐藏的,只能在基类的成员函数中访问。17.语句 ofstream f(“TEMP.DAT“, ios:app | ios:binary);的功能是建立流对象 f,试图打开文件TEMP.DAT 并与之连接,并且_(分数:1.00)A.若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件 B.若文件存在,将其置为空文件;若文件不存在,打开失败C.
30、若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件D.若文件存在,打开失败;若文件不存在,建立一个新文件解析:考点 本题主要考查的知识点为文件的打开方式。 ios:binary:指定文件以二进制方式打开,默认为文本方式;ios:app:打开文件以便在文件的尾部添加数据。18.下列访问公有静态成员的方式,错误的是_(分数:1.00)A.类名:静态成员名B.对象名.静态成员名C.对象指针-静态成员名D.对象指针.静态成员名 解析:19.下列关于运算符重载的描述中,正确的是_(分数:1.00)A.运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符 B.一元运算符只能作为成员
31、函数重载C.二元运算符重载为非成员函数时,参数表中有一个参数D.C+中可以重载所有的运算符解析:20.下列选项中,与实现运行时多态性无关的是_(分数:1.00)A.函数重载 B.虚函数C.指针D.引用解析:考点 本题主要考查的知识点为运行时的多态性。 函数重载体现的是编译时的多态性,本题选 A。二、第部分 非选择题(总题数:20,分数:20.00)21.使用 C+标准类库时,用于指定相应命名空间的语句是 1。 (分数:1.00)解析:using namespace std;22.C+类的 1 函数名与类名称一样,且没有返回值。 (分数:1.00)解析:构造23.执行代码: int a=96;
32、couthexa; 程序的输出结果是 1。 (分数:1.00)解析:6024.假定 AB 为一个类,则语句 AB(int i=0); 为该类 1 函数的原型说明。 (分数:1.00)解析:带默认值的构造25.定义类的动态对象数组时,系统只能够自动调用该类的 1 构造函数对其进行初始化。 (分数:1.00)解析:无参26.假设类 X 的对象 x 是类 Y 的成员对象,则“Y Obj”语句执行时,先调用类 1 的构造函数。 (分数:1.00)解析:X27.C+中语句 const char * const p=“hello“;所定义的指针 p 和它所指的内容都不能被 1。 (分数:1.00)解析:修
33、改28.带有纯虚函数的类称为抽象类,它只能作为 1 来使用。 (分数:1.00)解析:基类29.C+函数中传递对象地址值是使用 1 作为参数。 (分数:1.00)解析:对象指针30.在 C+程序设计中,建立继承关系倒挂的树应使用 1 继承。 (分数:1.00)解析:单一31.基类的公有成员在派生类中的访问权限由 1 决定。 (分数:1.00)解析:访问控制方式或继承方式32.采用私有派生方式,基类的 public 成员在派生类中是 1 成员。 (分数:1.00)解析:私有 prvate33.派生的新类同时可以增加或重新定义数据和操作,这称为类的 1 性。 (分数:1.00)解析:层次性34.声
34、明一个常成员函数 Fun,其返回类型为 char,第一个参数类型为 int,第二个参数类型为 double,函数 Fun 的声明原型是 1。 (分数:1.00)解析:char Fun(int, double)const;35.若将一个二元运算符重载为类的成员函数,其形参个数应该是 1 个。 (分数:1.00)解析:136.C+中 istream 的直接基类是 1。 (分数:1.00)解析:ios37.C+程序是从 1 函数开始执行的。 (分数:1.00)解析:main()38.C+语言中可以实现输出一个换行符并刷新流功能的操控符是 1。 (分数:1.00)解析:endl39.UML 中对象之间
35、的静态关系是通过对象属性之间的连接反映的,称之为 1。 (分数:1.00)解析:实例连接40.设置 ios_base:right 的含义是 1。 (分数:1.00)解析:输出数据按输出域右边对齐输出三、改错题(总题数:5,分数:20.00)41.#includeiostream.h templateclass T class A private: T x, y, s; public: A(T a, T b) x=a, y=b; s=x+y; void show() cout“x+y=“sendl; ; void main() A add(10, 100); add.show(); (分数:4.
36、00)_正确答案:()解析:A add(10, 100); 类模板的使用,参数实例化后生成模板类。用类模板定义对象时要指定参数类型。应改为 Aintadd(10, 100);。42.#includeiostream.h class T protected: int p; public: T(int m) p=m; ; void main() T a(10); couta.pendl; (分数:4.00)_正确答案:()解析:protected: 保护类型的成员,不能在类外访问。应改为 public: 。43.#include iostream.h class Bas public: Bas()
37、 cout“Bas construct“endl; virtual void f()=0; ; class Dev:public Bas public: Dev() cout“Bas construct“endl; virtual void f() cout“Dev:f“endl; ; void main () Bas *a=new Bas(); Dev p; a= a-f(); (分数:4.00)_正确答案:()解析:Bas *a=new Bas(); 抽象类不能被实例化,但可以声明指针或引用,所以不能用 new,因为 new 产生临时对象。应改为 Bas *a;。44.#include i
38、ostream.h class A private: int a; public: void func(B A(int i)a=i; ; class B private: int b; friend void A:func(B public: B(int i)b=i; ; void A:func(B coutaendl; void main() B bt(3); A at(10); at.func (bt); (分数:4.00)_正确答案:()解析:void func(B 类 A 中使用类 B 的对象,故应增加对类 B 的声明。应在 class A 前增加 class B; 。45.#incl
39、ude iostream.h void f(int * a, int n) int i=0, j=0; int k=0; for(;i n/2; i + ) k=ai; ai =an-i-1; an-i-1 =k; void show( int a, int n) for(int i =0; in; i + ) coutai“ “; coutendl; void main() int p5; int i =0, n =5; for(; i 5; i+) pi =i; f(* p, n); show (p, n); (分数:4.00)_正确答案:()解析:f(*p, n); f 函数第一个参数是
40、指针而调用时使用*p, *p 表示 p 所指向的变量或对象,不是地址即不是指针。应改为 f(p, n); 。四、完成程序题(总题数:5,分数:20.00)46.为使下面程序输出结果为: 1 *0=0 3 *4=12 请在横线处填上适当的语句,以使程序完整。 #include iostream.h class A private: int R1, R2; public: A(int r1=5, int r2=0) _ void show(); ; void A:show() _ void main( ) A a(1); A b(3, 4); a.show(); b.show(); (分数:4.00)_正确答案:()解析:R1=r1; R2=r2; coutR1“*“R2“=“R1*R2endl;47.下面程序运行的结果是:5+10 =15。 #includeiostream.h class Test private: int x, y; public: Test() x=y=0; void Setxy(int x, int y) _ void show() _ ; void main() Test ptr; ptr.Setxy(5, 10); ptr.show(); (分数:4.00)_