全国自考C++程序设计试题.docx
《全国自考C++程序设计试题.docx》由会员分享,可在线阅读,更多相关《全国自考C++程序设计试题.docx(12页珍藏版)》请在冰豆网上搜索。
全国自考C++程序设计试题
自学考试C++程序设计试题全国2010年10月自考
自学考试C++程序设计试题全国2010年10月自考
一、单项选择题(本大题共20小题,每小题1分,共20分)
在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1.C++中注释“∥”的有效范围是(A)
A.从“∥”开始到行尾
B.从“∥”开始到下一个“∥”
C.“∥”及其后一个字符
D.从“∥”开始到程序尾
2.假定MyClass为一个类,则该类的复制构造函数的声明语句为(C)
A.MyClass&(MyClassx);
B.MyClass(MyClassx);
C.MyClass(MyClass&x);
D.MyClass(MyClass*x);
3.下列选项不是C++关键字的是(D)
A.typedef
B.void
C.bool
D.inc
4.用于标识十进制常量的前缀或后缀是(A)
A.无前后缀
B.后缀L或l
C.前缀0
D.前缀0x
5.设intx=56;intr=x;若cout<<&x;显示0012FF7A,则cout<<&r;输出值为(D)
A.56
B.00l2FF7A
C.0012FF7B
D.未知
6.使用下列哪个流格式控制符可设置转换基数为八进制(B)
A.dec
B.oct
C.hex
D.endl
7.C++中是否允许在类结构中定义函数(B)
A.不允许
B.允许
C.仅允许定义构造函数
D.只不允许定义构造函数
8.设函数voidsubone(int&)将形参减1,如有整型变量intk=10,则执行subone(k);后,k的值为(A)
A.9
B.10
C.11
D.未知
9.对函数intmax(inta,intb=0,intc=0,intd=0,inte=0);下列调用方式正确的是(A)
A.intm=max(10,11,12,13,14);
B.intm=max(10,,12,13,14);
C.intm=max(10,1l,,13,14);
D.intm=max(10,11,12,,14);
10.类MyClass的定义如下:
classMyClass
{
public:
MyClass(){}
MyClass(inti){value=newint(i);}
int*value;
};
若要对value赋值,则下面语句正确的是(D)
A.MyClassmy;my.value=10;
B.MyClassmy;*my.value=10;
C.MyClassmy;my.*value=10;
D.MyClassmy(10);
11.包含哪种语句的函数不能声明为内联函数(D)
A.变量定义
B.if……else
C.位操作
D.switch
12.声明函数模板的关键字是(B)
A.inline
B.template
C.const
D.short
13.对于类中的成员,使用public修饰,表明该成员的访问权限是(A)
A.公有的
B.私有的
C.保护的
D.不可见的
14.一个类中是否可以允许一个无参数构造函数和一个全部都是默认参数的构造函数共存(A)
A.不允许
B.允许
C.无法确定
D.视构造函数的函数,可确定
15.析构函数的参数个数为(A)
A.0个
B.1个
C.至少1个
D.多于1个
16.非静态成员函数都会有一个隐含指针,它是(B)
A.self指针
B.this指针
C.current指针
D.one指针
17.下列访问公有静态成员的方式,错误的是(D)
A.类名:
:
静态成员名
B.对象名.静态成员名
C.对象指针->静态成员名
D.对象指针.静态成员名
18.声明友元使用下列哪个关键字(C)
A.class
B.const
C.friend
D.virtual
19.派生类继承了基类的(A)
A.所有成员
B.部分成员
C.数据成员
D.成员函数
20.基类private成员,通过public派生,其在派生类中为(D)
A.private
B.protected
C.public
D.不可访问
二、填空题(本大题共20小题,每小题1分,共20分)
请在每小题的空格中填上正确答案。
错填、不填均无分。
21.执行下列代码
doublepi=3.141592;
cout<(1)<程序的输出结果是___3______。
22.要使用STL库提供的对数组进行升幂排序算法,在源程序中需要包含的头文件是_________。
23.C++语言中动态回收内存的关键字是___delete______。
24.执行下列代码
intb=100;
cout<<”Oct:
”<程序的输出结果是___Oct:
144______。
25.C++语言中用于定义一个类的关键字是__class_______。
26.为了使用C++语言标准程序库提供的string类,在程序中必须使用的文件包含命令是__#include_______。
27.在程序中执行int*a=newint之后,若a为空指针,则表明_动态分配内存失败________。
28.C++函数中传递对象地址值是使用___对象指针______作为参数。
29.将指向对象的指针作为函数参数,形参是对象指针,实参是对象的__地址值_______。
30.C++函数有库函数(标准函数)和__用户自定义函数_______两类。
31.C++中通过__构造函数_______对类的对象进行初始化。
32.UML中实例连接反映对象之间的静态关系,消息连接描述对象之间的__动态_______关系。
33.若将一个对象说明为常对象,则通过该对象只能调用它的____常_____成员函数,不能调用其它成员函数。
34.静态成员函数是___类______的成员,不是对象的成员。
35.私有继承时,在派生类中基类的protected权限变为___private______。
36.若使用一个表达式的含义能解释为访问多个基类中的成员,则这种对基类成员的访问就是不确定的,称这种访问具有__二义性_______。
37.如果在类模板的定义中有一个静态数据成员,则在程序运行中会产生___多个______静态变量。
38.vector类中用于获取向量可以容纳最多对象的个数的方法是___max_size()______。
39.C++用于运算符重载的关键字是__operator_______。
40.含有__纯虚函数_________的类称为抽象类,它只能作为基类来使用。
三、改错题(本大题共5小题,每小题4分,共20分)
下面的每题中有一处错误,请用下横线标出错误所在行并给出修改意见
41.#include
classtestl{
private:
intx;
public:
testl(){x=2;}
voidset(inta){x=a;}
voidget(){cout<};
classtest2{
private:
intx;
public:
test2(){x=3;}
voidset(inta){x=a;}
voidget(){cout<};
classtest:
publictestl,publictest2{
private:
intx;
public:
voidset(inta){x=a;}
voidgettest(){cout<};
voidmain(){
testa;a.get();a.get()调用产生二义性。
修改:
a.test1:
:
get();或a.test2:
:
get();
}
42.#include
classtest{
private:
intx,y;
public:
voidtestl(inta,intb){x=a;y=b;}
intmax();
};
inttest:
max(){if(x>y)returnx;elsereturny;}作用域分辨符错。
修改:
inttest:
:
max(){if(x>y)returnx;elsereturny;}
voidmain(){
testa;
a.testl(1,3);
cout<}
43.#include
voidmain(){
intx=5;
constint*constp=&x;该语句说明指针指向的数据是常量,且该指针为常值指针,所以*p不能作为左值。
修改:
int*constp=&x;
●p=88;
cout<<*p<}
44.#include
classpoint
{
private:
floatx,y;
public:
f(floata,floatb){x=a;y=b;}
f(){x=O;y=O;}
voidgetx(){cout<voidgety(){cout<}类定义时应以;结束,而此处缺少;号。
修改:
在}后加;号
●classpointl
{private:
floatx,y;
public:
f(floata,floatb){x=a;y=b;}
f(){x=l;y=l;}
voidgetx(){cout<voidgety(){cout<};
main(){
pointa;
a.f();
a.getx();a.gety();
}
45.#include
voidmain(){
stringstrl("wearehere");str1对象隶属string类,需在程序中包含这个类的头文件。
修改:
在程序开头加上#include
cout<}
四、完成程序题(本大题共5小题,每题4分,共20分)
46.在下面程序的下划线处填上正确的数据类型,保证程序具有如下输出结果:
0
17
17,17,17
源程序如下:
#include
usingnamespacestd;
classbase
{
public:
____staticint__________num;
base(){}
};
intbase:
:
hum=0;
voidmain()
{
cout<:
num<______int___________*p=&base:
:
num;
*p=17;
cout<:
num<basea,b;
cout<<*p<<","<47.在下面横线处填上正确的内容,完成类的定义。
classBase
{
intx;
staticconstintb;
public:
Base(int,int);
constint&a;
};
__constintBase:
:
____________b=15;
Base:
:
Base(inti,intj):
_x(i),__a(j)________{}
48.完成下面程序中的show函数的定义,使其运行结果如下:
Inbase
Inderived
程序清单如下:
#include
usingnamespacestd;
classbase
{
pubhc:
virtualvoidprint()
{
cout<<"Inbase"<}
};
classderived:
publicbase
{
public:
voidprint(){cout<<"Inderived"<};
voidshow(base*pb,void(base:
:
*pf)())
{
__(pb->*pf)();______
}
voidmain()
{
baseb;
derivedd;
show(&b,base:
:
print);
show(&d,base:
:
print);
}
49.在下面程序的下划线处填上正确的语句。
#include
usingnamespacestd;
template
Tf(T&a,T&b,intn)
{
for(inti=0;ia[i]=a[i]+b[i];
returna;
}
voidmain()
{
inta[5]={1,2,3,4,5};
intb[5]={100,200,3,4,51},*p;
for(inti=0;i<2;i++)
p=_f(a,b,i);_______//调用函数f
for(;pcout<<__*p_______<}
50.下列程序将x,y,z按从小到大的顺序排列并将结果返回给实参,在横线处填入正确的内容。
template
voidorder(_T&x,T&y,T&z________)
{
___Ta______;
if(x>y){a=x;x=y;y=a;}
if(y>z){a=y;y=z;z=a;}
if(x>y){a=x;x=y;y=a;}
}
五、程序分析题(本大题共2小题,每小题5分,共10分)
51.给出下面程序的输出结果
#include
usingnamespacestd;
template
TF(Tx)
{
returnx>5;
}
voidmain()
{
inta=15;
cout<doubleb=-5.8976;
cout<cout<}
结果:
1
0
0
52.给出下面程序的输出结果
#include
usingnamespacestd;
classA
{
private:
intX,Y;
public:
A(intmyx,intmyy){X=myx;Y=myy;}
voidshow(){cout<<"X="<};
classB:
publicA
{
private:
intH,W;
public:
B(intmyx,intmyy,intmyh,intmyw):
A(myx,myy){H=myh;W=myw;}
voidshow(){cout<<"H="<};
voidmain()
{
Bd(1,2,3,4);
d.show();
}
结果:
H=3;W=4
六、程序设计题(本大题共1小题,共10分)
53.定义队列类模板queue(先进先出),队列的大小由使用者确定。
要求该类模板对外提供如下二种基本操作:
(1)insert(入队列)
(2)front(出队列),用数组来实现
#include
usingnamespacestd;
template
classqueue{
Tx[size];
intcurrent,front,rear;
public:
queue(){current=0;front=0;rear=0;}
....insert(....);
....front(....);
};
请写出两个函数的过程(如果需要形式参数,请给出形参类型和数量,以及返回值类型)
template
boolQueue:
:
insert(Queue&Q,Ta)
{
if(front==0&&rear==current-1)
returnfalse;
inti;
i=rear+1;
Q.x[i]=a;
returntrue;
}
//--------------出队
template
boolQueue:
:
front(Queue&Q)
{
if(current==0)//检测队列是否为空
returnfalse;
inti;
for(i=0;i {
Q.x[i]=Q.x[i+1];
}
returntrue;
} }