长整数的代数计算数据结构课程设计.doc
《长整数的代数计算数据结构课程设计.doc》由会员分享,可在线阅读,更多相关《长整数的代数计算数据结构课程设计.doc(31页珍藏版)》请在三一办公上搜索。
1、课 程 设 计 报 告课程设计名称:数据结构课程设计课程设计题目: 长整数的代数计算院(系):专 业:计算机科学与技术 班 级: 学 号: 姓 名: 指导教师: 目 录1 题目介绍和功能要求11.1 题目介绍11.2 功能要求11.3 基本功能12 系统功能模块结构图22.1 系统功能结构框图22.2 系统主要模块的功能说明23 使用的数据结构的描述43.1 数据结构设计43.2 数据结构用法说明44 函数的描述54.1主要函数设计54.2 主要函数流程图65程序测试和运行的结果115.1 程序测试115.2 运行结果126参考文献14附 录(关键部分程序清单)15 1 题目介绍和功能要求1.
2、1 题目介绍 设计数据结构完成长整数的表示和存储,并编写算法来实现两个长整数的加、减、乘、除等基本代数运算。1.2 功能要求1) 长整数长度在一百位以上。2) 实现两长整数在同余代数下的加、减、乘、除操作。即实现算法来求解a+b mod n,a-b mod n,a*b mod n,ab mod n。3)输入输出均在文件中。(选作)1.3 基本功能1. jiafa();将一百位以上的长整数进行加法运算,计算出和。2. jianfa();将一百位以上的长整数进行减法运算,计算出差。3. chenfa();将一百位以上的长整数进行乘法运算,计算出积。4. chufa(); 将一百位以上的长整数进行除
3、法运算,计算出商和余数。2 系统功能模块结构图2.1 系统功能结构框图图2.1 系统功能结构框图2.2 系统主要模块的功能说明1. 主模块kongzhi();控制输入模块、加法模块、减法模块、乘法模块、除法模块、输出模块的循环使用。2. 输入模块shuru();将输入的两组长整数分别通过转换将其转换成所需要的形式存储到两个链表(opr1、opr2)中保存起来。3. 加法模块 jiafa();将链表opr1、opr2中的数据进行加法运算,并且二者的将加和保存到链表oprr中。4. 减法模块 jianfa();将链表opr1、opr2中的数据进行减法运算,并且将二者的差保存到链表oprr中。5.
4、乘法模块 chengfa();将链表opr1、opr2中的数据进行乘法运算,并且将二者的乘积保存到链表oprr中。6. 除法模块 chufa();将链表opr1、opr2中的数据进行加法运算,并且将二者的商和余数分别保存到链表quti、remand中。7. 输出模块 shuchu(); 将链表oprr、quti、remand中的数据保存到字符数组中,并且将字符数组中的数据输出到屏幕上。3 使用的数据结构的描述3.1 数据结构设计将输入的两个长整数首先保持到字符数组中,然后将字符数组中的字符转换每四个一组,利用双向循环链表来实现每一组字符的存储,并且高位在前、低位在后。每个结点中只存储四位十进制
5、数字,即不超过9999的非负整数。利用两个双向循环链表分别保持了两个非负长整数。加法:由低位的结点开始相加,加和大于9999时,加和除以一万取余数保存到新的双向循环链表结点中,并且加和除以一万取整数作为进位加到下两个结点相加中,依次循环相加;减法:同加法有些相似,保证第一个长整数不小于于第二个长整数,结点相减,不能相减就相前一结点借位,差保存到新的双向循环链表结点中,依次循环;乘法:由低位的结点开始相乘,乘积大于9999时,乘积除以一万取余数保存到新的双向循环链表结点中,并且乘积除以一万取整数作为进位加到下两个结点乘积中,依次循环相乘;除法:开辟两个新的链表,保存商数和差。用第一个长整数循环减
6、去第二个长整数,没减一次计数加一,计数保存到商数链表中。直到差小于第二个长整数停止循环,最后的计数为商值,差值为余数。选择该数据结构来完成长整数的加减乘除运算是因为要对长整数进行运算,需要对长整数进行存储,所以选择用链表对长整数存储,又由于存储的顺序是从左到右,而运算的顺序则是从右到左,这样位了操作方便选择循环链表,在运算过程中有进位和借位的操作,所以最终选择双向循环链表的数据结构。3.2 数据结构用法说明输入的两个长整数必须为非负长整数。加法计算时只要保证两个数都为非负数即可,减法、乘法、除法时需要保证第一个长整数大于第二个长整数。同时乘法、除法计算时第二个数不能为零,并且输入的数一定要合法
7、,最高位不能为零,否则程序会提示输入有误。4 函数的描述4.1 主要函数设计1. shuru ();作用:将输入的两个长整数分别保存到两个链表中。2. jiafa();作用:将两个长整数进行加法运算,计算出二者的和。3. jianfa();作用:将两个长整数进行减法运算,计算出二者的差。4. chengfa ();作用:将两个长整数进行乘法运算,计算出二者的积。5. chufa(); 作用: 将两个长整数进行除法运算,计算出二者的商和余数。6. shuchu();作用: 将保存到链表中的计算结果输出。4.2 主要函数流程图1. kongzhi(): 图4.2.1控制函数流程图 2. jiafa
8、(); 图4.2.2加法函数流程图 3. jianfa(); 图4.2.3减法函数流程图4、chengfa();图4.2.4乘法函数流程图 5、chufa(); 图4.2.5除法函数流程图5程序测试和运行的结果5.1 程序测试1、程序开始菜单: 图5.1.1 菜单图 2、程序退出:图5.1.2退出程序图5.2 运行结果1、加法运算:图5.2.1除法运算图2、减法运算:图5.2.2除法运算图3、乘法运算:图5.2.3除法运算图4、除法运算:图5.2.4除法运算图6参考文献1谭浩强著. C程序设计( 第三版). 北京: 清华大学出版社,20052严蔚敏 吴伟明.数据结构(C语言版).北京:清华大学
9、出版社,20073 王裕明.数据结构与程序设计.北京:清华大学出版社,20104 谭浩强.C语言程序设计M.北京:清华大学出版社,20055 王敬华 林萍 张清国.C语言程序设计教程M.北京:清华大学出版社,2005附 录(关键部分程序清单)#include stdafx.h#include#include#include#include#define LEN sizeof(struct Node)#define MAX 1000#define OK 1#define ERROR 0#define OVERFLOW -1#define TRUE 1#define FALSE 0typedef
10、int Status;typedef struct Node int data;struct Node *prior,*next;Node,*NodeList;int axp(int a,int k) /求指数函数值int r=1;if(k=0)return 1;for(;k0;k-)r=r*a;return r;Status zhuanhuan(char str,NodeList &oprh) /输入转换函数/将字符串形式的操作数转换成所需的类型NodeList p;int i,k,buffer;k=buffer=0;oprh=(NodeList)malloc(LEN);oprh-next=
11、oprh;oprh-prior=oprh;for(i=strlen(str)-1;i=0;i-)if(i!=0 | (str0!=- & str0!=+)&(stri9 | strinext-prior=p; p-prior=oprh; p-next=oprh-next; oprh-next=p; p-data=buffer; buffer=k=0;return OK;Status shuru(NodeList &opr1,NodeList &opr2,char str)/输入函数int flag=OK; printf(nn请输入第一个操作数:n);scanf(%s,str);getchar(
12、);flag=zhuanhuan(str,opr1); while(!flag) printf(整数输入有误,请重新输入:n); scanf(%s,str);getchar(); flag=zhuanhuan(str,opr1);printf(nn请输入第二个操作数:n);scanf(%s,str);getchar();flag=zhuanhuan(str,opr2); while(!flag) printf(整数输入有误,请重新输入:n); scanf(%s,str);getchar(); flag=zhuanhuan(str,opr2);return OK;/输出函数Status shuc
13、hu(NodeList oprr,char str)Status initbuf(char str);NodeList p;int i,j,num4;if(!oprr)return ERROR;p=oprr;i=j=0;initbuf(str);p=p-next;if(p-next=oprr & p-data=0)/若要输出的数为0则执行stri+=0;else while(p!=oprr) num0=p-data/1000; num1=(p-data-num0*1000)/100; num2=(p-data-num0*1000-num1*100)/10; num3=p-data-num0*1
14、000-num1*100-num2*10; while(jnext; j=0;stri=0;printf(%s,str);printf(n);return OK;Status initbuf(char str)/缓冲区部分初始化函数int i;for(i=0;iprior;p2=opr2-prior;while(p1-prior!=opr1 & p2-prior!=opr2)p1=p1-prior;p2=p2-prior;if(p1-prior!=opr1)return 1;if(p2-prior!=opr2)return -1;return 0;int length(NodeList opr
15、r) /求链表长度int count=0;NodeList p=oprr-next;while(p!=oprr)count+;p=p-next;return count;Status Creat(NodeList &oprr,int len) /生成指定长度链表NodeList p;oprr=(NodeList)malloc(LEN);p=oprr;while(len0)p-next=(NodeList)malloc(LEN);p-next-data=?;p-next-prior=p;p=p-next;len-;p-next=oprr;oprr-prior=p;return OK;int co
16、mpare(NodeList opr1,NodeList opr2) /比较opr1、opr2绝对值的大小NodeList p1,p2;p1=opr1-next;p2=opr2-next;if(cmplinklen(opr1,opr2)=1)/opr1比较长return 1; else if(cmplinklen(opr1,opr2)=-1)/opr2比较长return -1; else/长度相等的情况 while(p1-data=p2-data & p1-next!=opr1) p1=p1-next; p2=p2-next;if(p1-datap2-data)return 1;else if
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 整数 代数 计算 数据结构 课程设计
链接地址:https://www.31ppt.com/p-2388941.html