C语言程序设计复习题

上传人:文*** 文档编号:45899680 上传时间:2021-12-09 格式:DOC 页数:16 大小:64.50KB
收藏 版权申诉 举报 下载
C语言程序设计复习题_第1页
第1页 / 共16页
C语言程序设计复习题_第2页
第2页 / 共16页
C语言程序设计复习题_第3页
第3页 / 共16页
资源描述:

《C语言程序设计复习题》由会员分享,可在线阅读,更多相关《C语言程序设计复习题(16页珍藏版)》请在装配图网上搜索。

1、C+程序设计复习题一、 选择题1 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就是( ) A、类 B、对象 C、函数体 D、数据块2面向对象的程序设计语言必须具备的关键要素是( ) A、抽象和封装 B、抽象和多态性 C、抽象、封装、继承和多态性 D、抽象、封装和继承性3类的构造函数被自动调用执行的情况是在定义该类的( ) A、成员函数时 B、数据成员时 C、对象时 D、友元函数时4设有函数模板 template<class Q> Q Sum(Qx,Qy) return(x)+(y); 则下列语句中对该函数模板错误的使用是( ) A、Sum(10,

2、2); B、Sum(5.0,6.7); C、Sum(15.2f,16.0f); D、Sum(AB,CD);5已知类A是类B的友元,类B是类C的友元,则( ) A、类A一定是类C的友元 B、类C一定是类A的友元 C、类C的成员函数可以访问类B的对象的任何成员 D、类A的成员函数可以访问类B的对象的任何成员6静态成员函数没有( ) A、返回值 B、this指针 C、指针参数 D、返回类型7当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中( ) A、都是虚函数 B、只有被重新说明时才是虚函数 C、只有被重新说明为virtual时才是虚函数 D、都不是虚函数8下面叙述不正确的是(

3、 ) A、派生类一般都用公有派生 B、对基类成员的访问必须是无二义性的 C、赋值兼容规则也适用于多重继承的组合 D、基类的公有成员在派生类中仍然是公有的9在C+中实现封装是借助于( ) A、枚举 B、类 C、数组 D、函数10所有在函数中定义的变量,都是( ) A、全局变量 B、局部变量 C、静态变量 D、寄存器变量11下列特性中,C与C+共有的是( ) A、继承 B、封装 C、多态性 D、函数定义不能嵌套12通常情况下,函数模板中的类型参数个数不能是( ) A、0 B、2 C、4 D、313在下列成对的表达式中,运算符“+”的意义不相同的一对是( ) A、5.0+2.0和5.0+2 B、5.

4、0+2.0和5+2.0 C、5.0+2.0和5+2 D、5+2.0和5.0+214类的指针成员的初始化是通过函数完成的,这个函数通常是( ) A、析构函数 B、构造函数 C、其它成员函数 D、友元函数15要禁止修改指针p本身,又要禁止修改p所指向的数据,这样的指针应定义为( ) A、const char *p=“ABCD”; B、char const *p=“ABCD”; C、char *const p=“ABCD”; D、const char * const p=“ABCD”;16如果表达式+i*k中的“+”和“*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为( ) A

