3、按照四则运算加,减,乘,除优先关系的惯例,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程,表达式:A-B×C/D+E。

题目

3、按照四则运算加,减,乘,除优先关系的惯例,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程,表达式:A-B×C/D+E。


相似考题
更多“3、按照四则运算加,减,乘,除优先关系的惯例,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程,表达式:A-B×C/D+E。”相关问题
  • 第1题:

    阅读以下说明和C函数,将(1)~(5)空缺处的字句填写完整。

    [说明]

    计算机在处理算术表达式时,首先将其转换为后缀表达式。例如,表达式“46+5*120-37)”的后缀表达式形式为“46 5 120 37-*+”。

    计算后缀表达式时,从左至右扫描后缀表达式:若遇到运算对象,则压入栈中;遇到运算符,则从栈中弹出相关运算对象进行计算,并将运算结果压入栈中。重复以上过程,直到后缀表达式扫描结束。例如,后缀表达式“46 5 120 37-*+”的计算过程如下:

    a.依次将46、5、120、37压入栈中;

    b.遇到“-”,取出37、120,计算120-37=83,将其压入栈中;

    c.遇到“*”,取出83、5,计算5×83=415,将其压入栈中;

    d.遇到“+”,取出415、46,计算46+415=461,将其压入栈中;

    e.表达式结束,则计算过程完成。

    函数computing(char expr[],int*result)的功能是基于栈计算后缀形式的表达式(以串形式存入字符数组 expr)的值,并通过参数result返回该值。函数的返回值为-1/0,分别表示表达式有/无错误。假设表达式中仅包含数字、空格和算术运算符号,其中所有项均以空格分隔,且运算符仅包含加(“+”)、减(“-”)、乘(“*”)、除(“\”)。

    函数computing中所用栈的基本操作的函数原型说明如下。

    ● void InitStack(STACK*s):初始化栈。

    ● void Push(STACK*s,int e):将一个整数压栈,栈中元素数目增1。

    ● void Pop(STACK*s):栈顶元素出栈,栈中元素数目减1。

    ● int Top(STACK s):返回非空栈的栈顶元素值,栈中元素数目不变。

    ● int IsEmpty(STACKs):若s是空栈,则返回1;否则返回0。

    [C函数]


    正确答案:是一道考查栈结构在后缀表达式求值过程中应用的分析题。利用栈计算后缀表达式时从左至右扫描后缀表达式:若遇到运算对象则压入栈中;遇到运算符则从栈中弹出对应数目的运算对象进行计算并将运算结果压入栈中。重复以上过程直到后缀表达式扫描结束最后栈顶就是表达式的计算结果。 根据题干中的说明由于后缀表达式以字符串方式存储且以空格分隔符号(数值、算符)因此遇到空格字符时指向表达式中字符的指针ptr应增加1指向后续字符因此(1)空缺处应填入“ptr++”或其等价形式。下面以字符串“375”为例说明将一个数字串转换为数值的过程。 数值375=((0×10+3)×10+7)×10+5 (1)取得数字字符“3”(ASCII码值为51字符0的ASCII码值为48)。 (2)取得数字字符“7” (ASCII码值为55)。 (3)取得数字字符“5” (ASCII码值为53)。 以下程序代码用于将一个数字字符串转换为对应的整数存入tnum显然tnum的初始值应为0。 因此(2)空缺处应填入“0”。对于(3)空缺所在表达式的功能是:将数字字符转换为数值因此 (3)空缺处填入“*ptr-48”。 (4)空缺处用于将转换所得的数值tnum压入栈顶根据题目中Push的原型“void Push(STACK*sint e)”调用时第一个实际参数是STACK类型变量的地址第二个实际参数是一个整数因此(4)空缺处填入“&stnum”。 由于函数computing(char expr[]int*result)通过参数result返回该表达式的值因此需要将存在栈顶的运算结果赋值给result指向的整型变量即(5)空缺处填入“*result”。 本试题目还考查了参数传递知识读者可通过上机实践加强基本概念的理解以及C程序设计能力的培养。
    是一道考查栈结构在后缀表达式求值过程中应用的分析题。利用栈计算后缀表达式时,从左至右扫描后缀表达式:若遇到运算对象,则压入栈中;遇到运算符,则从栈中弹出对应数目的运算对象进行计算,并将运算结果压入栈中。重复以上过程,直到后缀表达式扫描结束,最后栈顶就是表达式的计算结果。 根据题干中的说明,由于后缀表达式以字符串方式存储且以空格分隔符号(数值、算符),因此遇到空格字符时,指向表达式中字符的指针ptr应增加1指向后续字符,因此,(1)空缺处应填入“ptr++”或其等价形式。下面以字符串“375”为例说明将一个数字串转换为数值的过程。 数值375=((0×10+3)×10+7)×10+5 (1)取得数字字符“3”(ASCII码值为51,字符0的ASCII码值为48)。 (2)取得数字字符“7” (ASCII码值为55)。 (3)取得数字字符“5” (ASCII码值为53)。 以下程序代码用于将一个数字字符串转换为对应的整数存入tnum,显然,tnum的初始值应为0。 因此,(2)空缺处应填入“0”。对于(3)空缺所在表达式的功能是:将数字字符转换为数值,因此 (3)空缺处填入“*ptr-48”。 (4)空缺处用于将转换所得的数值tnum压入栈顶,根据题目中Push的原型“void Push(STACK*s,int e)”,调用时第一个实际参数是STACK类型变量的地址,第二个实际参数是一个整数,因此,(4)空缺处填入“&s,tnum”。 由于函数computing(char expr[],int*result)通过参数result返回该表达式的值,因此需要将存在栈顶的运算结果赋值给result指向的整型变量,即(5)空缺处填入“*result”。 本试题目还考查了参数传递知识,读者可通过上机实践加强基本概念的理解,以及C程序设计能力的培养。

  • 第2题:

    算术表达式a+(b-c)*d的后缀式是(13) (-、+、*表示算术的减、加、乘运算, 运算符的优先级和结合性遵循惯例)。

    A.bc-d*a+

    B.abc-d* +

    C.ab + c- d*

    D.abcd-* +


    正确答案:B
    后缀表达式:又称逆波兰式表示方法:以从左到右的顺序先写操作数,后写操作符,如果操作数本身是一个具有操作数据的操作,则对其施用同样的规则。如:(a+b)*(a-b)后缀表达式为:ab+ab-*具体转换方法:(仅供参考)第一步:按照运算符的优先级对所有的运算单位加括号:式子变成:(a+((b-c)*d))第二步:把运算符号移动到对应的括号后面:(a((bc)-d)*)+第三步:去掉括号:abc-d*+

  • 第3题:

    算术表达式 a+b-c*d 的后缀式是( ) (一、+、*表示算术的减、加、乘运算,运算符的优先级和结合性遵循惯例)。

    A. a b + C d * - B. a b c +- d* C. abcd+-* D. ab+c-d*


    正确答案:A

  • 第4题:

    算术表达式a+(b-c)*d的后缀式是(13)(一、+、*表示算术的减、加、乘运算, 运算符的优先级和结合性遵循惯例)。

    A.bc-d*a+

    B.abc-d*+

    C.ab+c-d*

    D.ab C d-*+


    正确答案:B
    本题考查程序语言基础知识。后缀式的特点是将运算符号写在运算数的后面。对于表达式,其计算次序是相减、相乘、相加,其后缀式为“abc-d*+”。

  • 第5题:

    算术表达式a*(b-c)+d的后缀式是( )(-、+、*表示算术的减、加、乘运算,运算符的优先级和结合性遵循惯例)。

    A.abcd-*+
    B.abc-*d+
    C.abc-d*+
    D.ab-cd*+

    答案:B
    解析:
    本题考查程序语言基础知识。
    后缀式(逆波兰式)是波兰逻辑学家卢卡西维奇发明的一种表示表达式的方法。这种表示方式把运算符写在运算对象的后面,例如,把a+b写成ab+,所以也称为后缀式。算术表达式"a*(b-c)+d"的后缀式是"abc-*d+"。

  • 第6题:

    算术表达式采用后缀式表示时不需要使用括号,使用(请作答此空)就可以方便地进行求值。a-b(c+d)(其中,-、+、*表示二元算术运算减、加、乘)的后缀式为( ),与该表达式等价的语法树为( )。

    A.队列
    B.数组
    C.栈
    D.广义表

    答案:C
    解析:

  • 第7题:

    算术表达式(a-b)*c+d的后缀式是( )(-、+、*表示算术的减、加、乘运算,运算符的优先级和结合性遵循惯例)。

    A.ab-c*d+
    B.abcd-*+
    C.a-b*c+d
    D.abc-d*+

    答案:A
    解析:
    后缀式即逆波兰式,是逻辑学家卢卡西维奇发明的一种表示表达式的方法。这种表示方式把运算符写在运算对象的后面,例如,把a+b写成ab+。这种表示法的优点是根据运算对象和算符的出现次序进行计算,不需要使用括号,也便于用栈实现求值。

  • 第8题:

    算术表达式a*(b+c)-d的后缀式是( )(-、+、*表示算术的减、加、乘运算,运算符的优先级和结合性遵循惯例)。

    A.a*b+c-d
    B.abcd*+-
    C.abc+*d-
    D.*+-abcd

    答案:C
    解析:
    后缀式即逆波兰式,是逻辑学家卢卡西维奇发明的一种表示表达式的方法。这种表示方式把运算符写在运算对象的后面,例如,把a+b写成ab+。这种表示法的优点是根据运算对象和算符的出现次序进行计算,不需要使用括号,也便于用栈实现求值。a*(b+c)-d的后缀式是abc+*d-

  • 第9题:

    算术表达式(a-b)*c+d的后缀式是( )(-、+、*表示算术的减、加、乘运算,运算符的优先级和结合性遵循惯例)。

    A.abcd-*+
    B.ab-cd*+
    C.ab-c*d+
    D.ab c-d*+

    答案:C
    解析:
    后缀式即逆波兰式,是逻辑学家卢卡西维奇发明的一种表示表达式的方法。这种表示方式把运算符写在运算对象的后面,例如,把a+b写成ab+。这种表示法的优点是根据运算对象和算符的出现次序进行计算,不需要使用括号,也便于用械实现求值。(a-b)*c+d的后缀式是ab-c*d+

  • 第10题:

    算术表达式(a-b)*c+d的后缀式是()(+、-、*表示算术的加、减、乘运算,运算符的优先级和结合性遵循惯例)。

    • A、bc–d*a+ 
    • B、abc–d*+ 
    • C、ab–c*d+
    • D、abcd–*+

    正确答案:C

  • 第11题:

    单选题
    下面叙述中,错误的是()
    A

    C语言基本的算术运算符不包含模运算符”%”

    B

    算术运算符的优先级高于关系运算符

    C

    自加和自减运算符的结合方向是”自右向左”

    D

    C语言规定在表达式求值时,按其中运算符的优先级先高后低的次序进行


    正确答案: B
    解析: 暂无解析

  • 第12题:

    单选题
    假设栈初始为空,将中缀表达式a/b+(c*d+e*f)/g转化为等价后表达式过程中,当扫描到f时,栈中的元素依次为:
    A

    +(*-

    B

    +(-*

    C

    /+(*-*

    D

    /+-*


    正确答案: A
    解析:

  • 第13题:

    ●算术表达式采用逆波兰式表示时不用括号,可以利用(20)进行求值。与逆波

    兰式ab-cd+*对应的中缀表达式是 (21) 。

    (20)

    A.数组

    B.栈

    C.队列

    D.散列表

    (21)

    A. a-b+c*d

    B.(a-b)*c+d

    C.(a-b)*(c+d)

    D. a-b*c+d


    正确答案:B,C

  • 第14题:

    算术表达式a+(b-c)*d的后缀式是()(+、-、*表示算术的加、减、乘运算,运算符的优先级和结合性遵循惯例)。

    A.bc–d*a+

    B.abc–d*+

    C.ab+c–d*

    D.abcd–*+


    本题答案:C

  • 第15题:

    算术表达式 a+(b-c)*d 的后缀式是( )(-、+、*表示算术的减、加、乘运算, 运算符的优先级和结合性遵循惯例)。

    A. abcd+-* B. abc-d* +C. abc-+d* D. ab-cd*+


    正确答案:B

  • 第16题:

    算术表达式a*(b-c)+d的后缀式是(31) (一、+、*表示算术的减、加、乘运算,运算符的优先级和结合性遵循惯例)。

    A.abcd-*+

    B.abc-*d+

    C.abc-d*+

    D.ab-cd*+


    正确答案:B
    本题考查程序语言基础知识。后缀式(逆波兰式)是波兰逻辑学家卢卡西维奇发明的一种表示表达式的方法。这种表示方式把运算符写在运算对象的后面,例如,把a+b写成ab+.所以也称为后缀式。算术表达式“a*(b-c)+d”的后缀式是“abc-*d+'。

  • 第17题:

    算术表达式采用后缀式表示时不需要使用括号,使用( )就可以方便地进行求值。a-b(c+d)(其中,-、+、*表示二元算术运算减、加、乘)的后缀式为( ),与该表达式等价的语法树为(请作答此空)。



    答案:D
    解析:

  • 第18题:

    表达式3*2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为(),其中^为乘幂。


    答案:D
    解析:

  • 第19题:

    算术表达式a+(b-c)*d的后缀式是( )(-,+,*表示算数的减,加,乘运算,运算符的优先级和结合性遵循惯例)。

    A.bc-d*a+
    B.abc-d*+
    C.ab+c-d*
    D.abcd-*+

    答案:B
    解析:
    后缀式:即逆波兰式,是波兰逻辑学家卢卡西维奇发明的一种表示表达式的方法。
    特点:这种表示方式把运算符写在运算对象的后面,例如,把a+b写成ab+,所以也称为后缀式。优点是根据运算对象和算符的出现次序进行计算,不需要使用括号,也便于用械实现求值。对于(a+b)*(c+d),其后缀式为ab+cd+*。
    对于该题目,其计算次序是相减,相乘,相加,所以其后缀式为abc-d*+。
    故正确答案为:B

  • 第20题:

    算术表达式(a-b)*(c+d)的后缀式是( )(-、+、*表示算术的减、加、乘运算,运算符的优先级和结合性遵循惯例)。

    A.ab-cd+*
    B.abcd-*+
    C.ab-c*d+
    D.abc-d*+

    答案:A
    解析:
    后缀式即逆波兰式,是逻辑学家卢卡西维奇发明的一种表示表达式的方法。这种表示方式把运算符写在运算对象的后面,例如,把a+b写成ab+。这种表示法的优点是根据运算对象和算符的出现次序进行计算,不需要使用括号,也便于用栈实现求值。(a-b)*c+d的后缀式是ab-c*d+

  • 第21题:

    表达式求值算法需要两个栈,它们分别是下列哪些(),分别用于存储数据和符号。

    • A、数据栈
    • B、符号栈
    • C、中间结果栈
    • D、汉字栈

    正确答案:A,B

  • 第22题:

    下面叙述中,错误的是()

    • A、C语言基本的算术运算符不包含模运算符”%”
    • B、算术运算符的优先级高于关系运算符
    • C、自加和自减运算符的结合方向是”自右向左”
    • D、C语言规定在表达式求值时,按其中运算符的优先级先高后低的次序进行

    正确答案:A

  • 第23题:

    多选题
    表达式求值算法需要两个栈,它们分别是下列哪些(),分别用于存储数据和符号。
    A

    数据栈

    B

    符号栈

    C

    中间结果栈

    D

    汉字栈


    正确答案: A,D
    解析: 暂无解析

  • 第24题:

    单选题
    算术表达式(a-b)*c+d的后缀式是()(+、-、*表示算术的加、减、乘运算,运算符的优先级和结合性遵循惯例)。
    A

    bc–d*a+ 

    B

    abc–d*+ 

    C

    ab–c*d+

    D

    abcd–*+


    正确答案: B
    解析: 本题考查程序语言基础知识。 后缀式即逆波兰式,是逻辑学家卢卡西维奇发明的一种表示表达式的方法。这种表示方式把运算符写在运算对象的后面,例如,把a+b写成ab+。这种表示法的优点是根据运算对象和算符的出现次序进行计算,不需要使用括号,也便于用械实现求值。 (a-b)*c+d的后缀式是ab-c*d+。