简单的LISP算术表达式计算器..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文档。上传文档
查看更多
简单的LISP算术表达式计算器.

沈阳航空工业学院 课 程 设 计 (说明书) 简单LISP 算术表达式计算器 班级 / 学号 7402101-024 学 生 姓 名 田青林 指 导 教 师 贾亮 题目分析 本题目是设计一个简单的LISP算术表达式计算器。 简单LISP算术表达式(以下简称表达式)定义如下: 一个0..9的整数;或者 (运算符 表达式 表达式)?例如,6,(+45),(+(+25)8)都是表达式,其值分别为6,9和15。 算术表达式不同于普通的普通的表达式,不是简单的从左向右(或是从右向左)的计算, 它包含了算术运算符和算术量,计算的过程就是要根据算术运算符的优先关系将其所对应得量的每一位进行计算,最后得到结果。 初步思想是建立一个栈列,将变量存储进去,通过每步中对头两个算术量的求和,最后将结果存储到栈头,输出。运算的要点如下: 从左到右地扫描表达式 扫描到操作数时,直接输出。 第二次扫描到‘(’时进行递归调用,从头进行扫描。 扫描到算术量时将其压入栈,并与前一个压入栈的算术量求和。 最后的栈头元素即为所求。 设计过程(程序流程图) 根据本课设题目的要求,本设计程序依据利用栈依次从里向外计算括号内数的思想设计成一个简单的LISP算术表达式计算器。该程序首先建立一个栈,通过PUSH函数和POP函数的入栈,出栈功能实现栈中元素“先进后出,后进先出”的特性。然后动态建立一大小为K的整型数组,把开辟的数组指针赋给a,从而实现栈函数的构造过程。然后再建立栈的对象,再建立一个字符型数组ch,然后向该数组输入表达式,最后进入表达式判断阶段。若LISP表达式为一操作数,则直接输出;若该表达式为运算符,则经过主函数的扫描计算,最终输出结果。 2.1栈的建立 这是一个子函数stack(int k=100),首先建立一个足够大的栈,动态定义其大小为100,然后对其置空初始化,再根据判断其是否为空返回不同的值。其设计流程图如图1。 图1:栈的建立 2.2入栈 这是一个子函数PUSH,首先赋给输入值k,再判断栈是否为非空,若为非空则将k压入栈中;若为满栈,则输出错误。其流程图如图2所示。 图2:PUSH函数 2.3出栈 这是一个子函数POP,首先判断是否非空,若是则输出栈头元素a[top],若不是,则返回0并参与运算。其设计流程图如图3所示。 图3:POP函数 2.4构建函数 首先动态开辟一个大小为K的数组,然后把开辟数组的指针赋给a,然后将K-1赋给Big,将-1赋给Top,从而实现函数的构造过程,函数构造完毕,退出此进程,此段程序结束。其设计流程图如图4所示。 图4:构建函数 2.5主函数 这是整个程序的核心所在。首先要建立一个栈V1,将所求表达式赋值给字符变量ch。接下来就是从头扫描字符,这也是一个循环的过程。若ch[i]不是‘(’,则直接入栈,若是则跳向下下个字符,;再判断是不是‘(’?,若不是,则将ch[i]入栈,跳向下一个字符;再判断是不是‘(’?,若还不是则入栈。这其中?若是,?若是则都要进行从头扫描。接下来进行一个总的判断“!=‘(’!=‘)’?”, 若成立,跳向下一字符,若不成立跳过本步;接下来判断是否为‘)’,若是则把入栈的两个元素出栈后相加再入栈,跳向下一字符。最后对此循环作一个判断,若ch[i]是0则接着进行循环,若不是则跳出循环输出栈顶元素,即为所求。其设计流程如图5所示。 三、调试过程及实验结果 3.1调试过程: 本程序在调试的过程中遇到了很多问题,首先程序中有不少的缀余成分,尤其是总循环的部分本来就是一个很复杂的逻辑问题,有缀余更是会使理解难上加难,这一部分是通过一步一步调试更正的。最后得到的程序能完成题目中所给的要求。主要的主函数的修改如下图所示。 修改前 修改后 3.2实验结果: (1)运行程序之后,会看到一个如 图6所示的LISP计算器的界面,还可以看到题目要求、姓名、学号、指导老师等。这也是一个待输入界面。 图5:主函数 图6:计算器界面 (2)每一次输入数据以后,都要回车再输入ctrl+z,然后再回车,就能得到所需结果。这其中ctrl+z是结束流。首先计算6。如图7所示。 图7:计算“6”

文档评论(0)

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

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

1亿VIP精品文档

相关文档