1、C+程序设计自考题模拟 16 及答案解析(总分:100.00,做题时间:90 分钟)一、第部分 选择题(总题数:20,分数:20.00)1.有关 C+编译指令,以下叙述错误的是_(分数:1.00)A.C+每行可以只能写一条编译指令B.#include 指令中的文件名可含有路径信息C.C+的编译指令可以以“#”开始D.C+中不管 if 后的常量表达式是否为真,该部分都需要编译2.C+标准引入新的标准类库的头文件时,省略了“.h“,不过需要使用下列命名空间语句_(分数:1.00)A.“using namespace std;“B.“use namespace std;“C.“using names
2、pace std“D.“using namsespace;“3.函数调用 func(exp1,exp2),(exp3,exp4,exp5)中所含实参的个数为_(分数:1.00)A.1B.4C.2D.54.C+中用来取对象存储首地址的地址运算符是_(分数:1.00)A.中,cout 是_(分数:1.00)A.C+的关键字B.类名C.对象名D.函数名14.下列有关类模板的说法有误的是_(分数:1.00)A.在类体外面定义成员函数时,必须用 template 重写类模板声明,格式为:template模板参数B.类模板可以派生,方法和普通类一样C.类模板不可以继承D.初始化类模板时,只要传给它指定的数
3、据类型,编译器就用指定类型代替模板参数产生相应的模板类15.有关公有静态成员的访问方式,错误的是_(分数:1.00)A.类名:静态成员名B.对象名.静态成员名C.对象指针-静态成员名D.对象指针.静态成员名16.下列关于类的成员访问权限的说法错误的是_(分数:1.00)A.类的成员函数可以直接访问使用自己的类的私有成员B.类外面的函数不能访问类的数据成员、成员函数C.如果对象 A 和 B 的成员函数代码一样,则两个对象区别是属性的值D.类外面的函数可以通过类对象使用该类的公有成员函数17.flag=0 为 int 类型,关于循环 while(flag=1)的叙述中,正确的是_(分数:1.00)
4、A.循环控制条件为真B.循环控制条件为假C.循环控制表达式不合法D.以上说法都不对18.操控符 setprecision(int n),必须包含在以下哪个头文件中_(分数:1.00)A.iostreamB.fstreamC.ifstreamD.iomanip19.如果采用运算符函数调用格式重载“+“运算符,则可表示为_(分数:1.00)A.operator+()B.operator+(a)C.operator+(a,1)D.operator+(1,a)20.已知类 X,假设 Class Y: public X,即类 Y 是类 X 的派生类,则说明一个 Y 类的对象和删除 Y 类对象时,调用构造
5、函数和析构函数的次序分别为_(分数:1.00)A.X,Y;Y,XB.Y,X;X,YC.X,Y;X,YD.Y,X;Y,X二、第部分 非选择题(总题数:20,分数:20.00)21.C+语言的标准模板库 1 提供了与要操作的元素类型无关的算法。 (分数:1.00)22.在 C+程序设计中,函数分为库函数(标准函数)和 1 两类。 (分数:1.00)23.面向对象的程序设计具有抽象、封装、 1、多态性等关键要素。 (分数:1.00)24.对具有共同属性和行为的一类事物的抽象描述称为类,共同属性被描述为类中的数据成员,共同行为被描述为类中的 1。 (分数:1.00)25.C+输入/输出操控符中,含义是
6、输出一个换行符并刷新流的是 1。 (分数:1.00)26.声明指针变量 p,使其指向某数据,应使用表达式 1。 (分数:1.00)27.关键字 1 指示 C+编译器对调用虚函数进行动态联编。 (分数:1.00)28.已知类 My Class,若没有为其定义构造函数,则系统为其定义的默认构造函数形式为 1。 (分数:1.00)29. 1 是一种可视化建模语言,主要用于面向对象分析和建模。 (分数:1.00)30.UML 中实例连接反映对象之间的静态关系,消息连接描述对象之间的 1 关系。 (分数:1.00)31.只有产生类的 1,才能使用类的数据和成员函数。 (分数:1.00)32.在 C+程序
7、设计中,类中构造函数有 1 或多个,析构函数有 1 个。 (分数:1.00)33. 1(a,a+len,value)查找数组 a 的内容是否存在值为 value 的元素。 (分数:1.00)34.C+中语句 const char * const p=“hello“;所定义的指针 p 和它所指的内容都不能被 1。 (分数:1.00)35.不同的对象可以调用相同的名称的函数,但可导致完全不同的行为的现象称为 1。 (分数:1.00)36.下列语句的输出结果是 1。 cout.setf(ios:showpos); cout111.1endl; (分数:1.00)37.使用 1 作为函数参数,实参和形
8、参对象代表同一对象,所以改变形参对象的值就是改变实参对象的值。(分数:1.00)38.请将下列类定义补充完整。 class Base public: void fun() cout“Base:fun“endl; ; class Derived: public Base public: void fun() 1 /显式调用基类的 fun 函数 cout“Derived:fun“endl; (分数:1.00)39.this 指针始终指向调用成员函数的 1。 (分数:1.00)40.已知类 AB 在该类中含有一个指向动态数组空间的指针成员 pa,则在该类的析构函数中应该包含一条 1 语句。 (分数:
9、1.00)三、改错题(总题数:5,分数:20.00)41.修改程序中的错误,使其输出为 3,2。 #includeiostream using namespace std; void swap(int a, int b) int temp; temp=a; a=b; b=temp; void main 1 int a=2, b=3; swap(a, b); couta“, “bendl; (分数:4.00)42.#includeiostream #includestring using namespaee std; class A int m; static int n; public: A(
10、int i=0)n+; m=i; void show 1cout“n:“nendl; ; A:n=0; class D: public A public: D(int i=0):A(i) ; void main 2 D d(3); D.show 3; (分数:4.00)43.class Point private: int a(2), b(3); public: void setab(int a, int b) ; (分数:4.00)44.下面程序实现输出半径为 2.5 的圆的面积,但输出结果是 0,找出原因并提出修改意见。 #includeiostream using namespace s
11、td; class point private: float x, y; public: float area 1return 0.0; ; const float pi=3.14159f; class circle: public point private: float radius; public: void setRadius(float r)radius=r; float area 2return pi*radius*radius; ; void main 3 point *p; circle c; c.setRadius(2.5); p= cout“The area of circ
12、le is“p-area 4endl; (分数:4.00)45.下列是求 1000 之内的所有完数的程序。所谓完数,是指一个数恰好等于它的所有因子之和。例如,因为 6=1+2+3,所以 6 为完数。试改正程序中的错误。 【解答】 #includeiostream using namespace std; int main 1 int i, j, s; for(i=1; i=1000; i+) s=0; for(j=1; ji; j+) if(i%j=0) s=s+j; if(i=s) coutiendl; (分数:4.00)四、完成程序题(总题数:5,分数:20.00)46.完成下列程序填空,
13、使其输出结果为 1.23457e+002。 #includeiostream #includeiomanip using namespace std; int main() double x=123.456789; cout_xendl; (分数:4.00)_47.下列程序定义了实部为 real,虚部为 imag 的复数类 Complex,并在类中定义了“+、-”运算符操作,请将下列程序补充完整。 class Complex public: Complex(double r=0.0, double i=0.0)real=r; imag=i; Complex operator+(Complex)
14、; friend Complex operator-(Complex, Complex); private: double feal, imag ; Complex Complex:operator+(Complex c) return Complex( _ ); Complex operator-(Complex c1, Complex c2) return Complex( _ ); (分数:4.00)_48.下列程序在构造函数和析构函数中申请和释放类的数据成员 int*a,申请时使用形参 b 初始化 a,请填空。 class A public: A(int b); A(); privat
15、e: int *a; ; A:A(int b) _; A:A() _; (分数:4.00)_49.输出数组中的最大数。 #includeiostream using namespace std; void main() int A=34, 91, 83, 56, 29, 93, 56, 12, 88, 72; int index=0; int _/sizeof(*A); for(int i=1; in; i+) if(Aindexai) _ cout“A 数组最大数:“Aindexendl; (分数:4.00)_50.class Base public: void fun()cout“Base
16、 of fun“endl; ; class Derived: public Base void fun() _ /调用基类的成员函数 fun cout“Derived of fun“endl; ; (分数:4.00)_五、程序分析题(总题数:2,分数:10.00)51.给出以下程序的输出结果。 #includeiostream using namespce std; templateclass T class pair T value1, value2; public: pair(T first, T second) value1=first; value2=second; T getmax(
17、); ; templateclass T T pairT:getmax() T retval; retval=value1value2? value1:value2; return retval; void main() pairintmyobject(100, 75); coutmyobject.getmax()endl; (分数:5.00)_52.给出下面程序的输出结果。 #includeiostream using namespace std; class A int *a; public: A(int x=0):a(new int(x) A()delete a; int getA()r
18、eturn *a; void setA(int x)*a=x; ; void main() A x1, x2(3); A *p= (*p).setA(x2.getA()+5); x1.setA(10+x1.getA(); coutx1.getA()“ “x2.getA()endl; (分数:5.00)_六、程序设计题(总题数:1,分数:10.00)53.定义一个 rectangle 类,它包含两个数据成员 length 和 width 以及用于求长方形面积的成员函数。再定义 rectangle 的派生类 rectangular,它包含一个新数据成员 height 和用来求长方体体积的成员函数。
19、在 main 函数中,使用两个类,求某个长方形的面积和某个长方体的体积。 (分数:10.00)_C+程序设计自考题模拟 16 答案解析(总分:100.00,做题时间:90 分钟)一、第部分 选择题(总题数:20,分数:20.00)1.有关 C+编译指令,以下叙述错误的是_(分数:1.00)A.C+每行可以只能写一条编译指令B.#include 指令中的文件名可含有路径信息C.C+的编译指令可以以“#”开始D.C+中不管 if 后的常量表达式是否为真,该部分都需要编译 解析:考点 初识 C+的函数和对象 解析 C+每行只能写一条编译指令;所有预处理语句都以行首的符号“#”开始;#include
20、指令中的文件名可以包含库文件或者指定路径的文件,所以 D 有误。2.C+标准引入新的标准类库的头文件时,省略了“.h“,不过需要使用下列命名空间语句_(分数:1.00)A.“using namespace std;“ B.“use namespace std;“C.“using namespace std“D.“using namsespace;“解析:考点 使用命名空间 解析 新的 C+标准引入了新的标准类库的头文件载入方式,即省略了“.h”,不过同时必须使用命名空间语句“using namespace std;”。3.函数调用 func(exp1,exp2),(exp3,exp4,exp5
21、)中所含实参的个数为_(分数:1.00)A.1B.4C.2 D.5解析:考点 表达式的值作为函数参数 解析 (exp1,exp2)、(exp3,exp4,exp5)表示是两个逗号表达式,相当于两个参数,因此实参的个数是 2。4.C+中用来取对象存储首地址的地址运算符是_(分数:1.00)A.中,cout 是_(分数:1.00)A.C+的关键字 B.类名C.对象名D.函数名解析:考点 输入/输出对象 解析 C+中输入/输出流使用关键字 cin,cout。14.下列有关类模板的说法有误的是_(分数:1.00)A.在类体外面定义成员函数时,必须用 template 重写类模板声明,格式为:templ
22、ate模板参数B.类模板可以派生,方法和普通类一样C.类模板不可以继承 D.初始化类模板时,只要传给它指定的数据类型,编译器就用指定类型代替模板参数产生相应的模板类解析:考点 类模板的基础知识 解析 初始化类模板时,只要传给它指定的数据类型,编译器就用指定类型代替模板参数产生相应的模板类。在类体外面定义成员函数时,必须用 template 重写类模板声明,格式即:template模板参数;类模板可以派生与继承,方法和普通类一样。15.有关公有静态成员的访问方式,错误的是_(分数:1.00)A.类名:静态成员名B.对象名.静态成员名C.对象指针-静态成员名D.对象指针.静态成员名 解析:考点 类
23、和对象 解析 类对象的指针只可以通过“-”运算符访问对象的成员。16.下列关于类的成员访问权限的说法错误的是_(分数:1.00)A.类的成员函数可以直接访问使用自己的类的私有成员B.类外面的函数不能访问类的数据成员、成员函数 C.如果对象 A 和 B 的成员函数代码一样,则两个对象区别是属性的值D.类外面的函数可以通过类对象使用该类的公有成员函数解析:考点 使用类的对象 解析 类外面的函数不能直接访问类的私有成员,可以通过类对象使用该类的公有成员函数。17.flag=0 为 int 类型,关于循环 while(flag=1)的叙述中,正确的是_(分数:1.00)A.循环控制条件为真 B.循环控
24、制条件为假C.循环控制表达式不合法D.以上说法都不对解析:考点 C+循环结构 解析 flag 赋值为 1,所以循环条件为真。18.操控符 setprecision(int n),必须包含在以下哪个头文件中_(分数:1.00)A.iostreamB.fstreamC.ifstreamD.iomanip 解析:考点 C+数据的简单输入/输出格式 解析 setpreclsion(int n)是带形式参数的操控符,定义在iomanip中。19.如果采用运算符函数调用格式重载“+“运算符,则可表示为_(分数:1.00)A.operator+()B.operator+(a)C.operator+(a,1)
25、 D.operator+(1,a)解析:考点 运算符重载 解析 使用类运算符重载“+”重载参数有两个,所以答案选 C。20.已知类 X,假设 Class Y: public X,即类 Y 是类 X 的派生类,则说明一个 Y 类的对象和删除 Y 类对象时,调用构造函数和析构函数的次序分别为_(分数:1.00)A.X,Y;Y,X B.Y,X;X,YC.X,Y;X,YD.Y,X;Y,X解析:考点 构造函数和析构函数的调用顺序 解析 派生类构造函数必须对这三个成员进行初始化,其执行顺序为:调用基类构造函数;调用子对象的构造函数;执行派生类的构造函数体。析构函数在执行过程中也要对基类和成员对象进行操作,
26、但它的执行过程与构造函数正好相反,即对派生类新增的普通成员进行清理;调用成员对象析构函数,对派生类新增的成员对象进行清理;调用基类析构函数,对基类进行清理,所以选择 A 项。二、第部分 非选择题(总题数:20,分数:20.00)21.C+语言的标准模板库 1 提供了与要操作的元素类型无关的算法。 (分数:1.00)解析:STL 考点 C+语言面向过程对象的特点 解析 C+语言的标准模板库(STL)提供了与要操作的元素类型无关的算法。22.在 C+程序设计中,函数分为库函数(标准函数)和 1 两类。 (分数:1.00)解析:自定义函数 考点 C+函数 解析 C+函数分为库函数、用户自定义函数。2
27、3.面向对象的程序设计具有抽象、封装、 1、多态性等关键要素。 (分数:1.00)解析:继承 考点 面向对象程序设计的特点 解析 与传统的程序设计方法相比,面向对象的程序设计具有抽象、封装、继承、多态性等关键要素。24.对具有共同属性和行为的一类事物的抽象描述称为类,共同属性被描述为类中的数据成员,共同行为被描述为类中的 1。 (分数:1.00)解析:成员函数 考点 类和对象 解析 类不仅有数据,而且可以有对数据进行操作的函数,即成员函数。25.C+输入/输出操控符中,含义是输出一个换行符并刷新流的是 1。 (分数:1.00)解析:endl 考点 C+输入/输出操控符及其含义 解析 dec 设
28、置转换基数为十进制;oct 设置转换基数为八进制;hex 设置转换基数为十六进制;endl 输出一个换行符并刷新流;setw 设置输出数据字段宽度 width。26.声明指针变量 p,使其指向某数据,应使用表达式 1。 (分数:1.00)解析:*p 考点 指针变量 解析 定义指针变量,即*p。27.关键字 1 指示 C+编译器对调用虚函数进行动态联编。 (分数:1.00)解析:virtual 考点 虚函数实现多态性的条件 解析 关键字 virtual 指示 C+编译器对调用虚函数进行动态联编。28.已知类 My Class,若没有为其定义构造函数,则系统为其定义的默认构造函数形式为 1。 (分
29、数:1.00)解析:MyCLass(); 考点 构造函数 解析 C+编译器自动构建的不带参数的构造函数,形式如下: MyCLass();29. 1 是一种可视化建模语言,主要用于面向对象分析和建模。 (分数:1.00)解析:UML 考点 面向对象的标记图 解析 主要用于面向对象分析和建模的 UML 建模语言。30.UML 中实例连接反映对象之间的静态关系,消息连接描述对象之间的 1 关系。 (分数:1.00)解析:动态 考点 类和对象的 UML 标记图 解析 UML 中实例连接反应对象之间的静态关系,消息连接捕述对象之间的动态关系。31.只有产生类的 1,才能使用类的数据和成员函数。 (分数:
30、1.00)解析:对象 考点 使用类的对象 解析 只有产生一个对象,数据成员及成员函数才有意义。32.在 C+程序设计中,类中构造函数有 1 或多个,析构函数有 1 个。 (分数:1.00)解析:1 考点 解析 从函数重载角度分析,一个类也只能定义一个析构函数且不能指明参数,以便编译系统自动调用。33. 1(a,a+len,value)查找数组 a 的内容是否存在值为 value 的元素。 (分数:1.00)解析:find 考点 泛型算法应用于普通数组 解析 find(a,a+len,value)查找数组 a 的内容是否存在值为 value 的元素。34.C+中语句 const char * c
31、onst p=“hello“;所定义的指针 p 和它所指的内容都不能被 1。 (分数:1.00)解析:修改 考点 使用 const 保护数据 解析 用 const 修饰传递参数,意思是通知函数,它只能使用参数而无权修改它。35.不同的对象可以调用相同的名称的函数,但可导致完全不同的行为的现象称为 1。 (分数:1.00)解析:多态性 考点 多态性 解析 多态性是指不同的对象可以调用相同的名称的函数,但可导致完全不同的行为的现象。36.下列语句的输出结果是 1。 cout.setf(ios:showpos); cout111.1endl; (分数:1.00)解析:+111.1 考点 数据的简单输
32、入/输出格式 解析 ios:showpos 的含义是在正数前添加一个“+”号。37.使用 1 作为函数参数,实参和形参对象代表同一对象,所以改变形参对象的值就是改变实参对象的值。(分数:1.00)解析:引用 考点 引用作为函数参数 解析 使用“引用”作为函数参数,在函数调用时,实参对象名传给形参对象名,形参对象名就成为实参对象名的别名。实参和形参对象代表同一对象,所以改变形参对象的值就是改变实参对象的值。38.请将下列类定义补充完整。 class Base public: void fun() cout“Base:fun“endl; ; class Derived: public Base p
33、ublic: void fun() 1 /显式调用基类的 fun 函数 cout“Derived:fun“endl; (分数:1.00)解析:Base:fun() 考点 继承和派生 解析 派生类调用基类的成员函数,使用格式为:类名:标识符,类名可以是任一基类名,类标识符是该类中声明的任一成员名。39.this 指针始终指向调用成员函数的 1。 (分数:1.00)解析:对象 考点 this 指针 解析 C+编译器都认为是访问 this 指针所指向的对象中的成员。40.已知类 AB 在该类中含有一个指向动态数组空间的指针成员 pa,则在该类的析构函数中应该包含一条 1 语句。 (分数:1.00)解
34、析:delete pa; 考点 动态分配和释放内存 解析 使用 delete 释放动态数组空间。三、改错题(总题数:5,分数:20.00)41.修改程序中的错误,使其输出为 3,2。 #includeiostream using namespace std; void swap(int a, int b) int temp; temp=a; a=b; b=temp; void main 1 int a=2, b=3; swap(a, b); couta“, “bendl; (分数:4.00)解析:void swap(int a, int b)语句有误 考点 引用作为函数参数 解析 可以使用引用
35、作为函数参数,实参对象名传给形参对象名,实参对象和形参对象代表同一个对象,所以改变形参对象的值就是改变实参对象的值。42.#includeiostream #includestring using namespaee std; class A int m; static int n; public: A(int i=0)n+; m=i; void show 1cout“n:“nendl; ; A:n=0; class D: public A public: D(int i=0):A(i) ; void main 2 D d(3); D.show 3; (分数:4.00)解析:A:n=0; 语句
36、有误 考点 静态数据成员 解析 静态数据成员需要在类外进行初始化,但这里格式不正确,应该改为 int A:n=0;。43.class Point private: int a(2), b(3); public: void setab(int a, int b) ; (分数:4.00)解析:int a(2), b(3); 语句有误 考点 数据成员的赋值 解析 在类体内不允许对所定义的数据成员进行初始化。44.下面程序实现输出半径为 2.5 的圆的面积,但输出结果是 0,找出原因并提出修改意见。 #includeiostream using namespace std; class point p
37、rivate: float x, y; public: float area 1return 0.0; ; const float pi=3.14159f; class circle: public point private: float radius; public: void setRadius(float r)radius=r; float area 2return pi*radius*radius; ; void main 3 point *p; circle c; c.setRadius(2.5); p= cout“The area of circle is“p-area 4end
38、l; (分数:4.00)解析:float area -|_|-return 0.0语句有误 考点 纯虚函数 解析 如果不能在基类中为虚函数给出一个有意义的定义,这时需要将它说明为纯虚函数,将其定义留给派生类去做。所以应改为 virtual float area -|_|-=0; 。45.下列是求 1000 之内的所有完数的程序。所谓完数,是指一个数恰好等于它的所有因子之和。例如,因为 6=1+2+3,所以 6 为完数。试改正程序中的错误。 【解答】 #includeiostream using namespace std; int main 1 int i, j, s; for(i=1; i=
39、1000; i+) s=0; for(j=1; ji; j+) if(i%j=0) s=s+j; if(i=s) coutiendl; (分数:4.00)解析:if(i%j=0)语句有误 考点 程序的编辑、编译和运行的基本概念 解析 判定是否为完数,使用循环结构,则应该找出该数的因子,判断条件应为 i%j=0。四、完成程序题(总题数:5,分数:20.00)46.完成下列程序填空,使其输出结果为 1.23457e+002。 #includeiostream #includeiomanip using namespace std; int main() double x=123.456789; c
40、out_xendl; (分数:4.00)_正确答案:()解析:setprecision(5) 考点 数据的简单输入/输出格式 解析 操控符 setprecision(int n)的含义是设置浮点输出精度 n47.下列程序定义了实部为 real,虚部为 imag 的复数类 Complex,并在类中定义了“+、-”运算符操作,请将下列程序补充完整。 class Complex public: Complex(double r=0.0, double i=0.0)real=r; imag=i; Complex operator+(Complex); friend Complex operator-(
41、Complex, Complex); private: double feal, imag ; Complex Complex:operator+(Complex c) return Complex( _ ); Complex operator-(Complex c1, Complex c2) return Complex( _ ); (分数:4.00)_正确答案:()解析:(real+c.real, imag+c.imag) c1.real-c2.real, c1.imag-c2.imag 考点 运算符重载 解析 显式调用形式:obj1.operator+(OBJ obj2)成员函数 ope
42、rator+(OBJ obj1, OBJ obj2)-友元函数 “+”运算使用成员函数重载形式,“-”运算使用友元函数重载形式。48.下列程序在构造函数和析构函数中申请和释放类的数据成员 int*a,申请时使用形参 b 初始化 a,请填空。 class A public: A(int b); A(); private: int *a; ; A:A(int b) _; A:A() _; (分数:4.00)_正确答案:()解析:a=new int(b); delete a; 考点 构造函数和析构函数 解析 申请数据成员 int *a 的内存空间,使用 new 表达式,并将 b 初始化 a,即 a=
43、new int(b);。在析构函数中释放 a 内存空间,delete a;。49.输出数组中的最大数。 #includeiostream using namespace std; void main() int A=34, 91, 83, 56, 29, 93, 56, 12, 88, 72; int index=0; int _/sizeof(*A); for(int i=1; in; i+) if(Aindexai) _ cout“A 数组最大数:“Aindexendl; (分数:4.00)_正确答案:()解析:n=sizeof(A)index=i; 考点 泛型算法应用普通数组 解析 统计数组中包含元素的个数,可以使用数组的整个大小/数组元素的大小,即 n=sizeof(A)/sizeof(*A);。50.class Base public: void fun()cout“Base of fun“