自由函數计算器设计思想.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
自由函數计算器设计思想

目 录 第1章 自由函数计算器 1 1.1 分析函数应有功能 1 1.2 可能遇到的问题 1 1.3 设计及思路及流程 1 1.4 问题解决方案 2 1.4.1 运算符与操作数的识别 2 1.4.2 如何比较运算符的优先级 3 1.4.3 如何实现四则运算 3 1.4.4 如何实现三角函数的计算 3 1.4.5 如何实现负数的输入 3 1.4.6 如何使程序有良好的拓展性 3 1.4.7 如何解决输入错误问题 3 1.5 所调用的函数 4 1.6 附录 4 1.6.1 可能输错的形式 4 1.7 流程图 5 第1章 自由函数计算器 分析函数应有功能 能进行“+”“-”“*”“/”四则运算及三角函数的表达式的运算 能进行包含“(”“)”的运算 能进行“sin(x)”“cos(x)”“tan(x)”运算 可能遇到的问题 运算符的优先级比较问题 输入错误问题 负数的输入问题 对操作数的计算 怎样实现三角函数的运算 怎样使程序有良好的拓展性 怎样判断操作数输入完成 设计及思路及流程 栈结构具有“后进先出”的固有属性,借助这个属性我们可以随时对刚输入的元素进行操作,从而实现边输入边计算。 写到这个地方,就会产生疑问。输入时怎样区分运算符和操作数?在输入浮点数或多位数时,怎样断定操作数已输完并将其整体存入操作数栈?于是我们考虑定义一个函数Q(x)用于 识别运算符和各种类型的操作数,并分别存入运算符栈和操作数栈。 最基本的只包含“+”“-”“*”“/”的表达式都是由运算符和操作数组成的,这样的一个表达式都可以分解为一个一个的二元运算,所以我们可以定义一个函数F(x,y)用于完成各种类型的二元运算。譬如“3+5*4/2+6”这个表达式的分解如下图 那怎样才能让计算机按照一定的顺序将一个表达式一步一步分解为一个一个二元运算呢?于是我们根据运算法则制定一个函数G(x,y)用于比较运算符的优先级,G(x,y)通过遵循下面的表格中的内容来实现它的功能。 表1.1 简单符号优先级 a[n-1] a[n] + - * \ + - * \ 而我们现在需要处理的表达式还包含“(”“)”和“sin(x)、cos(x)、tan(x)”,于是我们考虑是否可以将“(”“)”和“sin(x)、cos(x)、tan(x)”也作为运算符。首先我们将“sin(x)、cos(x)、tan(x)”分别简化为一个字符“s”“c”“t”。然后我们经分析得出如下表格 表1.2 符号优先级 a[n-1] a[n] + - * \ ( ) s c t # + - * \ ( = ) = S c t # = 加入三角函数和“()”后我们发现,三角函数是一元运算函数,所以我们又需要定义一个一元运算函数H(x)用于计算“sin(x)、cos(x)、tan(x)”。 到此,我们的设计思想基本清楚啦。但考虑到在输入时可能输错的情况,我们需要对输入的字符先进行检验。而且在输入第一个运算符之前要提前输入一个字符“#”其优先级要低于任何运算符,以便将第一个运算符输入运算符栈。当“#”与“#”相遇,则表达式求值结束。 问题解决方案 运算符与操作数的识别 操作数与运算符均以字符型输入,然后对输入的字符判断其值大小,若在0~9之间或为“.”,则暂将其存到一个字符型数组b[]当中,直到遇见输入字符为运算符后,再将b[]中所存元素进行转换并存入操作数栈;若不在0~9之间,则该字符为运算符,经检验后存入运算符栈。对于上面所说转换我们可以进行举例说明。如输入“123.45”,则b[]=“123.45”, 首先查找“.”为第i个元素,则定义浮点数m=1*10^3+2*10^2+3*10^0+4*10^(-1)+5*10^(-2),然后将m的值存 入操作数栈,清空b[]。 如何比较运算符的优先级 定义函数G(x,y),x为栈顶元素,y为其下面的元素。函数G(x,y)根据表1.2的内容对x (a[n])和y (a[n-1])进行比较。当xy时,继续输入下一个字符;当xy时

文档评论(0)

fv45ffsjjI + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档