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函数]

(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程序设计能力的培养。
(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-* +
第3题:
算术表达式 a+b-c*d 的后缀式是( ) (一、+、*表示算术的减、加、乘运算,运算符的优先级和结合性遵循惯例)。
A. a b + C d * - B. a b c +- d* C. abcd+-* D. ab+c-d*
第4题:
算术表达式a+(b-c)*d的后缀式是(13)(一、+、*表示算术的减、加、乘运算, 运算符的优先级和结合性遵循惯例)。
A.bc-d*a+
B.abc-d*+
C.ab+c-d*
D.ab C d-*+
第5题:
第6题:
第7题:
第8题:
第9题:
第10题:
算术表达式(a-b)*c+d的后缀式是()(+、-、*表示算术的加、减、乘运算,运算符的优先级和结合性遵循惯例)。
第11题:
C语言基本的算术运算符不包含模运算符”%”
算术运算符的优先级高于关系运算符
自加和自减运算符的结合方向是”自右向左”
C语言规定在表达式求值时,按其中运算符的优先级先高后低的次序进行
第12题:
+(*-
+(-*
/+(*-*
/+-*
第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
第14题:
算术表达式a+(b-c)*d的后缀式是()(+、-、*表示算术的加、减、乘运算,运算符的优先级和结合性遵循惯例)。
A.bc–d*a+
B.abc–d*+
C.ab+c–d*
D.abcd–*+
第15题:
算术表达式 a+(b-c)*d 的后缀式是( )(-、+、*表示算术的减、加、乘运算, 运算符的优先级和结合性遵循惯例)。
A. abcd+-* B. abc-d* +C. abc-+d* D. ab-cd*+
第16题:
算术表达式a*(b-c)+d的后缀式是(31) (一、+、*表示算术的减、加、乘运算,运算符的优先级和结合性遵循惯例)。
A.abcd-*+
B.abc-*d+
C.abc-d*+
D.ab-cd*+
第17题:

第18题:


第19题:
第20题:
第21题:
表达式求值算法需要两个栈,它们分别是下列哪些(),分别用于存储数据和符号。
第22题:
下面叙述中,错误的是()
第23题:
数据栈
符号栈
中间结果栈
汉字栈
第24题:
bc–d*a+
abc–d*+
ab–c*d+
abcd–*+