《2022年数据结构Lab复数的四则运算》由会员分享,可在线阅读,更多相关《2022年数据结构Lab复数的四则运算(6页珍藏版)》请在金锄头文库上搜索。
1、学号:20081120064 姓名:李雪寒【实验题目】实验 1. 抽象数据类型 . 【问题描述】用 C 或 C+语言设计并实现一个可进行复数运算的演示程序。【基本要求】1. 由输入的实部和虚部生成一个复数2. 两个复数求和3. 两个复数求差4. 从已知复数中分离出实部和虚部5. 复数及相应运算结果以相应的表现形式显示。【实现提示】定义复数为由两个相互之间存在次序关系的实数构成的抽象数据类型,则可以利用实数的操作来实现复数的操作。一、 【概要设计】熟悉抽象数据类型的表示和实现方法。抽象数据类型需借助固有数据类型来表示和实现,即利用处理器中已存在的数据类型来说明新的结构,用已经实现的操作来组合新的
2、操作。 抽象数据类型可以使我们更容易描述现实世界。例:用线性表描述学生成绩表, 用树或图描述遗传关系。 对一个抽象数据类型进行定义时,必须给出它的名字及各运算的运算符名, 即函数名,并且规定这些函数的参数性质。一旦定义了一个抽象数据类型及具体实现,程序设计中就可以像使用基本数据类型那样,十分方便地使用抽象数据类型。抽象数据类型的描述包括给出抽象数据类型的名称、数据的集合、数据之间的关系和操作的集合等方面的描述。主程序模块:printf( 请输入第一个复数的实部和虚部,中间以空格隔开:); scanf( %f %f ,&a,&b); printf( 请输入第二个复数的实部和虚部,中间以空格隔开:
3、); scanf( %f %f ,&c,&d); /* 输入两个复数的实部和虚部*/ 云南大学软件学院数据结构实验报告指导教师: 2009秋季学期名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - CreatCo mplex(c1,a,b); PrintCo mplex(c1); Printreal(c1); Printimage(c1); CreatCo mplex(c2,c,d); PrintCo mplex(c2); Prin
4、treal(c2); Printimage(c2); /* 通过调用 CreatCo mplex(),PrintComplex(),Printreal(),printimage()函数,用输入的实部和虚部生成复数并输出出来,再从中分离出实部和虚部*/ AddCo mplex(Sum,c1,c2); PrintCo mplex(Sum);/*求和 */ SubComplex(Sub,c1,c2); PrintCo mplex(Sub);/*求差 */ MulCo mplex(Mul,c1,c2); PrintCo mplex(Mul);/*求积 */ 子程序模块:void CreatComple
5、x(Complex& c,float a,float b) c.real = a; c.image = b; /* 构造复数,包括实部和虚部*/ void AddComplex(Co mplex& sum,Co mplex c1,Co mplex c2) sum.real = c1.real + c2.real ; sum.image = c1.image + c2.image ; /* 求和 */ voidSubComplex(Co mplex& Sub,Co mplex c1,Co mplex c2 ) Sub.real = c1.real -c2.real ; Sub.image = c
6、1.image - c2.image ; /* 求差 */ void MulCo mplex(Co mplex& Mul,Complex c1,Co mplex c2 ) Mul.real = c1.real * c2.real - c1.image * c2.image ; Mul.image = c1.real * c2.image + c1.image * c2.real ; /* 求积 */ void PrintCo mplex(Co mplex c) if (c.image = 0.0) printf(%5.2fn ,c.real );/*所要输出的复数虚部为零时的情况*/ else
7、 if(c.real=0.0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - printf( %5.2fin ,c.image); /*所要输出的复数实部为零时的情况*/ else printf( %5.2f+%5.2fin,c.real ,c.image ); /*所要输出的复数实部虚部都不为零时的情况*/ /* 按复数的形式输出复数*/ void Printreal(Co mplex c) printf( 该复数的实部是:
8、%5.2fn ,c.real); /* 输出复数的实部 */ void Printimage(Co mplex c) printf( 该复数的虚部是:%5.2fn ,c.image); /* 输出复数的虚部 */ 二、 【详细设计】1、分别编写出对两个复数求和、求差、求积以及输出复数和复数的实部虚部的函数,通过在主程序中调用这些函数,来达到实验要求。2、将复数定义为由两个相互之间存在次序关系的实数构成的抽象数据类型,利用实数的操作来实现复数的操作。三、 【测试结果】测试数据:1)3.1,0;4.2,8.9 2)-1.33,2.34;1,0.9 测试结果:1)3.10 该复数的实部是: 3.10
9、 该复数的虚部是: 0.00 4.2+8.90i 该复数的实部是: 4.20 该复数的虚部是: 8.90 7.30+8.90i -1.10+-8.90i 13.02+27.59i 2)-1.33+2.34i 该复数的实部是: -1.33 该复数的虚部是: 2.34 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - 1.00+0.90i 该复数的实部是: 1.00 该复数的虚部是: 0.90 -0.33+3.24i -2.33+1.
10、44i -3.44+1.14i 四、 【实验总结】1. 通过学习以前C 语言课程中的函数思想 ,可以重新熟悉函数在编程中的设置方法,熟悉函数中参数的设置和传递过程. 2. 通过多个函数出现在同一个程序中的实现,便于熟悉全局变量和局部变量在程序中的不同作用域的问题. 3. 通过抽象数据类型的运用,更好地熟悉抽象数据类型的概念和功能。五、 【代码】#include #include typedef struct Complex float real; float image; Complex; void CreatComplex(Complex& c,float a,float b); void
11、AddComplex(Co mplex& sum,Co mplex c1,Co mplex c2 ); void SubComplex(Co mplex& Sub,Co mplex c1,Co mplex c2 ); void MulCo mplex(Co mplex& Mul,Complex c1,Co mplex c2 ); void PrintCo mplex(Co mplex c); void CreatComplex(Complex& c,float a,float b) c.real = a; c.image = b; void AddComplex(Co mplex& sum,C
12、o mplex c1,Co mplex c2) sum.real = c1.real + c2.real ; sum.image = c1.image + c2.image ; voidSubComplex(Co mplex& Sub,Co mplex c1,Co mplex c2 ) Sub.real = c1.real -c2.real ; Sub.image = c1.image - c2.image ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 -
13、- - - - - - - - void MulCo mplex(Co mplex& Mul,Complex c1,Co mplex c2 ) Mul.real = c1.real * c2.real - c1.image * c2.image ; Mul.image = c1.real * c2.image + c1.image * c2.real ; void PrintCo mplex(Co mplex c) if (c.image = 0.0) printf(%5.2fn ,c.real ); else if(c.real=0.0) printf( %5.2fin ,c.image);
14、 else printf( %5.2f+%5.2fin,c.real ,c.image ); void Printreal(Co mplex c) printf( 该复数的实部是:%5.2fn ,c.real); void Printimage(Co mplex c) printf( 该复数的虚部是:%5.2fn ,c.image); void main() float a,b,c,d; Complex c1,c2,Sum,Sub,Mul; printf( 请输入第一个复数的实部和虚部,中间以空格隔开:); scanf( %f %f ,&a,&b); printf( 请输入第二个复数的实部和虚
15、部,中间以空格隔开:); scanf( %f %f ,&c,&d); CreatCo mplex(c1,a,b); PrintCo mplex(c1); Printreal(c1); Printimage(c1); CreatCo mplex(c2,c,d); PrintCo mplex(c2); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - Printreal(c2); Printimage(c2); AddCo mplex(Sum,c1,c2); PrintCo mplex(Sum); SubComplex(Sub,c1,c2); PrintCo mplex(Sub); MulCo mplex(Mul,c1,c2); PrintCo mplex(Mul); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -