数据结构 计算器求大数.

上传人:我** 文档编号:115332795 上传时间:2019-11-13 格式:DOC 页数:16 大小:245.50KB
返回 下载 相关 举报
数据结构 计算器求大数._第1页
第1页 / 共16页
数据结构 计算器求大数._第2页
第2页 / 共16页
数据结构 计算器求大数._第3页
第3页 / 共16页
数据结构 计算器求大数._第4页
第4页 / 共16页
数据结构 计算器求大数._第5页
第5页 / 共16页
点击查看更多>>
资源描述

《数据结构 计算器求大数.》由会员分享,可在线阅读,更多相关《数据结构 计算器求大数.(16页珍藏版)》请在金锄头文库上搜索。

1、 C+程序设计课程设计说明书 计算器求大数院 部: 计算机与信息科学学院 学生姓名: 专 业: 软件工程 班 级: 1401 完成时间: 2015年6月 目 录1. 设计概要31.1 设计背景31.2 数据结构设计32. 需求分析42.1 基本需求42.2 实现功能43. 算法设计53.1 概要说明53.2 模块间调用关系53.3 详细说明(Abstract Data Type描述)53.4 流程图及主要函数模块说明63.4.1. 判断运算符优先权6(1) 算符优先关系表6(2) 算法代码63.4.2. 主操作函数7(1) 算法概要流程图7(2) 操作过程8(3) 算法代码83.4.3 二元运

2、算函数9(1) 算法代码104. 测试结果114.1 简单表达式求值114.2 复杂表达式求值115. 总结125.1 改进思想125.2 经验和体会12参考文献14附 录15源程序151. 设计概要1.1设计背景利用数组存储,根据需要改变大小。转化乘除法的思想,将乘法转化为加法,将除法转化为减法,减少程序计算的难度。1.2数据结构设计1.乘法用逐位相乘由各位到高位一次进行,然后初步确定计算结果的长度 s1i = c1len1 - i -1 - 0 将字符串转化为整型,并反着存放。2.除法转化为减法的思想来计算,大大降低计算设计的难度,利用数来存储。并可以根据计算位数要求设计数组大小以满足需求

3、。3.通过主函数来实现函数的调用。2.1 需求分析 在调查与科研实验中经常需要计算位数相对较大的加减乘除法,但是计算机本身提供的数据类型无法保存几百位甚至上千位的。所以针对超过手机与计算器计算位数的四则运算,设计出能实现长整数运算的程序。2.1 实现功能大数加法:输入两个位数较大的数,实现加法计算。大数减法:输入两个位数较大的数,实现减法计算,但不能计算结果为负数的数。大数乘法:输入两个位数较大的数,实现乘法计算。大数除法:输入两个位数较大的数,实现除法计算,计算结果只保留整数。进制转换:指定输入什么进制的数,可将其转变成任意进制数4. 测试结果图4-1主菜单图4-2 大数加法图4-3 大数除

4、法图4-4 进制转换5. 实验总结51改进思想1减法不能用小数减去大数,即不能有负数结果。2除法不能保留小数点后的数字,精确度还有待提高。3程序的界面也还有待改进,可以进一步将界面进行美化5.2 经验和体会大数的四则运算虽然不难,但是要打破常规,将乘法与除法换一种思想来计算,构思方面有很大的挑战。在这次试验中我们认识到了对于特别长的数的计算,只能化整为零,先求局部的结果,然后将各部分的结果综合起来,得到最终的结果。比如加法就是从最低位开始计算,判断进位后再向高位计算。但是乘除法虽然进行了转换,但是数字如果太大的话,进行加减法的次数也是很庞大的。本程序是分工完成的,所以我们也充分认识到了团队协作

5、的重要性,通过一起的讨论与分工,我们能得出解决问题的最好办法,各抒己见,在争论中互相成长。此外,这次的课程设计进一步加强了我们进行编程,调试,处理问题的能力,加深了我们对算法及数据结构的认识,对于程序的一些基本结构也更加地熟悉,课本知识也能够更加熟练地运用。同时我们也意识到,开发程序的早期计划要做的充分,以免出现程序完成后发现不足而带来的修改麻烦。虽然这只是一个小小的程序,但对我们之后的影响确实很大的。参考文献谭浩强. C+程序设计(第四版). 清华大学出版社,2010年6月谭浩强. C语言程序设计(第四版). 清华大学出版社,2010年6月崔进平 等. 数据结构(C语言版). 北京:中国铁道

6、出版社,2008年11月Stephen Prata. C Primer Plus中文版(第五版).人民邮电出版社,2005年2月附 录源程序#includeusing namespace std;#include#include#include#include#include#define NUM 1000typedef struct STACKNOTE char data; STACKNOTE* next; LinkStack,*STACK;int Init_stack();int Empty_Stack();int Stack_conversion();int Pop_Stack();in

7、t Push_Stack_Elem();void menu();void numzero(int s);void strzero(char s);void add(char a1,char a2);void jian(char b1,char b2);void cheng(char c1,char c2);void chu(char d1,char d2);void menu() system(cls); int count=0; printf(nnt*计算器*n); printf(t1.大数加法n); printf(t2.大数减法n); printf(t3.大数乘法n); printf(t4

8、.大数除法n); printf(t5.进制转换n); printf(t*nn); int num;void jian(char b1,char b2) int v1NUM; int v2NUM; int v3NUM,L,i,z; numzero(v1); numzero(v2); numzero(v3); L=strlen(b1); for (i=0; iL; i+) v1i=b1L-1-i-0; L=strlen(b2); for (i=0; iL; i+) v2i=b2L-1-i-0; for (i=0; iNUM; i+) v3i=v1i-v2i; /* for(i=0;i9;i+) c

9、outv3i ; coutendl; */ int jw=0; for (i=0; iNUM; i+) if(v3i=0; i-) if(v3i=-1&z=0) printf(-); v3i=abs(v3i); break; if(v3i!=0 & v3i!=-1) z=1; z=0; printf(n计算结果为:); for (i=NUM-1; i=0; i-) if (z=0) if (v3i!=0) printf(%d,v3i); z=1; else printf(%d,v3i); if (z=0) printf(0); printf(n); printf(请按任意键返回n); getc

10、har(); getchar(); getchar(); menu();void cheng(char c1,char c2) int s1NUM,s2NUM, ssNUM;/s1,s2:两个乘数;s:乘积的结果 int i, j, k, c; int len1, len2, len; len1 = strlen(c1); len2 = strlen(c2); len = len1 + len2;/初步确定乘积的长度 for(i = len1 - 1; i = 0; i-) s1i = c1len1 - i -1 - 0;/将字符串转化为整型,并反着存放 for(i = len2 - 1; i = 0; i-) s2i = c2len2 - i - 1 - 0; numzero(ss); for(i = 0; i = len1 -1; i+) for(j = 0; j = len2 -1; j+) ssi + j = ssi + j + s1i * s2j;/逐位相乘 for(i = 0, c = 0; i = len - 1; i+) /处理

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号