算术表达式求值(小数)

算术表达式求值(小数)

ID:14581631

大小:41.50 KB

页数:4页

时间:2018-07-29

算术表达式求值(小数)_第1页
算术表达式求值(小数)_第2页
算术表达式求值(小数)_第3页
算术表达式求值(小数)_第4页
资源描述:

《算术表达式求值(小数)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、#include#include#include#defineSTACK_INIT_SIZE100typedefdoubleSElemType;typedefstruct{SElemType*base;//栈底指针SElemType*top;//栈顶指针doublestacksize;}SqStack;doubleInitStack(SqStack&S)//初始堆栈{S.base=(SElemType*)malloc(STACK_INI

2、T_SIZE*sizeof(SElemType));S.top=S.base;S.stacksize=STACK_INIT_SIZE;return1;}SElemTypeGetTop(SqStackS)//获取顶部元素{if(S.top==S.base)return0;SElemTypee=*(S.top-1);returne;}doublePush(SqStack&S,SElemTypee)//压栈{*S.top++=e;return1;}doublePop(SqStack&S,SElemTyp

3、e&e)//出栈{if(S.top==S.base)return0;e=*--S.top;return1;}//doubleClearStack(SqStack&S)//清空栈//{//S.top=S.base;//S.stacksize=STACK_INIT_SIZE;//return1;//}//doubleStackEmpty(SqStackS)//判断栈是否为空//{//if(S.top==S.base)return1;//return0;//}//////////////////////

4、////////////////////////////charPreced(chart1,chart2);//声明doubleOperate(doublea,chartheta,doubleb);intIn(char*p)//应在前面有定义typedefcharSElemType;{//判断c是否为运算符switch(*p){case'+':return1;case'-':return1;case'*':return1;case'/':return1;case'(':return1;case')

5、':return1;case'#':return1;default:return0;}}doubleEvaluateExpression(char*p){//表达式求值,入口:表达式串,出口:计算结果值doublez;doublea,b;//为方便计算栈中弹出的两个数的结果doublek;//计算小数点时用来记位置doubletheta;charbijiao;SqStackS1;//S1存数据,SqStackS2;//S2存运算符InitStack(S1);InitStack(S2);Push(S

6、2,'#');while(*p!='#'

7、

8、GetTop(S2)!='#'){if(!In(p)){//读输入的数据,进入数据z=0;if(*p>='0'&&*p<='9'&&*p!='.'){//表达式中的数值可能不只一位数,求数值的小数点前面的数据z=z*10+*p-48;p++;}//ifif(*p=='.'){//假如遇到小数点时,进入下一个循环k=0.1;p++;while(*p>='0'&&*p<='9'){//将小数点后的数据加入数值中z+=(*p-48)*k;k=k*0.1;p++

9、;}}//ifPush(S1,z);}//ifelse{bijiao=Preced(GetTop(S2),*p);switch(bijiao){case'<'://栈顶元素优先权低theta=*p;Push(S2,theta);p++;break;case'='://去除栈中的左括号Pop(S2,theta);p++;break;case'>'://退栈并运算结果,3*(7-2)Pop(S2,theta);//-Pop(S1,b);Pop(S1,a);//2,7Push(S1,Operate(a,

10、theta,b));//7-2break;}//switch}//else}//whilereturnGetTop(S1);}//EvaluateExpressioncharPreced(chart1,chart2){//比较两个运算符的优先权,switch(t1){case'#':if(t2=='#')return'=';elsereturn'<';//#的优先权最低case'(':if(t2==')')return'=';//只有左右括号比较时才返回'='elsereturn'

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

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

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