自考C++程序设计2012年10月试题
自考C++程序设计2012年10月试题及答案解析
自考C++程序设计2012年10月试题及答案解析,该试卷为自考C++程序设计历年真题试卷,包含答案及详细解析。
一、单项选择题(本大题共20小题,每小题1分,共20分。)在每小题列出的备选项中只有一项是最符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均不得分。
1.使用下列哪一限定符可强制改变访问方式( )
A.const
B.short
C.long
D.signed
2.下列表达式,哪一是声明p为指向常量的指针( )
A.const int *p;
B.int* const p;
C.const int *const p;
D.int *p;
3.运算符:: 叫做( )
A.下标运算符
B.自增运算符
C.成员访问运算符
D.作用域运算符
4.如果为一个类定义了自己的构造函数,下列描述正确的是( )
A.系统不再提供默认构造函数,但提供其他构造函数
B.系统提供其他非默认构造函数
C.系统不再提供默认构造函数
D.系统仍提供默认构造函数
5.对于类中的成员,使用protected修饰,表明该成员的访问权限是( )
A.公有的
B.私有的
C.保护的
D.不可见的
6.类不是内存中的物理实体,只有当使用类产生对象时,才进行内存分配,这种对象建立的过程称为( )
A.程序化
B.结构化
C.过程化
D.实例化
7.下列关于类的权限描述错误的是( )
A.类本身的成员函数可以访问自己定义的任何成员
B.类的对象只能访问公有成员
C.普通函数只能通过对象访问类的公有成员
D.一个类不能包含另一个类的对象作为成员
8.在派生中,访问控制方式没有下列哪种( )
A.publish
B.public
C.protected
D.private
9.采用重载函数的目的是( )
A.实现共享
B.减少空间
C.提高速度
D.使用方便,提高可读性
10.设类A中包含若干其他类的对象作为成员,则在定义类A的构造函数时,应使用下列哪个符号将A:: A(参数表)与成员初始化列表隔开( )
A.,
B.;
C.:
D..
11.设存在数组a,其长度为Len,则下列哪个泛型算法用于对a进行升幂排序( )
A.reverse(a, a+Len);
B.sort(a, a+Len);
C.find(a, a+Len, value);
D.copy(a, a+Len, b);
12.函数int sum(int a=10, int b=15, int c=25);不可与下列哪个函数同时声明( )
A.int sum(int, int, int, int)
B.int sum(int, int, int)
C.int sum(double)
D.int sum(double, double, double);
13.对函数int saveName(char * first, char * sec=" ",char * thd=" ")下列调用方法不正确的是( )
A.int s=saveName("1","2","3");
B.int s=saveName("1","2");
C.int s=saveName("1");
D.int s=saveName("1",,"3");
14.下列哪个不是函数重载需要满足的条件( )
A.返回值类型不同
B.参数个数不同
C.参数个数相同时,参数类型不同
D.函数名相同
15.关于对象性质,下列描述错误的是( )
A.同一类对象之间不可相互赋值
B.可以使用对象数组
C.对象可以用作函数参数
D.一个对象可以用作另一个类的成员
16.可用作C++语言用户标识符的一组标识符是( )
A.void,define,+WORD
B.a3_b3,_123,YN
C.for,-abc,Case
D.2a,DO,sizeof
17.设函数int& index(int a,int i)返回数组a中下标为i的元素,如果在整型数组int array[ ]={1,2,3},在执行index(array, 1)+=3后,array中各元素值为( )
A.{4,2,3}
B.{1,5,3}
C.{1,2,6}
D.{4,5,6}
18.对指针动态分配空间用的关键字是( )
A.define
B.int
C.new
D.float
19.一个函数功能不太复杂,但要求被频繁调用,应选用( )
A.内联函数
B.重载函数
C.递归函数
D.嵌套函数
20.在int a=3, *p=&a; 中,*p的值是( )
A.变量a的地址值
B.无意义
C.变量p的地址值
D.3
二、填空题(本大题共20小题,每小题1分,共20分)请在每小题的空格中填上正确答案。错填、不填均无分。
11.默认参数是在_________中说明的,默认参数可以多于1个,但是必须放在参数序列的后部。
12.类所声明的内容用_________括起来,之间的内容称为类体。
13.执行代码double pi= 3.141592;cout﹤﹤pi; 程序的输出结果是_________。
14.在文件输入流类中,用于判断提取操作是否已达到文件尾的方法是_________。
15.常量成员包括常量数据成员,静态常数成员,和_________。
16.通过C++语言中的_________机制,可以从现存类中构建其子类。
17.如果一个函数直接或间接地调用自身,这样的调用称为_________调用。
18.使用C++编译器对C++源程序进行编译产生文件的扩展名是_________。
19.C++的类成员由数据成员和_________组成。
110.C++面向对象程序设计的特点为:抽象,封装,继承和_________。
111.C++标准库string类中用于在主串中检索所需字符串的成员函数是_________。
112.C++中函数参数有两种传递方式:传值和_________。
113.在删除一个动态对象时,将自动调用该动态对象所属类的_________函数。
114.在C++当中,类外的函数只能通过类的对象使用该类的_________。
115.简单成员函数是指声明中不含const,volatile,_________关键字的函数。
116.执行cout﹤﹤char("a"+2)﹤﹤endl; 后的显示结果为_________。
117.假定类A有一个公有属性的静态数据成员b,在类外不通过对象名访问b的写法是_________。
118.拷贝构造函数使用_________作为参数初始化创建中的对象。
119.一旦基类定义了虚函数,该基类的派生类中的_________也自动成为虚函数。
120.在C++类中,有一种类不能生成对象只能被继承,称之为_________。
三、改错题(本大题共5小题,每小题2分,共10分)
21.#include ﹤iostream.h﹥ template ﹤class T﹥ T minx(T x,T y){ if(x﹥y) x=y; return x; } void main( ) { int a; double d; cout﹤﹤minx(a,d)﹤﹤endl; }
22.#include﹤iostream.h﹥ class People{ public: void People( ){ } const int age( )const{return 15;} char * name( ){return"Green";} } ; void main( ) { const People s; int i=s.age( ); cout﹤﹤"age="﹤﹤i﹤endl; }
23.#include﹤iostream.h﹥ class A{ public: void show( ){cout﹤﹤"class A show"﹤﹤endl;} } ; class B{ public: void show( ){cout﹤﹤"class B show"﹤﹤endl;} } ; class C: public A,public B{ public: void print( ){cout﹤﹤"class C print"﹤﹤endl;} } ; void main( ){ C c; c.show( ); c.print( ); }
24.#include﹤iostream.h﹥ class Student{ int x=0,y=0; public: Student( ){ x=1; y=1; } Student(int a,int b){ x=a; y=b; } void get( ){ cout﹤﹤x﹤﹤" "﹤﹤y﹤﹤endl; } } ; int main( ){ Student student(5,6); student.get( ); }
25.#include ﹤iostream.h﹥ class Base{ public:virtual void fun( )=0; } ; class Test:public Base{ public:virtual void fun( ){cout﹤﹤"Test.fun="﹤﹤endl;} } ; void main( ){ Base a; Test *p; p=&a; }
四、完成程序题(本大题共5小题,每小题4分,共20分)
31.在下面程序横线处填上适当内容,使程序执行结果为:40:15 程序如下: #include ﹤iostream.h﹥ template ﹤class T﹥ T func(T x,T y){ if(sizeof(T)==8) return _________; else return _________; } void main( ){ cout ﹤﹤func(8, 5)﹤﹤":"﹤﹤func( 5.0, 10.0)﹤﹤endl; int d; cin ﹥﹥d; }
32.在下面程序横线处填上适当内容,使程序执行结果为: x=0,y=0 x=1,y=2 x=10,y=20 程序如下: #include ﹤iostream.h﹥ class Sample { int x, y; public: Sample( ){_________} Sample(_________){x=a;y=b;} void disp( ) { cout﹤﹤"x="﹤﹤x﹤﹤",y="﹤﹤y﹤﹤endl; } }; void main( ) { Sample s1, s2(1, 2), s3(10, 20); Sample *pa[3]={&s1, &s2, &s3}; for(int i=0;i﹤3;i++) pa[i]-﹥disp( ); }
33.在下面程序横线处填上适当内容,使程序执行结果为: n=30 程序如下: #include ﹤iostream.h﹥ template ﹤class T﹥ class Test { T n; public: Test( ){ } Test(T i){n=i;} Test﹤T﹥_________(const Test﹤T﹥&s) { static Test﹤T﹥temp; _________; return temp; } void disp( ){cout﹤﹤"n="﹤﹤n﹤﹤endl;} } ; void main( ) { Test ﹤int﹥t1(4),t2(5),t3; t3=t1+t2; t 3.disp( ); }
34.在下面程序横线处填上适当内容,使程序执行结果为: n=2,sum=2 n=3,sum=5 n=5,sum=10 程序如下: #include ﹤iostream.h﹥ class Test { int n; static int sum; public: Test(int x){n=x;} void add( ){_________;} void disp( ) { cout﹤﹤{"n="﹤﹤n﹤﹤",sum="﹤﹤sum﹤﹤endl; } } ; int _________=0; void main( ) { Test a(2),b(3),c(5); a.add( ); a.disp( ); b.add( ); b.disp( ); c.add( ); c.disp( ); }
35.在下面程序中的横线处填上适当内容,使程序完整 #include﹤iostream.h﹥ _________ class A { int i; public: int set(B&); int get( ){return i;} A(int x){i=x;} } ; class B { int i; public: B(int x){i=x;} _________ A; } ; int A:: set(B&b) { return i=b.i; } void main( ) { A a(1); B b(2); cout﹤﹤a.get( )﹤﹤","; a.set(b); cout﹤﹤a.get( )﹤﹤endl; }
五、程序分析题(本大题共2小题,每小题10分,共20分)
41.下面程序中A是抽象类,其输出是什么? #include ﹤iostream.h﹥ class A{ public: virtual void printMe( ){cout﹤﹤"This is class A printing. "﹤﹤endl;}; } ; class B: public A{ public: void printMe( ) {cout ﹤﹤ "This is class B printing. "﹤﹤endl;} } ; class C: public B{ public: void printMe( ) {cout ﹤﹤"This is class C printing. "﹤﹤endl;} } ; void print(A a) { a.printMe( ); } void main( ) { B b; C c; print(b); print(c); }
42.写出此程序的执行结果: #include ﹤iostream.h﹥ template﹤class T﹥ T func(T x,T y){ if(sizeof(T)==8) return x+y; else return x*y; } void main( ){ cout ﹤﹤func(8,5)﹤﹤":"﹤﹤func( 5.0, 10.0)﹤﹤endl; int d; cin﹥﹥d; }
六、程序设计题(本大题共1小题,共10分)
51.设计一个Bank类,实现银行某账号的资金往来账目管理,包括建账号、存入、取出等。解:Bank类包括私有数据成员top(当前账指针),date(日期),money(金额),rest(余额)和sum(累计余额)。有三个成员函数bankin( )(处理存入账),bankout( )(处理取出账)和disp( )(输出明细账)请完成函数的实现。 本题程序如下: #include ﹤stdio.h﹥ #include ﹤string.h﹥ #define Max 100 class Bank { int top; char date[Max][10]; //日期 int money[Max]; //金额 int rest[Max]; //余额 static int sum; //累计余额 public: Bank( ){top=0;} void bankin(char d[ ],int m){…} void bankout(char d[ ],int m){…} void disp( ){…}; } ;
