早教吧 育儿知识 作业答案 考试题库 百科 知识分享

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

题目详情
在C#混合运算中的括号怎么处理?
▼优质解答
答案和解析
我们建立两个栈,一个是数据栈,一个是计算符号栈,以(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#混合运算”,答案很多.
看了 在C#混合运算中的括号怎么处...的网友还看了以下: