自考C++试题及答案9套合集Word格式.docx
《自考C++试题及答案9套合集Word格式.docx》由会员分享,可在线阅读,更多相关《自考C++试题及答案9套合集Word格式.docx(28页珍藏版)》请在冰豆网上搜索。
binary)?
的功能是建立流对象f,试图打开文件TEMP.DAT并与之连接,并且()
A.若文件存在,将文件写指针定位于文件尾;
若文件不存在,建立一个新文件
B.若文件存在,将其置为空文件;
若文件不存在,打开失败
C.若文件存在,将文件写指针定位于文件首;
D.若文件存在,打开失败;
10.构造函数不具备的特征是()
A.构造函数的函数名与类名相同
B.构造函数可以重载
C.构造函数可以设置默认参数
D.构造函数必须指定类型说明
11.在公有继承的情况下,基类的公有或保护成员在派生类中的访问权限()
A.受限制
B.保持不变
C.受保护
D.不受保护
12.假定一个类的构造函数为A(intaa,intbb){a=aa--;
b=a*bb;
},则执行Ax(4,5);
语句后
,x.a和x.b的值分别为()
A.3和15
B.5和4
C.4和20
D.20和5
13.C++寸C语言做了很多改进,即从面向过程变成为面向对象的主要原因是()
A.增加了一些新的运算符
B.允许函数重载,并允许设置缺省参数
C.规定函数说明符必须用原型
D.引进了类和对象的概念
14.在类中说明的成员可以使用关键字的是()
A.public
B.extern
C.cpu
D.register
15.C++语言中所有在函数中定义的变量,连同形式参数,都属于()
A.全局变量
B.局部变量
C.静态变量
D.函数
16.在私有继承的情况下,基类成员在派生类中的访问权限()
17.使用地址作为实参传给形参,下列说法正确的是()
A.实参是形参的备份
B.实参与形参无联系
C.形参是实参的备份
D.实参与形参是同一对象
18.C++勺继承性允许派生类继承基类的()
A.部分特性,并允许增加新的特性或重定义基类的特性
B.部分特性,但不允许增加新的特性或重定义基类的特性
C.所有特性,并允许增加新的特性或重定义基类的特性
D.所有特性,但不允许增加新的特性或重定义基类的特性
19.对于int*pa[5];
的描述,正确的是()
A.pa是一个指向数组的指针,所指向的数组是5个int型元素
B.pa是一个指向某个数组中第5个元素的指针,该元素是int型变量
C.pa[5]表示某个数组的第5个元素的值
D.pa是一个具有5个元素的指针数组,每个元素是一个int型指针
20.以下基类中的成员函数表示纯虚函数的是()
A.virtualvoidtt()=0
B.voidtt(int)=0
C.virtualvoidtt(int)
D.virtualvoidtt(int){}
二、填空题(本大题共20小题,每小题1分,共20分)请在每小题的空格中填上正确答案。
错填、不填均无分。
1.单目运算符作为类成员函数重载时,形参个数为__0_个。
2.抽象类中至少要有一个_纯虚__函数。
3.设类A有成员函数voidf(void);
若要定义一个指向类成员函数的指针变量pf来指向f,该
指针变量的声明语句是:
_void(A:
*pf)(void);
__。
4.执行下列程序
doublea=3.1415926,b=3.14;
cout<
<
setprecision(5)<
a<
"
"
b<
endl;
程序的输出结果是3.1416,3.14___。
5.vector类中用于删除向量中的所有对象的方法是___。
6.重载的运算符保持其原有的_操作数__、优先级和结合性不变。
7.编译时的多态性通过_重载__函数实现。
8.基类的公有成员在派生类中的访问权限由_继承方式__决定。
9.假设类X的对象x是类Y的成员对象,贝丫Obj”语句执行时,先调用类_X__的构造函数。
10.下列程序段的输出结果是___。
11.下列程序段的输出结果是___。
12.C++中ostream的直接基类」os__。
13.intn=0;
while(n=1)n++;
while循环执行次数是_无限次__。
14.C++中有两种继承:
单继承和_多重继承_。
15.在C++中,利用向量类模板定义一个具有10个int的向量A,其元素均被置为1,实现此操作的语句是___。
16.vector类中向向量尾部插入一个对象的方法是___。
17.C++语言中如果调用函数时,需要改变实参或者返回多个值,应该采取弓I用___方式。
18.若函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的_声明__语句。
19.在C++中有两种参数传递方式:
传值和—引用_。
20.将指向对象的弓用作为函数的形参,形参是对象的弓用,实参是_对象名__。
三、改错题(本大题共5小题,每小题4分,共20分)
1.classABC
{inta;
public:
ABC(intaa)a(aa){}ABC(intaa):
a(aa){};
};
2.#include<
iostream.h>
classAton
{intX,Y;
protected:
intzx,zy;
voidinit(inti,intj){zx=i;
zy=j;
}
Aton(inti,intj,intn=0,intm=0){X=i,Y=j,zx=m,zy=n;
添加inlineintX(){returnX};
voidmain()
{AtonA(25,20,3,5);
A.init(5,9);
A.X()<
3.#include<
classBas
{public:
~Bas(){cout<
Basconstruct"
virtualvoidf()=0;
classDev:
publicBas
~Dev(){cout<
}virtualvoidf(){cout<
Dev:
f"
{Bas*a=newBas();
Bas*a;
Devp;
a=&
p;
a->
f();
4.以下程序实现交换a,b变量的值,请用下横线标出错误所在行并给出修改意见#include<
voidswap(int&
a,int&
b)
{a=a+b;
b=a-b;
a=a-b;
{inta=19,b=15;
cout<
a="
b="
swap(&
a,&
b);
swap(a,b);
5.#include<
voidmain()
{inti(3),j(8);
int*constp=&
i;
int*p=&
*p<
p=&
j;
四、完成程序题(本大题共5小题,每小题4分,共20分)
1.在下面程序横线处填上适当内容,使程序执行结果为:
"
hello,andylin"
#include<
iostream>
#include<
string.h>
usingnamespacestd;
classmystring
char*pdata;
mystring(intlen)
{pdata=newchar[len+1];
~mystring()
{deletepdata;
voidshow(){cout<
pdata<
voidfun(mystring**array,intlen){mystring*old=*array;
_*array=newmystring(len);
memcpy(*array,old,len);
{mystringstr(20);
mystring*pstr=&
str;
mystring**ppstr=&
pstr;
strcpy(str.pdata,"
hello,andylin"
);
fun(ppstr,20);
str.show();
2.在下面程序横线处填上适当字句,完成类的定义。
classline;
classbox
{private:
intcolor;
intupx,upy;
intlowx,lowy;
public:
friendintsame_color(linel,boxb);
voidset_color(intc){color=c;
}voiddefine_box(intx1,inty1,intx2,inty2){upx=x1;
upy=y1;
lowx=x2;
lowy=y2;
}};
classline
intstartx,starty;
intendx,endy;
friendintsame_color(linel,boxb);
voidset_color(intc){color=c;
}voiddefine_line(intx1,inty1,intx2,inty2)
{startx=x1;
starty=y1;
endx=x2;
endy=y2;
intsame_color(linel,boxb)
{if(l.color==b.color)return1;
return0;
3.下面程序用来求直角三角形斜边长度。
math.h>
classPoint{private:
doublex,y;
friendLine;
Point(doublei=0,doublej=0){x=i;
y=j;
Point(Point&
p)
{x=p.x;
y=p.y;
classLine
{private:
Pointp1,p2;
Line(Point&
xp1,Point&
xp2):
p1(xp1),p2(xp2){}
doubleGetLength();
doubleLine:
GetLength()
{doubledx=p2.x-p1.x;
doubledy=p2.y-p1.y;
returnsqrt(dx*dx+dy*dy);
{Pointp1,p2(6,8);
LineL1(p1,p2);
L1.GetLength()<
}
4.
40。
在下面程序的底画线处填上适当的字句,使该程序执行结果为#include<
classTest
{public:
staticintx_;
Test(inti=0){x=i+x;
}intGetnum(){returnTest:
x+7;
intTest:
x=33;
{Testtest;
test.Getnum()<
;
5.在下列程序的空格处填上适当的字句,使输出为:
0,2,10#include<
classMagic
{doublex;
Magic(doubled=0.00):
x(fabs(d))
{}
Magicoperator+(Magic&
c)
{
returnMagic(sqrt(x*x+c.x*c.x));
friendostream&
operator<
(ostream&
stream,Magic&
c)
{stream<
c.x;
returnstream;
{Magicma;
ma<
Magic
(2)<
ma+Magic(-6)+Magic(-8)<
五、程序分析题(本大题共2小题,每小题5分,共10分)
1.运行程序,写出程序执行的结果。
{inta,b,c;
charch;
cin>
>
a>
ch>
b»
c;
〃从键盘上输入1.5xcx10X20,x表示一个空格cout<
endl<
ch<
c<
1
5
2.给出下面程序输出结果。
classA
A()
{cout<
Ascons."
virtual~A()
Asdes."
virtualvoidf()
Asf()."
voidg()
{f();
classB:
publicA
B()
Bscons."
~B()
Bsdes."
classC:
publicB
C()
Cscons."
~C()
Csdes."
voidf()
Csf()."
{A*a=newC;
g();
deletea;
Ascons.
Asf().
Bscons.
Cscons.
Csf().
Csdes.
Bsdes.
Asdes.
六、程序设计题(本大题共1小题,共10分)
1.已知交通工具类定义如下。
要求:
(1)实现这个类;
(2)定义并实现一个小车类car,是它的公有派生类,小车本身的私有属性有载人数,小车的函数有init(设置车轮数,重量和载人数),getpassenger(获取载人数),print(打印车轮数,重量和载人数)。
classvehicle
{protected:
intwheels;
//车轮数
floatweight;
//重量
voidinit(intwheels,floatweight);
intget_wheels();
floatget_weight();
voidprint();
voidvehicle:
init(intwheels,floatweight)
{this->
wheels=wheels;
this->
weight=weight;
wheels<
intvehicle:
get_wheels()
{returnwheels;
floatvehicle:
get_weight()
{returnweight;
print()
车轮数:
"
重量:
weight<
2009年全国自考C++程序设计模拟试卷(四)
一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
1.当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中()
A.都是虚函数
B.只有被重新说明时才是虚函数
C.只有被重新说明为virtual时才是虚函数
D.都不是虚函数
3.函数调用func((exp1,exp2),(exp3,exp4,exp5))中所含实参的个数为()
A.1
B.2
C.4
D.5
4.设有函数模板
template<
classQ>
QSum(Qx,Qy){return(x)+(y);
则下列语句中对该函数模板错误的使用是()
A.Sum(10,2);
B.Sum(5.0,6.7);
C.Sum(15.2f,16.0f);
D.Sum(“AB”,”CD”);
5.类B是类A的公有派生类,类A和类B中都定义了虚函数func(),p是一个指向类A对象的指针,贝Up->
A:
func()将()
A.调用类A中的函数func()
B.调用类B中的函数func()
C.根据p所指的对象类型而确定调用类A中或类B中的函数func()
D.既调用类A中函数,也调用类B中的函数
6.在面向对象的程序设计中,首先在问题域中识别出若干个()
A.函数
B.类
C.文件
D.过程
7.已知fl和f2是同一类的两个成员函数,但fl不能直接调用f2,这说明()
A.f1和f2都是静态函数
B.fl不是静态函数,f2是静态函数
C.fl是静态函数,f2不是静态函数
D.fl和f2都不是静态函数
8.下列有关模板和继承的叙述正确的是()
A.模板和继承都可以派生出一个类系
B.从类系的成员看,模板类系的成员比继承类系的成员较为稳定
C.从动态性能看,继承类系比模板类系具有更多的动态特性
D.相同类模板的不同实例一般没有联系,而派生类各种类之间有兄弟父子等关系
9.有关C++编译指令,以下叙述正确的是()
A.C++每行可以写多条编译指令
B.#include指令中的文件名可含有路径信息
C.C++的编译指令可以以#或〃开始
D.C++中不管#if后的常量表达式是否为真,该部分都需要编译
10.在C++中不返回任何类型的函数应该说明为()
A.int
B.char
C.void
D.double
11.若Sample类中的一个成员函数说明如下:
voidset(Sample&
a),则Sample&
a的含义是()
A.指向类Sample的名为a的指针
B.a是类Sample的对象引用,用来作函数Set()的形参
C.将a的地址赋给变量Set
D.变量Sample与a按位与的结果作为函数Set的参数
12.下列关于静态数据成员的描述中正确的是()
A.静态数据成员是类的所有对象所共有的
B.静态数据成员要在构造函数内初始化
C.类的每个对象有自己的静态数据成员
D.静态数据成员不能通过类的对象调用
13.在编译指令中,宏定义使用哪个指令()
A.#if
B.#include
C.#define
D.#error
14.类的析构函数是对一个对象进行以下哪种操作时自动调用的是()
A.建立
B.撤销
C.赋值
D.引用
15.关于new运算符的下列描述中,错误的是()
A.它可以用来动态创建对象和对象数组
B.使用它创建的对象或对象数组可以使用运算符delete删除
C.使用它创建对象时要调用构造函数
D.使用它创建对象数组时必须指定初始值
16.如果类A被说明成类B的友元,则()
A.类B不一定是类A的友元
B.类B的成员即类A的成员
C.类A的成员即类B的成员
D.类A的成员函数不得访问类B的成员
17.假定一个类的构造函数为A(intaa,intbb){a=aa++;
b=a*++bb;
},则执行Ax(4,5);
语句后,x.a和x.b的值分别为()
A.4和5
B.4和20
C.4和24
18.下列运算符中,在C++语言中不能重载的是()
A.*
B.>
=
C.:
:
D./
19.C++语言建立类族是通过()
A.类的嵌套
B.类的继承
C.虚函数
D.抽象类
20.在C++语言中,数据封装要解决的问题是()
A.数据的规范化
B.便于数据转换
C.避免数据丢失
D.防止不同模块之间数据的非法访问
二、填空题(本大题共20小题,每小题1