采用C++开发的自函数计算器课程设计.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
采用C开发的自函数计算器课程设计

自由函数计算器 摘要 计算器在当今社会的应用无处不在,大到政府、公司,小到家庭个人,计算器已经广泛应用到了社会的方方面面。。 但是,常用计算器的功能不够丰富,比如我们手机上的计算器程序,通常只能进行简单的加减乘除运算,而且要输入一下就计算一次,功能差而且效率低。 本项目所设计的计算器叫做“自由函数计算器”,属于表达式计算器这一类,它可以任由你输入一串算式,其中可以包含加减乘除、括号、三角函数等各种运算符,而且括号可以多重嵌套,计算数据位双精度型,精确度较高。最重要的是要具备可扩展性,能够方便的进行函数库的扩充和功能升级,为后续二次开发做好准备。 【关键字:计算器 表达式 扩展性】 概述 项目名称:自由函数计算器 开发语言:C/C++语言 功能: 1. 从文件中读取函数的表达式; 2. 解释函数表达式; 3. 完成计算,并把结果保存在该文件当中。 4. 支持的所有的三角函数表达式,对数运算,取模等数学运算符; 5. 支持浮点数运算; 6. 支持括号运算与运算符的优先级; 7. 可方便扩展各种运算; 解决方案: 1.存储方案: 使用动态双向链表建立存储结构,以满足不确定长度输入表达式的存储要求。 2.字符识别方案: 写一套数字转换、运算符转换的函数,将字符串转换为数字和运算符标记量。对数学函数名,编写字典对其进行处理,遍历字典来识别输入的数学函数,并连接到对应的处理程序。 3.优先级分配解决方案: ①内层的括号高于外层的括号。 ②数学函数高于乘除,乘除高于加减。 4.提高扩展性解决方案: 首先,运用函数指针作为数据与处理函数的中间传递者;其次,编写数学函数字典作为函数指针寻找处理函数的仓库。这样,函数指针可以单纯的只面向输入数据和一个字典。而字典里有若干条记录,涵盖所有可处理的函数,格式统一,可由函数指针随意调用。 关键技术 关键技术 本项目主要包括三项关键技术:数学语言的识别、数学优先级的分配和扩展性。这三项技术由程序里的相应三个模块来实现。 数学语言的识别 主要是对+-×÷()和sin cos等数学符号的识别,并准确定位其参数的位置,转换成数学形式,计算出结果。 本项目编写了一个“符号字典”来存储各种可以使用的数学符号,在识别数据时将用户输入的符号与“符号字典”里的符合进行一一比较,找到匹配的时候就识别出来。 本项目所建“符号字典”为: 这是一个结构体,结构体的第一项是一个字符串,内容是数学运算符,第二项是一个函数指针,保存了处理这种数学运算的函数的地址。 这个字典可以随时在末尾追加新的数学函数条目,而无需关心是否连接到函数指针,因为函数指针会遍历这个字典,从而找到相应的处理函数,无论是新加的还是以前已有的。 中间空的两个是给次方符号“^”和取余符号“%”预留的。如果升级双目运算符,可以在“(”前添加,就像在末尾追加新的数学函数条目一样。 用户输入数学函数的格式必须是“函数名称(参数列表)”的形式,括号不能省略,而括号内的参数个数不限,这项技术稍后介绍。 代码清单 2.1 “符号字典” 在增加字典新条目的时候要注意,第一项的字符串必须是小写,因为本项目在处理用户输入的时候会把所有大写转换为小写,然后再与“符号字典” 里的内容比对。 字典第二项是程序里处理某种特定数学符号的子函数的首地址,也就是函数名。例如我们有一个处理sin( )这个数学函数的子函数程序Sin_Math( ),那么这里就写Sin_Math,不带参数列表和括号。 “符号字典”中的每一个条目用一对“{ }”包起来,各个条目之间用“,”间隔。 “符号字典”的每一条内容都分成两段,前一段是与用户输入的数学函数名称相同的字符串,后一段是处理这个数学函数的程序入口地址(程序的函数名),这就需要一个新的数据类型来保存着一条内容。于是本项目里构建了一个结构体来存储它。下面代码清单 2.2是“符号字典”结构体的定义: 代码清单 2.2 “符号字典”结构体的定义 在这个结构体当中,FunName[ ]是一个字符串,它的长度LENGTH是一个宏定义。(*pFun)(data_p)是函数指针,其参数列表是输入字符的结构体类型指针。这样一个结构体,就能定义出“符号字典”每一条内容的数据类型。 图 2.1用流程图说明了用户输入“sin(2)”是怎样被识别的: 图 2.1程序运算“sin(2)”的流程 经过上述运算,sin(2)能被正确得计算出为“0.909297”,并可以将结果保存入文件。 数学优先级的分配 本项目所开发的“自由函数计算器”是一种表达式计算器,对它的基本要求就是能够在用户任意输入数学算式的情况下,软件都有识别出来,并按照数学规则进行运算,最后输出结果。这里最关键的一点,就是如何让软件能够“按照数学规则”来工作。 这里最

文档评论(0)

lxiencan + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档