2022年数据结构课程长整数四则运算设计报告 .pdf
《2022年数据结构课程长整数四则运算设计报告 .pdf》由会员分享,可在线阅读,更多相关《2022年数据结构课程长整数四则运算设计报告 .pdf(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、长整数的四则运算1. 问题描述设计一个实现任意长的整数进行加法运算的演示程序。2. 需求分析1. 本程序实现计算任意长的整数的四则运算. 以用户和计算机对话的方式,先后输入数字的最多位数,然后程序就计算并显示出这两个数的运算。2. 利用双向循环链表现实长整数的存储,每个结点含一个整形变量。 输入的形式以回车结束,可以直接输入正数或负数,程序会过滤掉无效的字符。按中国对于长整数的表示习惯,每四位一组,除数字和位于首位置的负号外,其它一切字符都将作为分隔符,连续多个分隔符当一个处理。但不使用分隔符也不影响结果。3. 测试数据(1)0; 0; 输出“0”;(2)-2345,6789; -7654,3
2、211; 输出 “- 1,000,000 ”;(3)-9999,9999; 1,0000,0000,0000; 输出 “9999,0000,0001 ”;(4)1,0001,0001; -1,0001,0001; 输出 “0”;(5)1,0001,0001; -1,0001,0001; 输出 “1”;(6)-9999,9999,9999;-9999,9999,9999;输出“ -1,9999,9999,99 98”;(7)1,0000,9999,9999; 1; 输出 1,0001,0000,0000. 3. 概要设计为实现上述程序功能,应以双向循环链表表示长整数。为此,需要定义一个抽象数据类
3、型。1. 抽象数据类型定义为: ADT OrderedList 2. 数据对象: D=ai|aiint,i=1,2,.n, n0 基本操作:init(&a,digit4) 操作结果:构造一个位数是digit4*4长整数。pass(&a,&b,&c) 初始条件: a,b,c 都已存在操作结果: c 等于 a 和 b 的和。nep(&a) 初始条件: a 已存在。操作结果: a 变为输入参数的相反数。printlong(&a) 初始条件: a 已存在。操作结果:按四位一组,分隔符为, 的格式,在屏幕上输出a。ston(&S,&a) 初始条件: a 已存在。操作结果:把字符串形式的长数字赋给a。AD
4、T OrderedList 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 3. 本程序包含两个模块:1)主程序模块:Void main() 选择操作:1:帮助。2:加法。3:减法。4:乘法。5:除法。6:退出。打印结果; 4. 详细设计1. 元素类型,结点类型,指针类型#define NULL 0 #include #include #include typedef struct longnode /* 每个节点的结构 */
5、int num; /* 数字*/ struct longnode *low1; /* 指向低一位节点 */ struct longnode *high1; /* 指向高一位节点 */ longnode; typedef struct xlong /* 每个长整数的结构 */ longnode *High; /* 每个长整数的最高节点 */ longnode *Low; /* 每个长整数的最低节点 */ int digit4; /* 每个长整数的总位数 ( 不包括高位的 0)/4 */ *xlong; int init(xlong *a,int digit4) int I; /*.init.*/
6、 longnode *j; (*a)=(xlong)malloc(sizeof(struct xlong);/*为 a 的头结构申请空间 , 并赋初始值 */ (*a)High=NULL;(*a)-Low=NULL; (*a)-High=NULL; (*a)-Low=NULL; (*a)-digit4=0;for(i=0;inum=0;j-high1=NULL; j-low1=(*a)-High; if(*a)-High) (*a)-High-high1=j; else 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整
7、理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - (*a)-Low=j;(*a)-High=j;(*a)-digit4+; int pass(xlong a,xlong b,xlong c) int cf=0; /* 两个数字的相加 */ longnode *a1=a-Low,*b1=b-Low,*c1=c-Low; while(a1)c1-num=a1-num+b1-num+cf; if(c1-num9999) cf=1; /* 如果产生进位 (借位) */ c1-num-=10000; elsecf=0; a1=a1-high1;b1=b1-hig
8、h1;c1=c1-high1; return cf; /* 最高位的进位 ( 借位) */ int passa(xlong a,xlong b,xlong c) int cf=0; /* 两个数字的相减 */ longnode *a1=a-Low,*b1=b-Low,*c1=c-Low; while(a1)c1-num=a1-num-b1-num-cf; if(c1-num9999)cf=1;/* 如果产生进位 (借位) */ c1-num-=10000; elsecf=0; a1=a1-high1;b1=b1-high1;c1=c1-high1; return cf; /* 最高位的进位 (
9、 借位) */ int passb(xlong a,xlong b,xlong c) int cf=0;/* 两个数字的相乘 */ longnode *a1=a-Low,*b1=b-Low,*c1=c-Low; while(a1)c1-num=a1-num*b1-num*cf; if(c1-num9999) cf=1; /* 如果产生进位 ( 借位) */ c1-num=10000; elsecf=0; a1=a1-high1;b1=b1-high1;c1=c1-high1; return cf; /* 最高位的进位 (借位) */ int passc(xlong a,xlong b,xlon
10、g c) int cf=0;/* 两个数字的相除 */ longnode *a1=a-Low,*b1=b-Low,*c1=c-Low; while(a1) c1-num=a1-num/b1-num/cf; if(c1-num9999) cf=1; /* 如果产生进位 ( 借位) */ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - c1-num-=10000; else cf=0; a1=a1-high1;b1=b1-high1
11、;c1=c1-high1; return cf; /* 最高位的进位 ( 借位) */ nep(xlong a) /* 求 a 的相反数 */ int cf=1; /* 因为求相反数是取反加一 , 所以这里 cf=1; */ longnode *a1=a-Low; while(a1) a1-num=9999-(a1-num)+cf; if(a1-num9999) a1-num=10000; elsecf=0;a1=a1-high1; return; printlong(xlong a) longnode *i=a-High;/* 打印长整数 a */ if(i-num=5000) printf
12、(-); /* 最高位 (bit)=1表示负数 , 即用补码表示 */ nep(a); /* 求反打印其绝对值 */ while(i&i-num=0) i=i-low1; /* 跳过最位的 0 */ if(i)printf(%d,i-num); i=i-low1; if(i) printf(“, ”);else printf(“0”);/* a=0 打 0 */ while(i)printf(%04d,i-num); if(i-low1) printf(,); i=i-low1; int ston(char in,xlong out) /* 把字符串转化为数字赋给a */ int bit,i,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年数据结构课程长整数四则运算设计报告 2022 数据结构 课程 整数 四则运算 设计 报告
限制150内