5、、operator*(i.operator+(),k) B、operator*(operator+(i),k) C、i.operator+().operator*(k) D、k.operator*(operator+(i)17下列说法中正确的是( ) A、类定义中只能说明函数成员的函数头,不能定义函数体 B、类中的函数成员可以在类体中定义,也可以在类体之外定义C、类中的函数成员在类体之外定义时必须要与类声明在同一文件中 D、在类体之外定义的函数成员不能操作该类的私有数据成员18若派生类的成员函数不能直接访问基类中继承来的某个成员,则该成员一定是基类中的( ) A、私有成员 B、公有成员 C、保

6、护成员 D、保护成员或私有成员19对基类和派生类的关系描述中,错误的是( ) A、派生类是基类的具体化 B、基类继承了派生类的属性 C、派生类是基类定义的延续 D、派生类是基类的特殊化20类B是类A的公有派生类,类A和类B中都定义了虚函数func(),p是一个指向类A对象的指针,则p->A:func()将( ) A、调用类A中的函数func() B、调用类B中的函数func() C、根据p所指的对象类型而确定调用类A中或类B中的函数func() D、既调用类A中函数,也调用类B中的函数答案:1B 2C 3C 4D 5D 6B 7A 8D 9B 10B11D 12A 13C 14B 15D

7、 16B 17B 18A 19B 20A二、 填空题1假定用户没有给一个名为AB的类定义析构函数,则系统自动给出的缺省析构函数定义为_。2模板定义中标识类型的参数必须用关键字_修饰。3表达式count<<hex还可表示为_。4通过C+语言中的_机制,可以从现存类中构建其子类。5要在调用虚函数的时候强制进行静态联编,可以通过在调用中对虚函数加_实现。6封装要求一个对象应具备明确的功能,并具有_以便和其它对象相互作用。7在删除一个动态对象时,将自动调用该动态对象所属类的_函数。8静态成员函数、友元函数、构造函数和析构函数中,不属于成员函数的是_。9在下面的类定义中,私有成员有_。 cl

8、ass Location int X,Y; protected: int zeroX,zerxY; int SetZero(intzeroX, intzeroY); private: int length,height; public: void init(int initX,int initY); int GetX(); int GetY(); ;10类的私有成员只能被它的成员函数和_访问。11在用C进行程序设计时,最好用_代替malloc。12函数模板中紧随template之后尖括号内的类型参数都要冠以保留字_。13在ios类中定义的用于控制输入输出格式的枚举常量中,用于代表十进制、八进制

9、和十六进制的3个枚举常量是dec、oct和_。14如果重载了运算符,则相应的运算符函数名是_。15由static修饰的数据成员为该类的所有对象_。16设函数max是由函数模板实现的,并且max(3.5,5)和max(10,5)都是正确的函数调用,则该模板具有_个类型参数。17在单继承和多继承方式中,面向对象的程序设计应尽量使用_继承。18语句序列 ifstream datafile; datafile.open(“data.dat”); 的功能可用一个语句实现,这个语句是_。19将关键字const写在函数头之后,函数体之前,说明该函数是一个const成员函数。此时const不是指定函数的返回值

10、,而是修饰_指针。20一个抽象类的派生类可以实例化的必要条件是实现了所有的_。21在C+中,虚函数帮助实现了类的_性。22通过C+语言中类的_,可以扩充和完善已有类以适应新的需求。23为了在对象生存期结束时释放其指针成员所指向的动态存储空间,通常需要为该类定义_。24在联合中,所有数据成员具有_的位置,任一时刻只有_个数据成员有效。25.在已经定义了整型指针ip后,为了得到一个包括10个整数的数组并由ip所指向,应使用语句_。26为了实现多态性,派生类需重新定义基类中的_。27编译时的多态性通过_函数实现。28在派生类中实现基类成员的初始化,需要由派生类的构造函数调用_来完成。29在C中,访问

11、指针所指向的对象的成员使用运算符_。30重载函数在参数类型或参数个数上不同,但_相同。答案:1 AB();2 class(或typcname)3cout,sctf(ios:hex,ios:basefield)(或coutsetf(ios:hex),或cout<<settosflags(ios:hex),其中ios:写成ios_base:也可)4 继承(或派生);5域名限制(或其它含义等价的描述)6接口或界面或公有成员;7析构;8 友元函数9X,Y,length,height (说明:每答对两个给1分);10友元类(或友元函数,或友元)11new ;12class;13hex;14o

12、perator +;15共享16 2;17 单一(或单);18ifstream datafile(“data.dat”)19 this;20纯虚函数;21 多态;22继承机制; 23 析构函数24 相同 一 (说明:答对一个给1分);25 ip = new int10;;26虚函数27重载;28基类的构造.函数;29->;30函数名三、 改错题1指出下面程序中的错误,并说明出错原因。 #include<iostream.h> class ConstFun public: void ConstFun() const int f5()constreturn 5; int Obj(

13、) return 45; int val; int f8(); ; int ConstFun:f8()return val; void main() const ConstFun s; int i=s.f5();cout<<Value=<<i<endl; 2指出下面程序中的错误,并说明错误原因。 #include<iostream.h> class A public:void fun()cout<<a.fun<<endl; ; class B public:void fun()cout<<b.fun<<e

14、ndl; void gun()cout<<b.gun<<endl; ; class C:public A,public B private:int b; public:void gun()cout <<c.gun<<endl; ; void main() c obj; obj.fun(); obj.gun(); 3指出下面程序段中的错误,并说明出错原因。 class Location int X,Y; protected: int zeroX,zeroY; int SetZero(int zeroX,int zeroY)X=zeroX;Y=zer

