阅读以下说明和流程图(如图1所示),回答问题1至问题4。【说明】本流程图是将中缀表示的算术表达式转换成后缀表示。如中缀表达式(A-(B*C+D)*E)/(F+G))的后缀表示为ABC*D+E*-FG+/为了方便,假定变量名为单个英文字母,运算符只有+、-、*、/(均为双目运算符,左结合),并假定所提供的算术表达是非空且语法是正确的。另外,中缀表示形式中无空格符,但整个算术表达式以空格符结束。流程图中使用的符号的意义如下:数组 IN[]存储中缀表达式;数组 POLISH[]存储其后缀表达式;数组 S[]是一

题目

阅读以下说明和流程图(如图1所示),回答问题1至问题4。

【说明】

本流程图是将中缀表示的算术表达式转换成后缀表示。如中缀表达式

(A-(B*C+D)*E)/(F+G))

的后缀表示为

ABC*D+E*-FG+/

为了方便,假定变量名为单个英文字母,运算符只有+、-、*、/(均为双目运算符,左结合),并假定所提供的算术表达是非空且语法是正确的。另外,中缀表示形式中无空格符,但整个算术表达式以空格符结束。流程图中使用的符号的意义如下:

数组 IN[]存储中缀表达式;

数组 POLISH[]存储其后缀表达式;

数组 S[]是一个后进先出栈;

函数PRIOR(CHAR)返回符号CHAR的优先级,各符号的优先级见表2:

填充流程图中①的判断条件。


相似考题

3.阅读以下说明和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函数]

