- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)