C++程序设计自考题2.docx
《C++程序设计自考题2.docx》由会员分享,可在线阅读,更多相关《C++程序设计自考题2.docx(24页珍藏版)》请在冰点文库上搜索。
C++程序设计自考题2
C++程序设计自考题-2
(总分:
100.00,做题时间:
90分钟)
一、单项选择题(总题数:
20,分数:
20.00)
1.在下列成对的表达式中,运算结果类型相同的一对是()
A.7.0/2.0和7.0/2B.5/2.0和5/2
C.7.0/2和7/2D.8/2和6.0/2.0
(分数:
1.00)
A. √
B.
C.
D.
解析:
2.所谓数据封装就是将一组数据和与这组数据有关的操作组装在一起,形成一个实体,这实体也就是()
A.类B.对象
C.函数体D.数据块
(分数:
1.00)
A. √
B.
C.
D.
解析:
[解析]本题主要考查的知识点为类的概念。
[要点透析]类即数据和操作的组合体,数据是类的静态特征,操作是类具有的动作。
3.面向对象程序设计语言必须具备的关键要素是()
A.抽象和封装B.抽象和多态性
C.抽象、封装、继承和多态性D.抽象、封装和继承性
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]本题主要考查的知识点为面向对象程序设计的基本特征。
[要点透析]面向对象有四个基本特征。
抽象:
是对对象的特征的描述;封装:
数据的安全;继承:
类的扩充;多态性:
统一接口。
4.C++中分配动态存储空间,使用的关键字为()
A.freeB.create
C.deleteD.new
(分数:
1.00)
A.
B.
C.
D. √
解析:
5.intFunc(int,int);不可与下列哪个函数构成重载()
A.intFunc(int,int,int);B.doubleFunc(int,int);
C.doubleFunc(double,double);D.doubleFunc(int,double);
(分数:
1.00)
A.
B. √
C.
D.
解析:
[解析]主要考查的知识点为函数重载。
[要点透析]不能以形参名来区分函数;不能以函数返回值来区分函数。
必须是形参的个数或者类型不同才能构成函数重载。
6.C++允许在结构中定义函数,这些函数称为()
A.静态函数B.构造函数
C.析构函数D.成员函数
(分数:
1.00)
A.
B.
C.
D. √
解析:
7.下列哪种默认参数的声明是不正确的()
A.intmax(inta,intb,intc,intd=0);B.intmax(inta,intb,intc=0,intd=0);
C.intmax(inta=0,intb,intc=0,intd=0);D.intmax(inta,intb=0,intc=0,intd=0);
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]本题主要考查的知识点为默认参数。
[要点透析]如果一个函数中有多个参数,则默认参数应从右至左逐个定义。
C项中参数a设置了默认值,则其右边的参数b、c、d都应设置默认值。
C项错误。
8.设函数voidsubone(int&)将形参减1,如有整型变量intk=10,则执行subone(k);后,k的值为()
A.9B.10
C.11D.未知
(分数:
1.00)
A. √
B.
C.
D.
解析:
[解析]主要考查的知识点为引用作为函数参数。
[要点透析]引用作为函数参数时,形参与实参表示同一变量,所以改变形参的值时,实参的值也被改变。
9.设有函数模板
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");
(分数:
1.00)
A.
B.
C.
D. √
解析:
[解析]本题主要考查的知识点为函数模板。
[要点透析]由QSum(Qx,Qy)可知形参和函数返回值都是同一种数据类型。
A、B、C三项都正确。
而D项用字符串作为实参,字符串的操作与数值类型不同,要用特殊方法进行字符串的连接和运算。
10.下列说法中正确的是()
A.类定义中只能说明成员函数的函数头,不能定义函数体
B.类中的成员函数可以在类体中定义,也可以在类体之外定义
C.类中的成员函数在类体之外定义时必须要与类声明在同一文件中
D.在类体之外定义的成员函数不能操作该类的私有数据成员
(分数:
1.00)
A.
B. √
C.
D.
解析:
11.假定一个类的构造函数为“A(inti=4,intj=0)a=i;b=j;”,则执行“Ax
(1);”语句后,x.a和x.b的值分别为()
A.1和0B.1和4
C.4和0D.4和1
(分数:
1.00)
A. √
B.
C.
D.
解析:
12.类的构造函数被自动调用执行的情况是在定义该类的()
A.成员函数时B.数据成员时
C.对象时D.友元函数时
(分数:
1.00)
A.
B.
C. √
D.
解析:
[解析]本题主要考查的知识点为构造函数的调用。
[要点透析]创建对象时,系统自动调用构造函数初始化对象。
而成员函数、友元函数需要用户直接调用。
本题选C。
13.一个类拥有多个构造函数,则这些构造函数间为()
A.重载关系B.重复关系
C.拷贝关系D.无关系
(分数:
1.00)
A. √
B.
C.
D.
解析:
14.包含哪种语句的函数不能声明为内联函数()
A.变量定义B.if……else
C.位操作D.switch
(分数:
1.00)
A.
B.
C.
D. √
解析:
[解析]主要考查的知识点为内联函数。
[要点透析]C++中,含有循环语句、switch语句的函数不能说明为内联函数。
15.若公有派生类的成员函数不能直接访问基类中继承来的某个成员,则该成员一定是基类中的()
A.私有成员B.公有成员
C.保护成员D.保护成员或私有成员
(分数:
1.00)
A. √
B.
C.
D.
解析:
[解析]本题主要考查的知识点为基类私有成员在派生类中的访问权限。
[要点透析]基类的私有成员在派生类中是隐藏的,只能在基类内部访问。
16.类B是类A的公有派生类,类A和类B中都定义了虚函数func(),p是一个指向类A对象的指针,则p->A:
:
func()将()
A.调用类A中的函数func()
B.调用类B中的函数func()
C.根据p所指的对象类型而确定调用类A中或类B中的函数func()
D.既调用类A中函数,也调用类B中的函数
(分数:
1.00)
A. √
B.
C.
D.
解析:
17.下列不具有访问权限属性的是()
A.非类成员B.类成员
C.数据成员D.成员函数
(分数:
1.00)
A. √
B.
C.
D.
解析:
[解析]本题主要考查的知识点为访问权限。
[要点透析]类成员包括成员函数和数据成员,都可以使用访问权限public、private和protected来修饰,而普通的变量不能使用访问权限来说明。
18.在类定义中private、protected、public关键词出现的次数为()
A.任意多次B.至多一次
C.public至少出现一次D.至少一次
(分数:
1.00)
A. √
B.
C.
D.
解析:
[解析]本题主要考查的知识点为类成员的访问权限。
[要点透析]访问权限可以反复使用,只不过经常把同一种访问权限的成员放在一起。
19.如果表达式y*x++中,“*”是作为成员函数重载的运算符,“++”是作为友元函数重载的运算符,采用运算符函数调用格式时,该表达式应表示为()
A.x.operator++(0).operator*(y)B.operator*(x.operator++(0),y)
C.y.operator*(operator++(x,0))D.operator*(operator++(x,0),y)
(分数:
1.00)
A.
B.
C. √
D.
解析:
20.设类Test中存在成员staticintx;,则下列哪种初始化方式是正确的()
A.Test:
:
intx=25;B.intx=25;
C.intTest:
:
x=25;D.intTestx=25;
(分数:
1.00)
A.
B.
C. √
D.
解析:
二、填空题(总题数:
20,分数:
20.00)
21.在C++语言的面向对象设计框架中,1是程序的基本组成单元。
(分数:
1.00)
填空项1:
__________________ (正确答案:
类)
解析:
22.表达式cout<<hex还可表示为1。
(分数:
1.00)
填空项1:
__________________ (正确答案:
cout<<setioflags(ios:
:
hex))
解析:
23.若要访问指针变量p所指向的数据,应使用表达式1。
(分数:
1.00)
填空项1:
__________________ (正确答案:
*p)
解析:
24.如果使用数组名作为函数参数,形实结合时,传递的是1。
(分数:
1.00)
填空项1:
__________________ (正确答案:
首地址)
解析:
25.在类中,1成员为类的所有对象所共享。
(分数:
1.00)
填空项1:
__________________ (正确答案:
类的静态)
解析:
26.假定用户没有给一个名为AB的类定义构造函数,则系统自动给出的缺省构造函数定义为1。
(分数:
1.00)
填空项1:
__________________ (正确答案:
AB---|||________|||---)
解析:
27.函数模板中紧随template之后尖括号内的类型参数都要冠以保留字1。
(分数:
1.00)
填空项1:
__________________ (正确答案:
class)
解析:
28.在用C++进行程序设计时,最好用1代替malloc。
(分数:
1.00)
填空项1:
__________________ (正确答案:
new)
解析:
29.在C++中,访问指针所指向的对象的成员使用1运算符。
(分数:
1.00)
填空项1:
__________________ (正确答案:
->)
解析:
30.友元函数可以存取类的私有成员、公有成员和1。
(分数:
1.00)
填空项1:
__________________ (正确答案:
保护成员)
解析:
31.由const修饰的对象称为1。
(分数:
1.00)
填空项1:
__________________ (正确答案:
常对象)
解析:
32.通过C++语言中的1机制,可以从现存类中构建其子类。
(分数:
1.00)
填空项1:
__________________ (正确答案:
继承)
解析:
33.在派生类中实现基类成员的初始化,需要由派生类的构造函数调用1来完成。
(分数:
1.00)
填空项1:
__________________ (正确答案:
初始化列表)
解析:
34.静态成员函数是1的成员,不是对象的成员。
(分数:
1.00)
填空项1:
__________________ (正确答案:
类)
解析:
35.类的私有成员只能被它的成员函数和1访问。
(分数:
1.00)
填空项1:
__________________ (正确答案:
友元)
解析:
36.与操作对象的数据类型相互独立的算法称为1。
(分数:
1.00)
填空项1:
__________________ (正确答案:
泛型算法)
解析:
37.C++重载“=”运算符的函数名是1。
(分数:
1.00)
填空项1:
__________________ (正确答案:
operator=)
解析:
38.1是istream类的对象,用于处理标准输入,即键盘输入。
(分数:
1.00)
填空项1:
__________________ (正确答案:
cin)
解析:
39.UML中实例连接反映对象之间的静态关系,消息连接描述对象之间的1关系。
(分数:
1.00)
填空项1:
__________________ (正确答案:
动态)
解析:
40.运算符“+”允许重载为类的成员函数,或者非成员函数。
若用operator+(c1,c2)这样的表达式来使用运算符“+”,应将“+”重载为1函数。
(分数:
1.00)
填空项1:
__________________ (正确答案:
非成员)
解析:
三、改错题(总题数:
5,分数:
20.00)
41.classABC
inta;
public:
ABC(intaa)a(aa)
;
(分数:
4.00)
填空项1:
__________________ (正确答案:
ABC(intaa)a(aa){}初始化列表格式错误。
应改为ABC(intaa):
a(aa){}。
)
解析:
42.下面程序通过调用函数模板实现计算两个正整数的最大公约数,把main函数中的错误找出并改正过来。
#include<iostream.h>
template<classT>
Tgcd(Tx,Ty)
while(x!
=y)
if(x>y)x-=y;
elsey-=x;
returnx;
voidmain()
inta;
doubled;
cin>>a>>d:
cout<<gcd(a,d)<<endl;
(分数:
4.00)
填空项1:
__________________ (正确答案:
gcd(a,d)因为a,d两个变量类型不同,而函数模板只有一个参数T,所以出错。
修改时一是修改函数模板,二是调用时使类型一致,可以使用强制转换。
应改为gcd((double)a,d)或gcd(a,(int)d)。
)
解析:
43.#include<iostream.h>
classA
public:
voidA()
constintf5()constreturn5;
intObj()return45;
intval;
intf8();
;
intA:
:
f8()returnval;
voidmain()
constAs;
inti=s.f5();
cout<<"Value="<<i<<endl:
(分数:
4.00)
填空项1:
__________________ (正确答案:
voidA(){}构造函数没有函数类型。
应改为A(){}。
)
解析:
44.#include<iostream.h>
classshape
public:
virtualintarea()return0;
;
classrectangle:
publicshape
public:
inta,b;
voidsetLength(intx,inty)a=x;b=y;
intarea()returna*b;
;
voidmain()
rectangler;
r.setLength(3,5);
shapes1,*s2=r;
cout<<r.area()<<endl;
s2=s1;
cout<<s2.area()<<endl;
(分数:
4.00)
填空项1:
__________________ (正确答案:
shapes1,*s2=r;指针,使用错误。
s是指针,使用它指向对象的成员有两种方法,有下面两行可知,使用的是引用。
应改为shapes1,&s2=r;。
)
解析:
45.#include<iostream.h>
classAton
intX,Y;
protected:
intzx,zy;
public:
voidinit(inti,intj)zx=i;zy=j;
Aton(inti,intj,intn=0,intm=0)
X=i,Y=j,zx=m,zy=n;
:
voidmain()
AtonA(25,20,3,5);
A.init(5,9);
cout<<A.X<<endl:
(分数:
4.00)
填空项1:
__________________ (正确答案:
intX,Y;因为X,Y都是私有的,在类外无法直接访问。
应改为public:
intX,Y;。
)
解析:
四、完成程序题(总题数:
5,分数:
20.00)
46.在下面程序的横线处填上适当内容,使程序执行结果为:
"hello,andylin"。
#include<iostream>
#include<string.h>
usingnamespacestd;
classmystring
public:
char*pdata;
mystring(intlen)
pdata=newchar[len+1];
~mystring()
deletepdata;
voidshow()cout<<pdata<<endl;
;
voidfun(mystring**array,intlen)
mystring*old=*array;
______
memcpy(*array,old,len);
voidmain()
mystringstr(20);
mystring*pstr=&str;
mystring**ppstr=&pstr;
strcpy(str.pdata,"hello,andylin");
fun(ppstr,20);
______
(分数:
4.00)
__________________________________________________________________________________________
正确答案:
(*array=newmystring(len);
(**ppstr).show();或str.show();)
解析:
47.在下面程序横线处填上适当内容,使程序执行结果为:
200__100。
#include<iostream.h>
template<classT>
Tf(______)
if(______)
returnx+y;
else
returnx*y;
voidmain()
cout<<f(10,20)<<"__"<<f(45.5,54.5)<<endl;
(分数:
4.00)
__________________________________________________________________________________________
正确答案:
(Tx,Ty
sizeof(T)==8)
解析:
48.在下面程序的横线处填上适当内容,使程序执行结果为:
S=2
S=5
S=9
#include<iostream.h>
voidsum(inti)
staticints;
cout<<"s="<<s<<endl:
voidmain(void)
inti;
for(i=0;______)
sum(i);
(分数:
4.00)
__________________________________________________________________________________________
正确答案:
(s=s+i+2;
i<3;i++)
解析:
49.在下面程序的横线处填上适当内容,以使该程序执行结果为:
504342110
07.18.19.110.111.1
#include<iostream.h>
template<classT>
voidf(______)
______
for(inti=0;i<n/2;i++)
t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;
voidmain()
inta[5]=10,21,34,4,50;
doubled[6]=11.1,10.1,9.1,8.1,7.1;
f(a,5);f(d,6);
for(inti=0;i<5;i++)
cout<<a[i]<<…"";
cout<<endl;
for(i=0;i<6;i++)
cout<<d[i]<<"";
cout<<endl;
(分数:
4.00)
__________________________________________________________________________________________
正确答案:
(Ta[],intn
Tt=0)
解析:
50.在下面程序的横线处填上适当内容,完成类的定义。
classline;
classbox
private:
intcolor;
intupx,upy;
intlowx,lowy;
public:
______
voidset_color(intc)color=c;
voiddefine_box(intx1,inty1,intx2,inty2)
upx=x1;upy=y1;lowx=x2;lowy=y2;
;
classline
private:
intcolor;
intstartx,starty;
intendx,endy;
public:
friendintsame_color(linel,boxb);
voidset_color(intc)color=c;
voiddefine_line(______)
startx=x1;starry=y1;endx=x2;endy=y2;
;
intsame_color(linel,boxb)
if(l.color==b.color)return1;
return0;
(分数:
4.00)
__________________________________________________________________________________________
正确答案:
(friendintsame_color(linel,boxb);
intx1,inty1,intx2,inty2)
解析:
五、程序分析题(总题数:
2,分数:
10.00)
51.运行程序,写出程序执行的结果。
#include<io