完整word版C++期末考试复习题Word文件下载.docx
《完整word版C++期末考试复习题Word文件下载.docx》由会员分享,可在线阅读,更多相关《完整word版C++期末考试复习题Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。
![完整word版C++期末考试复习题Word文件下载.docx](https://file1.bdocx.com/fileroot1/2023-1/14/f671cead-3abd-4f9a-a988-1812dd89bd2a/f671cead-3abd-4f9a-a988-1812dd89bd2a1.gif)
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<
<
'
;
B.cout.put('
);
C.charch='
cout<
ch;
D.cout<
put('
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
C.iostream
二、填空题
1.在下面一段类定义中,Derived类是由直接基类Base1和Base2所派生的,Derived类包含有两个间接基类BaseBase,在初始化函数Init中,需要把x1和x2的值分别赋给属于基类Base1的x成员和属于基类Base2的x成员。
classBaseBase{
protected:
intx;
public:
BaseBase(){x=1;
}
};
classBase1:
publicBaseBase{
Base1(){}
classBase2:
Base2(){}
classDerived:
(1)publicBase1,
(2)publicBase2
{
Derived(){}
voidInit(intx1,intx2){
(3)Base1:
x=x1;
_(4)__Base2:
x=x2_;
}
(5)voidoutput(){cout<
Base1:
x<
'
Base2:
endl;
2.该类中MaxA()函数的实现如下,请在标号位置补充适当的内容。
int
(1)inta[]
intx=a[0];
for(inti=1;
i<
i++)
if(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;
Point(){x=y=0;
Point(intx0,inty0){x=x0;
y=y0;
intGetX(){returnx;
intGetY(){returny;
voidPrint(){cout<
"
Point("
"
y<
)"
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<
fstream>
usingnamaspacestd;
intmain()
chara[80];
;
//定义输出流对象outfile
if(!
outfile1)
{cerr<
打开文件出错!
exit
(1);
}
;
//从键盘读入一行字符
for(inti=0;
c[i]!
=0;
i++)
if()
cout<
;
return0;
四、根据程序试写出运行结果
1.
#include<
iostream.h>
voidmain()
inti,j;
int*p1,*p2;
p1=&
i;
p2=&
j;
i=3;
j=6;
i="
j="
j<
*p1="
*p1<
*p2="
*p2<
*p1=5;
*p2=8;
cout<
2.
#include<
string.h>
classCD{
char*a;
intb;
voidInit(char*aa,intbb)
{
a=newchar[strlen(aa)+1];
strcpy(a,aa);
b=bb;
char*Geta(){returna;
intGetb(){returnb;
voidOutput(){cout<
a<
b<
}
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.
inta[10];
intn;
A(intaa[],intnn):
n(nn){
for(inti=0;
i++)a[i]=aa[i];
intGet(inti){returna[i];
}
intSumA(intn){
ints=0;
for(intj=0;
j<
j++)s+=a[j];
returns;
voidmain(){
inta[]={2,5,8,10,15,20};
Ax(a,4);
Ay(a,6);
intd=1;
4;
i++)d*=x.Get(i);
intf=y.SumA(5);
d="
d<
f="
f<
4.
classcircle{
intr;
voidsetr(intx){r=x;
virtualvoidshow()=0;
classarea:
publiccircle{
voidshow()
{cout<
这个圆的面积是:
3.14*r*r<
}};
classperimeter:
voidshow()
{cout<
这个圆的周长是:
"
2*3.14*r<
voidmain()
{circle*ptr;
areaob1;
perimeterob2;
ob1.setr(10);
ob2.setr(10);
ptr=&
ob1;
ptr->
show();
ob2;
5.
classA{
A(){cout<
A"
classB{
B(){cout<
B"
classC:
publicA{
C(){cout<
C"
Bb;
intmain()
{
Cobj;
6.
classsmall_cat{
doubleweight;
//普通数据成员,表示一只小猫的重量
staticdoubletotal_weight;
//静态数据成员,用来累计小猫的重量
staticdoubletotal_number;
//静态数据成员,用来累计小猫的只数
small_cat(doublew)//构造函数
{weight=w;
total_weight+=w;
//累加小猫的重量
total_number++;
}//累加小猫的只数
voiddisplay()
这只小猫的重量是"
weight<
千克\n"
staticvoidtotal_disp()
total_number<
只的小猫的总重量是"
total_weight<
千克"
doublesmall_cat:
total_weight=0;
//静态数据成员初始化
total_number=0;
//静态数据成员初始化
{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.编程求圆、圆内接正方形和圈外切正方形的面积和周长。
要求使用抽象类。
解:
constdoublePI=3.1415;
classShape
Shape(doublei)
{r=i;
virtualvoidArea()=0;
virtualvoidPerimeter()=0;
doubler;
classCircle:
publicShape
Circle(doublei):
Shape(i)
{}
voidArea()
圆的面积是"
PI*r*r<
voidPerimeter()
圆的周长是"
2*PI*r<
classIn_Square:
In_Square(doublei):
{}
圆内接正方形的面积是"
2*r*r<
圆内接正方形的周长是"
4*1.414*r<
classEx_Square:
Ex_Square(doublei):
圆外切正方形的面积是"
4*r*r<
圆外切正方形的周长是"
8*r<
Shape*ps;
ps=newCircle(8);
ps->
Area();
Perimeter();
ps=newIn_Square(8);
ps=newEx_Square(8);
deleteps;
(附上运行结果:
)
2.已知复数类Complex的声明如下:
classComplex
{public:
Complex();
//无参构造函数
Complex(double);
//转换构造函数
Complex(double,double);
//有两个形参的构造函数
friendComplexoperator+(Complex&
Complex&
//对“+”运算符进行重载
friendostream&
operator<
(ostream&
//对“<
”运算符进行重载
friendistream&
operator>
>
(istream&
//对“>
private:
doublereal,imag;
要求:
(1)写出该类的所有构造函数的类外定义代码。
(2)写出对运算符“+”、“<
”、“>
”进行重载的运算符重载函数的定义。
3.编写程序,计算出复数对象c1和c2相加结果,并将其结果输出。
4.从建立的数据文件f1.dat中读入10个整数放在数组中,找出并输出10个数中的最大者和它在数组中的序号。
iostream>
usingnamespacestd;
intmain()
{
inta[10],max,i,order;
fstreaminfile("
f1.dat"
ios:
in);
if(!
infile)
cerr<
openerror!
exit
(1);
for(i=0;
10;
infile>
a[i];
a[i]<
max=a[0];
order=0;
for(i=1;
max)
{max=a[i];
order=i;
max="
max<
endl<
order="
order<
infile.close();
return0;
5.根据下面类中MaxMin函数成员的原型和注释写出它的类外定义。
classAA{
int*a;
intMS;
voidInitAA(intaa[],intnn,intms){
if(nn>
ms){cout<
Error!
MS=ms;
n=nn;
a=newint[MS];
for(inti=0;
MS;
i++)a[i]=aa[i];
intMaxMin(int&
x,int&
y);
//从数组a的前n个元素中求出
//最大值和最小值,并分别由引用参数x和y带回,
//同时若n大于0则返回1,否则返回0。
intAA:
MaxMin(int&
y)
intmx,my;
mx=my=a[0];
i++){
if(a[i]>
mx)mx=a[i];
if(a[i]<
my)my=a[i];
x=mx;
y=my;
if(n>
0)return1;
elsereturn0;
6.根据下面类中构造函数的原型和注释写出它的类外定义。
classArray{
int*a;
//指向动态分配的整型数组空间
//记录数组长度
Array(intaa[],intnn);
//构造函数,利用aa数组长度nn初始化n,
//利