C++期末复习题(带答案)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C++复习电子版(带答案)
一、选择题(20分)
1.面向对象的程序设计语言必须具备的关键要素是(D)
A.抽象和封装 B.抽象和多态性
C.抽象,封装和继承性 D.抽象,封装,继承和多态性
2.下列说法中正确的是(A )
A.类中的函数成员可以在类体中定义,也可以在类体之外定义
B.类定义中只能声明函数成员的函数头,不能定义函数体
C.类中的函数成员在类体之外定义时必须要与类的定义放在同一文件中
D.在类体之外定义的函数成员不能操作该类的私有数据成员
3.在下列成对的表达式中,运算符“+”的意义不相同的一对是(C )
A. 5.0+2.0和5.0+2
B. 5.0+2.0和5+2.0
C. 5.0+2.0和5+2
D. 5+2.0 和5.0+2
4.类的成员的初始化是通过函数完成的,这个函数通常是( B )
A.析构函数
B.构造函数
C.其他成员函数
D.友元函数
5.下列关键字中,用以说明类中公有成员的是( D )
A. friend
B. private
C. protected
D. public
6.静态成员函数没有(B)
A .返回值
B .this指针
C.指针参数
D.返回类型
7.当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中(A )
A.都是虚函数
B.只有被重新说明时才是虚函数
C. 只有被重新说明为virtual时才是虚函数
D.都不是虚函数
8.假定AB为一个类,则执行“AB x:”语句时将自动调用该类的(D )
A.有参构造函数
B.析构函数
C.拷贝构造函数
D.无参构造函数
9.在c ++中实现封装是借助于( B )
A.枚举
B.类
C.数组
D.函数
10.所有在函数中定义的变量,都是(B )
A.全局变量 B.局部变量
C. 静态变量
D.寄存器变量
二、填空题(20分)
11.
___。

12.C++中,类的继承方式有和私有继承三种方式。

13.语句序列ifstream datafile;
datafile.open( “data.dat” );
的功能可用一个语句实现,这个语句是。

14.
15.当一个类中含有
16.在C++性。

17.通过C++可以扩充和完善已有类派生出新类,以适应新的需求。

18.
定义。

19.在函数头与函数体之间加关键字可以防止该函数改变数据成员的值。

20.A”。

要释放由p指向的动态空间,正确的语
句应该是。

三、改错题(5题,10分)
21.下面的类定义有一处错误,请用下横线标出错误所在行并改正错误。

class A{
int a;
public:
A(int aa):a=aa{ } A(int aa){a=aa;}
};
答案:A(int aa):a=aa{}错误,改为A(int aa):a(aa){}
22.下面的程序先把字符串“Look out!”输出到一个文件中,然后再从该文件输入,并显示在屏幕上,显示效果为Look out!。

程序中有一处错误,请用下横线标出错误所在行,并给出更改意见。

# include<fstream.h>
void main(){
ofstream outf(“D:\tem.dat”,ios::trunc);
outf<<“Look out!”;
outf.close( );
ifsteam inf(“D:\tem.dat”);
char k[20]; 改:inf.getline(k,20); //inf>>k inf>>k; count<<k;
inf.close( );
}
答案:inf>>k;错误,它只能读出Look,应改为,inf.getline(k,20);
23.下面的程序有一处错误,请用下横线标出错误所在行并改正错误。

# include<iostream.h>
class Test{
public;
static int x;
};
int x=20;//对类成员初始化
void main ( )
{
cout<<test::x;
}
答案:intx=20;错误,应改为int Test::x=20;
24.下面的程序类B的定义中有一处错误,请用下横线标出错误所在行并说明错误原因。

#include<iostream.h>
#include<string.h>
class A{
public:A(const char *nm){strcpy(name,nm);}
private:char name[80];
};
class B:public A{
public:B(const char *nm):A(nm){ }
void PrintName( )const;
};
void B::PrintName( )const{
cout<<“name:”<<name<<endl;派生类不能直接访问基类的私有成员
}
void main( ){
B b1(“wang li”);
b1.PrintName( );
}
答案:cout<<“name:”<<name<<endl;这一行出错。

因为name是类A私有成员继承而来,不能被派生类访问。

25.用下横线标出下面程序main函数中的错误所在行,并说明错误原因。

# include
class Location{
private:
int X,Y;
public;
void init(int initX,int initY);
int sumXY( );
};
void Location::init(int initX,int initY)
{
X=initX;
Y=initY;
}
int Location::sumXY( )
{
return X+Y;
}
void main( )
{
Location A1;
int x,y;
A1.init(5,3);
x=A1.X;y=A1.Y;(私有成员不能直接访问!) cout< } }
四、完成程序题(5题,20分)
26.完成下面类中的成员函数的定义。

class test
{
private:
int num;
float x;
public:
test(int,float f);
test(test &);
};
test::test(int n,float f)
{ num=n;
①①____x=f_______________;
}
test::test(test & t)
{
②___num=t.num_______________;
X=t.X ;
}
27.在下面的横线处填上适当的内容,是程序完整。

