数据结构长整数的加法课程设计.docx

上传人:b****8 文档编号:9582977 上传时间:2023-05-20 格式:DOCX 页数:14 大小:56.23KB
下载 相关 举报
数据结构长整数的加法课程设计.docx_第1页
第1页 / 共14页
数据结构长整数的加法课程设计.docx_第2页
第2页 / 共14页
数据结构长整数的加法课程设计.docx_第3页
第3页 / 共14页
数据结构长整数的加法课程设计.docx_第4页
第4页 / 共14页
数据结构长整数的加法课程设计.docx_第5页
第5页 / 共14页
数据结构长整数的加法课程设计.docx_第6页
第6页 / 共14页
数据结构长整数的加法课程设计.docx_第7页
第7页 / 共14页
数据结构长整数的加法课程设计.docx_第8页
第8页 / 共14页
数据结构长整数的加法课程设计.docx_第9页
第9页 / 共14页
数据结构长整数的加法课程设计.docx_第10页
第10页 / 共14页
数据结构长整数的加法课程设计.docx_第11页
第11页 / 共14页
数据结构长整数的加法课程设计.docx_第12页
第12页 / 共14页
数据结构长整数的加法课程设计.docx_第13页
第13页 / 共14页
数据结构长整数的加法课程设计.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据结构长整数的加法课程设计.docx

《数据结构长整数的加法课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构长整数的加法课程设计.docx(14页珍藏版)》请在冰点文库上搜索。

数据结构长整数的加法课程设计.docx

数据结构长整数的加法课程设计

1绪论

此次的课程设计内容为数据结构长整数加法的实现,整个程序是为了实现长整数的加法,有5个函数,其中主函数,输入、输出函数已经占了3个,只有执行加法的add函数,和测试用的text函数的算法比较复杂容易出错。

利用本程序可以实现长整数加法的计算。

2需求分析

1.因为要实现任意长的整数进行加法运算,本程序使用C语言的整型变量int存放数据,一个int型的变量值的范围为-32768~32767,显然远远不能满足。

因此利用双向循环链表实现长整数的存储,每个结点存放一个整型变量,且只存10进制数的4位,即不超过9999的非负整数,整个链表表示为万进制数。

表头数据域的符号代替长整数的符号。

相加过程不破坏两个操作数链表。

长整数位数没有上限。

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,0001

⑷1,0001,0001;-1,0001,0001;应输出0

⑸1,0001,0001;-1,0001,0000;应输出1

⑹-9999,9999,9999;-9999,9999,9999;应输出-1,9999,9999,9998

⑺1,0000,9999,9999;1;应输出1,0001,0000,0000

3数据结构及详细设计

3.1线性表的数据结构

ADTLixt{

数据对象:

D={ai∣ai∈ElemSet,i=1,2,…,n,n≥0}

数据关系:

R1={∣ai-1,ai∈D,i=2,…,n}

基本操作:

InitList(&L)

操作结果:

构造一个空的线性表

DestroyList(&)

初始条件:

线性表L已存在

操作结果:

销毁线性表L

ClearList(L)

初始条件:

线性表L已存在

操作结果:

将L重置为空表

ListEmpty(L)

初始条件:

线性表L已存在

操作结果:

若L为空表,则返回TRUE,否则返回FALSE

ListLength(L)

初始条件:

线性表L已存在

操作结果:

返回L中数据元素个数

GetElem(L,i.&e)

初始条件:

线性表L已存在,1≤i≤ListLength(L)

操作结果:

用e返回L中第i个数据元素的值

ListInsert(&L,I,e)

初始条件:

线性表L已存在,1≤i≤ListLength(L)+1

操作结果:

在L中第i个位置插入新的数据元素e,L的长度加1

ListDelete(&L,I,&e)

初始条件:

线性表L已存在,且非空,1≤i≤ListLength(L)

操作结果:

删除L的第i个元素,并且用e返回其值,L的长度减1

}ADTList

