ImageVerifierCode 换一换
格式:DOCX , 页数:3 ,大小:15.25KB ,
资源ID:7942626      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7942626.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(利用栈求表达式的值.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

利用栈求表达式的值.docx

1、利用栈求表达式的值题目:利用栈求表达式的值一设计任务和目标编写程序实现表达式求值,即验证某算术表达式的正确性,若正确,则计算该算术表达式的值。主要功能描述如下:1、从键盘上输入表达式。2、分析该表达式是否合法:(1)是数字,则判断该数字的合法性。若合法,则压入数据到堆栈中。(2)是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的值。(3)若是其它字符,则返回错误信息。主要功能描述如下:1、从键盘上输入表达式。2、分析该表达式是否合法:(1)是数字,则判断该数字的合法性。若合法,则压入数据到堆栈中。(2)是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的值。(3)

2、若是其它字符,则返回错误信息。程序应包括以下几个功能函数voidinitstack();初始化堆栈intMake_str();语法检查并计算intpush_operate(intoperate):将操作码压入堆栈intpush_num(doublenum):将操作数压入堆栈intprocede(intoperate):处理操作码intchange_opnd(intoperate):将字符型操作码转换成优先级intpush_opnd(intoperate):将操作码压入堆栈intpop_opnd();将操作码弹出堆栈intcaculate(interru_opnd):简单计算+,-,*,/dou

3、blepop_num():弹出操作数程序如下:#includestdio.h#includestring.h#includestdlib.h#defineMAXLEN100typedefstructcharop;intlevel;opt;typedefstruct/定义操作符栈optstMAXLEN;inttop;op_stack;typedefstruct/定义值栈doubleDMAXLEN;inttop;D_stack;/-对栈操作的定义-optpeek(op_stack*s)/定义看栈顶函数opterror=;if(s-top=0)returns-sts-top;elsereturner

4、ror;intIsEmpty(op_stack*s)/定义判断栈空的函数if(s-topsts-top.op;charpush(op_stack*s,optc)/定义入栈函数s-top+;s-sts-top=c;returnc.op;optpop(op_stack*s)/定义出栈函数opti;opterror=;if(s-top=0)i=s-sts-top;s-sts-top.op=0;s-top-;returni;elsereturnerror;voidclear(op_stack*s)/定义初始化栈s-top=-1;/-definethevaluestack-doubleDpeek(D_s

5、tack*s)/定义看栈顶函数if(s-top=0)returns-Ds-top;elsereturn0;intDIsEmpty(D_stack*s)/定义判断栈空的函数if(s-topDs-top);doubleDpush(D_stack*s,doublec)/定义入栈函数s-top+;s-Ds-top=c;returnc;doubleDpop(D_stack*s)/定义出栈函数doublei;if(s-top=0)i=s-Ds-top;s-Ds-top=0;s-top-;returni;elsereturn0;voidDclear(D_stack*s)/定义初始化栈s-top=-1;dou

6、blecalval(char*exp)op_stackos;/定义两个栈D_stackds;chartmpMAXLEN=;inti=0,leng;doubledtmp,dpoptmp;optA=;optR=;optM=;optD=;optB=;optMo=;clear(&os);Dclear(&ds);/-定义初始化结束-while(*exp!=0)while(*exp=0&*exp=0&*exp=9|*exp=.)tmpi+=*exp+;dtmp=atof(tmp);Dpush(&ds,dtmp);leng=strlen(tmp);for(i=0;ileng;i+)tmpi=0;i=0;/-

7、switch(*exp)case+:if(!IsEmpty(&os)|peek(&os).level=A.level)switch(pop(&os).op)case%:dpoptmp=Dpop(&ds);dpoptmp=(float)(int)Dpop(&ds)%(int)dpoptmp);Dpush(&ds,dpoptmp);break;case*:dpoptmp=Dpop(&ds)*Dpop(&ds);Dpush(&ds,dpoptmp);break;case/:dpoptmp=Dpop(&ds);dpoptmp=Dpop(&ds)/dpoptmp;Dpush(&ds,dpoptmp);b

8、reak;case+:dpoptmp=Dpop(&ds)+Dpop(&ds);Dpush(&ds,dpoptmp);break;case-:dpoptmp=Dpop(&ds);dpoptmp=Dpop(&ds)-dpoptmp;Dpush(&ds,dpoptmp);break;push(&os,A);*exp+;break;case-:if(!IsEmpty(&os)|peek(&os).level=R.level)switch(pop(&os).op)case%:dpoptmp=Dpop(&ds);dpoptmp=(float)(int)Dpop(&ds)%(int)dpoptmp);Dpu

