实验一(难度B)优秀报告.doc_第1页
实验一(难度B)优秀报告.doc_第2页
实验一(难度B)优秀报告.doc_第3页
实验一(难度B)优秀报告.doc_第4页
实验一(难度B)优秀报告.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

云南大学软件学院 数据结构实验报告 2010秋季学期 (本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)学号:20091120094姓名:廖馥璇 专业:信息安全 指导老师:张德海实验难度A B C 承担任务(难度为C时填写)指导教师评分 87 (签名)【实验题目】 实验1. 抽象数据类型.【问题描述】用C或C+语言设计并实现一个可进行复数运算的演示程序。【基本要求】1.由输入的实部和虚部生成一个复数2.两个复数求和3.两个复数求差4.从已知复数中分离出实部和虚部5.复数及相应运算结果以相应的表现形式显示。【实现提示】定义复数为由两个相互之间存在次序关系的实数构成的抽象数据类型,则可以利用实数的操作来实现复数的操作。一、【实验构思(Conceive)】(10%) 9分 1、开发环境:visual c+ 9.02、基本思路:构造复数(为结构体形式)和复数运算的四种函数;设计复数的输入,采用分步输入的方法,确保操作的正确性;让user选择算法,根据算法的选择调用复数运算的函数;输出结果,程序完成。 3、复数的四则运算: 设 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)】(1520%) 17分(本部分应包括:抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系)1、抽象数据类型cpxNum的定义:ADT cpxNum数据对象:D=c1.real,c1.imag,c2.real,c2.imag,result.real,result.imag| c1.real,c1.imag,c2.real,c2.imag,result.real,result.imag 复数类数据关系:R=,基本操作:cplus(cpxNum c1,cpxNum c2) 初始条件:c1,c2存在。 操作结果:两个复数c1、c2的相加,返回值为cpxNum result。cmilus(cpxNum c1,cpxNum c2)初始条件:c1,c2存在。操作结果:两个复数c1、c2的相减,返回值为cpxNum result。cmultiply(cpxNum c1,cpxNum c2)初始条件:c1,c2存在。操作结果:两个复数c1、c2的相乘,返回值为cpxNum result。cdivide(cpxNum c1,cpxNum c2)初始条件:c1,c2存在。操作结果:两个复数c1、c2的相除,返回值为cpxNum result。ADT cpxNum2、主程序模块:/这部分不需要列出代码,只需说明程序各模块的功能及它们之间的关系即可。#includetypedef struct /定义结构体cpxNum表示“复数”double real; /复数的实部double imag; /复数的虚部cpxNum; 定义4则运算的函数;int main()/声明并初始化3个cpxNum类型的结构体 c1,c2,cresultprintf(输入第一个复数:n);printf(输入实部:);scanf(%lf,&c1.real);printf(输入虚部:);scanf(%lf,&c1.imag);printf(第一个复数的值为:%lf+%lfin,c1.real,c1.imag); /构造第一个复数/以此种方式构造第二个复数doprintf(请选择一种运算:(输入,2,3或)n);printf(1为加法,为减法,为乘法,4为除法:);scanf(%d,&select);while(select4); /如果输入的数字不是-4之间,则重复输入,直到对为止switch(select) /四则运算,用switch语句实验选择case 1:result=cplus(c1,c2); /调用cplus函数进行运算break;case 2:result=cmilus(c1,c2); /调用cmilus函数进行运算break;case 3:result=cmultiply(c1,c2); /调用cmultiply函数进行运算break;case 4:result=cdivide(c1,c2); /调用cdivide函数进行运算break;printf(运算的结果是:(%lf)+(%lf)i,result.real,result.imag);return 0;3、各子程序模块的伪码说明:/实现两个复数c1, c2的加法, 和作为函数cplus的返回值cpxNum cplus(cpxNum&c1,cpxNum&c2) cpxNum r;r.real=c1.real+c2.real;r.imag=c2.imag+c2.imag;return (r);/实现两个复数c1, c2的减法, 积作为函数cmultiply的返回值cpxNum cmilus(cpxNum&c1,cpxNum&c2)cpxNum r;r.real=c1.real-c2.real;r.imag=c1.imag-c2.imag;return (r);/实现两个复数c1, c2的乘法, 商作为函数cdivide的返回值cpxNum cmultiply(cpxNum c1,cpxNum c2)cpxNum r;r.real=c1.real*c2.real-c1.imag*c2.imag;r.imag=c1.real*c2.imag+c1.imag*c2.real;return (r);/实现两个复数c1, c2的除法, 和作为函数cdivide的返回值cpxNum cdivide(cpxNum c1,cpxNum c2) cpxNum r;while(c2.real=0&c2.imag=0)printf(除数不能为,请重新输入除数!n);printf(输入实部:);scanf(%lf,&c2.real);printf(输入虚部:);scanf(%lf,&c2.imag); /若除数为,重新输入除数printf(该复数的值为:%lf+%lfin,c2.real,c2.imag); r.real=(c1.real*c2.real+c1.imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);r.imag=(c1.imag*c1.real-c1.real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);return (r);三、【实现描述(Implement)】(2530%) 26分(本部分应包括:抽象数据类型具体实现的函数原型说明、 关键操作实现的伪码算法、 函数设计、函数间的调用关系,关键的程序流程图等,给出关键算法的时间复杂度分析。)/-函数原型说明-Status cplus(cpxNum c1,cpxNum c2)/初始条件:c1,c2存在。 /操作结果:两个复数c1、c2的相加,返回值为cpxNum result。Status cmilus(cpxNum c1,cpxNum c2)/初始条件:c1,c2存在。/操作结果:两个复数c1、c2的相减,返回值为cpxNum result。Statuscmultiply(cpxNum c1,cpxNum c2)/初始条件:c1,c2存在。/操作结果:两个复数c1、c2的相乘,返回值为cpxNum result。Status cdivide(cpxNum c1,cpxNum c2)/初始条件:c1,c2存在。/操作结果:两个复数c1、c2的相除,返回值为cpxNum result。/-关键操作的实现-Status cpxNum()Double realDouble imagStatus buildcpxNum(cpxNum&c._real,cpxNum&c._imag)printf(输入实部:);scanf(%lf,&c.real);printf(输入虚部:);scanf(%lf,&c.imag);printf(复数的值为:%lf+%lfin,c.real,c.imag);Status chooseFunc(int select)scanf(%d,&select);switch(select) /四则运算,用switch语句实验选择case 1:result=cplus(c1,c2); /调用运算函数break;case 2:result=cmilus(c1,c2);break;case 3:result=cmultiply(c1,c2);break;case 4:result=cdivide(c1,c2);break;/-程序流程图-/关键算法的时间复杂度=O(1)。四、【测试结果(Testing)】(120%) 9分(本部分应包括:对实验的测试结果,应具体列出每次测试所输入的数据以及输出的数据,并对测试结果进行分析总结) 测试后发现一些常用的数据输入后基本无误,可以进行一些常见的数字运算四、【实验总结】(10%) 9 分(本部分应包括:自己在实验中完成的任务,注意组内的任意一位同学都必须独立完成至少一项接口的实现;对所完成实验的经验总结、心得)1、要先仔细考虑好可行的算法,不然程序编到半路发现前后不能很好的连接或者是测试时出错,所以必须要先把思路理顺,把流程理清楚,最后才写代码;2、由于有些C语言的知识已经忘了,所以编程序的同时还要重新学习一遍那一部分需要的知识,这也说明要在实践中掌握知识;3、一开始是直接在swith语句中直接写运算,后来发现不利于C难度的实现,又将其改成函数,在swith语句中调用函数;4、书本是很好的老师,不懂的可以看书,如果书看不懂再问同学,所以同学也是很好的老师,我们应该虚心求教;5、一开始把目标定位在C难度,但是由于长时间没有接触C语言,很多东西都忘了,所以打算先从基本做起,把知识巩固好,再去补充些课外知识,和同学一起做C难度。五、【项目运作描述(Operate)】(10%) 8分(本部分应包括:项目的成本效益分析,应用效果等的分析。)项目需要的成本应为脑力成本,但是只能在B难度的项目只能在ms-dos下运行,属于半成品。效益不高,应用效果不适应大众。六、【代码】(10%) 9分(本部分应包括:完整的代码及充分的注释。 注意纸质的实验报告无需包括此部分给出main()及重要函数的代码,以方便打分。格式统一为,字体: Georgia , 行距: 固定行距12,字号: 小五)#includetypedef struct /定义结构体cpxNum表示“复数”double real; /复数的实部double imag; /复数的虚部cpxNum; cpxNum cplus(cpxNum c1,cpxNum c2) /实现两个复数c1, c2的加法, 和作为函数cplus的返回值cpxNum result;result.real=c1.real+c2.real;result.imag=c2.imag+c2.imag;return (result);cpxNum cmilus(cpxNum c1,cpxNum c2) /实现两个复数c1, c2的减法, 积作为函数cmultiply的返回值cpxNum result;result.real=c1.real-c2.real;result.imag=c1.imag-c2.imag;return (result);cpxNum cmultiply(cpxNum c1,cpxNum c2) /实现两个复数c1, c2的乘法, 商作为函数cdivide的返回值cpxNum result;result.real=c1.real*c2.real-c1.imag*c2.imag;result.imag=c1.real*c2.imag+c1.imag*c2.real;return (result);cpxNum cdivide(cpxNum c1,cpxNum c2) /实现两个复数c1, c2的除法, 和作为函数cdivide的返回值cpxNum result;while(c2.real=0&c2.imag=0)printf(除数不能为,请重新输入除数!n);printf(输入实部:);scanf(%lf,&c2.real);printf(输入虚部:);scanf(%lf,&c2.imag); /若除数为,重新输入除数printf(该复数的值为:%lf+%lfin,c2.real,c2.imag); result.real=(c1.real*c2.real+c1.imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);result.imag=(c1.imag*c1.real-c1.real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);return (result);int main()cpxNum c1=0,0;cpxNum c2=0,0;cpxNum result=0,0;int select=0;printf(输入第一个复数

温馨提示

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

评论

0/150

提交评论