首页 > 试题广场 >

表达式3*2^(4+2*2-6*3)-5,求值过程中当扫描到

[单选题]
对中缀表达式 3*2^(4+2*2-6*3)-5 进行求值,求值过程中当扫描到6时,对象栈和算符栈分别为(),其中^为乘幂。
  • 3,2,8; *^-
  • 3,2,4,2,2; *^+*-
  • 3,2,4,2,2; *^(+*-
  • 3,2,8; *^(-
编辑于 2017-08-24 20:53:56 回复(5)
找资料之后的结果~

和运算符的优先级有关,

1、操作数栈置空,将表达式起始符"#"作为运算符栈的栈底元素

2、依次读入每个字符,若是操作数则入操作数栈;若是运算符s1则和运算符栈顶元素s2比较优先级后进行相应的操作,直至整个表达式求完。

i)若优先级s1>s2s1入栈

ii)若s1<s2,当前栈顶运算符s2退栈,操作数栈顶的两个操作数退栈与操作符一起运算,并将运算结果入操作数栈;

过程如下:(1)操作数3,入栈s1

      2)运算符*,入栈s2

      3)操作数2,入栈s1

      4)运算符^ ,入栈s2;(^的优先级 *高

      5)运算符(,入栈s2

      6)操作数4,入栈s1

      7)运算符+,入栈s2

      8)操作数2,入栈s1

      9)运算符*,入栈s2;(理由是:*的优先级比+高)

      10)操作数2,入栈s1

      11)运算符 -,( -的优先级低于*栈顶字符 * 出栈,完成2*2=4的运算,将结果4存入s1中;---s13,2,4,4

                              -的优先级低于+栈顶字符+出栈,完成4+4=8的运算,将结果8存入s1中;---s1:3,2,8

                              此时,- 成为了(后的运算符,则直接入栈s2---s2*^-

       12操作6 扫描

发表于 2017-08-13 15:34:48 回复(10)
准备两个栈s、t。 从左向右扫描,遇到数字入栈s,遇到运算符c入栈t,运算符c与t栈顶的比较规则如下: 运算符c > t 栈顶(优先级),则入栈 运算符c <= t 栈顶(优先级),则t 出栈一个元素,s 出栈2个元素并计算后将计算后的值入栈s,直到t栈顶优先级小于c 运算符c 为( ,则入栈,遇到) 时出栈( ) 之间的所有运算符 ———————————————— 运算符优先级: () [] . ->3 * / %+ -
发表于 2022-03-11 21:15:43 回复(0)
为什么每次都忘记那个优先级高的运算符要先出去啊,不要一味的只是往里面进去啊! 哎!55~ 谁能救救我这个笨脑子
发表于 2023-06-08 14:53:05 回复(0)
擦,漏了个左括号
发表于 2023-11-10 15:34:12 回复(0)
算符优先文法
发表于 2022-06-25 10:05:21 回复(0)
“(”不是运算符,不会入栈
发表于 2022-04-09 14:16:55 回复(1)
()才是一个完整的运算符
发表于 2022-04-07 12:11:38 回复(0)
注意操作符的优先级
发表于 2021-03-07 20:36:21 回复(0)
(也算运算符
发表于 2020-09-22 22:48:41 回复(0)
扫到6时,之前的 + 已经计算了
发表于 2020-07-10 09:15:15 回复(0)
表达式求值详细过程可以看这个大神的博客https://blog.csdn.net/bestfsq/article/details/55823298
发表于 2019-03-25 15:56:57 回复(0)
后缀吧:
3*2^(4+2*2-6*3)-5

328
*^(-
当然后缀表达式为
32422*+
*^(-
对象栈中的计算是随着后缀表达式的生成同时计算,所以遇到*取 22,将4压入栈,遇到+,取44,将8压入对象栈。
请记住 对象栈和运算符栈是并行一起操作的。
发表于 2018-06-13 23:21:25 回复(0)
d
发表于 2017-11-28 18:53:16 回复(0)
来自@初来乍
和运算符的优先级有关,

1、操作数栈置空,将表达式起始符"#"作为运算符栈的栈底元素

2、依次读入每个字符,若是操作数则入操作数栈;若是运算符s1则和运算符栈顶元素s2比较优先级后进行相应的操作,直至整个表达式求完。

i)若优先级s1>s2,s1入栈

ii)若s1<s2,当前栈顶运算符s2退栈,操作数栈顶的两个操作数退栈与操作符一起运算,并将运算结果入操作数栈;

过程如下:(1)操作数3,入栈s1

      2)运算符*,入栈s2

      3)操作数2,入栈s1

      4)运算符,入栈s2;(^的优先级 *高

      5)运算符(,入栈s2

      6)操作数4,入栈s1

      7)运算符+,入栈s2

      8)操作数2,入栈s1

      9)运算符*,入栈s2;(理由是:*的优先级比+高)

      10)操作数2,入栈s1

      11)运算符 -,( -的优先级低于*栈顶字符 * 出栈,完成2*2=4的运算,将结果4存入s1中;---s13,2,4,4

                              -的优先级低于+栈顶字符+出栈,完成4+4=8的运算,将结果8存入s1中;---s1:3,2,8

                              此时,成为了(后的运算符,则直接入栈s2---s2*^-

       12操作6 扫描

发表于 2017-08-15 14:53:04 回复(0)