用VisualC#实现四则混合运算

用VisualC#实现四则混合运算,第1张

用VisualC#实现四则混合运算,第2张

介绍了一种用Visual C#实现初等算术自动计算的方法。在...的框架内。net1.1,没有现成的类。不过,现在经过我们下面的介绍,大家都可以自己写一个了。它的功能什么都不是。只是你熟悉了栈的用法,或者家里有个小学生,你可以写个程序让孩子练习初等算术。哈哈,别说太多废话了。让我们言归正传。

举一个典型的算术题:(6+2*5)/4

从题中我们先算出2*5=10,再算出6+10=16最后算出16/4 =4。所以,结果是4。

电脑呢?好在前辈给我们列举了一堆算法,我们随便选一个就行了。

第一种算法

用栈来解决问题,就是把最低的一个推到栈底。按照先进后出的原则,第一阶段最低的一个就是最终计算。

计算过程:

我们先搭建两个栈,一个是数据栈,一个是计算符号栈。以(6+2*5)/4为例,看看现实世界是如何计算的。

假设:

1)优先级

符号之间的优先级如下:

"(" ")" -1

“+”、“-”0

“*”、“/”1

值越大,优先级越高,在同级比较中最先出现的优先。

2)设置“(“,”)为特殊算子,即单目运算,相邻两个算子可以相互抵消。

3)计算条件

(1)当前运算符不等于" "(特殊终止符)

(2)当算子栈中正在运行的算子的数量> =1时

(3)当出口端口的操作符优先级高于要放入栈的操作符优先级时,或者两个操作符可以互相取消。

计算时,将符号推出堆栈参与计算,将数值堆栈出口的前两个元素推出堆栈参与计算,并将计算结果值推送到数值堆栈,递归执行此操作。

1)"("被压入符号栈2) "6 "被压入值栈。

3)”(“将优先级与“+”进行比较,认为“(”低于“+”,则不满足计算条件,将“+”推入符号栈。

1)按“2”进入数值堆栈。

2)比较“*”和“+”的优先级,如果“+”的优先级低于“*”,则不满足计算条件,将“*”推入符号栈。

1)按“5”进入堆栈。2)比较“*”和“)”的优先级,得到“*”的优先级高于“)”。执行计算,将“*”、“5”和“2”推出堆栈,参与计算。

1)将2*5 =10的结果推入值堆栈。

2)(递归)比较“+”和“)”优先级,得到“+”高于“)”优先级。再次计算,将“+”、“10”和“6”推出堆栈参与计算。

1)将6+10 =16的结果推入值堆栈。

2)(递归地)比较“)”和“(”的优先级,得出两者可以互相抵消的结论。从堆栈中移除“(”符号,用“)”取消它,并移动到下一个符号。

1)将“/”放入符号堆栈。

2)将“4”放入值堆栈。

3)如果找到公式的末尾,就会计算。你会叠加“/”、“4”、“16”,参与计算。

1)将计算结果压入数值堆栈。

成功了!计算的辛苦终于做完了,看起来比人脑计算复杂多了:)

第二种算法

第二种方法,先简单提一下,这里不描述详细过程。第二种方法是用树的方法把一个公式组织成一棵正则树,然后遍历计算得到结果。或者以上面的公式为例,最后形成树形样式:(注意符号“()”需要特殊处理)

使用树的深度遍历来计算最终结果。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 用VisualC#实现四则混合运算

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情