前缀后缀算数运算编程

前缀后缀算数运算编程

ID:9010449

大小:190.07 KB

页数:7页

时间:2018-04-14

前缀后缀算数运算编程_第1页
前缀后缀算数运算编程_第2页
前缀后缀算数运算编程_第3页
前缀后缀算数运算编程_第4页
前缀后缀算数运算编程_第5页
资源描述:

《前缀后缀算数运算编程》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、用两种方式实现表达式自动计算一、设计思想1、中缀转化为后缀算法过程中要使用一个栈和两个数组,(栈用来存放运算符,一个数组用来存放中缀表达式,两一个则是存放后缀表达式)表达式的转换过程如下:(1)、将表达式开始符“#“压入运算符栈,作为栈底元素。(2)、从左到右依次扫描中缀表达式的每一个字符。(3)、如果遇到的是开括号“(”,则将它们压入一个操作符栈(不需要与栈顶操作符相比较),它表明一个新的计算层次的开始,在遇到和它匹配的闭括号“)”时,将栈中的元素弹出来并放入后缀表达式中,直到栈顶元素为“(”时,将栈顶元素“(”弹出(不需要加入后缀表达式),表明这

2、一层括号内的操作处理完毕(4)、即将进栈的操作符要与栈顶的操作符进行优先级比较,若当所遇到的操作符的优先级大于栈顶元素时,进栈,否则是将栈顶元素一次弹栈放入后缀数组,直到比较操作符小于或等于栈顶元素时为止。重复以上操作,最后将栈内所有操作符放进后缀数组内。(5)、重复上述步骤直到缀表达式的结束符标记“#“,弹出栈中所有元素并放入后缀表达,转换结束。中缀表达式为:17-3*4+(8/2)#后缀表达式为:1734*-82/+2、中缀转化为前缀算法过程中要使用三个数组,(一个栈数组,一个存放中缀表达式,一个存放前缀表达式)表达式的转换过程如下:(1)将表达

3、式开始符“#“压入运算符栈数组,作为栈底元素。(2)、从右到左依次扫描中缀表达式的每一个字符。(3)、如果遇到的是开括号“)”,则将它们放进栈数组内(不需要与栈顶操作符相比较),它表明一个新的计算层次的开始,在遇到和它匹配的闭括号“(”时,将栈中的元素弹出来并放入前缀表达式中,直到栈顶元素为“)”时,将栈顶元素“)”弹出(不需要加入后缀表达式),表明这一层括号内的操作处理完毕(4)、如果遇到的是操作符,则将该操作符和操作符栈顶元素比较:当所遇到的操作符的优先级小于栈顶元素的优先级时,则取出栈顶元素放入后缀表达式,并弹出该栈顶元素,反复执行直到操作符的

4、优先级大于或等于栈顶元素的优先级的时则将它压入栈中。(5)、重复上述步骤直到缀表达式的结束符标记“#“,弹出栈中所有元素并放入前缀表达,输出倒序输出。转换结束。中缀表达式:17-3*4+(8/2)#转换前缀表达式+-17*34/823、后缀表达式的计算:(1)、从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到的是符号,就将栈顶的两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。例如:后缀表达式1734*-82/+首先计算*左边的34即3*4得出的结果放入栈中,再算—左边的1712-得到的结果5再放进栈,一次类推,最后结果9.4、前缀

5、表达式的计算:(1)、从右到左遍历表达式的每个数字和符号,遇到是数字就进栈,遇到的是符号,就将栈顶的两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。例如:前缀表达式+-17*34/82首先从最右边开始,计算/最近的两位数计算得4,再放进栈中,再算*34,得12放进栈,这时+-17124以此类推,+54得9,最后结果9.-7-用两种方式实现表达式自动计算二、算法流程图这部分要画出每个算法的流程图,并对每个流程图用文字简单说明。文字用5号字,宋体。文档中的所有图片要设置为居中,图下面要有图号和图名,图号和图名小5字,居中。如下所示。图1xxxx

6、算法流程图三、源代码下面是中缀转换前缀表达式intf(charc)//判断运算符级别函数;{intf=-1;switch(c){case'+':case'-':f=1;break;case'*':case'/':f=2;break;-7-用两种方式实现表达式自动计算default:f=0;break;}returnf;}intOperator(charc)//判断字符是否为操作符{if(c=='+'

7、

8、c=='-'

9、

10、c=='*'

11、

12、c=='/')return1;elsereturn0;}voidconvert(chars[N],charp[N])/

13、/将中缀表达式转化为前缀表达式{charstack[N];inttop=0,j=0,len=0;if(s[0]==')'){printf("对不起,您输入不合法,将退出当前的程序!");printf("");}else{while(s[len]!=''){len++;}for(inti=len-1;i>=0;){if(s[i]>=48&&s[i]<=57){while(s[i]>=48&&s[i]<=57){p[j]=s[i];j++;i--;}p[j]='';j++;}if(s[i]==')')//假如是回括号,将它压栈。{top++;

14、stack[top]=s[i];}-7-用两种方式实现表达式自动计算while(Operator(s[i])

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。