交互式函数计算器设计报告-vc.doc

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

程序设计小学期实验报告 题目三 交互式函数计算器 课题名称:交互式函数计算器 课程需求及现实意义 课程现实意义 在学习生活中,常常会遇到一些复杂的数值运算,这时候,为了保证计算的准确,我们就必须使用计算器。所以,开发计算器程序,可以用于自己的学习和工作,更重要的是增强自己独立编程能力和工作能力。 课程需求 程序可以将运算式以完整的字符串形式输入:如:1+5×6-7/8 程序能对输入的运算表达式做有效分析,转换成便于计算的二叉树或堆栈的存储形式;如1+5×6-7/8的二叉树存储形式:也可以使用逆波兰式完成。 程序完成运算式计算后,将计算结果输出; 通过键盘或鼠标输入数字; 可以进行+、-、*、/、开方、清零、backspace的功能,可以对小数进行运算,还可以添加扩弧运算功能。 界面编程:Turbo C或VC任选 设计目标:除了以上的基本目标,还包括: 友好的操作界面 正弦、余弦、正切、阶乘、倒数、平方等常用函数计算功能 简单方便易懂的操作和输出 强大的报错功能 二. 设计思路和总体设计框架 设计思路 本程序通过MFC对话框实现交互功能,由两个EDIT编辑框以及29个BUTTON按键组成基本界面,通过用鼠标单击按钮调用函数来完成计算。 为实现算符优先算法,采用中缀表达式。可以使用两个工作栈。一个称作OPTR,用以寄存运算符;另一个称作OPND,用以寄存操作数或运算结果。算法的基本思想是: 首先置操作符栈为空栈,表达式起始符“#”为运算符栈的栈底元素; 依次读入表达式中的每个字符,若是操作数则进OPND栈,若是操作数则进OPND栈,若是运算符则和OPTR栈的栈顶运算符比较优先权后作相应操作,直至整个表达式求值完毕(即OPTR栈的栈顶元素和当前读入的字符均为“#”)。 总体设计框架 1)外部框架 计算结束后可以选择清零,退出或者继续其他计算。 2)内部计算函数结构 头文件#include “stack”包括了堆栈所需的包括压入,弹出等函数,可以直接应用,故没有进行堆栈函数的编写。 首先在OPTR符号栈内存入’#’ 两个编辑框分别有两个CString变量m_str1,m_str2。 从按钮输入的表达式即改变m_str1和m_str2,运用UpdateData(FALSE);函数即时输出显示在两个编辑框内。 在头文件计算器Dlg.h中声明了了 private:double calString(CString strtmp); 计算内部流程: 文字说明: a)从左到右扫描表达式,即CString变量m_str1,首先处理括号中的负号,之后调用主要的计算函数 b)计算函数中,继续扫描经过处理的表达式,遇到数字进行判断处理,将字符串形式的数字(包括小数点)运用format函数转化为数字,存储在OPND栈内。 c)若遇到符号,则调用优先级函数int priority(char x,char y)将该符号与符号栈栈顶元素进行比较,得出优先级。 d)由于我设计的代码,在鼠标点击输入时自动屏蔽了一些非法输入,所以优先级函数二维优先级数组中,并不是所有的优先级都会被调用。 + - * / ( ) # s ^ + 1 1 -1 -1 -1 1 1 3 3 - 1 1 -1 -1 -1 1 1 3 3 * 1 1 1 1 -1 1 1 3 3 / 1 1 1 1 -1 1 1 3 3 ( -1 -1 -1 -1 -1 0 2 3 3 ) 2 2 1 1 1 1 2 3 3 # -1 -1 -1 -1 -1 1 0 3 3 s 3 3 3 3 3 3 3 2 2 ^ 3 3 3 3 3 3 3 2 2 e)判断了优先级,则进入swich函数,进行分类计算过程。 case 1:则取出符号栈OPTR栈顶元素和数字栈OPND两个数字,调用计算函数进行计算,并将结果压入数字栈OPND。 但如果两个符号都为括号或都为#,则将符号栈OPTR栈顶元素弹出,然后将该符号压入符号栈OPTR。 case -1:则将该符号压入符号栈OPTR。 case 3:则计算根号和平方(只能单独计算,不能加入表达式) case 0:则将符号栈OPTR栈顶元素弹出 f)最后,扫描完毕,若没有错误,则返回计算结果,即数字栈OPND栈顶元素。将该数字进行处理。由于该数字时double型,结尾带有6个多余的0,为了不影响美观,将多余的0去掉之后,运用format函数将结果转化成字符串并赋给m_str2,即结果显示框变量,再次调用UpdateData(FALSE);函数,输出到编辑框,得到结果。 3)MFC界面设计 a)界面包括显示区和输入区。 b)显示区包括表达式和当前输入/结果。 c)键盘区包括29个按键和日历显示。 d)布局比较合理,符合平时输入计算习惯,并

文档评论(0)

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

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

1亿VIP精品文档

相关文档