抽象数据类型..doc_第1页
抽象数据类型..doc_第2页
抽象数据类型..doc_第3页
抽象数据类型..doc_第4页
抽象数据类型..doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验1. 抽象数据类型.【问题描述】用C或C+语言设计并实现一个可进行复数运算的演示程序。【基本要求】1.由输入的实部和虚部生成一个复数2.两个复数求和3.两个复数求差4.从已知复数中分离出实部和虚部5.复数及相应运算结果以相应的表现形式显示。【实现提示】定义复数为由两个相互之间存在次序关系的实数构成的抽象数据类型,则可以利用实数的操作来实现复数的操作。(下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四)一、【实验构思(Conceive)】(10%)(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识)算法分析:1、 设计一个可进行复数运算的演示程序。实现抽象数据类型复数,及构造复数。2、 完成复数四则运算的函数声明。3、 主程序接收和输出复数。4、 Switch函数选择所要进行的运算,输出运算结果。二、【实验设计(Design)】(15%)(本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系)抽象数据类型的定义:1、 数据对象:由结构体类型定义一个复数。2、 数据关系:(1)两个操作数real和imag具有序偶关系,real表示实部,imag表示虚部。 (2)定义c1,c2两个复数,分别用c1.real和c1.imag等分别表示c1的实部和虚部。3、 基本操作:(1)CreatComplexNumber (cpxNum *c,double a,double b) 操作结果:构造两个复数。 (2)cplus(cpxNum *c,cpxNum c1,cpxNum c2) 操作结果:实现两个复数加法,并输出结果。 (3)cminus(cpxNum *c,cpxNum c1,cpxNum c2) 操作结果:实现两个复数减法,并输出结果。 (4)cmultiply(cpxNum *c,cpxNum c1,cpxNum c2) 操作结果:实现两个复数除法,并输出结果。 (5)cdivide(cpxNum *c,cpxNum c1,cpxNum c2) 操作结果:实现两个复数除法,并输出结果。主程序模块:1、 实现难度A的输入、输出。2、 switch(number) case 1: . break; case 2: . break; case 3: . break; case 4: . break; case 5: . Switch语句实现输出选择,运行过程中,用户可以自己选择所要进行的运算,也可以全部输出结果。3、 在switch语句实现函数调用。各子程序模块:例如:void cplus(cpxNum *c,cpxNum c1,cpxNum c2)c-real=c1.real+c2.real;c-imag=c1.imag+c2.imag;printf(n数据和为:%3.2f%+3.2fin, c-real,c-imag);分别计算复数的实部和虚部,用指针分别指向两个复数,并输出结果。主程序模块与各子程序模块间的调用:在switch语句中实现函数调用。例如:cplus(&c,c1,c2); 函数名(参数)三、【实现描述(Implement)】(25%)(本部分应包括:抽象数据类型具体实现的函数原型说明、 关键操作实现的伪码算法、 函数设计、函数间的调用关系,关键的程序流程图等,给出关键算法的时间复杂度分析。)抽象数据类型具体实现的函数原型说明例如:void cmultiply(cpxNum *c,cpxNum c1,cpxNum c2) c-real=c1.real*c2.real-c1.imag*c2.imag; c-imag=c1.real*c2.imag+c1.imag*c2.real;printf(n数据积为:%3.2f%+3.2fin, c-real,c-imag);C为声明的复数,指向复数的运算结果四、【测试结果(Testing)】(20%)(本部分应包括:对实验的测试结果,应具体列出每次测试所输入的数据以及输出的数据,并对测试结果进行分析总结)选择1时输出结果:选择5时输出所有结果:四、【实验总结】(10%)(本部分应包括:自己在实验中完成的任务,注意组内的任意一位同学都必须独立完成至少一项接口的实现;对所完成实验的经验总结、心得)学得知识:1、 通过本次实验练习创建和调用函数。2、 理解了抽象数据类型,明确一个抽象数据类型ADT就是:数据 + 操作。心得:1、 编写程序时要构造友好的运行界面。2、 忘记了switch语句中case和数字之间要有空格。五、【项目运作描述(Operate)】(10%)(本部分应包括:项目的成本效益分析,应用效果等的分析。)应用效果:1、 基本实现了复数的四则运算,可以让用户自由选择运算类型。2、 有友好的运行界面。3、 为难度C提供了基本算法。六、【代码】(10%)(本部分应包括:完整的代码及充分的注释。 注意纸质的实验报告无需包括此部分。格式统一为,字体: Georgia , 行距: 固定行距12,字号: 小五)#include #include /定义复数类型的存储结构typedef struct double real; /复数的实部double imag; /复数的虚部 cpxNum; /定义结构体类型cpxNum表示“复数” /*复数类型接口函数的定义部分*/ /*用double a, double b 初始化复数c*/ void CreateComplexNumber(cpxNum *c,double a,double b) c-real=a; c-imag=b;/*实现两个复数c1, c2的加法, 和作为结果输出*/ void cplus(cpxNum *c,cpxNum c1,cpxNum c2) c-real=c1.real+c2.real; c-imag=c1.imag+c2.imag; printf(n数据和为:%3.2f%+3.2fin, c-real,c-imag);/*实现两个复数c1, c2的减法, 差作为结果输出*/ void cminus(cpxNum *c,cpxNum c1,cpxNum c2) c-real=c1.real-c2.real; c-imag=c1.imag-c2.imag;printf(n数据差为:%3.2f%+3.2fin, c-real,c-imag);/*实现两个复数c1, c2的乘法, 积作为结果输出*/ void cmultiply(cpxNum *c,cpxNum c1,cpxNum c2) c-real=c1.real*c2.real-c1.imag*c2.imag; c-imag=c1.real*c2.imag+c1.imag*c2.real; printf(n数据积为:%3.2f%+3.2fin, c-real,c-imag);/*实现两个复数c1, c2的除法, 输出结果*/ void cdivide(cpxNum *c,cpxNum c1,cpxNum c2) double result_real,result_imag;c-real = 1/(pow(c2.real,2)+pow(c2.imag,2)*( c1.real*c2.real+c1.imag*c2.imag); c-imag = 1/(pow(c2.real,2)+pow(c2.imag,2)*( c1.imag*c2.real-c1.real*c2.imag); printf(n结果为:%3.2f%+3.2fin, c-real,c-imag);int main( )cpxNum c1, c2,c; /声明两个复数类型的变量double a,b;/声明2个双精度数,用于接收复数的实部和虚部 char e,d;/声明两个字符,用于显示复数的符号 int number; /*输入两个复数*/ printf(输入第一个复数 n ); printf(如果你输入复数的虚部为负数,则在输入虚部之前输入空格): n); scanf(%lf%c%lf%c,&a,&e,&b,&d); CreateComplexNumber(&c1,a,b); printf(你输入的第一个数是: %2.1f%c%2.1fin,a,e,b); printf(输入第二个复数 n);/两个复数输入之间插入空行,使显示明显 printf(如果你输入复数的虚部为负数,则在输入虚部之前输入空格): n); scanf(%lf%c%lf%c,&a,&e,&b,&d); CreateComplexNumber(&c2,a,b); printf(你输入的第二个数是: %2.1f%c%2.1fin,a,e,b); /*调用复数加减乘除函数,并在每个函数中输出运算结果*/ printf(选择一种运算,1为加法,2为减法,3为乘法,4为除法, 5为输出所有结果:); scanf(%d,&number); switch(number) case 1: cplus(&c,c1,c2); break; case 2: cminus(&c,c1,c2); brea

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论