1、数据结构长整数的加法课程设计1 绪 论此次的课程设计内容为数据结构长整数加法的实现,整个程序是为了实现长整数的加法,有5个函数,其中主函数,输入、输出函数已经占了3个,只有执行加法的add函数,和测试用的text函数的算法比较复杂容易出错。利用本程序可以实现长整数加法的计算。 2 需求分析1.因为要实现任意长的整数进行加法运算,本程序使用C语言的整型变量int存放数据,一个int型的变量值的范围为-3276832767,显然远远不能满足。因此利用双向循环链表实现长整数的存储,每个结点存放一个整型变量,且只存10进制数的4位,即不超过9999的非负整数,整个链表表示为万进制数。表头数据域的符号代
2、替长整数的符号。相加过程不破坏两个操作数链表。长整数位数没有上限。2.演示程序以用户和计算机的对话方式执行,在计算机终端上显示提示信息之后,由用户在键盘上输入演示程序中规定的运算命令,相应的输入数据和运算结果显示在后。3.程序执行的命令包括:1)构造链表1存放第一个输入数据2)构造链表2存放第二个输入数据3)求两数之和4)结束4.测试数据0;0;应输出0-2345,6789;-7654,3211;应输出-1,0000,0000-9999,9999;1,0000,0000,0000;应输出9999,0000,00011,0001,0001;-1,0001,0001;应输出01,0001,0001
3、;-1,0001,0000;应输出1-9999,9999,9999;-9999,9999,9999;应输出-1,9999,9999,99981,0000,9999,9999;1;应输出1,0001,0000,00003 数据结构及详细设计3.1 线性表的数据结构ADT Lixt数据对象:D=aiaiElemSet,i=1,2,n,n0数据关系:R1=ai-1,aiD,i=2,,n基本操作:InitList(&L) 操作结果:构造一个空的线性表DestroyList(&) 初始条件:线性表L已存在 操作结果:销毁线性表LClearList(L) 初始条件:线性表L已存在 操作结果:将L重置为空表
4、ListEmpty(L) 初始条件:线性表L已存在 操作结果:若L为空表,则返回TRUE,否则返回FALSEListLength(L) 初始条件:线性表L已存在 操作结果:返回L中数据元素个数GetElem(L,i.&e) 初始条件:线性表L已存在,1iListLength(L) 操作结果:用e返回L中第i个数据元素的值ListInsert(&L,I,e) 初始条件:线性表L已存在,1iListLength(L)+1 操作结果:在L中第i个位置插入新的数据元素e,L的长度加1ListDelete(&L,I,&e) 初始条件:线性表L已存在,且非空,1iListLength(L) 操作结果:删除
5、L的第i个元素,并且用e返回其值,L的长度减1ADT List3.2 详细设计1.节点的定义:typedef struct node int data; struct node *pre; struct node *next;DataNode;2.对于程序中数据的输入以及对输入数据检测,主要利用for和while循环语句对输入的数据进行检测和判断:DataNode* Input() char ch50; DataNode *temp,*node; int count=0,count1=0,i,j,n,sum=0; scanf(%s,ch); while(chcount+!=0); count-
6、; node=(DataNode*)malloc(sizeof(DataNode); temp=node; count1+; if(ch0=-|ch0=+) if(count-1)%2) count1+=(count-1)/2+1; else count1+=(count-1)/2; else if(count%2) count1+=count/2+1; else count1+=count/2; count-; for(i=1;ipre=(DataNode*)malloc(sizeof(DataNode); temp-pre-next=temp; temp=temp-pre; temp-da
7、ta=0; for(j=0;j2&chcount!=-&chcount!=+;j+) if(count0) break; sum=chcount-0; for(n=0;ndata+=sum; temp-pre=node; node-next=temp; if(ch0=-) count1=0-count1; node-data=count1; return node;3.对于数据的输出同样利用for和while循环,通过对条件的判定进行数据的输出。具体代码实现如下:void Output(DataNode *node) int n,i; DataNode *temp; n=node-data;
8、temp=node-next; if(n0) printf(n-); n=0-n; for(i=0;idata); break; if(i=0) printf(%d,temp-data); else if(i=n-2) printf(%02d,temp-data); else printf(%02d,temp-data); temp=temp-next; 3.在主函数main中,主要实现链表的定义,以及对于程序的输出提示做好输出,最后再通过switch语句根据条件的不同输出不同的提示语句。使程序变得更便于使用。void main() DataNode *data1,*data2,*result
9、; char key; char menus520=Please choose:, 1:Input the data, 2:Plus Function, 3:Quit, ; int i,flag=0; for(i=0;i5;i+) gotoxy(25,i*2+6); cprintf(menusi); scanf(%c,&key); while(key!=3) switch(key) case 1:clrscr(); printf(Please Input The First Data:); data1=Input(); printf(nPlease Input The Second Data:
10、); data2=Input(); flag=1; break; case 2:if(flag=0) clrscr(); printf(016There is no data existing!); else clrscr(); result=add(data1,data2); printf(nThe result:); Output(result); getch(); break; clrscr(); for(i=0;i5;i+) gotoxy(25,i*2+6); cprintf(menusi); scanf(%c,&key); 4 程序的调试与结果1.本程序的运行环境为DOS操作系统,执
11、行文件为1.exe2.进入演示程序后即显示如下用户界面(图4.1):图4.1以上为主界面,只有简单的三个功能,只要输入每个选项前面的数字,然后按ENTER键便能实现。选择功能1后,界面如图4.2:图4.2这是要求输入第一个加数。输入完毕后按ENTER键继续。要求输入第二个加数,如图4.3:图4.3两个加数输入完毕以后返回主界面,此时要相加的两数已经存入计算机。然后执行功能2,把刚才输入的两个数做加法运算,马上在屏幕上显示出结果,如图4.4所示:图4.4一结果测试输入0;如图4.5图4.5结果如图4.6:图4.6输入-2345,6789;-7654,3211.如图4.7图4.7结果如图4.8:图
12、4.8输入-9999,9999;1,0000,0000,0000.结果如图4.9:图4.95课设小结 感谢*老师,在*的的课堂上我学得到很多实用的知识,在此表示感谢!同时,对给过我帮助的所有同学和其他的老师再次表示衷心的感谢!此次课程设计,感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在做课设的这些的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针通过这次课程设计之后,我把前面所学过的知识又重新温故了一遍。6参考文献1 严蔚敏,吴伟民。数据结构(C语言版)M. 北京:清华大学出版社, 2007.2王立柱,C/C+与数据结构。北京:清华大学出版社,20023吴文虎,程序设计基础。北京:清华大学出版社,2003
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2