1、西安交大C+程序设计第七章作业西安交通大学实验报告课程_计算机程序设计_实验名称_类与对象_第 1 页 共 18 页系 别_ _ _ 实 验 日 期 2014 年 5 月 2 日专业班级_ _组别_ 实 验 报 告 日 期 2014 年 5 月 2日姓 名_ _学号_*_ 报 告 退 发 ( 订正 、 重做 )同 组 人_ 教 师 审 批 签 字 一、实验目的理解类与对象的概念,掌握类的定义方法和使用方法。二、实验内容 (一)第一题:定义一个Dog类,包含name、age、sex、weight等属性以及对这些属性操作的方法。实现并测试这个类。1.源程序代码:#includeusing name
2、space std;class Dog/狗类private:/私有成员 char name20;/字符型数组用于存储名字 int age;/年龄,整型数 char sex;/性别 double weight;/体重,定义为双精度型public:/公有成员 void Register(char *Name,int Age,char Sex,double Weight);/输入函数 void print();/输出函数;void Dog:Register(char *Name, int Age, char Sex, double Weight)/输入函数,将各个参数导入到定义的类中相应元素 str
3、cpy(name,Name); age=Age; sex=(Sex=m?m:f); weight=Weight;void Dog:print()/输出函数 cout名字:namet年龄:aget性别:sext体重:weightendl;int main() Dog dog1,dog2,dog; char Name120,Sex1,Name220,Sex2; int Age1,Age2; double Weight1,Weight2; coutName1Age1Sex1Weight1; dog1.Register(Name1,Age1,Sex1,Weight1); coutName2Age2Se
4、x2Weight2; dog2.Register(Name2,Age2,Sex2,Weight2); cout第一条狗的信息如下:n;/信息显示 dog1.print(); cout第二条狗的信息如下:n; dog2.print(); dog=dog1;/交换dog1和dog2的内容 dog1=dog2; dog2=dog; cout二者交换以后信息为:n;/通过输出交换结果检验类的定义有作用 cout第一条狗:n; dog1.print(); cout第二条狗:n; dog2.print(); return 0;2.实验结果:3.问题分析:设计思路:首先输入两个狗的信息,然后显示输入的信息,
5、然后交换二者再次输出,通过再次输出的结果表明对其操作有效,从而表明类的定义是有效的。(二)第二题:设计并测试一个名为Ellipse的椭圆类,其属性为外接矩形的左上角与右下角两个点的坐标,并能计算出椭圆的面积。1.源程序代码:#include#includeusing namespace std;class Ellipse/定义椭圆类private: double x1,x2,y1,y2,S;public: void Register(double a,double b,double c,double d);/输入函数 double area();/面积计算函数 void feedback();
6、/输出函数;void Ellipse:Register(double a,double b,double c,double d)/输入函数 x1=a; x2=c; y1=b; y2=d;double Ellipse:area()/面积计算函数,用公式:S=pi*a*b(a、b为半长轴、半短轴长) S=3.1415*fabs(x1-x2)*fabs(y1-y2)/4; return S;/返回面积值void Ellipse:feedback()/输出函数,反馈输入值 cout您输入的点的坐标为:(x1,y1)和(x2,y2)n;void main() double a,b,c,d; coutab
7、cd; Ellipse ellipse; ellipse.Register(a,b,c,d); ellipse.feedback(); cout椭圆面积为:ellipse.area()endl;2.实验结果:(1)中心在原点:(2)中心不在原点: (三)第三题:仿照Date类设计一个Time类,按照各种可能的格式输出时间。1.源程序代码: #includeusing namespace std;class Time int h,m,s;public: void init(int,int,int);/输入函数 void print_hms();/时分秒 void print_hsm();/时秒分
8、 void print_msh();/分秒时 void print_mhs();/分时秒 void print_shm();/秒时分 void print_smh();/秒分时;void Time:init(int a,int b,int c) h=(a=0&a=0&b=0&c60)?c:0;void Time:print_hms() cout时分秒:h-m-sendl;void Time:print_hsm() cout时秒分:h-s-mendl;void Time:print_msh() cout分秒时:m-s-hendl;void Time:print_mhs() cout分时秒:m-h
9、-sendl;void Time:print_shm() cout秒时分:s-h-mendl;void Time:print_smh() cout秒分时:s-m-hendl;void main() int a,b,c; coutabc; Time time; time.init(a,b,c); time.print_hms(); time.print_hsm(); time.print_mhs(); time.print_msh(); time.print_shm(); time.print_smh();2.实验结果:对多种超出范围的情况进行了检测:(1)正常输入:(2)24点会被作为0点:(
10、3)分超过60:(4)秒超过60:(5)时超过24:(四)实验题目四:(必做题)设计定义一个三角形类,成员函数应有输入三角形初始数据函数、求三角形面积函数、输出面积函数。并编写主函数加以测试。1.程序源代码:#includeusing namespace std;class triangle double h,l,S;public: void Register(double a,double b);/输入函数 int examine();/检验是否合理的函数 void area();/计算面积 void print();/输出计算结果函数;void triangle:Register(doub
11、le a,double b) h=a; l=b;int triangle:examine() if(h=0|l=0) return 0; return 1;void triangle:area() S=h*l/2;void triangle:print() cout面积为:Sendl;int main() triangle s; double a,b; coutab; s.Register(a,b); while(s.examine()=0) coutab; s.Register(a,b); s.area(); s.print(); return 0;2实验结果:(1)输入有误时:(2)输入合
12、理:五、第五题: (必做题)定义一个二元一次方程组类,成员函数应有输入6个系数的函数、求二元一次方程组的根的函数,输出该方程组的函数,即输出格式如下: AX + BY = C DX + EY = F 并编写主函数加以测试。1.源程序代码:#includeusing namespace std;class equation/定义方程类 double a,b,c,d,e,f; double x,y;public: void Register(double A,double B,double C,double D,double E,double F);/输入函数 int examine();/检验函
13、数,检查系数是否能够确定唯一解 void result();/计算函数 void print();/输出函数;void equation:Register(double A,double B,double C,double D,double E,double F) a=A; b=B; c=C; d=D; e=E; f=F;int equation:examine() if(a*e-b*d=0) return 0; return 1;void equation:result() x=(c*e-b*f)/(a*e-b*d); y=(a*f-c*d)/(a*e-b*d);void equation:
14、print() cout计算结果为:x=x,y=yendl;int main() double A,B,C,D,E,F; equation test; coutABCDEF; test.Register(A,B,C,D,E,F); while(test.examine()=0)/若系数不符合要求,提示重新输入 coutABCDEF; test.Register(A,B,C,D,E,F); test.result(); test.print(); return 0;2.实验结果:(1)正常输入:(2)输入有误:六、第六题:6、(必做题)定义一个计算器类,成员函数有加法、减法、除法、乘法、SIN(
15、double x)共5个功能性函数,当然还必须有初始化数据成员的函数、修改数据成员的函数、输出数据成员的函数。并编写主函数加以测试。1.源程序代码:/6、(必做题)定义一个计算器类,成员函数有加法、减法、除法、乘法、SIN(double x)共个功能性函数,/当然还必须有初始化数据成员的函数、修改数据成员的函数、输出数据成员的函数。并编写主函数加以测试。#include#includeusing namespace std;class calculateprivate: double a,b,s;public: void Register(double x,double y); void pl
16、us(); void minus(); void chufa(); void chengfa(); void SIN(); void print();void calculate:Register(double x,double y) a=x; b=y;void calculate:plus() s=a+b;void calculate:minus() s=a-b;void calculate:chufa() s=a/b;void calculate:chengfa() s=a*b;void calculate:SIN() s=sin(a);void calculate:print() cou
17、tsendl;int main() char m; double x,y; coutx; couty; calculate cal; cal.Register(x,y); coutm; switch(m) case +: cal.plus(); break; case -: cal.minus(); break; case *: cal.chengfa(); break; case/: cal.chufa(); break; case s: cal.SIN(); break; default: coutERROR!n; break; cal.print(); return 0;2.实验结果:(
18、1)加法:(2)减法:(3)乘法:(4)除法:(5)sin:(6)输入有误:3.问题分析:本程序的优点:能够实现对计算类型的选择;对于输入不符合要求的能够输出error并结束程序;对sin的计算,能够实现与直接计算进行对比以检测是否正确。七、第七题:(选做题)设计定义100位的十进制正整数类,成员函数至少应有输入初始数据函数、加法函数和输出函数,并编写主函数加以测试。(提示:在类中定义int num100。输入一个大正整数字符串,如23112333298789876559998,再将该字符串转换成大整数放入num数组中)1.源程序代码:#include#includeusing namespa
19、ce std;class number/定义number类 int num100;/私有成员整型数组 int l;/整型数l,为输入的字符的长度public:/公有成员 void Register(char a100);/用于将输入的字符转换为整型数组元素并储存的函数 void plus(char b100);/加法函数,将b所储存的数加到a上 void print();/输出函数;void number:Register(char a100)/转换函数 int i; l=strlen(a); for(i=0;il;i+) numl-i-1=ai-0; void number:plus(cha
20、r b100)/加法函数 int i; int numb100; int lb=strlen(b); for(i=0;ilb) for(i=lb;il;i+) numbi=0; if(llb) for(i=l;ilb;i+) numi=0; numl=0; numblb=0; int m=0; for(i=0;i=l|i=0;i-) coutnumi;int main() number w; char a100,b100; couta; w.Register(a);/检验程序具有输入功能 coutb; cout计算结果是:n; w.plus(b);/程序具有加法功能 w.print();/程序
21、具有输出功能 coutendl; return 0;2.实验结果:(1)位数相同,不进位:(2)位数不同,无进位:(3)进位:(4)开头含0:(5)能处理长数字:3.问题分析:(1)需要解决的主要问题:将字符转换为数组储存下来,在储存的时候,为了便于解决进位的问题,故将其个位为num0,以便在最高位置后再加元素。开头0的处理:输出的时候将开头的0避开。进位的处理:将低一位的两个对应数字以及上一个m加起来之后求其除以10的商,然后加到高位数字上;将所得的余数作为低位的结果。考虑到最高位位数会变化,所以将最高位之上的一位初始为0,若最后结果没有导致最高位进位,则由于是0,输出时被避开。(2)不足:仍有一些问题没有完善,存在一些漏洞。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1