《面向对象程序设计c》综合复习题集及答案详解_第1页
《面向对象程序设计c》综合复习题集及答案详解_第2页
《面向对象程序设计c》综合复习题集及答案详解_第3页
《面向对象程序设计c》综合复习题集及答案详解_第4页
《面向对象程序设计c》综合复习题集及答案详解_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、面向对象程序设计综合复习题集四、程序填充1. 斐波那契数列的第1和第2个数分别为0和1 ,从第三个数开始,每个数等于其前两个数之和。求斐波那契数列中的前20个数,要求每行输出5个数。#includevoid main() int f,f1,f2,i; cout” 斐波那契数列:n”;f1=0; f2=1;coutsetw(6)f1setw(6)f2;for(i=3;i=20;i+) f=_(1)_; coutsetw(6)f;if(_(2)_) coutendl;f1=f2;f2=_(3)_; coutendl; (1) (2) (3) 2. 计算的值。 #include void main(

2、) double x,p1=1,p2=1,s=0; int i,j=1; coutx; for(i=1;i=10;i+) p1*=_(1)_; p2*=_(2)_; s+=j*p1/p2; /j的值为(-1)i+1 j=_(3)_; coutsendl; (1) (2) (3) 17. 假定有定义为“struct NODEint data; NODE* next;”,下面算法根据table数组中的n个元素建立一个表头指针为L的链表,链表中结点值的顺序与数组元素值的顺序相同。void f5(NODE*& L, int table, int n) if(nnext=_(2)_;p-data=_(3

3、)_;i+;p-next=NULL; /把最后一个结点的指针域置空p=L;L=L-next; /使L指向链表的第一个带值的结点delete p;(1)(2)(3) 22. 已知一维数组类ARRAY的定义如下,构造函数的作用是把参数n的值赋给s,给v动态分配长度为n的数组空间,接着利用数组参数a初始化v所指向的数组。class ARRAY int *v; /指向存放数组数据的空间int s; /数组大小 public: ARRAY(int a, int n); ARRAY()delete v; int size() return s; int& operator(int n); ;_(1)_ A

4、RRAY(int a, int n)if(n=0) v=NULL;s=0;return;s=n;v=_(2)_;for(int i=0; in; i+) _(3)_;(1)(2)(3)24. 已知一个类的定义如下:#includeclass AA int a10;int n;public:void SetA(int aa, int nn); /用数组aa初始化数据成员a, /用nn初始化数据成员nint MaxA(); /从数组a中前n个元素中查找最大值void SortA(); /采用选择排序的方法对数组a中前n个元素 /进行从小到大排序 void InsertA();/采用插入排序的方法对

5、数组a中前n个元素进行从小到大排序void PrintA(); /依次输出数组a中的前n个元素;该类中MaxA()函数的实现如下,请在标号位置补充适当的内容。int _(1)_ int x=a0;for(int i=1; ix) _(2)_;_(3)_;(1) (2) (3)25. 已知一个类的定义如下:#includeclass AA int a10;int n;public:void SetA(int aa, int nn); /用数组aa初始化数据成员a, /用nn初始化数据成员nint MaxA(); /从数组a中前n个元素中查找最大值void SortA(); /采用选择排序的方法对

6、数组a中前n个元素 /进行从小到大排序 void InsertA();/采用插入排序的方法对数组a中前n个元素进行从小到大排序void PrintA(); /依次输出数组a中的前n个元素;void AA:SortA()int i,j;for(i=0; _(1)_; i+) int x=ai, k=i;for(j=i+1; jn; j+)if(ajx) _(2)_ak=ai;_(3)_;(1) (2) (3)26. 已知一个类的定义如下:#includeclass AA int a10;int n;public:void SetA(int aa, int nn); /用数组aa初始化数据成员a,

7、 /用nn初始化数据成员nint MaxA(); /从数组a中前n个元素中查找最大值void SortA(); /采用选择排序的方法对数组a中前n个元素 /进行从小到大排序 void InsertA();/采用插入排序的方法对数组a中前n个元素进行从小到大排序void PrintA(); /依次输出数组a中的前n个元素;void _(1)_ int i,j;for(i=1; i=0; j-)if(xaj) _(2)_;else _(3)_;aj+1=x;(1) (2) (3)27. 已知一个类的定义如下:#includeclass AA int a10;int n;public:void Se

8、tA(int aa, int nn); /用数组aa初始化数据成员a, /用nn初始化数据成员nint MaxA(); /从数组a中前n个元素中查找最大值void SortA(); /采用选择排序的方法对数组a中前n个元素 /进行从小到大排序 void InsertA();/采用插入排序的方法对数组a中前n个元素进行从小到大排序void PrintA(); /依次输出数组a中的前n个元素 /最后输出一个换行;使用该类的主函数如下:void main()int a10=23,78,46,55,62,76,90,25,38,42;AA x;_(1)_;int m=_(2)_;_(3)_;coutm

9、endl;该程序运行结果为:23 78 46 55 62 7678(1) (2) (3)28. 已知一个类的定义如下:#includeclass AA int a10;int n;public:void SetA(int aa, int nn); /用数组aa初始化数据成员a, /用nn初始化数据成员nint MaxA(); /从数组a中前n个元素中查找最大值void SortA(); /采用选择排序的方法对数组a中前n个元素 /进行从小到大排序void PrintA(); /依次输出数组a中的前n个元素, /最后输出一个换行;使用该类的主函数如下:void main()int a10=23,

10、78,46,55,62,76,90,25,38,42;_(1)_;x.SetA(a,8);int _(2)_;_(3)_;x.PrintA();coutmendl;该程序运行结果为:23 25 46 55 62 76 78 9090(1) (2) (3) 29. 已知一个利用数组实现栈的类定义如下:const int ARRAY_SIZE=10;class Stack public:void Init() top=-1; /初始化栈为空 void Push(int newElem); /向栈中压入一个元素int Pop(); /从栈顶弹出一个元素bool Empty() /判栈空 if(top

11、=-1) return true;else return false;int Depth() return top+1; /返回栈的深度void Print(); /按照后进先出原则依次输出栈中每个元素,直到栈空为止private:int elemARRAY_SIZE; /用于保存栈元素的数组int top; /指明栈顶元素位置的指针;void Stack:Push(int newElem) if(_(1)_) cout栈满!endl;exit(1); /中止运行_(2)_;elemtop=_(3)_;(1) (2) (3) 30. 已知一个利用数组实现栈的类定义如下:const int AR

12、RAY_SIZE=10;class Stack public:void Init() top=-1; /初始化栈为空 void Push(int newElem); /向栈中压入一个元素int Pop(); /从栈顶弹出一个元素bool Empty() /判栈空 if(top=-1) return true;else return false;int Depth() return top+1; /返回栈的深度void Print(); /按照后进先出原则依次输出栈中每个元素,直到栈空为止private:int elemARRAY_SIZE; /用于保存堆栈元素的数组int top; /指明栈顶

13、元素位置的指针;该类的Pop和Print函数的实现分别如下:_(1)_ if(top=-1) cout栈空!endl;exit(1); /中止运行return _(2)_;void Stack:Print() while(!Empty() cout_(3)_ ;(1) (2) (3)31class A int a; public:A() a=0; _(1)_ /定义构造函数,用参数aa初始化数据成员a ; main() _(2)_; /定义类A的指针对象p _(3)_; /用p指向动态对象并初始化为整数5 (1) (2) (3)32class A char *a; public: _(1)_

14、/定义无参构造函数,使a的值为空 A(char *aa) a=_(2)_; strcpy(a,aa); /用aa所指字符串初始化a所指向的动态存储空间 _(3)_ /定义析构函数,删除a所指向的动态存储空间 ;(1) (2) (3)33class A int a,b; public: A(int aa=0, int bb=0) _(1)_ /分别用aa和bb对应初始化a和b ;main() _(2)_ ; /定义类A的对象x并用5初始化,同时定义y并用x初始化 _(3)_ ; /定义p指针,使之指向对象x(1) (2) (3)34class A int a,b; public: _(1)_ /

15、定义构造函数,使参数aa和bb的默认值为0, /在函数体中用aa初始化a,用bb初始化b ;main() A *p1, *p2; _(2)_ ; /调用无参构造函数生成由p1指向的动态对象_(3)_ ; /调用带参构造函数生成由p2指向的动态对象, /使a和b成员分别被初始化为4和5(1) (2) (3)35. #include#includeclass A int *a; int n; int MaxLen; public: A(): a(0), n(0), MaxLen(0) A(int *aa, int nn, int MM) n=nn; MaxLen=MM; if(nMaxLen) e

16、xit(1);_(1)_; /由a指向长度为MaxLen的动态数组for(int i=0; in; i+) ai=aai; A() delete a; int GetValue(int i) _(2)_ /函数体返回ai的值 ;void main()int b10=1,2,3,4,5,6,7,8,9,10;A r(b,10,10);int i,s=0;for(i=0; i10; i+); _(3)_ /把r对象的a数据成员中的每个 /元素值依次累加到s中couts=sendl;(1) (2) (3)36. #include#includeclass A int *a; int n; int M

17、axLen; public: A(): a(0), n(0), MaxLen(0) A(int *aa, int nn, int MM) n=nn; MaxLen=MM; if(nMaxLen) exit(1); a=new intMaxLen;_(1)_; /以i为循环变量把aa数组中每个元素值 /传送给a数组的对应元素中 A(); int GetValue(int i) return ai; /函数体返回ai的值;_(2)_ /析构函数的类外定义 void main()int b10=1,2,3,4,5,6,7,8,9,10;A r(b,10,10);int i,s=0; _(3)_ ;

18、/以i为循环变量,把r对象的a数据成员中的 /每个元素值依次累加到s中couts=sendl;(1) (2) (3) 37. 一种类定义如下:class Goodsprivate:char gd_name20; /商品名称int weight; /商品重量 static int totalweight; /同类商品总重量public:Goods (char*str,int w) /构造函数 strcpy(gd_name,str); weight=w;totalweight+=weight; Goods ()totalweight -= weight;char* GetN()_(1)_; /返回

19、商品名称int GetW()return weight;_(2)_ GetTotal_Weight() /定义静态成员函数返回总重量_(3)_;(1) (2)(3) 38.class Pointprivate:int x, y;public:Point()x=y=0;Point(int x0,int y0) x=x0;y=y0;int GetX() return x; int GetY() return y; void Print()coutPoint(x,y)endl;_(1)_; /友元函数声明_(2)_; /友元函数声明;Point operator+(Point& pt,int dd)

20、 /加号操作符重载函数,实现Point类对象与整数加法Point temp=pt;temp.x+=dd;temp.y+=dd;return temp;Point operator+(Point& pt1,Point& pt2) /加号操作符重载函数,实现两个Point类对象的加法Point temp=pt1;temp.x+=pt2.x;_(3)_;return temp;(1) (2) (3) 39. 在下面一段类定义中, Derived类是由直接基类Base 1和Base 2所派生的,Derived类包含有两个间接基类BaseBase,在初始化函数Init中,需要把x1和x2的值分别赋给属于

21、基类Base1的x成员和属于基类Base2的x成员。class BaseBase protected: int x; public: BaseBase() x = 1;class Base1: public BaseBase public: Base1();class Base2: public BaseBase public: Base2();class Derived: _(1)_ public: Derived() void Init(int x1, int x2) _(2)_; _(3)_; void output() coutBase1:x Base2:xendl;(1)(2)(3)

22、 40. 在下面一段类定义中, Derived类公有继承了基类Base。需要填充的函数由注释内容给出了功能。class Base private: int mem1,mem2; /基类的数据成员 public: Base(int m1,int m2) mem1=m1; mem2=m2; void output()coutmem1 mem2 ; /.;class Derived: public Base private: int mem3; /派生类本身的数据成员 public: /构造函数,由m1和m2分别初始化mem1和mem2,由m3初始化mem3 Derived(int m1,int m

23、2, int m3); /输出mem1,mem2和mem3数据成员的值 void output() _(1)_;coutmem3endl;/.;Derived:Derived(int m1,int m2, int m3): _(2)_ _(3)_;(1)(2)(3) 41. 在下面一段类的定义中,需要填充的函数由注释内容给出了功能。class Point /定义坐标点类 public: int x,y; /点的横坐标和纵坐标 Point()x=0;y=0; Point(int x0,int y0) x=x0; y=y0; int X()return x; int Y()return y;voi

24、d PrintP()coutPoint:(x,y)endl;class Line: public Point /利用坐标点类定义直线类 private: class Point pt1,pt2; /直线的两个端点 public:Line(Point pts, Point pte); /构造函数,分别用参数初始化对应的端点 double Dx()return pt2.x-pt1.x;double Dy()return pt2.y-pt1.y;double Length() /计算直线的长度return sqrt(_(1)_); void PrintL(); /输出直线的两个端点和直线长度;Lin

25、e:Line(Point pts, Point pte) _(2)_ void Line:PrintL() cout1st ; pt1.PrintP(); cout2nd ; pt2.PrintP(); coutThe Length of Line: _(3)_ endl;(1)(2)(3) 42. 在下面一段类的定义中,自行车类的虚基类为车辆类,机动车类的虚基类也为车辆类,摩托车类的基类为自行车类和机动车类,类之间均为公有继承。class vehicle /车辆类 private: int MaxSpeed; /最大车速 int Weight; /车重 public: vehicle()Ma

26、xSpeed=0; Weight=0; virtual void Run() coutA vehicle is running!endl;class bicycle : _(1)_ /自行车类 private: int Height; /车高 public: bicycle(); void Run() coutA bicycle is running!endl;class motorcar : _(2)_ /机动车类 private: int SeatNum; /乘人数 public: motorcar(); void Run() cout A motorcar is running! end

27、l; ;class motorcycle: _(3)_ /摩托车类 public: motorcycle (); void Run() coutA motorcycle is running!endl;(1)(2)(3)五、读程序写出运行结果1. #include#includevoid main() int a8=25,48,32,85,64,18,48,29;int max,min;max=min=a0;for(int i=0; iai) max=ai;if(xai) min=ai;coutmax:maxendl;coutmin:minendl; 24. #include#includev

28、oid main() char a510=student,worker,soldier,cadre,peasant;char s110, s210; strcpy(s1,a0); strcpy(s2,a0);for(int i=1;i0) strcpy(s1,ai);if(strcmp(ai, s2)0) strcpy(s2,ai);couts1s2endl; 25. #includeconst int N=5;void fun();void main()for(int i=1; iN; i+)fun();void fun() static int a;int b=2;cout(a+=3,a+

29、b) ;28. #include#include class CD char* a; int b; public: void Init(char* aa, int bb) a=new charstrlen(aa)+1; strcpy(a,aa); b=bb; char* Geta() return a; int Getb() return b; void Output() couta bendl; dx;void main()CD dy;dx.Init(abcdef,30);dy.Init(shenyafen,3*dx.Getb()+5);dx.Output();dy.Output();29#

30、include#include class CD char* a; int b; public: void Init(char* aa, int bb) a=new charstrlen(aa)+1; strcpy(a,aa); b=bb; char* Geta() return a; int Getb() return b; void Output() couta bendl; ;void main()CD dx,dy;char a20;dx.Init(abcdef,30);strcpy(a,dx.Geta();strcat(a,xyz);dy.Init(a,dx.Getb()+20);dx

31、.Output();dy.Output();30. #includeclass CE private: int a,b; int getmax() return (ab? a:b); public: int c; void SetValue(int x1,int x2, int x3) a=x1; b=x2; c=x3; int GetMax(); ;int CE:GetMax() int d=getmax();return (dc? d:c);void main()int x=5,y=12,z=8;CE ex, *ep=&ex;ex.SetValue(x,y,z);coutex.GetMax

32、()SetValue(x+y,y-z,20);coutGetMax()endl;31. #includeclass CE private: int a,b; int getmin() return (ab? a:b); public: int c; void SetValue(int x1,int x2, int x3) a=x1; b=x2; c=x3; int GetMin(); ;int CE:GetMin() int d=getmin();return (dSetValue(x+y,y-z,10);coutGetMin()endl;CE a=*ep;couta.GetMin()*3+1

33、5endl;32. #include class Franction /定义分数类 int nume; /定义分子 int deno; /定义分母 public: /把*this化简为最简分数,具体定义在另外文件中实现void FranSimp(); /返回两个分数*this和x之和,具体定义在另外文件中实现Franction FranAdd(const Franction& x); /置分数的分子和分母分别0和1 void InitFranction() nume=0; deno=1; /置分数的分子和分母分别n和d void InitFranction(int n, int d) nume

34、=n; deno=d; /输出一个分数void FranOutput() coutnume/denoendl; ;void main() Franction a,b,c,d; a.InitFranction(7,12); b.InitFranction(-3,8); c.InitFranction(); c=a.FranAdd(b); d=c.FranAdd(a);couta: ; a.FranOutput(); coutb: ; b.FranOutput(); coutc: ; c.FranOutput(); coutd: ; d.FranOutput(); 33. #include cla

35、ss Franction /定义分数类 int nume; /定义分子 int deno; /定义分母 public: /把*this化简为最简分数,具体定义在另外文件中实现void FranSimp(); /返回两个分数*this和x之和,具体定义在另外文件中实现Franction FranAdd(const Franction& x); /置分数的分子和分母分别0和1 void InitFranction() nume=0; deno=1; /置分数的分子和分母分别n和d void InitFranction(int n, int d) nume=n; deno=d; /输出一个分数voi

36、d FranOutput() coutnume/denoendl; ;void main() Franction a,b,c,d; a.InitFranction(6,15); b.InitFranction(3,10); c.InitFranction(); c=a.FranAdd(b); d=c.FranAdd(a);couta: ; a.FranOutput(); coutb: ; b.FranOutput(); coutc: ; c.FranOutput(); coutd: ; d.FranOutput(); 34. #include#includeclass A char *a;pu

37、blic: A(char *s) a=new charstrlen(s)+1; strcpy(a,s); coutaendl; A() delete a; coutDestructor!endl; ;void main() A x(xuxiaokai); A *y=new A(weirong); delete y; 35. #includeclass A int *a;public: A(int x=0):a(new int(x) A() delete a; int getA() return *a; void setA(int x) *a=x;void main() A x1,x2(3);A

38、 *p=&x2;p-setA(x2.getA()+5); x1.setA(15+x1.getA();coutx1.getA() x2.getA()endl; 36. #includeclass A int a;public: A(int aa=0): a(aa) couta ; A() coutXxk;void main() A *p; A x3=1,2,3,y=4;coutendl;p=new A3; coutendl;delete p;coutendl; 37. #includeclass A int a,b;public: A() a=b=0; A(int aa, int bb) a=a

39、a; b=bb;int Sum() return a+b;int* Mult() int *p=new int(a*b);return p;void main() int *k;A x(2,3), *p; p=new A(4,5); coutx.Sum() *(x.Mult()endl; coutSum() Mult()endl; delete k; 38. #includeclass A int a10; int n; public: A(int aa, int nn): n(nn) for(int i=0; in; i+) ai=aai; int Get(int i) return ai;int SumA(int n) int s=0;for(int j=0; jn; j+) s+=aj;re

温馨提示

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

最新文档

评论

0/150

提交评论