




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【实验题目】 实验1. 抽象数据类型.【问题描述】用C或C+语言设计并实现一个可进行复数运算的演示程序。【基本要求】1.由输入的实部和虚部生成一个复数2.两个复数求和3.两个复数求差4.从已知复数中分离出实部和虚部5.复数及相应运算结果以相应的表现形式显示。【实现提示】定义复数为由两个相互之间存在次序关系的实数构成的抽象数据类型,则可以利用实数的操作来实现复数的操作。(下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四)一、【实验构思(Conceive)】(10%)(本部分应包括:描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识)1. 首先构造结构体数组接受储存数据2. 构造函数进行模块运算3. 应用到了算法中的抽象数据类型ADT(即数据+操作),数据部分包括实部和虚部;操作部分包括加分Plus、减法Minus、乘法Multiply、除法Divide4. 运用到了复数的基本知识及四则运算法则:设 z1=a + bi,z2=c + di,(a,b,c,dR,)加减法:(a + bi)(c + di)=(a c )+(b d)i乘法:(a + bi)*(c + di)=(ac - bd)+(ad + bc)i除法: 二、【实验设计(Design)】(15%)(本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系)解答:抽象数据类型 数据部分:用结构体(数组)实现复数的储存结构 操作部分:实现复数的输入、存储、运算及输出程序模块伪码说明:#define N 2int n=0; /控制选择语句,及检验输入是否正确typedef structdouble real;/复数的实部double imag;/复数的虚部paramater; /paramater是结构体变量的类型表示“复数”,声明复数的存储结构paramater cpxNumN;/构造结构体数组储存数据paramater result;/构造result结构体储存结果int main()/实现第一个复数的输入储存 coutrealimag; outs(c0.real,c0.imag)/初始化复数c0并实现输出 /实现第二个复数的输入储存coutrealimag;puts( c0.real,c0.imag);/初始化复数c1并实现输出/复数运算cout c1 + c2的结果是: ; puts(plus(c0,c1); cout endl; /调用plus函数运算加法,再用puts函数输出结果复数cout c1 - c2的结果是: ; puts(milus(c0,c1); cout endl; /调用mlius函数运算减法,再用puts函数输出结果复数cout c1 * c2的结果是: ; puts(multiply(c0,c1); cout endl; /调用multiply函数运算乘法,再用puts函数输出结果复数cout c1 / c2的结果是: ; puts(divide(c0,c1); cout endl; /调用divide函数运算除法,再用puts函数输出结果复数 return 0; 三、【实现描述(Implement)】(25%)(本部分应包括:抽象数据类型具体实现的函数原型说明、 关键操作实现的伪码算法、 函数设计、函数间的调用关系,关键的程序流程图等,给出关键算法的时间复杂度分析。)解答:抽象数据类型:数据部分,复数的储存结构typedef structdouble real;/复数的实部double imag;/复数的虚部paramater; /paramater是结构体变量的类型表示“复数”操作部分:l 主程序:定义声明、初始化基本变量,实现复数的输入与存储,调用puts函数输出复数,通过if条件语句选择运算及选择验证,运用循环语句重新输入选择,得到正确选择后调用plus、milus、multiply、divide函数分别进行四则运算l 调用函数程序及调用关系:void puts(double,double); /实现复数的输出void plus(paramater,paramater);/实现复数的加法运算,结果调用puts函数输出void milus(paramater,paramater);/实现复数的减法运算,结果调用puts函数输出void multiply(paramater,paramater);/实现复数的乘法运算结果调用puts函数输出void divide(paramater,paramater);/实现复数的除法运算,结果调用puts函数输出关键的程序流程图:四、【测试结果(Testing)】(20%)注释: 实现第一个复数的输入实部为2,虚部为3实现第一个复数的输出2+3i实现第二个复数的输入实部为42,虚部为2、实现第二个复数的输出42+2i,输出含有字符长度控制运算的选择选择出错提示重新选择,选择2表示选择减法运算输出计算结果四、【实验总结】(10%)(本部分应包括:自己在实验中完成的任务,注意组内的任意一位同学都必须独立完成至少一项接口的实现;对所完成实验的经验总结、心得)1. 程序的实现首先要明确程序设计的目的和算法,明确所应用到的离散数学、工程数学知识等。2. 在这部分实验中应用到了复数四则运算的基本知识,和抽象数据类型的概念,而抽象数据类型中的数据部分包括复数的储存结构,操作部分应当包括四种复数运算。3. 在程序设计过程中首先明确程序的基本模块,可以用伪码先表示出,然后再根据需要添加步骤逐步完善程序:如对输入的校验,运用循环结构提示重新输入;运用条件句型选择运算;对输入输出字符长度的限定等。4. 程序设计应当保持明确的思路,尽可能在完善简化程序的过程中优化程序,如:应用函数调用简化主程序,使得程序思路更加明确清晰。在函数调用过程中应当注意函数调用的基本格式,明确函数间调用关系,如:主程序通过调用plus、milus、multiply、divide函数分别进行四则运算,而这几个程序又通过调用puts函数实现复数运算结果的输出等。5. 可以应用流程图帮助理解设计程序,通过对算法时间度分析得到最优化的程序设计,多次重复运行程序并改变输入以校验程序的可行性。五、【项目运作描述(Operate)】(10%)(本部分应包括:项目的成本效益分析,应用效果等的分析。)1. 这次实验的目的是用C或C+语言设计并实现一个可进行复数运算的演示程序。2. 我所设计的程序已满足基本要求,可以实现复数的输入输出、两个复数基本四则运算及运算结果的输出,并且运用了循环和条件语句实现运算的选择及校验。3. 这个程序只能针对两个复数的四则运算,并且只能进行一次运算,时间复杂度为线性阶,因此对于两个复数的基本运算效益较高,但如果要实现多个复数的运算只能多次进行程序的运行,效益较低。4. 本程序只是通过演示程序实现输入输出,没有类似于计算器的基本界面,但是通过对输入输出的字符控制,基本实现的演示程序的美观性及可读性。六、【代码】(10%)#include #include#include math.h#define N 2typedef structdouble real;double imag;paramater; /paramater是结构体变量的类型paramater cpxNumN;paramater result;void puts(double,double); int n=0; /控制选择语句,及检验输入是否正确void plus(paramater,paramater); void milus(paramater,paramater);/*实现两个复数c1, c2的减法, 差作为函数cmilus的返回值*/void multiply(paramater,paramater); /*实现两个复数c1, c2的乘法, 积作为函数cmultiply的返回值*/ void divide(paramater,paramater); /*实现两个复数c1, c2的乘法, 商作为函数cdivide的返回值*/int main()printf(t请输入第一个复数的实部:); scanf(%lf,&cpxNum0.real);printf(nt请输入第一个复数的虚部:);scanf(%lf,&cpxNum0.imag); puts(cpxNum0.real, cpxNum0.imag); printf(t请输入第二个复数的实部:); scanf(%lf,&cpxNum1.real);printf(nt请输入第二个复数的虚部:);scanf(%lf,&cpxNum1.imag); puts( cpxNum1.real, cpxNum1.imag); printf(tt请选择运算:n); printf(t1、加法;2、减法;3、乘法;4、除法n);printf(tt请输入您的选择:);do scanf(%d,&n); if(n!=1 & n!=2 & n!=3 & n!=4) printf(tt您输入有误!请重新输入:);while( n!=1 & n!=2 & n!=3 & n!=4);if (n=1)plus(cpxNum0,cpxNum1); else if (n=2) milus(cpxNum0,cpxNum1); else if (n=3)multiply(cpxNum0,cpxNum1); else if (n=4)divide(cpxNum0,cpxNum1); else printf(tt选择出错n);printf(tt运算结束);return 0; void puts( double r, double i)if(n=0)printf(nt您输入的复数是:%lf + %lf inn,r,i);else printf(nt计算得到的复数是:%lf + %lf inn,r,i);void plus(paramater c1,paramater c2)result.real=c1.real+c2.real;result.imag=c1.imag+c2.imag;puts(result.real,result.imag);void milus(paramater c1,paramater c2)/*实现两个复数c1, c2的减法, 差作为函数cmilus的返回值*/result.real=c1.real-c2.real;result.imag=c1.imag-c2.imag;puts(result.real,result.imag);void multiply(paramater c1,paramater c2) /*实现两个复数c1, c2的乘法, 积作为函数cmultiply的返回值*/ /(ac - bd)+(ad + bc)i result.real=(c1.real*c2.real)-(c1.imag*c2.imag);result.imag=(c1.real*c2.imag)+(c1.imag*c2.real);puts(result.real,result.imag);void divide(paramater c1,paramater c2) /*实现两个复数c1, c2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 混凝土浇筑申请书
- 高中助学奖学金申请书
- 创建俱乐部申请书英语
- 工程申请书表格
- 爱德基金申请书
- 投运申请书模板
- 最早的入团申请书
- 行政补偿申请书答复书
- 选举村委员申请书
- 2025房屋赠与合同范本
- GB/T 21063.4-2007政务信息资源目录体系第4部分:政务信息资源分类
- GA/T 1081-2020安全防范系统维护保养规范
- 02药物不良反应adr课件
- 施工项目成本管理课件
- 文物建筑保护修缮专项方案
- 营销与2008欧锦赛ktv渠道方案
- 故障录波器课件
- DB32-T 2665-2014机动车维修费用结算规范-(高清现行)
- 《区域经济学》讲义(1)课件
- 《现代分析测试》17 电子光学基础
- 培训师-- 成本中心培训
评论
0/150
提交评论