面向对象程序设计实验项目及答案_第1页
面向对象程序设计实验项目及答案_第2页
面向对象程序设计实验项目及答案_第3页
面向对象程序设计实验项目及答案_第4页
面向对象程序设计实验项目及答案_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

1、实验一 C+面向过程练习(一) (2学时) 实验目的和要求:1. 掌握C程序的基本格式与规范,学会编写简单的C程序。2. 理解C程序的结构和特点。3. 熟悉C程序基本的输入和输出操作。4. 掌握C数据类型、常量和变量以及修饰符的使用方法。5. 掌握C的各种流程控制语句的使用。6. 熟悉C语言实验环境,能够在VC6.0环境下调试与运行程序。 实验内容:1. 求解方程在复数域上的解,a,b,c由终端输入。注意分析的全面性。#include#includeusing namespace std;int main()double a,b,c,d,e,m,n;couta;coutb;coutc;whil

2、e(1)if(a=0)m=-b/c;coutx1=x2=m=0)e=sqrt(d);m=(-b+e)/(2*a);n=(-b-e)/(2*a);if(m!=n)coutx1=mendlx2=nendl;elsecoutx1=x2=mendl;elsee=sqrt(-d);m=-b/(2*a);n=e/(2*a);coutx1=m+niendl;coutx2=m-niendl;couta;coutb;coutc;return 0;2. 猴子吃桃子问题:一天一只小猴子摘下一堆桃子,当即吃掉一半,还觉得不过瘾,又多吃了一个。第二天接着吃了前一天剩下的一半,馋不忍罢又多吃了一个。以后每天如此。到第十天

3、小猴子去吃时,只剩下一个桃子了。问小猴子共摘下了多少个桃子。 #includeusing namespace std;int f(int n);int main()coutf(1)endl;return 0;int f(int n)if(n=10) return 1;else return (f(n+1)+1)*2;3. 用,求e之值,直到为止。#includeusing namespace std;int fact(int n);int main()int i=1;double sum=1,a;doa=1./fact(i);sum+=a;i+;while(a0.000001);coute=s

4、umendl;int fact(int n)if(n=1)return 1;elsereturn fact(n-1)*n; 实验二C+面向过程练习(二)(2学时) 实验目的和要求:1. 掌握一维数组、二维数组的定义与使用。2. 掌握函数定义、函数调用和函数说明的方法。3. 掌握函数递归调用的概念和使用方法。 实验内容:1. 编程求若干个整数中的最大和次大,最小和次小这四个数。#includeusing namespace std;# define M 100int main()int aM,n,t;cinn;for(int k=0;kak;for(int i=1;in;i+)for(int j

5、=0;jaj+1)t=aj;aj=aj+1;aj+1=t;coutmax=an-1 cmax=an-2endl;coutmin=a0 cmin=a1endl;return 0;2. 由键盘输入两个整数,试编写两个函数分别求出这两个数的最大公约数和最小公倍数。#includeusing namespace std;int main()int m,n,t,lcm,gcd;cinmn;if(m=0|n=0)coutm = 0 or n = 0endl;elseif(mn)t=m;m=n;n=t;gcd=m;while(gcd%n!=0)gcd+=m;lcm=gcd/(m*n);coutlcm=lcm

6、endlgcd=gcdendl;return 0;3. 编写一个递归函数void reverse(int a,int n),将数组a中的数倒置。如a数组原来为:1 2 3 4 5,则调用reverse函数后,a数组内容变为:5 4 3 2 1。#includeusing namespace std;const int M=100;void reverse(int a,int n);int main()int aM,n;cinn;for(int i=0;iai;reverse(a,n);coutendl;return 0;void reverse(int a,int n)if(n!=0)n-;r

7、everse(&a1,n);couta0 ;return;实验三 C+在非面向对象方面的扩充(2学时) 实验目的和要求:1. 掌握函数重载的方法及定义重载函数时的注意事项。2. 掌握函数缺省参数的使用。3. 掌握指针的定义及使用方法,理解void型指针。4. 理解动态内存分配意义,掌握new和 delete使用方法。5. 掌握引用的声明方法及使用。6. 掌握const修饰符及其内联函数的使用。7. 熟悉C+在非面向对象方面的其他扩充特性。 实验内容:1. 编写10个重载函数max,分别求两个整数、实数、双精度数、字符及三个整数、单精度数、双精度数、字符中的最大数。#includeusing n

