算术表达式求值演示程序(2)

2020-02-21 20:57

元素和当前读入的字符均为“#”)。 算法中还调用了两个函数。其中Precede是判定运算符栈顶运算符θ1与读入的运算符θ2之间优先关系的函数;Operateo为进行二元运算aθb的函数,如果是编译表达式,则产生这个运算的一组相应指令并返回存放结果的中间变量名;如果是解释执行表达式,则直接进行该运算,并返回运算结果。 4.2.3主函数流程图 C!=’#’||GetTop(OPTR)!=’#’ 开始 Char c; SqStack OPTR,OPND;c=getchar() C=getchar() c>=’0’&&c<=’9’ Pop(OPTR,theta);Pop(OPND,b);Pop(OPND,a); Push(OPND,Operate(a,tehta,b)); Precede(GetTop(OPTR),c) Push(OPTR,c) Pop(OPTR,c) Return GetTop(OPND) 结束 word文档 可自由复制编辑

4.2.4函数模块调用关系 主程序模块 栈的建立及初始化模块 判断输入是否结束模块 判断字符类型模块 运算数进栈模块 运算符优先级比较模块 运算符进栈模块 运算符运算数出栈模块 运算模块 输入结束 输出结果 4.2.5运算符间的优先关系 θ1 θ2 + - * / ( ) # + > > > > < > < - > > > > < > < * > > > > < > < / < < > > < > < ( < < < < < < ) > > > > = > # > > > > > = word文档 可自由复制编辑

4.3详细设计 4.3.1数据类型的定义及基本操作 //===== ADT Stack的表示与实现 ===== //----- 栈的顺序存储表示 ----- #define STACK_INIT_SIZT 100; #define STACKINCREMENT 10 typedef struct{ SElemType *base; SElemType *top; int stacksize; }SqStack; //----- 基本操作的算法描述 ----- Status InitStack(SqStack &S){ S.base = (SElemType * )malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!S.base) exit (OVERFLOW); S.top = S.base; S.stacksize = STACK_INIT_SIZE; return OK; } Status GetTop(SqStack S, SElemType &e){ if(S.top == S.base) return ERROR; e = * (S.top-1); return OK; } Status Push(SqStack &S,SElemType e){ if(S.top-S.base>=S.stacksize){ S.base=(SElemType*)realloc(S.base ,(S.StackSize+STACKINCREMENT)*sizeof (SElemType)); if(!S.base) exit(OVERFLOW); word文档 可自由复制编辑

S.top=S.base+S.stacksize; S.stacksize += STACKINCREMENT; } *S.top++ =e; return OK; } Status Pop(SqStack &S,SElemType &e){ if(S.top == S.base) return ERROR; e = * --S.top; return OK; } OperandType EvaluateExpession(){ InitStack(OPTR); Push(OPTR,’#’); InitStack(OPND); c = getchar(); while(c!’#’||GetTop(OPTR)!=’#’){ if(!In(c,OP)){Push((OPND,c); c = getchar();) else switch(Precede(GetTop(OPTR),c)){ case’<’:Push(OPTR,c); c = getchar(); break; case’=’:Pop(OPTR,x); c = getchar(); break; case’>’:Pop(OPTR,theta); Pop(OPND,b); Pop(OPND,a); Push(OPND,Operate(a,theta,b)); break; } } } word文档 可自由复制编辑

4.3.2函数调用关系 main() SqStack C=getchar() InitStack c Push_N(&OPND,i) switch(Predece(GetTop_T(&OPTR),c)) theta=Pop_T(&OPTR); b=Pop_N(&OPND);a=Pop_N(&OPND); Push_N(&OPND,Operate(a,theta,b)) Push_T(&OPTR,c) GetTop_N(&OPND) 4.3.3主要模块的算法描述 void main(){ SqStack_T OPTR;SqStack_N OPND; float a,b,i; char theta,c,x; InitStack_T(&OPTR);Push_T(&OPTR,’#’); InitStack_N(&OPND); printf(“请输入表达式关以’#’结尾:\\n”); c=getchar(); if(c==35||(c>=40&&c<=43)||c==45||(c>=47&&c<=57)) { word文档 可自由复制编辑


算术表达式求值演示程序(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:价格管理员

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: