}
intSearch(intx);//从数组a的前n个元素中顺序查找值为x的元素,
//若查找成功则返回元素的下标,否则返回-1。
};
练习二
一.填空题
1.当类中一个字符指针成员指向具有n个字节的存储空间时,它所能存储字符串的最大长度为( )。
A.n B.n+1 C.n-1 D.n-2
2.对于一个类的构造函数,其函数名与类名( )。
A.完全相同 B.基本相同 C.不相同 D.无关系
3.对于一个类的析构函数,其函数名与类名( )。
A.完全相同 B.完全不同 C.只相差一个字符 D.无关系
4.类的构造函数是在定义该类的一个( )时被自动调用执行的。
A.成员函数 B.数据成员 C.对象 D.友元函数
5.类的析构函数是一个对象被( )时自动调用的。
A.建立 B.撤消 C.赋值 D.引用
6.一个类的构造函数通常被定义为该类的( )成员。
A.公用 B.保护 C.私有 D.友元
7.一个类的析构函数通常被定义为该类的( )成员。
A.私有 B.保护 C.公用 D.友元
8.假定AB为一个类,则执行“ABx;”语句时将自动调用该类的( )。
A.带参构造函数 B.无参构造函数 C.拷贝构造函数 D.赋值重载函数
9.假定AB为一个类,则执行“ABx(a,5);”语句时将自动调用该类的( )。
A.带参构造函数 B.无参构造函数 C.拷贝构造函数 D.赋值重载函数
10.假定AB为一个类,则执行“AB*s=newAB(a,5);”语句时得到的一个动态对象为_______。
A.s B.s->a C.s.a D.*s
11.假定AB为一个类,则执行“ABr1=r2;”语句时将自动调用该类的( )。
A.无参构造函数 B.带参构造函数 C.赋值重载函数 D.拷贝构造函数
12.若需要使类中的一个指针成员指向一块动态存储空间,则通常在( )函数中完成。
A.析构 B.构造 C.任一成员 D.友元
13.当类中的一个整型指针成员指向一块具有n*sizeof(int)大小的存储空间时,它最多能够存储( )个整数。
A.n B.n+1 C.n-1 D.1
14.假定一个类的构造函数为“A(intaa,intbb){a=aa;b=aa*bb;}”,则执行“A x(4,5);”语句后,x.a和x.b的值分别为( )。
A.4和5 B.5和4 C.4和20 D.20和5
15.假定一个类的构造函数为“A(intaa=1,intbb=0){a=aa;b=bb;}”,则执行“Ax(4);”语句后,x.a和x.b的值分别为( )。
A.1和0 B.1和4 C.4和1 D.4和0
16.假定AB为一个类,则( )为该类的拷贝构造函数的原型说明。
A.AB(ABx); B.AB(AB&x); C.voidAB(AB&x); D.AB(intx);
17.假定一个类的构造函数为“B(intax,intbx):
a(ax),b(bx){}”,执行“Bx(1,2),y(3,4);x=y;”语句序列后x.a的值为( )。
A.1 B.2 C.3 D.4
18.假定一个类AB只含有一个整型数据成员a,当用户不定义任何构造函数时,系统为该类定义的无参构造函数为( )。
A.AB(){a=0;} B.AB(intaa=0):
a(aa){}
C.AB(intaa):
a(aa){} D.AB(){}
19.假定一个类AB只含有一个整型数据成员a,用户为该类定义的带参构造函数可以为( )。
A.AB(){} B.AB():
a(0){}
C.AB(intaa=0){a=aa;} D.AB(intaa){}
20.对于任一个类,用户所能定义的构造函数的个数至多为( )。
A.0 B.1 C.2 D.任意个
二.程序填充题
1.已知一个类的定义如下:
#include
classAA{
inta[10];
intn;
public:
voidSetA(intaa[],intnn);//用数组aa初始化数据成员a,用nn初始化数据成员n
intMaxA();//从数组a中前n个元素中查找最大值
voidSortA();//采用选择排序的方法对数组a中前n个元素,进行从小到大排序
voidInsertA();//采用插入排序的方法对数组a中前n个元素进行从小到大排序
voidPrintA();//依次输出数组a中的前n个元素,最后输出一个换行
};
使用该类的主函数如下:
voidmain()
{
inta[10]={23,78,46,55,62,76,90,25,38,42};
AAx;
___
(1)___;
intm=___
(2)___;
___(3)___;
cout<}
该程序运行结果为:
237846556276
78
2.已知一个类的定义如下:
#include
classAA{
inta[10];
intn;
public:
voidSetA(intaa[],intnn);//用数组aa初始化数据成员a,用nn初始化数据成员n
intMaxA();//从数组a中前n个元素中查找最大值
voidSortA();//采用选择排序的方法对数组a中前n个元素,进行从小到大排序
voidPrintA();//依次输出数组a中的前n个元素,最后输出一个换行
};
使用该类的主函数如下:
voidmain()
{
inta[10]={23,78,46,55,62,76,90,25,38,42};
___
(1)___;
x.SetA(a,8);
int___
(2)___;
___(3)___;
x.PrintA();
cout<}
该程序运行结果为:
2325465562767890
90
3.已知一个利用数组实现栈的类定义如下:
constintARRAY_SIZE=10;
classStack{
public:
voidInit(){top=-1;}//初始化栈为空
voidPush(intnewElem);//向栈中压入一个元素
intPop();//从栈顶弹出一个元素
boolEmpty(){//判栈空
if(top==-1)returntrue;elsereturnfalse;}
intDepth(){returntop+1;}//返回栈的深度
voidPrint();
//按照后进先出原则依次输出栈中每个元素,直到栈空为止
private:
intelem[ARRAY_SIZE];//用于保存栈元素的数组
inttop;//指明栈顶元素位置的指针
};
voidStack:
:
Push(intnewElem){
if(___
(1)___){
cout<<"栈满!
"<exit
(1);//中止运行
}
___
(2)___;
elem[top]=___(3)___;
}
三.写出下列程序运行结果
1.#include
classCE{
private:
inta,b;
intgetmax(){return(a>b?
a:
b);}
public:
intc;
voidSetValue(intx1,intx2,intx3){
a=x1;b=x2;c=x3;
}
intGetMax();
};
intCE:
:
GetMax(){
intd=getmax();
return(d>c?
d:
c);
}
voidmain()
{
intx=5,y=12,z=8;
CEex,*ep=&ex;
ex.SetValue(x,y,z);
cout<ep->SetValue(x+y,y-z,20);
cout<GetMax()<}
2.#include
classCE{
private:
inta,b;
intgetmin(){return(a
a:
b);}
public:
intc;
voidSetValue(intx1,intx2,intx3){
a=x1;b=x2;c=x3;
}
intGetMin();
};
intCE:
:
GetMin(){
intd=getmin();
return(dd:
c);
}
voidmain()
{
intx=5,y=12,z=8;
CE*ep;
ep=newCE;
ep->SetValue(x+y,y-z,10);
cout<GetMin()<CEa=*ep;
cout<}
四.程序设计
1.根据下面类中MaxMin函数成员的原型和注释写出它的类外定义。
classAA{
in