算术表达式求值(小数).doc_第1页
算术表达式求值(小数).doc_第2页
算术表达式求值(小数).doc_第3页
算术表达式求值(小数).doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include #include #include #define STACK_INIT_SIZE 100typedef double SElemType;typedef struct SElemType *base;/栈底指针 SElemType *top;/栈顶指针 double stacksize;SqStack;double InitStack(SqStack &S) /初始堆栈 S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return 1;SElemType GetTop(SqStack S) /获取顶部元素 if(S.top=S.base) return 0; SElemType e=*(S.top-1); return e;double Push(SqStack &S,SElemType e) /压栈 *S.top+=e; return 1;double Pop(SqStack &S,SElemType &e) /出栈 if(S.top=S.base) return 0; e=*-S.top; return 1;/double ClearStack(SqStack &S) /清空栈/ S.top=S.base;/ S.stacksize=STACK_INIT_SIZE;/ return 1;/double StackEmpty(SqStack S) /判断栈是否为空/ if(S.top=S.base) return 1;/ return 0;/char Preced(char t1,char t2);/声明double Operate(double a, char theta, double b);int In(char *p)/ 应在前面有定义typedef char SElemType; / 判断c是否为运算符 switch(*p) case+:return 1;case-:return 1;case*:return 1;case/:return 1;case(:return 1;case):return 1; case#:return 1; default:return 0; double EvaluateExpression(char *p) /表达式求值,入口:表达式串,出口:计算结果值 double z; double a,b;/为方便计算栈中弹出的两个数的结果 double k; /计算小数点时用来记位置 double theta; char bijiao; SqStack S1; /S1存数据, SqStack S2; /S2存运算符 InitStack(S1); InitStack(S2); Push(S2,#); while(*p!=#|GetTop(S2)!=#) if(!In(p)/读输入的数据,进入数据 z=0; if(*p=0&*p=0&*p=9)/将小数点后的数据加入数值中 z+=(*p-48)*k; k=k*0.1; p+; /if Push(S1,z); /if elsebijiao=Preced(GetTop(S2),*p); switch(bijiao) case :/退栈并运算结果,3*(7-2) Pop(S2,theta);/- Pop(S1,b);Pop(S1,a);/2,7 Push(S1,Operate(a,theta,b);/7-2 break; /switch /else /while return GetTop(S1); /EvaluateExpressionchar Preced(char t1,char t2)/比较两个运算符的优先权, switch(t1) case # : if(t2=#) return =; else return ; /#的优先权最低 case ( : if(t2=) return =; /只有左右括号比较时才返回= else return ; /其他则左括号都小 case + : /+、-的优先权相同 case - : if(t2=*|t2=/|t2=() return ; case * : /*、/的优先权相同 case / : if(t2=() return ; case ) : return ;/右括号的优先权最高 double Operate(double a,char theta,double b)/对a,b进行theta运算 switch(theta) case + : return a+b; case - : return a-b; case * : return a*b; case / : return a/b; /switch/Operatedouble main() char a100; ch

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论