3.2详细设计

1.节点的定义:

typedefstructnode

{

intdata;

structnode*pre;

structnode*next;

}DataNode;

2.对于程序中数据的输入以及对输入数据检测,主要利用for和while循环语句对输入的数据进行检测和判断:

DataNode*Input()

{

charch[50];

DataNode*temp,*node;

intcount=0,count1=0,i,j,n,sum=0;

scanf("%s",ch);

while(ch[count++]!

='\0');

count--;

node=(DataNode*)malloc(sizeof(DataNode));

temp=node;

count1++;

if(ch[0]=='-'||ch[0]=='+')

{

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;i

{

temp->pre=(DataNode*)malloc(sizeof(DataNode));

temp->pre->next=temp;

temp=temp->pre;

temp->data=0;

for(j=0;j<2&&ch[count]!

='-'&&ch[count]!

='+';j++)

{

if(count<0)

break;

sum=ch[count--]-'0';

for(n=0;n

sum*=10;

temp->data+=sum;

}

}

temp->pre=node;

node->next=temp;

if(ch[0]=='-')

count1=0-count1;

node->data=count1;

returnnode;

}

3.对于数据的输出同样利用for和while循环,通过对条件的判定进行数据的输出。

具体代码实现如下:

voidOutput(DataNode*node)

{

intn,i;

DataNode*temp;

n=node->data;

temp=node->next;

if(n<0)

{

printf("\n-");

n=0-n;

}

for(i=0;i

{

if((n-1-i)%2==0&&i!

=0)

printf(",");

if(n==1)

{

printf("%d",temp->data);

break;

}

if(i==0)

printf("%d",temp->data);

elseif(i==n-2)

printf("%02d",temp->data);

else

printf("%02d",temp->data);

temp=temp->next;

}

}

3.在主函数main中,主要实现链表的定义,以及对于程序的输出提示做好输出,最后再通过switch语句根据条件的不同输出不同的提示语句。

使程序变得更便于使用。

voidmain()

{

DataNode*data1,*data2,*result;

charkey;

charmenus[5][20]={"Pleasechoose:

",

"1:

Inputthedata",

"2:

PlusFunction",

"3:

Quit",

};

inti,flag=0;

for(i=0;i<5;i++)

{

gotoxy(25,i*2+6);

cprintf(menus[i]);

}

scanf("%c",&key);

while(key!

='3')

{

switch(key)

{

case'1':

clrscr();

printf("PleaseInputTheFirstData:

");

data1=Input();

printf("\nPleaseInputTheSecondData:

");

data2=Input();

flag=1;

break;

case'2':

if(flag==0)

{

clrscr();

printf("\016Thereisnodataexisting!

");

}

else

{

clrscr();

result=add(data1,data2);

printf("\nTheresult:

");

Output(result);

getch();

}

break;

}

clrscr();

for(i=0;i<5;i++)

{

gotoxy(25,i*2+6);

cprintf(menus[i]);

}

scanf("%c",&key);

}

4程序的调试与结果

1.本程序的运行环境为DOS操作系统,执行文件为1.exe

2.进入演示程序后即显示如下用户界面(图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:

图4.8

⑶输入-9999,9999;1,0000,0000,0000.结果如图4.9:

图4.9

5课设小结

感谢***老师,在*的的课堂上我学得到很多实用的知识,在此表示感谢!

同时,对给过我帮助的所有同学和其他的老师再次表示衷心的感谢!

此次课程设计,感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在做课设的这些的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针……通过这次课程设计之后,我把前面所学过的知识又重新温故了一遍。

6参考文献

[1]严蔚敏,吴伟民。

数据结构(C语言版)[M].北京:

清华大学出版社,2007.

[2]王立柱,C/C++与数据结构。

北京:

清华大学出版社,2002

[3]吴文虎,程序设计基础。

北京:

清华大学出版社,2003

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2