8、amespace std;int max(int x,int y)return xy?x:y;int max(int x,int y,int z)int t=xy?x:y;return tz?t:z;float max(float i,float j)return ij?i:j;float max(float i,float j,float k)float s=ij?i:j;return sk?s:k;double max(double m,double n)return mn?m:n;double max(double m,double n,double o)double l=mn?m:n;

9、return lo?l:o;char max(char p,char q)return pq?p:q;char max(char p,char q,char r)char v=pq?p:q;return vr?v:r;int main()int x,y,z,t;float i,j,k;double m,n,o;char p,q,r;cout1.两个整数比较大小endl2.两个单精度数比较大小endl3.两个双精度数比较大小endl4.两个字符比较大小endl;cout5.三个整数比较大小endl6.三个单精度数比较大小endl7.三个双精度数比较大小endl8.三个字符比较大小endl;whi

10、le(1)coutt;switch(t)case 1:cinxy;coutmax(x,y)ij;coutmax(i,j)mn;coutmax(m,n)pq;coutmax(p,q)xyz;coutmax(x,y,z)ijk;coutmax(i,j,k)mno;coutmax(m,n,o)pqr;coutmax(p,q,r)endl;break;return 0;2. 编写函数void add1(int sum),void add2(int * sum),void add3(int & sum),功能如下:输入若干个整数,以0结束,并用参数sum返回这若干个整数之和。在主程序中分别调用这三个函数

11、,观察结果,总结值传递和地址传递的规律。 #include#includeusing namespace std;void add1(int sum)int i;while(i!=0)cini;sum+=i;void add2(int *p)int i;while(i!=0)cini;*p+=i;void add3(int &sum)int i;while(i!=0)cini;sum+=i;int main()int sum1=0,sum2=0,sum3=0;int *p;p=&sum2;add1(sum1);add2(p);add3(sum3);coutsum1endlsum2endlsum

12、3endl;return 0; 3. 矩阵中填数:当给出 N*N 的矩阵,要求用程序填入下列形式的数:(1)S形填数,例如N=5 (2)回转填数,例如N=51234510987611121314152019181716 212223242512345161718196152425207142322218131211109 要求:用new和delete动态分配空间(提示:可用一维数组来表示二维数组)。#include#includeusing namespace std;int row,temp;void gorigh(int *q,int &m,int &a) for(temp=0;tempr

13、ow;temp+)if(qa*row+temp=0)qa*row+temp=m+;a+;void godown(int *q,int &m,int &b)for(temp=0;temp0;temp-)if(qc*row+temp=0) qc*row+temp=m+;c-;void goup(int *q,int &m,int &d) for(temp=row-1;temp0;temp-)if(qtemp*row+d=0)qtemp*row+d=m+;d-;int main() int a,b,c,d,m,n=100;for(a=1;a=n;a+)coutrow;int *p=new int r

14、ow*row;m=1;for(a=0;arow*row;a+)pa=0;a=d=0;c=b=row-1;while(m=row*row) gorigh(p,m,a); godown(p,m,b);goleft(p,m,c); goup(p,m,d);cout回旋方阵:endl;for(a=0;a0) coutendl;for(b=0;brow;b+)coutsetw(3)pa*row+b; coutendl;for(a=0;arow*row;a+)pa=0;d=1;b=1;for(a=0;arow;a+) if(b=1)for(c=0;c=0;c-)pa*row+c=(d+);b=-b;cou

15、tS形方阵:endl;for(a=0;a0) coutendl;for(b=0;brow;b+)coutsetw(3)pa*row+b; coutendl;delete p;return 0; 实验四 类与对象(一)(4学时) 实验目的和要求:1. 掌握类、类的数据成员、类的成员函数的定义方式。2. 理解类成员的访问控制方式。3. 掌握对象的定义和操作对象的方法。4. 理解和掌握构造函数、析构函数、拷贝构造函数的定义与执行过程。5. 掌握重载构造函数的方法。6. 理解浅拷贝与深拷贝。7. 了解对象的生存期。 实验内容:1. 设计三个图形类:Circle(圆)、Rectangle(矩形)、Tri

