1、复数运算的演示程序【实验题目】实验 1. 抽象数据类型.【问题描述】用 C 或 C+语言设计并实现一个可进行复数运算的演示程序。【基本要求】1.由输入的实部和虚部生成一个复数2.两个复数求和3.两个复数求差4.两个复数求积【实现提示】定义复数为由两个相互之间存在次序关系的实数构成的抽象数据类型,则可以利用实数的操作来实现复数的操作。(下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距 18,字号: 小四)一、 【实验构思(Conceive)】(10%)(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识)复数由实部和虚部构成,可以通过
2、一个含有两个元素的结构体来实现复数的表示,并且通过接受用户的输入,可以实现复数的生成。 对于复数的四则运算,可以 编写四个函数,通过函数的调用来实现相应的运算。加减法:(a + bi)(c + di)=(a c )+(b d)i乘法:(a + bi)*(c + di)=(ac - bd)+(ad + bc)i除法: 22()()()biidadcd二、 【实验设计(Design)】(15%)(本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系)功能:能够显示和构造复数,并且能进行复数的加减乘除运算。主程序模块:void main(
3、)float a,b,c,d;fushu f1,f2,plu,min,mul;printf(“请按实部虚部的顺序依次输入两个复数:“);scanf(“%f%f%f%f“,getfushu (f1,a,b); /*调用 getfushu 函数,构造复数 f1*/getfushu (f2,c,d); /*调用 getfushu 函数,构造复数 f2*/printf(“n 您输入的第一个复数是:“);printfushu (f1); printf(“n 您输入的第二个复数是:“);printfushu (f2);plusfushu (plu,f1,f2); /*调用 plusfushu 函数,使复数
4、 f1,f2 相加*/printf(“n 相加结果为:“);printfushu (plu); minusfushu (min,f1,f2); /*调用 minuscomplex 函数,使复数 f1,f2 相减*/printf(“n 相减结果为:“);printfushu (min);multifushu (mul,f1,f2); /*调用 multifushu 函数,使 f1,f2 相乘*/printf(“n 相乘结果为:“);printfushu (mul);printf(“n“);子程序模块:void getfushu (fushu /*构造复数*/void plusfushu (fus
5、hu /*实现 复数的相加*/void minusfushu (fushu /*实现复数的相减*/void multifushu (fushu /*实现复数的相乘*/void printfushu (fushu f); /*显示复数*/三、 【实现描述(Implement)】(25%)(本部分应包括:抽象数据类型具体实现的函数原型说明、 关键操作实现的伪码算法、 函数设计、函数间的调用关系,关键的程序流程图等,给出关键算法的时间复杂度分析。)void getfushu (fushu通过接受两个数据来构造一个复数 f,其中 a 为复数的 实部, b 为复数的虚部。void plusfushu (
6、fushu接收两个复数,并对其进行加法运算,将运算结果保存在 plu 里。void minusfushu (fushu对复数 f1,f2 进行减法运算,并将运算结果保存在 min 里。void multifushu (fushu对复数 f1,f2 进行乘法运算,并将运算结果保存在 mul 里。void printfushu (fushu f);将复数 f 显示出来。四、 【测试结果(Testing)】(20%)(本部分应包括:对实验的测试结果,应具体列出每次测试所输入的数据以及输出的数据,并对测试结果进行分析总结)测试一:输入的两个复数分别为 3.1 和 4.22+8.9i,其操作及 显示结果
7、如下请按实部虚部的顺序依次输入两个复数:3.1 0 4.22 8.9您输入的第一个复数是:3.100000您输入的第二个复数是:4.220000+8.900000i相加结果为:7.320000+8.900000i相减结果为:-1.120000-8.900000i相乘结果为:13.081999+27.589998i测试二:输入的两个复数分别为 9.7i 和-2.1-9.7i,其操作及显示结果如下请按实部虚部的顺序依次输入两个复数:0 9.7 -2.1 -9.7您输入的第一个复数是:+9.700000i您输入的第二个复数是:-2.100000-9.700000i相加结果为:-2.100000相减结
8、果为:2.100000+19.400000i相乘结果为:94.089996-20.369999i四、 【实验总结】(10%)(本部分应包括:自己在实验中完成的任务,注意组内的任意一位同学都必须独立完成至少一项接口的实现;对所完成实验的经验总结、心得)实验总结、心得:经过这次实验, 发现模块化编程能够使得程序变得简练,清晰,便于 读者阅读,利于自己改进。实验中,从复数的构造,到加减乘的运算,再到结果的输出都是通过函数来实现的。另一方面,在这次实验中发现自己对基本知识的掌握还是不牢固,运行程序时出现了好多错误,后面又通过仔细的观察,才找出了错误的地方。 这次实验,让我复习了 C 的使用方法,并熟
9、练掌握了结构体的定 义和使用。这次实验还让我对抽象数据类型的含义有了更深的了解。五、 【项目运作描述(Operate)】(10%)(本部分应包括:项目的成本效益分析,应用效果等的分析。 )该项目投入了较多的时间,进行了多次修改,效益方面还可以,能 进行简单的复数四则运算。应用效果上还不尽人如意,程序简单,界面也相当简陋,进行一些不合理的输入时,得不到理想的回应,缺乏人性化设计,在用户提示上有所欠缺。六、 【代码】(10%)(本部分应包括:完整的代码及充分的注释。 注意纸质的实验报告无需包括此部分。格式统一为,字体: Georgia , 行距: 固定行距 12,字号: 小五)#include#i
10、ncludetypedef structfloat real;float imag;fushu;void getfushu(fushuvoid plusfushu(fushuvoid minusfushu(fushuvoid multifushu(fushuvoid printfushu(fushu f);void getfushu(fushu f.imag=b;void plusfushu(fushuplu.imag=f1.imag+f2.imag;void minusfushu(fushumin.imag=f1.imag-f2.imag;void multifushu(fushumul.i
11、mag=(f1.real*f2.imag)+(f1.imag*f2.real);void printfushu(fushu f)if (f.real!=0)printf(“%lf“,f.real);if (f.imag0)printf(“+“);printf(“%lfi“,f.imag);else if(f.imag0)printf(“%lfi“,f.imag);void main()float a,b,c,d;fushu f1,f2,plu,min,mul;printf(“请按实部虚部的顺序依次输入两个复数:“);scanf(“%f%f%f%f“,getfushu(f1,a,b);getfushu(f2,c,d);printf(“n 您输入的第一个复数是:“);printfushu(f1);printf(“n 您输入的第二个复数是:“);printfushu(f2);plusfushu(plu,f1,f2);printf(“n 相加结果为:“);printfushu(plu);minusfushu(min,f1,f2);printf(“n 相减结果为:“);printfushu(min);multifushu(mul,f1,f2);printf(“n 相乘结果为:“);printfushu(mul);printf(“n“);