15、oY; private: int length,height; public: float radius; void init(int initX,int initY)length=initX;height=initY; int GetX()return X; int GetY()return Y; ; int main() Location retangleA=25,20,3,5,6,7,3; return 0; 4下面的程序先把字符串“Look out!”输出到一个文件中,然后再从该文件输入,并显示在屏幕上,显示效果为Look out!。程序中有一处错误,请用下横线标出错误所在行,并给出更

16、改意见。 # include<fstream.h> void main() ofstream outf(“D:tem.dat”,ios:trunc); outf<<“Look out!”; outf.close( ); ifsteam inf(“D:tem.dat”); char k20; inf>>k; count<<k; inf.close( ); 5下面的程序有一处错误,请用下横线标出错误所在行并改正错误。 # include<iostream.h> class Test public; static int x; ; int

17、x=20;/对类成员初始化 void main ( ) cout<<Test:x; 6下面的程序类B的定义中有一处错误,请用下横线标出错误所在行并说明错误原因。# include<iostream.h> # include<string.h> class A public:A(const char *nm)strcpy(name,nm); private:char name80; ; class B:public A public:B(const char *nm):A(nm) void PrintName( )const; ; void B:PrintNa

18、me( )const cout<<“name:”<<name<<endl; void main( ) B b1(“wang li”); b1.PrintName( ); 答案:1程序中第4行“void ConstFun()”错误,因为声明构造函数时不能指定返回类型。2第15行 obj.fun();语句错误,因为用C类的对象obj对函数fun()的访问是两义的,应使用成员名限定来消除两义性。3location retangleA25,20,3,5,6,7,3;语句错误,因为数据成员不都是公有成员,不能用初始化列表初始化。4第7行错,应改为:char k;whi

19、le(inf.get(k) cout<<k;注:还可改为char k;while(k=inf.get()!=EOF) cout<<k;char k20;inf.get(k,20); cout<<k;或char k20;inf.getline(k,20); cout<<k;或其中的变量k也可以是其他变量名。5程序中第6行错误,该行应为: int Test:x=20;6第12行有错,因为在类B中,name是由类A私有成员继承来的,不能被派生类访问。四、 四、完成程序题根据题目要求填空,完成程序。1在下面程序段横线处填上适当的内容。 class A _

20、 int n; public: A(int nn=0):n(nn) if(n=0)a=0; else a=new intn; _/定义析构函数,释放动态数组空间 ;2在下面程序横线处填上适当内容,使程序执行结果为: 200_ _ 100 程序如下: #include <iostream.h> template _ Tf(Tx,Ty) if(sizeof(T)=_) return x+y; else return x*y; void main() cout <<f(10,20)<<-<<f(45.5,54.5)<<endl; 3下面程序

21、三次调用同一函数sum,在横线处填上适当内容,使输出结果为: S=2 S=5 S=9 程序如下: #include<iostream.h> void sum(int i) static int s; _; cout<<S=<<s<<endl; void main (void) int i; for (i=0;_) sum(i); 4请在下面横线处填上适当的内容,使程序的输出为: 7.00000 7程序如下: #include<iomanip.h> viod main() double x=7; cout<<_<<

22、;x; cout<<endl<<_<<x; 5在下面程序横线处填上适当的内容,使该程序输出结果为: Creating B end of B end of A 程序如下: #include<iostream.h> class A public: A() _cout<<end of A<<endl; ; calss B:public A public: B()_ B()cout<<end of B<<endl; ; void main() A*pa=new B; delete pa 6在下面程序横线处填

23、上适当内容,以使该程序执行结果为: 12 88 # include<iostream.h> template<class T> class Tany public: ; void pr() if(sizeof(int)= ) count<<(x>y? x:y)<<endl; else cout<<(x>y? y:x)<<endl; ; void main( ) Tany<double>dobj=12.0,88.0; dobj.pr( ); Tany<int> iobj=12,88; io

24、bj.pr( ); 7在下面的横线处填上适当内容,使程序完整。 # include<iostream.h> # include<math.h> class loc private: float x,y; public; loc( ) x=x1; y=y1; float getx( )return x; float gety( )return y; float dis(loc&,loc&); ; float loc:dis(loc&a,loc&b) flost dx=a.x-b.x; flost dy=a.y-b.y; return sqr

25、t(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; 8在下面程序中的横线处填上适当内容,使程序完整。 # include<iostream.h> class vehicle protected: int size; int speed; public; void setSpeed(int s)speed=s; getSpeedLevel( )return speed/10; ; class c

26、ar:public vehicle public: int getSpeedLeve( )return speed/5; class truck:public vehicle public: int getspeedLevel( )return speed/15; ; int maxSpeedLevel(vehicle ,vehicle ) if(v1.getSpeedLevel( )>v2.getSpeedLevel( ) return 1; else reutrn 2; void main() turck t; car c; t.setSpeed(130); c.setSpeed(6

27、0); cout<<maxSpeedLevel(t,c)<<endl;/此结果输出为2 9在下面横线处填上合适内容,完成类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( )b1=i;b2=0; B(int i,int j,int k): b1=j;b2=k;/使a的值为i void prin

28、t( )A:print( );cout<<b1<<”,”<<b2<<endl; private:int b1,b2; 10根据注释在空白处填写适当内容。 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

29、:GetY( ) reutrn Y; # include<iostream.h>void main( ) Location A1;A1.init(20,90); /定义一个指向A1的引用rA1 /用rA1在屏幕上输出对象A1的数据成员X和Y的值 答案:1int *a;A()deletea; 2class T sizeof(double)(或8或其他等价形式)3s2i(或其他等价形式)i3;i+(或其他等形式) 4setiosflage (ios:showpoint)resetiosflags(ios:showpoint) 说明:其中ios: 可写成ios_basc:5virtual

30、 A()cout<<”creating B”<<end; 6T x,y;sizeof x(或sizeof(x)或sizeof y 或 sizeof(y) 或 sizeof(T)7float x1,float y1;static 8virtual int &v1 &v2 9int i A(i) 10Location &rA1 =A1;cout<<rA1.GetX()<<rA1.GetY();五、 程序分析题1写出下面程序输出结果。 # include<iostream.h> class A public: vir

31、tual void func()cout<<func in class A<< endl; ;class B public: virtual void func()cout<<func in class B<< endl; ; class C:public A, public B public: void func()cout<<func in class C<<endl; ; void main() C c; A& pa=c; B& pb=c; C& pc=c; pa.func(); pb.fun

32、c(); pv.func(); 输出为:答案:func in class Cfunc in class Cfund in class C2写出下面程序的输出结果。 # include<iostream.h> class Location public: int X,Y; void init(int initX,int initY); int GetX(); int GetY(); ; void Location:init (int initX,int initY) X=initX; Y=initY; int Location:GetX() return X; int Locatio

33、n:GetY() return Y; void display(Location& rL) cout<<rL. GetX()<<<<rL.GetY()<<n; void main() Location A5=0,0,1,1,2,2,3,3,4,4; Location *rA=A; A3.init(5,3); rA->init(7,8); for (int i=0;i<5;i+) display(*(rA+); 输出为:答案:7 81 12 25 34 43写出下面程序的输出结果: # include<iostream.h

34、> class A public: A( )a=0; A(int i)a=i; void Print( )cout<<a<<”,”; int Geta( )return a; private:int a; ; class B:public A public:B( )b=0; B(int i,int j,int k); void Print( ); private:int b; A aa; ; B:B(int i,int j,int k):A(i),aa(j)b=k;void B:Print( ) A:Print( ); cout<<b<<”

35、,”<<aa.Geta( )<<endl; void main( ) B bb2; bb0=B(1,2,5); bb1=B(3,4,7); for(int i=0;i<2;i+) bbi.Print( ); 输出为:答案:1,5,23,7,44写出下面程序的输出结果: # include<iostream.h> class Location int X,Y; public: void init(int=0,int=0); void valueX(int val)X=val; int valueX( )return X; void valueY(int

36、val)Y=val; int valueY( )return Y; ; void Location:init(int initX,int initY) X=initX; Y=initY; void main( ) Location A,B; A.init( ); cout<<A.valueX( )<<endl; A.valueX(5); cout<<A.valueX( )<<endl<<A.valueY( )<<endl; B.init(6,2); B.valueY(4); cout<<B.valueX( )<<endl<<B.valueY( )<<endl; 输出为:答案:05064友情提示:部分文档来自网络整理,供您参考!文档可复制、编制,期待您的好评与关注!16 / 16

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!