16、angle(三角形),要求:(1) Circle 类基本信息:圆心坐标、半径;Rectangle 类基本信息:长、宽;Triangle 类基本信息:三个顶点坐标;其中:成员变量为 private 属性,成员函数为public 属性。(2) 为Circle类设计缺省的构造函数,并用init成员函数进行数据成员的初始化。(3) 为其余两个类设计多个构造函数:无参、带参、参数值缺省的构造函数。(4) 每个图形类有计算图形的面积GetArea(),计算图形的周长GetPerimeter(),显示图形的基本信息函数Show(),修改基本信息的函数Set(形参)。以Circle 类为例:通过GetArea

17、()计算圆的面积,GetPerimeter()计算圆的周长,Show()函数中显示圆心坐标、直径、周长、面积等基本信息;Set(int x,int y, int r)函数可以修改圆心坐标和半径。(5) 注意多个构造函数的声明方式与定义的实现。(6) 当输入数据为不合理数据时(例如:输入的三角形的顶点是否能组成一个三角形),提示用户输入错误。#includeusing namespace std;#includeclass Circlepublic:void setCircle(int a,int b, int c)x=a;y=b;r=c;double GetArea(int a=0,int b

18、=0, int c=0)return 3.14*c*c;double GetPerimeter(int a,int b, int c)return 2*3.14*c;void showCircle()cout圆的坐标为:(x,y)endl;cout圆的直径为:2*rendl;coutArea=GetArea(x,y,r) Perimeter=GetPerimeter(x,y,r)width=wid;/Rectangledouble Area(double len,double wid)return len*wid;double Perimeter(double len,double wid)r

19、eturn 2*(len+wid);void showRectangle()coutArea=Area(length,width) Perimeter=Perimeter(length,width)endl;private:double length,width;class Trianglepublic: void setTriangle(double x,double y,double r) a=x;b=y;c=r; double getArea(double x,double y,double r)return sqrt(x+y+r)/2)*(x+y+r)/2-x)*(x+y+r)/2-y

20、)*(x+y+r)/2-r);double getPerimeter(double x,double y,double r) return x+y+r; void showTriangle() cout三角形的三边分别为a=a b=b c=cendl;coutArea=getArea(a,b,c) Perimeter=getPerimeter(a,b,c)endl;private: double a,b,c;int main()int a,b,c,d,e,f,i,j,k,p;double r,s,t,m,n;cout计算 圆 请输入 : 1endl计算 矩形 请输入 : 2endl计算三角形请

