网站大量收购独家精品文档,联系QQ:2885784924

数据结构试验报告-Read.DOC

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构试验报告-Read

《数据结构》实验报告 任意大数的家加减乘运算器 班姓 名 学 号实验目: 实验目的:实验内容:一需求分析 二概要设计void Plus_or_Minus(HugeNum *Num1,HugeNum *Num2,HugeNum *Num3,char op)同时实现加减两种操作,用参数char op来区分是加法还是减法;根据“第一个操作数是正是负”、“运算符是加是减”、“第二个操作数是正是负”可以将所有可能性的加法减法分为2*2*2=8种可能性,再将这8种情况根据相似性规则分为3组,具体的分组如下: (+)+(+)(+)-(-):作为第①②组 (+)-(+)(+)+(-):作为第③④组 (-)+(+)(-)-(-):作为第⑤⑥组 (-)+(-)(-)-(+):作为第⑦⑧组 根据分组后的情况,具体做以下处理:①若第一个操作数为负数,则对第一个操作数的所有位进行取相反数;②若是加法且第二个操作数为负数,则对第二个操作数的所有位进行取相反数;③若是减法且第二个操作数为正数,则对第二个操作数的所有位进行取相反数。其他情况则不做该类操作。 根据以上的分组并且进行完“加和操作”(这个功能由函数char Plus(HugeNum* Num1,HugeNum* Num2,HugeNum* Num3)来实现,返回的是标志结果正负性的字符)之后,根据Plus()函数返回的标志运算结果正负性的字符( ‘+’和‘-’)进行相关的“修正操作”(这个功能由函数void FinalResult(HugeNum* num,char c)来实现),“修正操作”的具体规则如下: Ⅰ、结果是正数时: ①对于非负位:(*+进位)%10,并修改此时的进位(*表示被操作的数值,进位在程序中用up 来表示); ②对于负数位:(100+*)%10,且它的前一位(*-1)。 Ⅱ、结果是负数时: ①对于非正位:(*取反+进位)%10,并修改此时的进位; ②对于负数位:(100-*)%,且它的前一位(*+1)。 以上规则是本人自己总结,虽未经过严格数学证明,但实践证明基本无误。 经过以上“修正操作”之后,Num3中已经存储了最终结果的完全形式,再使用void PrintNum()函数将Num3打印出来即可。 乘法操作是用函数void Muilt(HugeNum* Num1,HugeNum* Num2,HugeNum* Num3)来实现,乘法实现的具体思路是:对第二个操作数从最低位开始,假设每一位的数字是n,那么就对第一个操作数进行n次的加法操作(即循环调用加法函数n次),每一次运算的中间结果存放在一个数组NUM[11]中,因为至多只有9个中间结果,每次用Num1加上NUM[i]中的结果赋值给NUM[i+1],并将最后的结果赋值给Temp[2]数组中的某一个来存储,另一个在下次使用,依次轮换使用,用I=(I+1)%2来控制,而且将NUM[11]数组再次进行初始化以备下次操作使用。 三详细设计typedef struct bitenode { int bite;//存该位的数值 struct bitenode *nextbite;//存下一位地址 struct bitenode *prebite;//存上一位地址 }BiteNode;//位结点(用来构成双向链表) typedef struct { int NP;//该数的正负性 BiteNode *Dot;//该数小数点位置的地址 BiteNode *Lowest;//该数的最低位地址 BiteNode *Highest;//该数最高位地址 }HugeNum;//大数结构 主函数模块: void main(void) { HugeNum Num1,Num2,Num3,Num4,Num5; //分别是操作数1,操作数2,“和”结果大数,“差”结果大数,“乘积”结果大数 char add[10]=add.txt; char minus[10]=minus.txt; char muil[10]=muil.txt;//存放三个运算结果的文件 InitNum(Num1); InitNum(Num2); InitNum(Num3); InitNum(Num4); InitNum(Num5); //初始化大数 BuildHugeNum(Num1); BuildHugeNum(Num2); //分别构造两个大数 Plus_or_Minus(Num1,Num2,Num3,+); //作加法运算 Plus_or_Minus(Num1,Num2,Num4,-); //作减法运算 printf(两个大数之和是:\n); PrintNum(Num3,add); printf(\n); getchar();//打印和

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档