更多“阅读以下说明和流程图(如图1所示),回答问题1至问题4。【说明】本流程图是将中缀表示的算术表达式转换成后缀表示。如中缀表达式(A-(B*C+D)*E)/(F+G))的后缀表示为ABC*D+E*-FG+/为了方便,假定变量名为单个英文字母,运算符只有+、-、*、/(均为双目运算符,左结合),并假定所提供的算术表达是非空且语法是正确的。另外,中缀表示形式中无空格符,但整个算术表达式以空格符结束。流程图中使用的符号的意义如下:数组 IN[]存储中缀表达式;数组 POLISH[]存储其后缀表达式;数组 S[]是一”相关问题
  • 第1题:

    ● 算术表达式采用逆波兰式表示时不用括号,可以利用 (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

  • 第2题:

    ●试题一

    阅读以下说明和流程图(如图1所示),回答问题1至问题4,将答案写在答卷的对应栏内。

    【说明】

    本流程图是将中缀表示的算术表达式转换成后缀表示。如中缀表达式

    (A-(B*C+D)*E)/(F+G))

    的后缀表示为

    ABC*D+E*-FG+/

    为了方便,假定变量名为单个英文字母,运算符只有+、-、*、/(均为双目运算符,左结合),并假定所提供的算术表达是非空且语法是正确的。另外,中缀表示形式中无空格符,但整个算术表达式以空格符结束。流程图中使用的符号的意义如下:

    数组IN[]存储中缀表达式;

    数组POLISH[]存储其后缀表达式;

    数组S[]是一个后进先出栈;

    函数PRIOR(CHAR)返回符号CHAR的优先级,各符号的优先级见表2:

    【问题1】

    填充流程图中①的判断条件。

    【问题2】

    写出子程序A的功能,并顺序写出实现该功能的操作

    【问题3】

    写出子程序B的功能,并顺序写出实现该功能的操作。

    【问题4】

    中缀表达式

    (A+B-C*D)*(E-F)/G

    经该流程图处理后的输出是什么?

    【流程图】

    图1


    正确答案:
    ●试题一[问题1]【答案】PRIOR(IN[i]):PRIOR(S[p])[问题2]【答案】功能:将当前符号IN[i]入栈操作:p+1->pIN[i]->S[p][问题3]【答案】功能:出栈操作:k+1->kS[p]->POLISH[k]p-1->p[问题4]【答案】AB+CD*-EF-*G/【解析】本题考查栈的使用和中序表达式与后缀表达式的互换。

  • 第3题:

    若某算术表达式用二叉树表示如下, 则该算术表达式的中缀式为(请作答此空), 其后缀式为( )。

    A.a-b+c*d
    B.a-(b+c)*d
    C.(a-(b+c))*d
    D.a-(b+c*d)(31)

    答案:C
    解析:
    中缀式的表达式接近人们进行数学计算使用的表达式,因此30题选择C。后缀式是采用左、右、根的方式进行遍历。

  • 第4题:

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

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

    答案:C
    解析:

  • 第5题:

    中缀表达式A-(B+C/D)*E的后缀形式是()。

    A.AB-C+D/E*
    B.ABC+D/-E*
    C.ABCD/E*+-
    D.ABCD/+E*-

    答案:D
    解析:
    将中缀表达式表示成二叉树的形状,则这棵二叉树的后序遍历序列即为表达式的后缀形式。

  • 第6题:

    某算术表达式用二叉树表示如下,该算术表达式的中缀式为( ),其后缀式为(请作答此空)。

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

    答案:A
    解析:
    前序遍历:先访问根结点,再依次按前序遍历的方式访问根结点的左子树、右子树中序遍历:先中序遍历根结点的左子树,再访问根结点,再中序遍历根结点的右子树后序遍历:先中序遍历根结点的左子树,再中序遍历根结点的右子树,再访问根结点二叉树采用中序遍历得中缀表达式,采用后序遍历得后缀表达式

  • 第7题:

    算术表达式采用逆波兰式表示时不用括号,可以利用(1)进行求值。与逆波兰式ab-cd+*对应的中缀表达式是(2)。空白(1)处应选择()

    • A、数组
    • B、栈
    • C、队列
    • D、散列表

    正确答案:B

  • 第8题:

    中缀表达式3*(X+2)-5所对应的后缀表达式为()。


    正确答案:3*2+*5

  • 第9题:

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

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

    正确答案:C

  • 第10题:

    填空题
    后缀算术表达式24 8 + 3 * 4 10 7 - * /所对应的中缀算术表达式为(),其值为()。

    正确答案: (24+8)*3/(4*(10-7)),8
    解析: 暂无解析

  • 第11题:

    单选题
    算术表达式采用逆波兰式表示时不用括号,可以利用(1)进行求值。与逆波兰式ab-cd+*对应的中缀表达式是(2)。空白(1)处应选择()
    A

    数组

    B

    C

    队列

    D

    散列表


    正确答案: B
    解析: 逆波兰式表示方式把运算符写在运算对象的后面,不需要使用括号。由于逆波兰式表示中的各个运算是按顺序执行的,因此,它的计值很容易实现。为此,仅需从左到右依次扫视表达式中的各个符号,每遇到一个运算对象,就把它压入栈顶暂存起来;每遇到一个二元(或一元)运算符时,就取出栈顶的两个(或一个)运算对象进行相应的运算,并用运算结果去替换栈顶的这两(或一)个运算对象,然后再继续扫视余留的符号,如此等等,直到扫视完整个表达式为止。当上述过程结束时,整个表达式的值将留于栈顶。a-b+c*d对应的逆波兰式为ab-cd*+。(a-b)*c+d对应的逆波兰式为ab-c*d+。(a-b)*(c+d)对应的逆波兰式为ab-cd+*。a-b*c+d对应的逆波兰式为abc*-d+。

  • 第12题:

    填空题
    中缀表达式3*(X+2)-5所对应的后缀表达式为()。

    正确答案: 3*2+*5
    解析: 暂无解析

  • 第13题:

    阅读以下说明和图4-6,回答问题1至问题4。

    【说明】

    本流程图(如图4-6所示)是将中缀表示的算术表达式转换成后缀表示。如中缀表达式 (A-(B*C+D)*E)/(F+G)的后缀表示为ABC*D+E*-FG+/。为了方便,假定变量名为单个英文字母,运算符只有+、-、*、/(均为双目运算符,左结合),并假定所提供的算术表达式非空且语法是正确的。另外,中缀表示形式中无空格符,但整个算术表达式以空格符结束。流程图中使用的符号的意义如下。

    . 数组IN[]存储中缀表达式。

    . 数组POLISH[]存储其后缀表示。

    . 数组S[]是一个后进先出栈。

    函数PRIOR(CHAR)返回符号CHAR的优先级,各符号的优先级如表4-4所示。

    填充流程图中①的判断条件。


    正确答案:PRIOR(IN[i]):PRIOR(S[p])
    PRIOR(IN[i]):PRIOR(S[p])

  • 第14题:

    若某算术表达式用二叉树表示如下, 则该算术表达式的中缀式为( ), 其后缀式为(请作答此空)。

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

    答案:A
    解析:
    中缀式的表达式接近人们进行数学计算使用的表达式,因此30题选择C。后缀式是采用左、右、根的方式进行遍历。

  • 第15题:

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



    答案:D
    解析:

  • 第16题:

    已知一算术表达式的中缀形式为A+B*C-D/E,后缀形式为ABC*+DE/-,其前缀形式为()。

    A.-A+B*C/DE
    B.-A+B*CD/E
    C.-+*ABC/DE
    D.-+A*BC/DE

    答案:D
    解析:
    将算术表达式的前缀形式、中缀形式和后缀形式分别看成二叉树的前序遍历、中序遍历和后序遍历,本题可转化成已知二叉树的中序遍历和后序遍历序列,如何求出其前序遍历序列。前序遍历的顺序是根结点,左子树,右子树;中序遍历的顺序是左子树,根结点,右子树;后序遍历的顺序是左子树,右子树,根结点;因此后序遍历中最后访问的结点是根结点,该结点将中序遍历分成两个子序列,分别为其左右子树的中序序列,之后递归应用这个过程,构造出一个二叉树,前序遍历该序列,即可得到表达式的前缀形式。

  • 第17题:

    某算术表达式用二叉树表示如下,该算术表达式的中缀式为(请作答此空),其后缀式为( )。

    A.a-b+c*d
    B.a-(b+c)*d
    C.(a-(b+c))*d
    D.a-(b+c*d)

    答案:C
    解析:
    前序遍历:先访问根结点,再依次按前序遍历的方式访问根结点的左子树、右子树中序遍历:先中序遍历根结点的左子树,再访问根结点,再中序遍历根结点的右子树后序遍历:先中序遍历根结点的左子树,再中序遍历根结点的右子树,再访问根结点二叉树采用中序遍历得中缀表达式,采用后序遍历得后缀表达式

  • 第18题:

    算术表达式采用后缀式表示时不需要使用括号,使用(请作答此空)就可以方便地进行求值。a-b*(c+d)的后缀式为( )。

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

    答案:C
    解析:
    本题考查编译原理基础知识。
    计算机在处理算术表达式时,首先将其转换为后缀表达式。例如,表达式"46+5*(120-37)"的后缀表达式形式为"46 5 120 37-*+"。计算后缀表达式时,从左至右扫描后缀表达式:若遇到运算对象,则压入栈中;遇到运算符,则从栈中弹出相关运算对象进行计算,并将运算结果压入栈中,重复以上过程,直到后缀表达式扫描结束。
    表达式"a-b*(b+d)"的后缀表达式形式为"abcd+*-。

  • 第19题:

    中缀表达式A-(B+C/D)*E的后缀表达式形式是()。

    • A、AB-C+D/E*
    • B、ABC+D/-E*
    • C、ABCD/E*+-
    • D、ABCD/+E*-

    正确答案:D

  • 第20题:

    后缀算术表达式24 8 + 3 * 4 10 7 - * /所对应的中缀算术表达式为(),其值为()。


    正确答案:(24+8)*3/(4*(10-7));8

  • 第21题:

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

    bc–d*a+ 

    B

    abc–d*+ 

    C

    ab–c*d+

    D

    abcd–*+


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

  • 第22题:

    单选题
    已知一算术表达式的中缀形式为A+B*C-D/E,后缀形式为ABC*+DE/,其前缀形式为(  )。
    A

    -A+B*C/DE

    B

    -A+B*CD/E

    C

    -+*ABC/DE

    D

    -+A*BC/DE


    正确答案: C
    解析:

  • 第23题:

    单选题
    中缀表达式A-(B+C/D)*E的后缀表达式形式是()。
    A

    AB-C+D/E*

    B

    ABC+D/-E*

    C

    ABCD/E*+-

    D

    ABCD/+E*-


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