琛ㄨ揪寮忔眰鍊间笂链哄唴瀹_doc汇.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
琛ㄨ揪寮忔眰鍊间笂链哄唴瀹_doc汇

内容:实现栈的应用——表达求值式操作。 环境:Turbo c或 c++ 要求:实现一位数的操作数加、减、乘、除、及带括号的运算即可,界面简洁明了。 顺序栈结构体: #define MAX 100 typedef? struct { ?char optr[MAX]; ?double opnd[MAX]; ?int top,topd;//top:运算符栈顶、topd:操作数栈顶 }Stack; 给出需要的操作的定义(以操作数栈为例): void InitStack(Stack *s) bool StackEmpty(Stack *s) void Push(Stack *s,double x) double Pop(Stack *s) char GetTop(Stack *s) 注意:上述的函数体请大家自己完成。(建议运算符栈、操作数栈分别定义) ? 部分关键函数实现代码: char Precede(char sym1,char sym2)? {/*比较两个操作符的优先级*/ ?int i; ?char chl[2]; ?int ind[2]; ?char re[7][7]={,,,,,,, ??,,,,,,, ??,,,,,,, ??,,,,,,, ??,,,,,=, , ??,,,, ,,, ??,,,,, ,=}; ?chl[0]=sym1; ?chl[1]=sym2; ?for(i=0;i=1;i++) ??? {switch(chl[i]) ????? {case +:ind[i]=0;break; ?????? case -:ind[i]=1;break; ?????? case *:ind[i]=2;break; ?????? case /:ind[i]=3;break; ?????? case (:ind[i]=4;break; ?????? case ):ind[i]=5;break; ?????? case #:ind[i]=6;break; ?????? default : printf(Error!\n);return(0); ????? } ??? } ?return(re[ind[0]][ind[1]]); } double Operate(double a,char sym,double b)//进行运算 { ?double re; ?switch(sym) ?{ ?case +:re=a+b;break; ?case -:re=a-b;break; ?case *:re=a*b;break; ?case /:re=a/b;break; ?default:printf(Error!\n);return(0); ?} ?return re; } ? //下面红色部分是两个栈分开定义的函数名。 double express( ) { ??? char c,x,op; ??? double a,b,d; ??? Stack OPND,OPTR; ??? InitStack_optr(OPTR); ??? Push_optr(OPTR, #); ??? InitStack_opnd(OPND); ??? c=getchar( ); ??? while(c!=#||GetTop_optr(OPTR)!=#) ??? { ??if((c!=+)(c!=-)(c!=*)(c!=/)(c!=#)(c!=()(c!=))) ??{? ????? d=atof(c); ???Push_opnd(OPND,d);????? //不是运算符则进栈 ???c=getchar(); ??} ??else ??{ ???switch(Precede(GetTop_optr(OPTR), c)) ???{ ???case:???????????//新输入的算符 c 优先级高,c 进栈 ????????????? ......; break; ???? ???case =:???????????// 去括号并接收下一字符 ????????????? ......; break; ???? ???case :???????????//栈顶算符优先权高,出栈并将运算结果入栈OPND???????? ????????????? ......; break; ?? } ??} ?}? ?return GetTop_opnd(OPND); } 演示界面 演示程序  HYPERLINK /C1920/Courseware/Task/Assignment/111019256733.exe \t _blank 表达式求值演示下载

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档