完整word版C++期末考试复习题.docx
《完整word版C++期末考试复习题.docx》由会员分享,可在线阅读,更多相关《完整word版C++期末考试复习题.docx(18页珍藏版)》请在冰豆网上搜索。
完整word版C++期末考试复习题
C++期末考试复习题
一、选择题
1.在声明类时,下面的说法正确的是(C)。
A.可以在类的声明中给数据成员赋初值B.数据成员的数据类型可以是register
C.private、public、protected可以按任意顺序出现
D.没有用private、public、protected定义的数据成员是公有成员
2.在一个类的定义中,包含有( C)成员的定义。
A.数据 B.函数 C.数据和函数 D.数据或函数
3.假定AA为一个类,inta()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为( A)。
A.intAA:
:
a() B.intAA:
a() C.AA:
:
a() D.AA:
:
inta()
4.假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问px所指对象中数据成员a的格式为( C)。
A.px(a) B.px[a] C.px->a D.px.a
5.下列关于运算符new的描述中,错误的是(D)。
A.它可以创建对象或变量B.它可以创建对象数组或一般类型数组
C.用它创建对象或对象数组时要调用相应的构造函数D.用它创建的对象可以不用delete运算符释放
6.在下面有关析构函数特征的描述中,正确的是(A)。
A.一个类中可以定义多个析构函数B.析构函数名与类名完全相同
C.析构函数不能指定返回类型D.析构函数可以由一个或多个参数
7.构造函数是在(B)时被执行的。
A.程序编译B.创建对象C.创建类D.程序装入内存
8.友元的作用之一是(A)。
A.提高程序的运行效率B.加强类的封装性
C.实现数据的隐藏性D.增加成员函数的种类
9.设置虚基类的目的是(B)。
A.简化程序B.消除二义性C.提高运行效率D.减少目标代码
10.回值的纯虚函数,正确的写法是(B)。
A.virtualshow()=0;B.virtualvoidshow();
C.virtualvoidshow()=0;D.voidshow()=0virtual;
11.重载函数在调用时选择的依据中,(B)是错误的。
A.函数名字B.函数的返回类型C.参数个数D.参数的类型
12.已知:
intfun(int&a),m=10;下列调用fum()函数的语句中,正确的是(C)。
A.fun(&m);B.fun(m*2);C.fun(m);D.fun(m++);
13.下列各种类中,不能定义对象的类是(B)。
A.派生类B.抽象类C.嵌套类D.虚基类
14.类中定义的成员默认为(A)访问属性。
A.public B.private C.protected D.friend
15.静态成员函数对类的数据成员访问( B)。
A.是不允许的 B.只允许是静态数据成员
C.只允许是非静态数据成员 D.可允许是静态数据成员或非静态数据成员
16.在下列语句中,将函数intf_sum(intx,inty)正确重载的是(A)。
A.floatf_sum(intx,inty)B.intf_sum(inta,intb)
C.intf_sum(intx)D.floatf_sum(inta,intb)
17.下列各语句是输出字符'A'的,其中错误语句是(B)。
A.cout<<'A';B.cout.put('A');C.charch='A';cout<18.当将一个类A或函数f()说明为另一个类B的友元后,类A或函数f()能够直接访问类B的( D)。
A.只能是公有成员 B.只能是保护成员
C.只能是除私有成员之外的任何成员 D.具有任何权限的成员
19.C++语言程序中进行文件操作时应包含的头文件是(A)。
A.fstream.hB.math.hC.stdlib.hD.strstrea.h
20.在C++程序中使用的cin标识符是系统类库中定义的(A )类中的一个对象。
A.istream B.ostream C.iostream D.fstream
21.已知:
charn=’p’;在下列表示引用的方法中,()是正确的。
A.char&x=n;B.char&y=’p’;C.char&z;D.float&t=&n;
22.在(A)情况下适宜采用内联函数。
A.函数代码小,频繁调用B.函数代码多,频繁调用
C.函数体含有递归语句D.函数体含有循环语句
23.如果表达式a+b中的“+”是作为友元函数重载的运算符,若采用运算符函数调用格式,则可表示为( )。
A.a.operator+(b) B.b.operator+(a) C.operator+(a,b) D.operator(a+b)
24.执行完循环for(i=1;i<100;i++);后,i的值为(B)。
A.99B.100C.101D.102
25.假定一个类对象数组为A[n],当离开它定义的作用域时,系统自动调用该类析构函数的次数为( C)。
A.0 B.1 C.n D.n-1
26.在C++程序中使用的cout标识符是系统类库中定义的(B )类中的一个对象。
A.istream B.ostream C.iostream D.fstream
二、填空题
1.在下面一段类定义中,Derived类是由直接基类Base1和Base2所派生的,Derived类包含有两个间接基类BaseBase,在初始化函数Init中,需要把x1和x2的值分别赋给属于基类Base1的x成员和属于基类Base2的x成员。
classBaseBase{
protected:
intx;
public:
BaseBase(){x=1;}
};
classBase1:
publicBaseBase{
public:
Base1(){}
};
classBase2:
publicBaseBase{
public:
Base2(){}
};
classDerived:
(1)publicBase1,
(2)publicBase2
{
public:
Derived(){}
voidInit(intx1,intx2){
(3)Base1:
:
x=x1;
_(4)__Base2:
:
x=x2_;
}
(5)voidoutput(){cout<:
x<<''<:
x<};
2.该类中MaxA()函数的实现如下,请在标号位置补充适当的内容。
int
(1)inta[]
{
intx=a[0];
for(inti=1;iif(a[i]>x)
(2)a[j+i=j];
(3)break;
}
classA{
char*a;
public:
___
(1)___//定义无参构造函数,使a的值为空
A(char*aa){
a=___
(2)___;
strcpy(a,aa);//用aa所指字符串初始化a所指向的动态存储空间
}
___(3)___//定义析构函数,删除a所指向的动态存储空间
};
classPoint
{
private:
intx,y;
public:
Point(){x=y=0;}
Point(intx0,inty0){x=x0;y=y0;}
intGetX(){returnx;}
intGetY(){returny;}
voidPrint(){cout<<"Point("<1Pointoperator+(Point&pt,intdd);//友元函数声明
2;//友元函数声明
};
Pointoperator+(Point&pt,intdd)
//加号操作符重载函数,实现Point类对象与整数加法
{
Pointtemp=pt;
3;
temp.y+=dd;
returntemp;
}
Pointoperator+(Point&pt1,Point&pt2)
//加号操作符重载函数,实现两个Point类对象的加法
{
Pointtemp;
temp.x=pt1.x+pt2.x;
4;
return5;
}
3.下列程序的功能是,建立磁盘文件1.txt,从键盘输入一行字符串,以回车键结束,将其中的字母字符存放在文件1.txt中,请填空完成该程序。
#include
usingnamaspacestd;
intmain()
{
chara[80];
;//定义输出流对象outfile
if(!
outfile1)
{cerr<<"打开文件出错!
"<exit
(1);
}
;//从键盘读入一行字符
for(inti=0;c[i]!
=0;i++)
if()
cout<;
return0;
}
四、根据程序试写出运行结果
1.
#include
voidmain()
{
inti,j;
int*p1,*p2;
p1=&i;p2=&j;
i=3;j=6;
cout<<"i="<
cout<<"*p1="<<*p1<<"*p2="<<*p2<*p1=5;*p2=8;
cout<<"i="<
cout<<"*p1="<<*p1<<"*p2="<<*p2<}
2.
#include
#include
classCD{
char*a;
intb;
public:
voidInit(char*aa,intbb)
{
a=newchar[strlen(aa)+1];
strcpy(a,aa);
b=bb;
}
char*Geta(){returna;}
intGetb(){returnb;}
voidOutput(){cout<};
voidmain()
{
CDdx,dy;
chara[20];
dx.Init("abcdef",30);
strcpy(a,dx.Geta());
strcat(a,"xyz");
dy.Init(a,dx.Getb()+20);
dx.Output();
dy.Output();
}
3.
#include
classA{
inta[10];intn;
public:
A(intaa[],intnn):
n(nn){
for(inti=0;i}
intGet(inti){returna[i];}
intSumA(intn){
ints=0;
for(intj=0;jreturns;
}
};
voidmain(){
inta[]={2,5,8,10,15,20};
Ax(a,4);
Ay(a,6);
intd=1;
for(inti=0;i<4;i++)d*=x.Get(i);
intf=y.SumA(5);
cout<<"d="<cout<<"f="<}
4.
#include
classcircle{
protected:
intr;
public:
voidsetr(intx){r=x;}
virtualvoidshow()=0;
};
classarea:
publiccircle{
public:
voidshow()
{cout<<"这个圆的面积是:
"<<3.14*r*r<classperimeter:
publiccircle{
public:
voidshow()
{cout<<"这个圆的周长是:
"<<2*3.14*r<voidmain()
{circle*ptr;
areaob1;
perimeterob2;
ob1.setr(10);
ob2.setr(10);
ptr=&ob1;ptr->show();
ptr=&ob2;ptr->show();
}
5.
#include
classA{
public:
A(){cout<<"A";}
};
classB{
public:
B(){cout<<"B";}
};
classC:
publicA{
public:
C(){cout<<"C";}
private:
Bb;
};
intmain()
{
Cobj;
return0;
}
6.
#include
classsmall_cat{
doubleweight;//普通数据成员,表示一只小猫的重量
staticdoubletotal_weight;//静态数据成员,用来累计小猫的重量
staticdoubletotal_number;//静态数据成员,用来累计小猫的只数
public:
small_cat(doublew)//构造函数
{weight=w;
total_weight+=w;//累加小猫的重量
total_number++;}//累加小猫的只数
voiddisplay()
{cout<<"这只小猫的重量是"<staticvoidtotal_disp()
{cout<cout<};
doublesmall_cat:
:
total_weight=0;//静态数据成员初始化
doublesmall_cat:
:
total_number=0;//静态数据成员初始化
intmain()
{small_catw1(0.5),w2(0.6),w3(0.4);
w1.display();//调用普通成员函数,显示第1只小猫的重量
w2.display();//调用普通成员函数,显示第2只小猫的重量
w3.display();//调用普通成员函数,显示第3只小猫的重量
small_cat:
:
total_disp();//调用静态成员函数
return0;}//显示小猫的只数和总重量
5、编程题
1.编程求圆、圆内接正方形和圈外切正方形的面积和周长。
要求使用抽象类。
解:
#include
constdoublePI=3.1415;
classShape
{
public:
Shape(doublei)
{r=i;}
virtualvoidArea()=0;
virtualvoidPerimeter()=0;
protected:
doubler;
};
classCircle:
publicShape
{
public:
Circle(doublei):
Shape(i)
{}
voidArea()
{cout<<"圆的面积是"<voidPerimeter()
{cout<<"圆的周长是"<<2*PI*r<};
classIn_Square:
publicShape
{
public:
In_Square(doublei):
Shape(i)
{}
voidArea()
{cout<<"圆内接正方形的面积是"<<2*r*r<voidPerimeter()
{cout<<"圆内接正方形的周长是"<<4*1.414*r<};
classEx_Square:
publicShape
{
public:
Ex_Square(doublei):
Shape(i)
{}
voidArea()
{cout<<"圆外切正方形的面积是"<<4*r*r<voidPerimeter()
{cout<<"圆外切正方形的周长是"<<8*r<};
voidmain()
{
Shape*ps;
ps=newCircle(8);
ps->Area();
ps->Perimeter();
ps=newIn_Square(8);
ps->Area();
ps->Perimeter();
ps=newEx_Square(8);
ps->Area();
ps->Perimeter();
deleteps;
}
(附上运行结果:
)
2.已知复数类Complex的声明如下:
classComplex
{public:
Complex();//无参构造函数
Complex(double);//转换构造函数
Complex(double,double);//有两个形参的构造函数
friendComplexoperator+(Complex&,Complex&);//对“+”运算符进行重载
friendostream&operator<<(ostream&,Complex&);//对“<<”运算符进行重载
friendistream&operator>>(istream&,Complex&);//对“>>”运算符进行重载
private:
doublereal,imag;
};
要求:
(1)写出该类的所有构造函数的类外定义代码。
(2)写出对运算符“+”、“<<”、“>>”进行重载的运算符重载函数的定义。
3.编写程序,计算出复数对象c1和c2相加结果,并将其结果输出。
4.从建立的数据文件f1.dat中读入10个整数放在数组中,找出并输出10个数中的最大者和它在数组中的序号。
解:
#include
#include
usingnamespacestd;
intmain()
{
inta[10],max,i,order;
fstreaminfile("f1.dat",ios:
:
in);
if(!
infile)
{
cerr<<"openerror!
"<(1);}
for(i=0;i<10;i++)
{
infile>>a[i];
cout<}
cout<max=a[0];
order=0;
for(i=1;i<10;i++)
if(a[i]>max)
{max=a[i];order=i;}
cout<<"max="<return0;
}
5.根据下面类中MaxMin函数成员的原型和注释写出它的类外定义。
classAA{
int*a;
intn;
intMS;
public:
voidInitAA(intaa[],intnn,intms){
if(nn>ms){cout<<"Error!
"<(1);}
MS=ms;
n=nn;
a=newint[MS];
for(inti=0;i}
intMaxMin(int&x,int&y);//从数组a的前n个元素中求出
//最大值和最小值,并分别由引用参数x和y带回,
//同时若n大于0则返回1,否则返回0。
};
解:
intAA:
:
MaxMin(int&x,int&y)
{
intmx,my;
mx=my=a[0];
for(inti=1;iif(a[i]>mx)mx=a[i];
if(a[i]}
x=mx;y=my;
if(n>0)return1;elsereturn0;
}
6.根据下面类中构造函数的原型和注释写出它的类外定义。
classArray{
int*a;//指向动态分配的整型数组空间
intn;//记录数组长度
public:
Array(intaa[],intnn);//构造函数,利用aa数组长度nn初始化n,
//利