在C#混合运算中的括号怎么处理?

 我来答
137025866
2014-08-27 · 超过24用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:38万
展开全部
我们建立两个栈,一个是数据栈,一个是计算符号栈,以(6+2*5)/4为例子,看看倒底是怎么计算的。

  假设:

  1)优先级

  符号之间的优先级如下:

  “(“ “)” -1

  “+”,”-” 0
 
   “*”,”/” 1

  数值越大,则越优先,同级别的比较时 先出现的优先。

  2)将”(”,”)”设为特殊运算符,即单目运算,两邻两个运算符则可对消。

  3) 计算条件

  (1) 当前运算符不等于“”(特殊结束符)

  (2) 运算符栈里的运行算个数>=1时

  (3) 出栈口的运算符优先级高于将要入栈的运算符时或者两者可对消时。

  计算时,则将符号出栈参与计算,数值栈的出栈口前两位元素出栈参与计算,计算结果值向数值栈压栈,并进行递归此操作。

图1:

  1) “(” 压入符号栈 2 ) “6”压入数值栈

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

图2:

  1) 将”2” 压入数值栈。

  2) 将”*”与”+”比较优先级,算得”+”优先级低于”*”,则不满足计算条件,将”*”压入符号栈。

图3:

  1) 将 “5”压入数植栈。 2) 将“*“与”)”比较优先级,得出”*”比”)”优先级要高。进行计算,将”*”出栈、”5”、”2”出栈,参与计算

图4:

  1) 将 2*5 =10的结果压入数值栈。

  2) (递归)比较 “+”与”)”优先级,得出”+”比”)”优先级要高。再进行计算,将”+”出栈、”10”、”6”出栈,参与计算。

图 5:

  1) 将 6+10 =16的结果压入数值栈。

  2) (递归)比较 “)”与”(”优先级,得出两者可以对消,将”(”符号出栈,与”)”对消,继续取下一个符号。

图6:

  1) 将”/”入符号栈。

  2)将”4”入数值栈。

  3) 发现””算式结束符,则进行计算, 将 “/”、”4’、”16”出栈,参与计算。

图7:

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

同学,它山之石。百度“C#混合运算”,答案很多。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式