优先矩阵求算术表达式(c编程)

优先矩阵求算术表达式(c编程)

ID:15402701

大小:51.50 KB

页数:5页

时间:2018-08-03

优先矩阵求算术表达式(c编程)_第1页
优先矩阵求算术表达式(c编程)_第2页
优先矩阵求算术表达式(c编程)_第3页
优先矩阵求算术表达式(c编程)_第4页
优先矩阵求算术表达式(c编程)_第5页
资源描述:

《优先矩阵求算术表达式(c编程)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、#include#include#defineMaxSize100#defineMaxOp7typedefstruct{chardata[MaxSize];//存放运算符inttop;//栈指针}zhifu;//定义运算符栈typedefstruct{floatdata[MaxSize];inttop;}num;intInOp(charch)//判断ch是否为运算符{if(ch=='('

2、

3、ch==')'

4、

5、ch=='+'

6、

7、ch=='-'

8、

9、ch=='*'

10、

11、ch=='/'

12、

13、ch=='=')return1;elser

14、eturn0;}charPrecede(charc1,charc2){inti=0,j=0;staticchararray[49]={'>','>','<','<','<','>','>','>','>','<','<','<','>','>','>','>','>','>','<','>','>','>','>','>','>','<','>','>','<','<','<','<','<','=','!','>','>','>','>','!','>','>','<','<','<','<','<','!','='};switch(c1)/*i为下面ar

15、ray的横标*/{case'+':i=0;break;case'-':i=1;break;case'*':i=2;break;case'/':i=3;break;case'(':i=4;break;case')':i=5;break;case'=':i=6;break;}switch(c2)/*j为下面array的纵标*/{case'+':j=0;break;case'-':j=1;break;case'*':j=2;break;case'/':j=3;break;case'(':j=4;break;case')':j=5;break;case'=':j=6

16、;break;}return(array[7*i+j]);/*返回运算符*/}voidcompvalue(zhifu&op,num&st)//计算后缀表达式的值{floata,b,c;switch(op.data[op.top]){case'+'://判定为'+'号a=st.data[st.top];st.top--;//退栈取数值ab=st.data[st.top];st.top--;//退栈取数值bc=a+b;//计算cst.top++;st.data[st.top]=c;//将计算结果进栈break;case'-'://判定为'-'号a=st.data

17、[st.top];st.top--;//退栈取数值ab=st.data[st.top];st.top--;//退栈取数值bc=b-a;//计算cst.top++;st.data[st.top]=c;//将计算结果进栈break;case'*'://判定为'*'号a=st.data[st.top];st.top--;//退栈取数值ab=st.data[st.top];st.top--;//退栈取数值bc=a*b;//计算cst.top++;st.data[st.top]=c;//将计算结果进栈break;case'/'://判定为'/'号a=st.data[s

18、t.top];st.top--;//退栈取数值ab=st.data[st.top];st.top--;//退栈取数值bif(a!=0){c=b/a;//计算cst.top++;st.data[st.top]=c;//将计算结果进栈}else{printf("t除零错误!");exit(0);//异常退出}break;}}voidtrans(char*exp){zhifuop;numst;inti=0;//i作为postexp的下标floatd;st.top=-1;op.top=-1;op.top++;//将'='进栈op.data[op.top]=

19、'=';while(*exp!='='

20、

21、op.data[op.top]!='=')//exp表达式未扫描完时循环{if(!InOp(*exp))//为数字字符的情况{d=0;while(*exp>='0'&&*exp<='9')//判定为数字{d=10*d+*exp-'0';exp++;}st.top++;st.data[st.top]=d;}else//为运算符的情况switch(Precede(op.data[op.top],*exp)){case'<'://栈顶运算符的优先级低op.top++;op.data[op.top]=*exp;exp++;/

22、/继续扫描其他字符break;case'='://只

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

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

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