简单计算器.docx
- 文档编号:24633747
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:16
- 大小:57.68KB
简单计算器.docx
《简单计算器.docx》由会员分享,可在线阅读,更多相关《简单计算器.docx(16页珍藏版)》请在冰豆网上搜索。
简单计算器
目录
摘要1
前言2
正文3
1.问题描述3
2.逻辑设计4
3.详细设计5
4.程序调试与测试10
5.软件安装和使用说明书15
设计总结16
参考文献17
致谢18
摘要
此次的课程设计内容为数据结构长整数算法的实现,整个程序是为了实现长整数的加法,有5个函数,其中主函数,输入、输出函数已经占了3个,只有执行加法的add函数,和测试用的text函数的算法比较复杂容易出错。
利用本程序可以实现长整数加法的计算。
关键词:
数据结构;C语言;长整数运算
前言
设计长整数运算程序,实现两个任意长的整数求和及差的运算问题。
通过该题目的设计过程,可以加深理解线性表的逻辑结构、存储结构,掌握线性表上基本运算的实现,进一步理解和熟练掌握课本中所学的各种数据结构,学会如何把学到的知识用于解决实际问题,培养了动手能力。
正文
1.问题描述
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
2.逻辑设计
ADTLixt{
数据对象:
D={ai∣ai∈ElemSet,i=1,2,…,n,n≥0}
数据关系:
R1={
基本操作:
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.详细设计
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.软件安装和使用说明书 1、本程序的运行环境为DOS操作系统 2、进入演示程序后即显示文本方式的用户界面 3、进入界面后,就会提示输入字符串的输入形式,结束符为“回车符”。 4、接受其他命令后继执行相应运算和现实相应结果 设计总结 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。 在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针……通过这次课程设计之后,我把前面所学过的知识又重新温故了一遍。 参考文献 1.严蔚敏,吴伟民.《数据结构(C语言版)》.清华大学出版社. 2.严蔚敏,吴伟民.《数据结构题集(C语言版)》.清华大学出版社. 3.《DATASTRUCTUREWITHC++》.WilliamFord,WilliamTopp.清华大学出版社(影印版). 4.谭浩强.《c语言程序设计》.清华大学出版社. 5.数据结构与算法分析(Java版),APracticalIntroductiontoDataStructuresandAlgorithmAnalysisJavaEditionCliffordA.Shaffer,张铭,刘晓丹译 电子工业出版社2001年1月 致谢 感谢老师,在课堂上我学得到很多实用的知识,在此表示感谢! 同时,对给过我帮助的所有同学和其他的老师再次表示衷心的感谢! 此次课程设计,感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在做课设的这些的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。 我认为,在这学期的实验中,在收获知识的同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找大量资料,请教老师和同学。 使我再专业知识和动手实践方面都得了到很好的提升,在此,要对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢! 课设的成功,少不了老师的耐心指导和同学的热心帮助,以及小组中其他成员的大力配合。 没有大家的默契,也收获不了今日的成功,在课设的过程中每一个人都努力查找资料,仔细检查,认真核对,都付出了自己的努力和艰辛,在此,谢谢所有人的努力和帮助,才使实验能够得以顺利地完成。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 计算器