1、C+程序设计自考题模拟 9及答案解析(总分:100.00,做题时间:90 分钟)一、第部分 选择题(总题数:20,分数:20.00)1.下列特征中,C 和 C+共有的是_(分数:1.00)A.继承B.函数定义不能嵌套C.封装D.多态性2.调用声明为 int print(int a, int b); 的函数时,正确的方法是_(分数:1.00)A.print(0.5,0.8);B.print(2);C.print(1,2);D.print(1,2,3);3.下列选项中不是 C+关键字的是_(分数:1.00)A.boolB.operatorC.incD.friend4.继承机制的作用是_(分数:1.
2、00)A.信息隐藏B.数据封装C.定义新类D.数据抽象5.下面关于引用的描述正确的是_(分数:1.00)A.引用是被引用变量的复制B.被引用变量是引用的别名C.引用是被引用变量的别名D.被引用变量是引用的复制6.下列有关重载函数的说法中正确的是_(分数:1.00)A.重载函数必须具有不同的返回值类型B.重载函数参数个数必须相同C.重载函数必须有不同的形参列表D.重载函数名可以不同7.在 C+中,编写一个内联函数 Fun,使用 int类型的参数,求其平方并返回,返回值也为 int类型,下列定义正确的是_(分数:1.00)A.int Fun(int x)return x*x; B.int inli
3、ne Fun(int x)return x*x;C.inline int Fun(int x)return x*x;D.int Fun(int x)inline return x*x;8.函数模板 templatetypename Tvoid A(T, T)可实例化为以下哪种形式_(分数:1.00)A.void A(double, int);B.void A(char, float);C.void A(double, double);D.void A(float, int);9.类的析构函数是对一个对象进行以下哪种操作时自动调用的_(分数:1.00)A.建立B.撤销C.赋值D.引用10.下列不
4、是描述类的成员函数的是_(分数:1.00)A.构造函数B.析构函数C.友元函数D.拷贝构造函数11.假定 AA为一个类,a()为该类公有的函数成员,x 为该类的一个对象,则访问 x对象中函数成员 a()的格式为_(分数:1.00)A.aB.a()C.x-aD.(*x).a()12.已知 p是一个指向类 A数据成员 m的指针,A1 是类 A的一个对象。如果要给 m赋值为 5,正确的是_(分数:1.00)A.A1.p=5:B.A1-p=5;C.A1. *p=5;D.*A1.p=5;13.重载赋值操作符时,应声明函数为_(分数:1.00)A.友元函数B.虚函数C.成员函数D.静态函数14.建立包含有
5、类对象成员的派生类对象时,自动调用构造函数的执行顺序为_(分数:1.00)A.自己所属类、对象成员所属类、基类的构造函数B.对象成员所属类、基类、自己所属类的构造函数C.基类、对象成员所属类、自己所属类的构造函数D.基类、自己所属类、对象成员所属类的构造函数15.下述静态数据成员的特征中,错误的是_(分数:1.00)A.说明静态数据成员时前边要加修饰符 staticB.静态数据成员要在类体外进行初始化C.引用静态数据成员时,要在静态数据成员名前加类名和作用域运算符D.静态数据成员不是所有对象所共用的16.如果类 A被说明成类 B的友元,则_(分数:1.00)A.类 B不一定是类 A的友元B.类
6、 B的成员即类 A的成员C.类 A的成员即类 B的成员D.类 A的成员函数不得访问类 B的成员17.在继承中,派生类拥有的基类个数为_(分数:1.00)A.0个B.1个C.多个D.至少 1个18.在派生类中重新定义虚函数时必须与基类保持一致的是_(分数:1.00)A.参数类型B.形参名C.操作内容D.赋值19.下列运算符中,在 C+语言中不能重载的是_(分数:1.00)A.*B.=C.:D./20.C+语言建立类族是通过_(分数:1.00)A.类的嵌套B.类的继承C.虚函数D.抽象类二、第部分 非选择题(总题数:20,分数:20.00)21.C+是通过引用运算符 1 来定义一个引用的。 (分数
7、:1.00)22.开发一个 C+语言程序的步骤通常包括编辑、 1、连接、运行和调试。 (分数:1.00)23.执行下列代码 cout“oct:“oct34; 程序的输出结果是 1。 (分数:1.00)24.执行下列代码 string str(“HelloC+“); string newstr=str.substr(5,3); 后, newstr 的内容为 1。 (分数:1.00)25.面向对象的四个基本特性是多态性、继承、 1 和封装。 (分数:1.00)26.使用 const关键字说明的成员函数为 1。 (分数:1.00)27.在#include 命令中所包含的头文件,可以是系统定义的头文件
8、,也可以是 1 的头文件。 (分数:1.00)28.在 C+的类声明中,用 public关键字声明的类成员的访问权限是 1。 (分数:1.00)29.设函数 sum是由函数模板实现的,并且 sum(3,6)和 sum(4.6,8)都是正确的函数调用,则函数模板具有 1个类型参数。 (分数:1.00)30.执行 1 操作将释放由指针所指向的动态分配的内存空间。 (分数:1.00)31.常对象只能调用它的常成员函数,而一般对象既能调用常成员函数,又能调用 1。 (分数:1.00)32.通过 C+语言中的类的 1,可以扩充和完善已有类以适应新的需求。 (分数:1.00)33.vector类中向向量尾
9、部插入一个对象的方法是 1。 (分数:1.00)34.定义虚函数所用的关键字是 1。 (分数:1.00)35.C+语言支持的两种多态性分别是编译时的多态性和 1 的多态性。 (分数:1.00)36.有 int a=1, b=2; 则表达式 a+ + -b的值为 1。 (分数:1.00)37.语句序列 ifstream infile; infile.open(“data.dat“); 的功能可用一个语句实现,这个语句是 1。 (分数:1.00)38.在 C+中,利用向量类模板定义一个具有 20个 double的向量 E,其元素均被置为 0.5,实现此操作的语句是 1。 (分数:1.00)39.在
10、 C+中,创建派生类对象时,总是先从 1 的初始化开始的。 (分数:1.00)40.在面向对象的程序设计中将一组对象的共同特性抽象出来形成 1。 (分数:1.00)三、改错题(总题数:5,分数:20.00)41.#includeiostream.h #includestring.h class Bas public: Bas ( char * s = “/0“ ) strcpy ( name, s); void show(); protected: char name _ ; ; Bas b; void show() cout “name:“ b.name endl; void main()
11、Bas d2 (“hello“); show(); (分数:4.00)_42.#include iostream.h #include string.h class Bas int m; static int n; public: Bas(int i =0) n +; m =i; void show() cout “n:“ n endl; ; Bas:n =0; class Der:public Bas public: Der(int i=0):Bas(i) ; void main() Der d(3); d.show(); (分数:4.00)_43.下面程序用于输出最小值,有一处错误。 #i
12、nclude iostream.h class Test int a, b; int getmin() return (ab? a:b); public: int c; void setValue( int x1, int x2, int x3 ) a =x1; b =x2; c =x3; int GetMin(); ; int Test:GetMin() int d = getmin (); return (d=dc? d:c); void main() Test t1; t1.setValue(34,6,2); cout t1.getmin () endl; (分数:4.00)_44.下面
13、程序的功能是生成具有 n个元素的动态数组。 #include iostream.h void main() int n; cin n; int an; a0 =2; cout a0 endl; (分数:4.00)_45.#include iostream.h class Test int x, y; public: void fun(int i, int j) x=i; y=j; void show() cout “x = “ x; if(y) cout “, y = “ y endl; cout endl; ; void main() Test a; a.fun(1); a.show();
14、a.fun(2,4); a.show(); (分数:4.00)_四、完成程序题(总题数:5,分数:20.00)46.下面程序实现将大写字母转换成小写字母的功能。 #include iostream.h void main() char a; _ cin a; if(_) a=a+i; cout a endl; (分数:4.00)_47.完成下面类中成员函数的定义。 #include iostream.h template class T class f private: T x, y, s; public: f(T a =0, T b =0) x =a; y =b; void sum() s=
15、x+y; T gets (); ; template class T _ return s; void main() _a(1.5,3.8); a.sum(); cout a.gets () endl; (分数:4.00)_48.下面程序用于输出三角形的面积,请在下横线处填上正确的语句。 #include iostream.h #include math.h void area() double a, b, c; cout “Input a b c:“ ; _ if(a +b c _ cout “The area is:“ s endl; else cout “Error“ endl; voi
16、d main() area(); (分数:4.00)_49.#include iostream.h class Samp public: void Setij(int a, int b)i =a, j =b; Samp() cout “Destroying “ i endl; int GetMuti() return i * j; protected : int i; int j; ; int main() Samp * p; p = new Samp _ ; if( ! p) cout “ Allocation error/n“ ; return 1; for(int j =0; j 5;
17、j + ) pjSetij(j, j); for(int k =0; k 5; k +) cout “Muti“ k “ is:“ pk._endl; _ return 0; (分数:4.00)_50.#include iostream.h class AA public: AA(_) A = i; B = j; cout “Constructor/n“; AA ( AA B =obj.B; cout “ Copy Constructor/n“; AA() cout “ Destructor/n“ ; void show() cout “A = “ A “, B = “ B endl; pri
18、vate: int A, B; ; void main() AA a1 (2,3); AA a2(a1); a2.show(); _= pa-show(); (分数:4.00)_五、程序分析题(总题数:2,分数:10.00)51.给出下面程序的输出结果。 #include iostream.h static int a = 3; void fun(); void main () for(int i = 1; i a; i + ) fun(); cout endl; void fun () static int a = a; cout(a+ =2) “ “; (分数:5.00)_52.给出下面程
19、序的输出结果。 #include iostream.h class A public: A() cout“A 构造函数/n“; fun(); visual void fun() cout“A:fun()函数/n“; ; class B:public A public: B() cout“B 构造函数/n“; fun(); void fun() cout“B:fun() calle 函数/n“; ; void main() B d; (分数:5.00)_六、程序设计题(总题数:1,分数:10.00)53.写一个程序,定义一个抽象类 Shape,由它派生 3个类:Square(正方形)、Trape
20、zoid(梯形)和Triangle三角形。用虚函数分别计算几种图形面积、并求它们的和。要求用基类指针数组,使它的每一个元素指向一个派生类对象。 #includeiostream.h class Shape public: visual double area()const=0; ; (分数:10.00)_C+程序设计自考题模拟 9答案解析(总分:100.00,做题时间:90 分钟)一、第部分 选择题(总题数:20,分数:20.00)1.下列特征中,C 和 C+共有的是_(分数:1.00)A.继承B.函数定义不能嵌套 C.封装D.多态性解析:2.调用声明为 int print(int a, in
21、t b); 的函数时,正确的方法是_(分数:1.00)A.print(0.5,0.8);B.print(2);C.print(1,2); D.print(1,2,3);解析:考点 本题主要考查的知识点为函数的调用。 函数调用时,实参的个数及类型要与函数声明时的参数个数及类型保持一致,所以本题中函数调用时实参个数须为 2个且都是整型的,故选 C。3.下列选项中不是 C+关键字的是_(分数:1.00)A.boolB.operatorC.inc D.friend解析:考点 本题主要考查的知识点为 C+关键字。 bool、operator 和 friend均为 C+关键字,本题正确答案为 C。4.继承
22、机制的作用是_(分数:1.00)A.信息隐藏B.数据封装C.定义新类 D.数据抽象解析:5.下面关于引用的描述正确的是_(分数:1.00)A.引用是被引用变量的复制B.被引用变量是引用的别名C.引用是被引用变量的别名 D.被引用变量是引用的复制解析:考点 本题主要考查的知识点为引用。 引用就是为现有的对象起个“别名”。别名的地址就是原来对象的地址,选定命名时使用“引用”运算符“ B.int inline Fun(int x)return x*x;C.inline int Fun(int x)return x*x; D.int Fun(int x)inline return x*x;解析:考点
23、本题主要考查的知识点为内联函数。 在 C+中使用 inline关键字来定义内联函数。inline 关键字放在函数定义(声明)中函数类型之前。本题正确答案为 C。8.函数模板 templatetypename Tvoid A(T, T)可实例化为以下哪种形式_(分数:1.00)A.void A(double, int);B.void A(char, float);C.void A(double, double); D.void A(float, int);解析:考点 本题主要考查的知识点为函数模板。 模板函数形参表中定义的两个形参的类型相同,所以在实例化时模板函数实参表中的两个参数的类型也应该相
24、同。9.类的析构函数是对一个对象进行以下哪种操作时自动调用的_(分数:1.00)A.建立B.撤销 C.赋值D.引用解析:10.下列不是描述类的成员函数的是_(分数:1.00)A.构造函数B.析构函数C.友元函数 D.拷贝构造函数解析:考点 本题主要考查的知识点为友元函数。 友元函数不是当前类的成员函数,而是独立于当前类的外部函数,但它可以访问该类的所有成员,包括私有成员、保护成员和公有成员。11.假定 AA为一个类,a()为该类公有的函数成员,x 为该类的一个对象,则访问 x对象中函数成员 a()的格式为_(分数:1.00)A.aB.a() C.x-aD.(*x).a()解析:考点 本题主要考
25、查的知识点为对象调用其成员函数的格式。 访问对象中成员函数的格式为:对象名.成员函数名(参数表),本题中成员函数 a()的形参表为空,故选B。12.已知 p是一个指向类 A数据成员 m的指针,A1 是类 A的一个对象。如果要给 m赋值为 5,正确的是_(分数:1.00)A.A1.p=5:B.A1-p=5;C.A1. *p=5; D.*A1.p=5;解析:13.重载赋值操作符时,应声明函数为_(分数:1.00)A.友元函数B.虚函数C.成员函数 D.静态函数解析:考点 本题主要考查的知识点为重载赋值操作符。 赋值操作符只能作为成员函数重载。14.建立包含有类对象成员的派生类对象时,自动调用构造函
26、数的执行顺序为_(分数:1.00)A.自己所属类、对象成员所属类、基类的构造函数B.对象成员所属类、基类、自己所属类的构造函数C.基类、对象成员所属类、自己所属类的构造函数 D.基类、自己所属类、对象成员所属类的构造函数解析:15.下述静态数据成员的特征中,错误的是_(分数:1.00)A.说明静态数据成员时前边要加修饰符 staticB.静态数据成员要在类体外进行初始化C.引用静态数据成员时,要在静态数据成员名前加类名和作用域运算符D.静态数据成员不是所有对象所共用的 解析:考点 本题主要考查的知识点为静态数据成员的特征。 静态数据成员被类的所有对象所共享,它不属于类的任何一个对象,其作用域是
27、类范围,故 D项错误;A、B、C 项说法正确。16.如果类 A被说明成类 B的友元,则_(分数:1.00)A.类 B不一定是类 A的友元 B.类 B的成员即类 A的成员C.类 A的成员即类 B的成员D.类 A的成员函数不得访问类 B的成员解析:考点 本题主要考查的知识点为友元。 友元关系是单向的,即类 A为类 B的友元,类 B却不一定是类 A的友元,A 项正确;B、C、D 项说法错误。17.在继承中,派生类拥有的基类个数为_(分数:1.00)A.0个B.1个C.多个D.至少 1个 解析:18.在派生类中重新定义虚函数时必须与基类保持一致的是_(分数:1.00)A.参数类型 B.形参名C.操作内
28、容D.赋值解析:19.下列运算符中,在 C+语言中不能重载的是_(分数:1.00)A.*B.=C.: D./解析:考点 本题主要考查的知识点为运算符重载。 在 C+中,除了.、.*、-*、:、?:运算符不能重载外,其他运算符都可以重载。20.C+语言建立类族是通过_(分数:1.00)A.类的嵌套B.类的继承 C.虚函数D.抽象类解析:二、第部分 非选择题(总题数:20,分数:20.00)21.C+是通过引用运算符 1 来定义一个引用的。 (分数:1.00)解析: 程序的输出结果是 1。 (分数:1.00)解析:oct:4224.执行下列代码 string str(“HelloC+“); str
29、ing newstr=str.substr(5,3); 后, newstr 的内容为 1。 (分数:1.00)解析:C+25.面向对象的四个基本特性是多态性、继承、 1 和封装。 (分数:1.00)解析:抽象26.使用 const关键字说明的成员函数为 1。 (分数:1.00)解析:常成员函数27.在#include 命令中所包含的头文件,可以是系统定义的头文件,也可以是 1 的头文件。 (分数:1.00)解析:自定义28.在 C+的类声明中,用 public关键字声明的类成员的访问权限是 1。 (分数:1.00)解析:公有的29.设函数 sum是由函数模板实现的,并且 sum(3,6)和 s
30、um(4.6,8)都是正确的函数调用,则函数模板具有 1个类型参数。 (分数:1.00)解析:230.执行 1 操作将释放由指针所指向的动态分配的内存空间。 (分数:1.00)解析:delete31.常对象只能调用它的常成员函数,而一般对象既能调用常成员函数,又能调用 1。 (分数:1.00)解析:一般成员函数32.通过 C+语言中的类的 1,可以扩充和完善已有类以适应新的需求。 (分数:1.00)解析:继承33.vector类中向向量尾部插入一个对象的方法是 1。 (分数:1.00)解析:push_back34.定义虚函数所用的关键字是 1。 (分数:1.00)解析:virtual35.C+
31、语言支持的两种多态性分别是编译时的多态性和 1 的多态性。 (分数:1.00)解析:运行时36.有 int a=1, b=2; 则表达式 a+ + -b的值为 1。 (分数:1.00)解析:237.语句序列 ifstream infile; infile.open(“data.dat“); 的功能可用一个语句实现,这个语句是 1。 (分数:1.00)解析:ifstream infile(“data.dat“);38.在 C+中,利用向量类模板定义一个具有 20个 double的向量 E,其元素均被置为 0.5,实现此操作的语句是 1。 (分数:1.00)解析:vectordoubleE(20,
32、0.5);39.在 C+中,创建派生类对象时,总是先从 1 的初始化开始的。 (分数:1.00)解析:基类40.在面向对象的程序设计中将一组对象的共同特性抽象出来形成 1。 (分数:1.00)解析:类三、改错题(总题数:5,分数:20.00)41.#includeiostream.h #includestring.h class Bas public: Bas ( char * s = “/0“ ) strcpy ( name, s); void show(); protected: char name _ ; ; Bas b; void show() cout “name:“ b.name
33、endl; void main() Bas d2 (“hello“); show(); (分数:4.00)_正确答案:()解析:void show(); 是普通函数不是成员函数,但是要访问类成员,需要定义为友元函数。应改为friend void show(); 。42.#include iostream.h #include string.h class Bas int m; static int n; public: Bas(int i =0) n +; m =i; void show() cout “n:“ n endl; ; Bas:n =0; class Der:public Bas
34、public: Der(int i=0):Bas(i) ; void main() Der d(3); d.show(); (分数:4.00)_正确答案:()解析:Bas:n=0; 静态数据成员需要在类外进行初始化,但这里格式不正确。应改为 int Bas:n=0; 。43.下面程序用于输出最小值,有一处错误。 #include iostream.h class Test int a, b; int getmin() return (ab? a:b); public: int c; void setValue( int x1, int x2, int x3 ) a =x1; b =x2; c
35、=x3; int GetMin(); ; int Test:GetMin() int d = getmin (); return (d=dc? d:c); void main() Test t1; t1.setValue(34,6,2); cout t1.getmin () endl; (分数:4.00)_正确答案:()解析:coutt1.getmin()endl; 成员函数 getmin()采用默认的访问权限即私有的,在外部无法访问。应改为 coutt1.GetMin()endl; 。44.下面程序的功能是生成具有 n个元素的动态数组。 #include iostream.h void ma
36、in() int n; cin n; int an; a0 =2; cout a0 endl; (分数:4.00)_正确答案:()解析:int an; 生成具有 n个元素的动态数组,要使用 new,所以 int an;错误。应改为 int *a=new intn;。45.#include iostream.h class Test int x, y; public: void fun(int i, int j) x=i; y=j; void show() cout “x = “ x; if(y) cout “, y = “ y endl; cout endl; ; void main() Te
37、st a; a.fun(1); a.show(); a.fun(2,4); a.show(); (分数:4.00)_正确答案:()解析:int i, int j 调用 fun函数时,既有一个参数,也有两个参数,且没有重载,所以 fun函数的参数需要带默认值。所以应改为 int i, int j=0(只要 j有一个 int类型的数据就行)。四、完成程序题(总题数:5,分数:20.00)46.下面程序实现将大写字母转换成小写字母的功能。 #include iostream.h void main() char a; _ cin a; if(_) a=a+i; cout a endl; (分数:4.
38、00)_正确答案:()解析:int i=32; a=“A“ public: f(T a =0, T b =0) x =a; y =b; void sum() s=x+y; T gets (); ; template class T _ return s; void main() _a(1.5,3.8); a.sum(); cout a.gets () endl; (分数:4.00)_正确答案:()解析:T fT:gets() fdouble48.下面程序用于输出三角形的面积,请在下横线处填上正确的语句。 #include iostream.h #include math.h void area
39、() double a, b, c; cout “Input a b c:“ ; _ if(a +b c _ cout “The area is:“ s endl; else cout “Error“ endl; void main() area(); (分数:4.00)_正确答案:()解析:cinabc; double s=sqrt(1*(1-a)*(1-b)*(1-c);49.#include iostream.h class Samp public: void Setij(int a, int b)i =a, j =b; Samp() cout “Destroying “ i endl; int GetMuti() return i * j; protected : int i; int j; ; int main() Samp * p; p = new Samp _ ; if( ! p) cout “ Allocation error/n“ ; return 1; for(int j =0; j 5; j + ) pjSetij(j, j); for(int k =0; k 5; k +) cout “Muti“ k “ is:“ pk._endl; _ return 0; (分数:4.00)_