9、sh(&ds,dpoptmp);break;case*:dpoptmp=Dpop(&ds)*Dpop(&ds);Dpush(&ds,dpoptmp);break;case/:dpoptmp=Dpop(&ds);dpoptmp=Dpop(&ds)/dpoptmp;Dpush(&ds,dpoptmp);break;case+:dpoptmp=Dpop(&ds)+Dpop(&ds);Dpush(&ds,dpoptmp);break;case-:dpoptmp=Dpop(&ds);dpoptmp=Dpop(&ds)-dpoptmp;Dpush(&ds,dpoptmp);break;push(&os,R

10、);*exp+;break;case*:if(!IsEmpty(&os)|peek(&os).level=M.level)switch(pop(&os).op)case%:dpoptmp=Dpop(&ds);dpoptmp=(float)(int)Dpop(&ds)%(int)dpoptmp);Dpush(&ds,dpoptmp);break;case*:dpoptmp=Dpop(&ds)*Dpop(&ds);Dpush(&ds,dpoptmp);break;case/:dpoptmp=Dpop(&ds);dpoptmp=Dpop(&ds)/dpoptmp;Dpush(&ds,dpoptmp)

11、;break;push(&os,M);*exp+;break;case/:if(!IsEmpty(&os)|peek(&os).level=D.level)switch(pop(&os).op)case%:dpoptmp=Dpop(&ds);dpoptmp=(float)(int)Dpop(&ds)%(int)dpoptmp);Dpush(&ds,dpoptmp);break;case*:dpoptmp=Dpop(&ds)*Dpop(&ds);Dpush(&ds,dpoptmp);break;case/:dpoptmp=Dpop(&ds);dpoptmp=Dpop(&ds)/dpoptmp;D

12、push(&ds,dpoptmp);break;push(&os,D);*exp+;break;case%:if(!IsEmpty(&os)|peek(&os).level=Mo.level)switch(pop(&os).op)case%:dpoptmp=Dpop(&ds);dpoptmp=(float)(int)Dpop(&ds)%(int)dpoptmp);Dpush(&ds,dpoptmp);break;case*:dpoptmp=Dpop(&ds)*Dpop(&ds);Dpush(&ds,dpoptmp);break;case/:dpoptmp=Dpop(&ds);dpoptmp=D

13、pop(&ds)/dpoptmp;Dpush(&ds,dpoptmp);break;push(&os,Mo);*exp+;break;case(:push(&os,B);exp+;break;case):while(peek(&os).level!=-2)switch(pop(&os).op)case%:dpoptmp=Dpop(&ds);dpoptmp=(float)(int)Dpop(&ds)%(int)dpoptmp);Dpush(&ds,dpoptmp);break;case*:dpoptmp=Dpop(&ds)*Dpop(&ds);Dpush(&ds,dpoptmp);break;c

14、ase/:dpoptmp=Dpop(&ds);dpoptmp=Dpop(&ds)/dpoptmp;Dpush(&ds,dpoptmp);break;case+:dpoptmp=Dpop(&ds)+Dpop(&ds);Dpush(&ds,dpoptmp);break;case-:dpoptmp=Dpop(&ds);dpoptmp=Dpop(&ds)-dpoptmp;Dpush(&ds,dpoptmp);break;pop(&os);/弹出(exp+;break;while(IsEmpty(&os)switch(pop(&os).op)case%:dpoptmp=Dpop(&ds);dpoptmp

15、=(float)(int)Dpop(&ds)%(int)dpoptmp);Dpush(&ds,dpoptmp);break;case*:dpoptmp=Dpop(&ds)*Dpop(&ds);Dpush(&ds,dpoptmp);break;case/:dpoptmp=Dpop(&ds);dpoptmp=Dpop(&ds)/dpoptmp;Dpush(&ds,dpoptmp);break;case+:dpoptmp=Dpop(&ds)+Dpop(&ds);Dpush(&ds,dpoptmp);break;case-:dpoptmp=Dpop(&ds);dpoptmp=Dpop(&ds)-dpoptmp;Dpush(&ds,dpoptmp);break;returnDpop(&ds);voidmain()charstringMAXLEN;char*p=string;printf(输入表达式:n);gets(p);printf(%s=%fnn,string,calval(p);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1