# include<iostream.h>
# include<math.h>
Class loc{
Private:
Float x,y;
{
x=x1;
y=y1;
}
float getx( ){return x;}
float gety( ){return y;}
};
float loc::dis(loc&a,loc&b)
{
flost dx = a.x-b.x;
flost dy = a.y-b.y;
return sqrt (dx*dx+dy*dy);
}
void main( )
{
loc pl(3.5 , 4.5),p2(5.5 , 6.5);
float d = loc::dis (p1,p2);
cout <<“The distance is”<< d;
}
28.在下面程序中的横线处填上适当内容,使程序完整。

# include<iostream.h>
class vehicle
{
protected:
int size;
int speed;
public;
void setSpeed(int s){speed=s;}
①____virtual____int____ getSpeedLevel( ){return speed/10;} };
class car:public vehicle
{
public:
int getSpeedLeve( ){return speed/5;}//求派生类小汽车速度级};
class truck:public vehicle
{
public:
int getspeedLevel( ){return speed/15;}//求派生类大卡车类速度级
};
比较交通工具类族中速度级{
if(v1.getSpeedLevel( )>v2.getSpeedLevel( ))
return 1;
else
reutrn 2;
}
void main()
{
turck t;
car c;
t.setSpeed(130);
c.setSpeed(60);
cout<<maxSpeedLevel(t,c)<<endl;//此结果输出为2
}
29.在下面横线处填上合适内容,完成类B 的定义。

# include<iostream.h>
class A{
public:A( ){a=0;}
A(int i){a=i;}
void print( ){cout<<a<<”,”;}
private:int a;
};
class B:public A{
public:B( ){b1=b2=0}//默认无参构造函数
B(① ____int i______){b1=i;b2=0;} //需一个参数i的构造函数
B(int i,int j,int k) ; ② _____A=i______ {b1=j;b2=k;}//使a 的值为i
void print( ){A::print( );cout<<b1<<”,”<<b2<<endl;}
private:int b1,b2;
}
30.根据注释在空白处填写适当内容。

class Location{
private:
int X,Y;
public:
void init(int initX,int initY);
int GetX( );
int GetY( );
};
void Location::init(int initX,int initY)
{
X=initX;
Y=initY;
}
int Location::GetX( )
{
reutrn X;
}
int Location::GetY( )
{
reutrn Y;
}
# include<iostream.h>
void main( )
{
Location A1;A1.init(20,90);
①____Location&rAL=Al_;______ //定义一个指向A1 的引用rA1
②____cout<<rA1.GetX()<<rA1.GetY()_______ //用rA1 在屏幕上输出对象A1 的数据成员X 和Y 的值
}
一,程序分析题(4题,16分)
31.写出下面程序的输出结果:(3.7.9.1.5.4)
#include<iostream.h>
class FunArray
{
int *pa; //指向一个数据空间
int size; //数组元素个数
public:
FunArray(int a[],int thesize):pa(a),size(thesize){ }
int Size( ){return size;}
int& operator[ ](int index){return pa[index-1];}
};
void main( )
{
int s[ ]={3,7,2,1,5,4};
FunArray ma(s,sizeof(s)/sizeof(int));
ma[3]=9;
for(int i=1;i<=ma.Size( );i++) cout<<ma[i]<<‘, ’;
}
32.写出下面程序的输出结果:
# include<iostream.h>
template<class T>
class Tclass{
T x,y;
public:
Tclass(T a,T b):x(a){y=b;}
Tclass(T a){y=(T)0,x=a;}
void pr( ){
char c;
c=(y>=(T)0?′+′:′-′);
cout<<x<<c<<(y>(T)0? y:-y)<<″i″<<endl; }
};
void main( )
{
Tclass<double>a(10.5,-5.8);
a.pr( );
Tclass<int>b(10);
b.pr( );
}
33.写出下面程序的输出结果:
# include<iostream.h>
class Test{
private:
static int val;
int a;
public;
static int func( );
void sfunc(Test &r);
};
int Test::val=200;
int Test::func( )
{
return val++;
}
void Test::sfunc(Test &r)
{
r.a=125;
cout<<″Result3=″<<r.a;
}
void main( )
{
cout<<”Result1=”<<Test::func( )<<endl;
Test a;
cout<<”Result2=”<<a.func( );
a.sfunc(a);
}
34. 写出下面程序的输出结果:
#include<iostream.h>
class A
{ public;
virtual void print(){cout<<”This is class A printing.”<<endl;} };
class B:public A
{ public:
void print(){}
};
class C:public B
{ public:
void print(){cout<<”This is class C printing.”<<endl;}
};
void show(A &a){ a.print(); }
void main()
{ A a;
B b;
C c;
show(a);
show(b);
show(c);
}
二,程序编写(14分)
35.用面向对象的方法,设计数组类检验及学生类。

编写一个程序从键盘输入10个学生
的基本情况,每个学生的信息包括学号(No),姓名(Name),成绩(Score),要求按每个学生的成绩由低到高排序输出。

要求:(1)用UML图对数组类检验及学生类的结构进行编程。

(4分)
(2)编程实现类的结构,成员函数及测试用的主函数(10分)。

相关文档
最新文档