西安交大C程序设计第七章作业.docx
- 文档编号:24646911
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:27
- 大小:596.99KB
西安交大C程序设计第七章作业.docx
《西安交大C程序设计第七章作业.docx》由会员分享,可在线阅读,更多相关《西安交大C程序设计第七章作业.docx(27页珍藏版)》请在冰豆网上搜索。
西安交大C程序设计第七章作业
西安交通大学实验报告
课程__计算机程序设计__实验名称_类与对象___第1页共18页
系别___________实验日期2014年5月2日
专业班级_____组别_____________实验报告日期2014年5月2日
姓名_________学号_**********_报告退发(订正、重做)
同组人_________________________________教师审批签字
一、实验目的
理解类与对象的概念,掌握类的定义方法和使用方法。
二、实验内容
(一)第一题:
定义一个Dog类,包含name、age、sex、weight等属性以及对这些属性操作的方法。
实现并测试这个类。
1.源程序代码:
#include
usingnamespacestd;
classDog//狗类
{
private:
//私有成员
charname[20];//字符型数组用于存储名字
intage;//年龄,整型数
charsex;//性别
doubleweight;//体重,定义为双精度型
public:
//公有成员
voidRegister(char*Name,intAge,charSex,doubleWeight);//输入函数
voidprint();//输出函数
};
voidDog:
:
Register(char*Name,intAge,charSex,doubleWeight)//输入函数,将各个参数导入到定义的类中相应元素
{
strcpy(name,Name);
age=Age;
sex=(Sex=='m'?
'm':
'f');
weight=Weight;
}
voidDog:
:
print()//输出函数
{
cout<<"名字:
"< "< "< "< } intmain() { Dogdog1,dog2,dog; charName1[20],Sex1,Name2[20],Sex2; intAge1,Age2; doubleWeight1,Weight2; cout<<"请输入第一只小狗的名字、年龄、性别、体重: \n";//信息录入 cin>>Name1>>Age1>>Sex1>>Weight1; dog1.Register(Name1,Age1,Sex1,Weight1); cout<<"请输入第二只小狗的名字、年龄、性别、体重: \n"; cin>>Name2>>Age2>>Sex2>>Weight2; 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(); return0; } 2.实验结果: 3.问题分析: 设计思路: 首先输入两个狗的信息,然后显示输入的信息,然后交换二者再次输出,通过再次输出的结果表明对其操作有效,从而表明类的定义是有效的。 (二)第二题: 设计并测试一个名为Ellipse的椭圆类,其属性为外接矩形的左上角与右下角两个点的坐标,并能计算出椭圆的面积。 1.源程序代码: #include #include usingnamespacestd; classEllipse//定义椭圆类 { private: doublex1,x2,y1,y2,S; public: voidRegister(doublea,doubleb,doublec,doubled);//输入函数 doublearea();//面积计算函数 voidfeedback();//输出函数 }; voidEllipse: : Register(doublea,doubleb,doublec,doubled)//输入函数 { x1=a; x2=c; y1=b; y2=d; } doubleEllipse: : area()//面积计算函数,用公式: S=pi*a*b(a、b为半长轴、半短轴长) { S=3.1415*fabs(x1-x2)*fabs(y1-y2)/4; returnS;//返回面积值 } voidEllipse: : feedback()//输出函数,反馈输入值 { cout<<"您输入的点的坐标为: ("< } voidmain() { doublea,b,c,d; cout<<"请依次输入外接矩形的两对角顶点的横纵坐标: \n"; cin>>a>>b>>c>>d; Ellipseellipse; ellipse.Register(a,b,c,d); ellipse.feedback(); cout<<"椭圆面积为: "< } 2.实验结果: (1)中心在原点: (2)中心不在原点: (三)第三题: 仿照Date类设计一个Time类,按照各种可能的格式输出时间。 1.源程序代码: #include usingnamespacestd; classTime { inth,m,s; public: voidinit(int,int,int);//输入函数 voidprint_hms();//时分秒 voidprint_hsm();//时秒分 voidprint_msh();//分秒时 voidprint_mhs();//分时秒 voidprint_shm();//秒时分 voidprint_smh();//秒分时 }; voidTime: : init(inta,intb,intc) { h=(a>=0&&a<24)? a: 0; m=(b>=0&&b<60)? b: 0; s=(c>=0&&c<60)? c: 0; } voidTime: : print_hms() { cout<<"时分秒: "< } voidTime: : print_hsm() { cout<<"时秒分: "< } voidTime: : print_msh() { cout<<"分秒时: "< } voidTime: : print_mhs() { cout<<"分时秒: "< } voidTime: : print_shm() { cout<<"秒时分: "< } voidTime: : print_smh() { cout<<"秒分时: "< } voidmain() { inta,b,c; cout<<"请输入时间,按照时分秒格式: "; cin>>a>>b>>c; Timetime; 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点: (3)分超过60: (4)秒超过60: (5)时超过24: (四)实验题目四: (必做题)设计定义一个三角形类,成员函数应有输入三角形初始数据函数、求三角形面积函数、输出面积函数。 并编写主函数加以测试。 1.程序源代码: #include usingnamespacestd; classtriangle { doubleh,l,S; public: voidRegister(doublea,doubleb);//输入函数 intexamine();//检验是否合理的函数 voidarea();//计算面积 voidprint();//输出计算结果函数 }; voidtriangle: : Register(doublea,doubleb) { h=a; l=b; } inttriangle: : examine() { if(h<=0||l<=0) return0; return1; } voidtriangle: : area() { S=h*l/2; } voidtriangle: : print() { cout<<"面积为: "< } intmain() { triangles; doublea,b; cout<<"请输入三角形的长和高: "; cin>>a>>b; s.Register(a,b); while(s.examine()==0) { cout<<"输入有误,重新输入! \n"; cin>>a>>b; s.Register(a,b); } s.area(); s.print(); return0; } 2.实验结果: (1)输入有误时: (2)输入合理: 五、第五题: (必做题)定义一个二元一次方程组类,成员函数应有输入6个系数的函数、求二元一次方程组的根的函数,输出该方程组的函数,即输出格式如下: AX+BY=C DX+EY=F 并编写主函数加以测试。 1.源程序代码: #include usingnamespacestd; classequation//定义方程类 { doublea,b,c,d,e,f; doublex,y; public: voidRegister(doubleA,doubleB,doubleC,doubleD,doubleE,doubleF);//输入函数 intexamine();//检验函数,检查系数是否能够确定唯一解 voidresult();//计算函数 voidprint();//输出函数 }; voidequation: : Register(doubleA,doubleB,doubleC,doubleD,doubleE,doubleF) { a=A; b=B; c=C; d=D; e=E; f=F; } intequation: : examine() { if(a*e-b*d==0) return0; return1; } voidequation: : result() { x=(c*e-b*f)/(a*e-b*d); y=(a*f-c*d)/(a*e-b*d); } voidequation: : print() { cout<<"计算结果为: x="< } intmain() { doubleA,B,C,D,E,F; equationtest; cout<<"请输入系数A,B,C,D,E,F: \n"; cin>>A>>B>>C>>D>>E>>F; test.Register(A,B,C,D,E,F); while(test.examine()==0)//若系数不符合要求,提示重新输入 { cout<<"输入错误,请重新输入: \n"; cin>>A>>B>>C>>D>>E>>F; test.Register(A,B,C,D,E,F); } test.result(); test.print(); return0; } 2.实验结果: (1)正常输入: (2)输入有误: 六、第六题: 6、(必做题)定义一个计算器类,成员函数有加法、减法、除法、乘法、SIN(doublex)共5个功能性函数,当然还必须有初始化数据成员的函数、修改数据成员的函数、输出数据成员的函数。 并编写主函数加以测试。 1.源程序代码: //6、(必做题)定义一个计算器类,成员函数有加法、减法、除法、乘法、SIN(doublex)共个功能性函数, //当然还必须有初始化数据成员的函数、修改数据成员的函数、输出数据成员的函数。 并编写主函数加以测试。 #include #include usingnamespacestd; classcalculate { private: doublea,b,s; public: voidRegister(doublex,doubley); voidplus(); voidminus(); voidchufa(); voidchengfa(); voidSIN(); voidprint(); }; voidcalculate: : Register(doublex,doubley) { a=x; b=y; } voidcalculate: : plus() { s=a+b; } voidcalculate: : minus() { s=a-b; } voidcalculate: : chufa() { s=a/b; } voidcalculate: : chengfa() { s=a*b; } voidcalculate: : SIN() { s=sin(a); } voidcalculate: : print() { cout< } intmain() { charm; doublex,y; cout<<"输入x: "; cin>>x; cout<<"输入y: "; cin>>y; calculatecal; cal.Register(x,y); cout<<"请输入要进行的计算类型: \n"; cin>>m; switch(m) { case'+': cal.plus(); break; case'-': cal.minus(); break; case'*': cal.chengfa(); break; case'/': cal.chufa(); break; case's': cal.SIN(); break; default: cout<<"ERROR! ! \n"; break; } cal.print(); return0; } 2.实验结果: (1)加法: (2)减法: (3)乘法: (4)除法: (5)sin: (6)输入有误: 3.问题分析: 本程序的优点: ①能够实现对计算类型的选择; ②对于输入不符合要求的能够输出error并结束程序; ③对sin的计算,能够实现与直接计算进行对比以检测是否正确。 七、第七题: (选做题)设计定义100位的十进制正整数类,成员函数至少应有输入初始数据函数、加法函数和输出函数,并编写主函数加以测试。 (提示: 在类中定义int num[100]。 输入一个大正整数字符串,如"23112333298789876559998",再将该字符串转换成大整数放入num数组中) 1.源程序代码: #include #include usingnamespacestd; classnumber//定义number类 { intnum[100];//私有成员整型数组 intl;//整型数l,为输入的字符的长度 public: //公有成员 voidRegister(chara[100]);//用于将输入的字符转换为整型数组元素并储存的函数 voidplus(charb[100]);//加法函数,将b所储存的数加到a上 voidprint();//输出函数 }; voidnumber: : Register(chara[100])//转换函数 { inti; l=strlen(a); for(i=0;i { num[l-i-1]=a[i]-'0'; } } voidnumber: : plus(charb[100])//加法函数 { inti; intnumb[100]; intlb=strlen(b); for(i=0;i { numb[lb-i-1]=b[i]-'0'; } if(l>lb) { for(i=lb;i numb[i]=0; } if(l { for(i=l;i num[i]=0; } num[l]=0; numb[lb]=0; intm=0; for(i=0;i<=l||i<=lb;i++) { num[i]=num[i]+numb[i]+m; m=num[i]/10; num[i]=num[i]%10; } num[i]=m; l++; } voidnumber: : print()//输出函数 { inti=l-1; while(num[i]==0) i--; for(;i>=0;i--) cout< } intmain() { numberw; chara[100],b[100]; cout<<"输入正整数a: \n"; cin>>a; w.Register(a);//检验程序具有输入功能 cout<<"输入要加上的数b: \n"; cin>>b; cout<<"计算结果是: \n"; w.plus(b);//程序具有加法功能 w.print();//程序具有输出功能 cout< return0; } 2.实验结果: (1)位数相同,不进位: (2)位数不同,无进位: (3)进位: (4)开头含0: (5)能处理长数字: 3.问题分析: (1)需要解决的主要问题: ①将字符转换为数组储存下来,在储存的时候,为了便于解决进位的问题,故将其个位为num[0],以便在最高位置后再加元素。 ②开头0的处理: 输出的时候将开头的0避开。 ③进位的处理: 将低一位的两个对应数字以及上一个m加起来之后求其除以10的商,然后加到高位数字上;将所得的余数作为低位的结果。 ④考虑到最高位位数会变化,所以将最高位之上的一位初始为0,若最后结果没有导致最高位进位,则由于是0,输出时被避开。 (2)不足: 仍有一些问题没有完善,存在一些漏洞。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西安交大C 程序设计第七章作业 西安 交大 程序设计 第七 作业