软件设计 面向对象的实验报告Word格式文档下载.docx
- 文档编号:21898160
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:8
- 大小:17.65KB
软件设计 面向对象的实验报告Word格式文档下载.docx
《软件设计 面向对象的实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《软件设计 面向对象的实验报告Word格式文档下载.docx(8页珍藏版)》请在冰豆网上搜索。
public:
complex(){real=0;
imag=0;
}//复数的实部与虚部的初始化
complex(doubler,doublei){real=r;
imag=i;
}
complexaddCom(complexc2);
voidoutCom();
//加法
complexdec(complexc2);
//减法
complexmultiply(complexc2);
//乘法
complexmade(complexc2);
//除法
doublemodel(complexc2);
//取模
};
complexcomplex:
:
addCom(complexc2)//加法程序的设计
complexc3;
c3.real=real+c2.real;
c3.imag=imag+c2.imag;
returnc3;
dec(complexc2)//减法程序的设计
c3.real=real-c2.real;
c3.imag=imag-c2.imag;
multiply(complexc2)//乘法程序的设计
c3.real=real*c2.real-imag*c2.imag;
c3.imag=real*c2.imag+imag*c2.real;
made(complexc2)//除法程序的设计
c3.real=((real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag))/1.0;
c3.imag=((c2.real*imag-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag))/1.0;
doublecomplex:
model(complexc2)//取模的程序设计
{returnsqrt(c2.real*c2.real+c2.imag*c2.imag);
voidcomplex:
outCom()
{cout<
<
"
("
real<
"
imag<
i)"
endl;
}
intmain()//主函数对复数的运算进行的调用
doubler1,r2,i1,i2;
//对复数赋予初值
cout<
请输入一个复数的实部和虚部:
cin>
>
r1>
i1;
请再输入一个复数的实部和虚部:
r2>
i2;
complexc1(r1,i1),c2(r2,i2);
complexC1,C2,C3,C4;
doubleC5;
C1=c1.addCom(c2);
c1和c2的复数和为:
;
C1.outCom();
C2=c1.dec(c2);
c1和c2的复数差为:
C2.outCom();
C3=c1.multiply(c2);
c1和c2的复数积为:
C3.outCom();
C4=c1.made(c2);
c1和c2的商为:
C4.outCom();
C5=c1.model(c2);
c2的复数模为:
C5<
return0;
(4)调试分析
起初因为在主函数调用的时候总是对c2前进行复数complex的说明,结果导致程序的错误,也因为觉得这是理所当然的正确,所以在找出错误这个环节上就被卡住了。
后来与组长讨论,觉得主函数前不是已经对c2进行了complex的说明,后面再来一次显得多余了。
所以就简单的改成类似C1=c1.addCom(c2)的情况。
结果问题就迎刃而解了。
(5)用户使用说明
用户只需要根据屏幕上提供的字样输入相应的值,就可以运行该程序,而且得到相应的准确值。
关键的是在于一个类的定义以及主函数的编写。
理清自己对运算进行调用其中相关的量是什么,而后一气呵成,因为复数与实数的运算类似,所以调用函数的程序就很简单。
因为调用的都是函数,不是一个复数值,所以在
定义Ci(i=1,2,3,4,5)的complex,进行调用函数的赋值,这样程序就可以运行了。
(6)测试分析
以前就觉得自己在面向对象上比较薄弱,当再次对这个进行编程,刚开始还是有点不知所措,不懂得如何下手。
自己就去翻书深入了解,和组长进行探讨,对输入值的类型以及是否是函数还是一个值,都进行细致研究,虽然成功了,但是在其中遇到的问题还是重复对值进行类型定义,以后要注意了。
面向对象设计题3------利用虚函数手段,按照三种不同的计算方法求出Fiboncci数列的第n项
按照三种不同的计算方法求出Fiboncci数列的第n项,分别是简单变量“数据平移法”,使用数组的实现法,还是就是使用递归函数。
对于自己输入的n的值,三种方法得到相同的答案。
都是“int”的类型,不同于面向过程的就仅仅是“数据平移法”,要求是在虚函数的条件下主函数分别对三个函数进行调用,因为在运行的时候,n的值较大,所以又有了指数类型的函数,三种方法三个独立求解,没有什么特别之处。
#include<
classbaseCla//虚函数的说明以及类的定义
virtualdoublefib(intn)=0;
classfib1Cla:
publicbaseCla
virtualdoublefib(intn);
classfib2Cla:
classfib3Cla:
doublefib1Cla:
fib(intn)//简单变量“数据平移法”的函数说明,此前面向过程已经编写过。
doublec;
if(n==1||n==2)c=1;
else
{
doublec1=1,c2=1;
for(inti=3;
i<
=n;
i++)
{
c=c1+c2;
c1=c2;
c2=c;
}
}
returnc;
doublefib2Cla:
fib(intn)//利用数组进行数列的层层递进,从而达到对第n个值的求解。
doublec[2000];
c[1]=1;
c[2]=1;
c[i]=c[i-1]+c[i-2];
}
returnc[n];
doublefib3Cla:
fib(intn)//递归函数求解,最简单的程序代码
if(n==1||n==2)
c=1;
elsec=fib(n-1)+fib(n-2);
voidfun(baseCla*p,intn)//指数形式得到数列的第n项的值。
doubled=p->
fib(n);
cout.flags(ios:
scientific);
cout.precision(15);
fib("
n<
)="
d<
voidmain()
fib1Claobj1;
fib2Claobj2;
fib3Claobj3;
............fib1Cla.........."
fun(&
obj1,1476);
............fib2Cla.........."
obj2,888);
............fib3Cla.........."
obj3,35);
(4)程序调试
说实话,这三种方法的程序代码并不难,难的是理解题目说明同一个虚函数以及基类和派生类的定义,自己在程序运行的过程中,得到的数组值不正确,通过观察知道了那是数组太短造成溢出,从而导致结果出错。
还有就是不明白这个虚函数好似就是对n进行调用一下,没有特别的功能。
这个程序已经在主函数中对三种方法的n值进行了初值的定义,所以用户在使用的时候如果想知道其他的值,可以对主函数进行稍微的变动,自己来输入n的值。
比如cout<
..........fib1Cla........"
变动成cout<
“请输入一个整数n的值:
”<
cout<
“..........fib1Cla........”<
obj1,n);
就可以了。
其实很简单的。
至于三种方法的程序的代码只要细细分析一下还是很容易就明白。
无外乎就是循环。
(6)设计体会
这次的设计是面向对象的,自己在这次的设计中也遇到了不小的困难,有其是在计算器的设计中,自己刚开始可以说是毫无头绪的,不过经过自己在网查找资料以及在老师的指导和同学的帮助下还是完成了的。
其他的题目也有一些难点,主要是自己对于文件的输出以及操作这一块还是很不熟悉,自己的在课下得在加紧把这一块的不上去。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件设计 面向对象的实验报告 面向 对象 实验 报告