c语言编程交互式计算器,C语言程序设计交互式函数计算器设计报告.docx

程序设计小学期实验报吿

题目三

交互式函数计算器

课题名称:交互式函数计算器

一.课程需求及现实意义

课程现实意义

在学习生活中,常常会遇到一些复杂的数值运算,这时候,为了保证计算的准确,我们 就必须使用计算器。所以,开发计算器程序,可以用于自己的学习和工作,更重要的是增强 自己独立编程能力和工作能力。

课程需求

1)程序可以将运算式以完整的字符串形式输入:如:1 + 5X6—於

2)程序能对输入的运算表达式做有效分析,转换成便于计算的二叉树或堆栈的存储形式;

如1 + 5X6—狗的二叉树存储形式:也可以使用逆波兰式完成。

3)程序完成运算式计算后,将计算结果输出;

4)通过键盘或鼠标输入数字;

5)可以进行+、?、*、/、开方、清零、backspace的功能,可以对小数进行运算,还可以 添加扩弧运算功能。

6)界面编程:TurboC或VC任选

设计目标:除了以上的基本目标,还包括:

1)友好的操作界面

2)正弦、余弦、正切、阶乘、倒数、平方等常用函数计算功能

3)简单方便易懂的操作和输出

4)强大的报错功能

二?设计思路和总体设计框架

设计思路

本程序通过MFC对话框实现交互功能,由两个EDIT编辑框以及29个BUTTON按键 组成基本界面,通过用鼠标单击按钮调用函数来完成计算。

为实现算符优先算法,采用中缀表达式。可以使用两个工作栈。一个称作OPTR,用 以寄存运算符;另一个称作OPND,用以寄存操作数或运算结果。算法的基本思想是:

1)首先置操作符栈为空栈,表达式起始符“#”为运算符栈的栈底元素;

2)依次读入表达式中的每个字符,若是操作数则进OPND栈,若是操作数则进OPND 栈,若是运算符则和OPTR栈的栈顶运算符比较优先权后作相应操作,直至整个表 达式求值完毕(即OPTR栈的栈顶元素和当前读入的字符均为“#”)。

总体设计框架

1)外部框架

计算结束后可以选择清零,退出或者继续其他计算。

内部计算函数结构

头文件include “stack"包括了堆栈所需的包括压入,弹岀等函数,可以直接应 用,故没有进行堆栈函数的编写。

首先在OPTR符号栈内存入#

两个编辑框分別有两个CString变量m_strlzm_str2o

从按钮输入的表达式即改变m_strl和m_str2,运用UpdateData(FALSE);函数即 时输出显示在两个编辑框内。

?在头文件计算器 Dlg.h 屮声明了 了 private:double calString(CString strtmp);

计算内部流程:

计算内部流程:

文字说明:

a)从左到右扫描表达式,即CString变量m_strl,首先处理插号中的负号,之后调用主要的 计算函数

b)计算函数中,继续扫描经过处理的表达式,遇到数字进行判断处理,将字符串形式的 数字(包括小数点)运用format函数转化为数字,存储在OPND栈内。

c)若遇到符号,则调用优先级函数int priorityfchar x,char y)将该符号与符号栈栈顶元素进 行比较,得出优先级。

d)由于我设计的代码,在鼠标点击输入时自动屏蔽了一些非法输入,所以优先级函数二 维优先级数组中,并不是所有的优先级都会被调用。

+

-

*

/

(

)

#

S

A

+

1

1

?1

1

1

3

3

-

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

0

3

3

S

3

3

3

3

3

3

3

2

2

A

3

3

3

3

3

3

3

2

2

根据括号和加减乘除的优先级,2表示错误,1表示优先,-1表示落后,0表示相等,3 表示计算根号和开方

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界面设计

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值