21、输入 : 3p;switch(p)case 1:Circle circle1;coutijk;circle1.setCircle(i,j,k);circle1.showCircle();break; case 2:Rectangle rectangle1;coutmn;rectangle1.setRectangle(m,n);rectangle1.showRectangle();break; case 3:Triangle triangle1;coutabcdef;r=sqrt(pow(a-c,2)+pow(b-d,2);s=sqrt(pow(a-e,2)+pow(b-f,2);t=sqrt(

22、pow(c-e,2)+pow(f-d,2);triangle1.setTriangle(r,s,t);if(r+s)=t|(r+t)=s|(t+s)=r)cout对不起!您输入的三个坐标构不成三角形。endl;break;elsetriangle1.setTriangle(r,s,t);triangle1.showTriangle();break; return 0;2. 一维数组是应用极为广泛的数据结构,但是C+语言的数组没有下标越界检查,因而极易出错。请定义一个安全的一维整型数组类intArray,要求:(1) 基本信息:存储数据的基址指针,数组的大小,均定义为private属性。(2)

23、定义构造函数、析构函数、拷贝构造函数。(3) 定义以下成员函数:int GetSize();返回数组的大小,即数组的元素个数。int GetAt(int nIndex) ;获得nIndex索引位置上的数组元素值。void SetAt(int nIndex , int newElement);向nIndex位置设定新的newElement值。(4) 使用intArray类实现一个冒泡排序程序。实验五 类与对象(二)(4学时) 实验目的和要求:1. 掌握对象数组的定义与使用方法。2. 理解对象指针的概念,学会用指针引用对象。3. 理解this指针的工作方式。4. 掌握静态数据成员和静态成员函数的基

24、本使用方法。5. 理解友元与友元函数的作用,掌握其使用方法。6. 掌握对象成员及其常类型的使用方法。7. 学会使用C+的多文件方式编写程序。 实验内容:1. 设计一个Student(学生)类,并使Student类具有以下特点:(1) 该类具有学生姓名、学号、程序设计、信号处理、数据结构三门课程的成绩。(2) 学生全部信息由键盘输入,以提高程序的适应性。(3) 通过成员函数分别统计每个学生的平均成绩和每门课程的平均成绩,当课程 数量增加或减少时成员函数无需修改仍可求取平均成绩。(4) 输出学生的各科成绩与平均成绩。(5) 学生对象的定义采用对象数组实现。(6) 统计不及格学生人数。(7) 表格输

25、出整齐美观。(8) 能以最方便的方式实现对课程数量和学生人数的修改。实验六 继承与派生类 (4学时) 实验目的和要求:1. 理解类的继承的概念,能够定义和使用类的继承关系。2. 掌握派生类的声明与定义方法。3. 熟悉三种派生方式的访问特性。4. 掌握多基继承,理解和掌握虚基类。5. 理解赋值兼容规则。 实验内容:1. 定义点Point类作为基类,在此基础上派生出直线Line类和圆Circle类,在Circle类的基础上以不同的属性派生出圆柱Cylinder类和球Spheroid类。并要求基类和各派生类具有以下特点: (1) Line类含有计算直线长度和斜率的成员函数。(2) Circle类含有

26、计算圆面积的成员函数。(3) Cylinder类含有计算圆柱表面积和体积的成员函数。(4) Spheroid类含有计算球体的表面积和体积的成员函数。(5) 要求在实验报告中画出类层次图。#includeusing namespace std;#includeclass Pointpublic:void getx1y1(int a,int b)x1=a;y1=b;protected:int x1,y1;class Line:public Pointpublic:void getx1y1x2y2(int a,int b,int c,int d)getx1y1(a,b);x2=c;y2=d;doub

27、le Length(int a,int b,int c,int d)return sqrt(pow(a-c,2)+pow(b-d,2);double Slope(int a,int b,int c,int d)if(b-d)=0) return 0;elsereturn (d-b)/(c-a);void show()coutLength=Length(x1,y1,x2,y2) ;if(x1-x2)=0)cout该直线斜率不存在endl;elsecoutSlope=Slope(x1,y1,x2,y2)endl;protected:int x2,y2;class Circle:public Poi

28、ntpublic:void getx1y1r(int a,int b,int c1)getx1y1(a,b);r=c1;double getArea(int a,int b,int c1)return 3.14*c1*c1;void show()coutCircleArea=getArea(x1,y1,r)endl;protected:int r;class Cylinder:public Circlepublic:void getx1y1rh(int a,int b,int c1,int d1)getx1y1r(a,b,c1);h=d1;double cylinderArea(int a,i

29、nt b,int c1,int d1)return 2*getArea(a,b,c1)+2*3.14*c1*d1;double cylinderVolume(int a,int b,int c1,int d1)return getArea(a,b,c1)*d1;void show()coutcylinderArea=cylinderArea(x1,y1,r,h) ;coutcylinderVolume=cylinderVolume(x1,y1,r,h)endl;protected:int h;class Spheroid:public Circlepublic:void getx1y1r(in

30、t a,int b,int c1)getx1y1(a,b);r=c1;double spheroidArea(int a,int b,int c1)return 4*3.14*c1*c1;double spheroidVolume(int a,int b,int c1)return (4*3.14*c1*c1*c1)/3;void show()coutspheroidArea=spheroidArea(x1,y1,r) ;coutspheroidVolume=spheroidVolume(x1,y1,r)endl;protected:int r;int main()int i,a,b,c,d,

31、x,y,r,h;cout1.直线Line类endl;cout2.圆Circle类endl;cout3.圆柱Cylinder类endl;cout4.球Spheroid类i;switch(i)case 1:cout请输入直线两点的坐标:abcd;obj1.getx1y1x2y2(a,b,c,d);obj1.show();break; case 2:cout请输入圆的坐标和半径:xyr;Circle obj2;obj2.getx1y1r(x,y,r);obj2.show();break; case 3:cout请输入圆柱的下底圆心坐标,半径和高:xyrh;Cylinder obj3;obj3.get

32、x1y1rh(x,y,r,h);obj3.show();break; case 4:cout请输入球心的坐标和半径:xyr;Spheroid obj4;obj4.getx1y1r(x,y,r);obj4.show();break; return 0;2. 小型公司人员管理。某小型公司有四类人员:总经理、技术人员、销售经理、推销员。设计一个基类person,并派生出employee(职员),再由employee派生出manager(总经理)、technician(技术人员)、salesmanager(销售经理)、saleman(推销员)。销售经理既是经理又是销售人员,兼具两类人员的特点,因此同时

33、继承manager 和salesman 两个类。(1) 类定义l person类:基本信息:姓名、性别、出生日期(使用自定义的 Date(日期)类)其中:基本信息为 private 属性,成员函数为public 属性l Date 类:成员变量:年、月、日l 派生类employee :新增属性:编号、职位、薪水等l 派生类technician:新增属性:工作时间l 派生类 saleman: 新增属性:销售额、所属部门(2) 实现人员信息的录入与显示。(3) 计算并显示个人月薪:月薪计算办法:总经理拿固定月薪8000 元,技术人员按每小时25 元领取月薪;推销员的月薪按当月销售额的4%提成;销售经

34、理固定月薪5000 元加所管辖部门当月销售总额的5 。#include#includeusing namespace std;class datepublic:void date1()coutyearmonthday;/friend person;protected:int year,month,day;class person:public datepublic:void person1()coutname;coutsex;date1();/friend Date;void show1()cout姓名:nameendl;cout性别:sexendl;cout出生日期:year-month-d

35、ayendl;protected:string name,sex;class employee:public personpublic:void employee1()person1();coutid;void show2()show1();cout编号:idendl;protected:string id;class manager:public employeepublic:void manager1()employee1();void show3()show2();cout职位:总经理endl;cout固定月薪:8000元endl;class technician:public empl

36、oyeepublic:void technician1()employee1();coutworktime;double salary1()return 25*worktime;void show4()show2();cout职位:技术人员endl;cout工作时间:worktimehendl;cout月薪:salary1()元endl;protected:int worktime;class saleman:public employeepublic:saleman1()employee1();coutsale;coutdepartment;double salary2()return sa

37、le*0.04;void show5()show2();cout职位:推销员endl;cout销售额:saleendl;cout所属部门:departmentendl;cout月薪:salary2()元endl;protected:int sale;string department;class salesmanager:public employeepublic:void salesmanager1()employee1();coutsale;double salary3()return (5000+sale*0.005);void show6()show2();cout职位:销售经理end

38、l;cout月薪:salary3()元endl;protected:int sale;int main()int i;cout 小型公司人员管理系统 endl;cout1.总经理endl;cout2.技术人员endl;cout3.推销员endl;cout4.销售经理i;switch(i)case 1:manager s1;cout请输入一个经理的信息:endl;s1.manager1();coutendl;cout一个经理manager的信息:endl;s1.show3();coutendlendl;break; case 2:technician s2;cout请输入一个技术人员的信息:en

39、dl;s2.technician1();coutendl;cout一个技术人员technician的信息:endl;s2.show4();coutendlendl;break; case 3:saleman s3;cout请输入一个推销员的信息:endl;s3.saleman1();coutendl;cout一个推销员saleman的信息:endl;s3.show5();coutendlendl;break; case 4:salesmanager s4;cout请输入一个销售经理的信息:endl;s4.salesmanager1();coutendl;cout一个销售经理salesmanag

40、er的信息:endl;s4.show6();coutendlendl;break; return 0;实验七 多态性与虚函数 (4学时) 实验目的和要求:1. 理解编译时的多态性和运行时的多态性。2. 掌握虚函数的定义与使用方法。3. 掌握纯虚函数和抽象类的概念和使用方法,运用纯虚函数实现多态性。 实验内容:1. 在实验六题目1的基础上,增加以下内容:在Line类的基础上派生长方形Rectangle类和正方形Squre类,并分别在长方形Rectangle类和正方形Squre类的基础上派生长方体Cuboid类和正方体SquareBody类,并要求基类和各派生类具有计算各图形的周长、面积和体积的功能,要求用纯虚函数实现。注:可先定义一个抽象类-图形Figure类,含有求周长、面积、体积的纯虚函数,用此类进行派生。假设某个图形由上述几个图形组成,求该图形的总面积(若为平面图形)或总体积(若为立体图形)。#includeusing namespace std;class Linepublic:

温馨提示

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

评论

0/150

提交评论