欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    利用栈求表达式的值.docx

    • 资源ID:10322675       资源大小:15.85KB        全文页数:12页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    利用栈求表达式的值.docx

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

    2、)若是其它字符,则返回错误信息。程序应包括以下几个功能函数void initstack();初始化堆栈int Make_str();语法检查并计算int push_operate(int operate):将操作码压入堆栈int push_num(double num):将操作数压入堆栈int procede(int operate):处理操作码 int change_opnd(int operate):将字符型操作码转换成优先级int push_opnd(int operate):将操作码压入堆栈int pop_opnd();将操作码弹出堆栈int caculate(interru_opnd

    3、):简单计算 +,-,*,/double pop_num():弹出操作数程序如下:#include stdio.h#include string.h#include stdlib.h#define MAXLEN 100typedef struct char op; int level;opt;typedef struct /定义操作符栈 opt stMAXLEN; int top;op_stack;typedef struct /定义值栈 double DMAXLEN; int top;D_stack;/-对栈操作的定义-opt peek(op_stack *s) /定义看栈顶函数 opt e

    4、rror=; if(s-top=0) return s-sts-top; else return error;int IsEmpty(op_stack *s) /定义判断栈空的函数 if(s-topsts-top.op;char push(op_stack *s,opt c) /定义入栈函数 s-top+; s-sts-top=c; return c.op;opt pop(op_stack *s) /定义出栈函数 opt i; opt error=; if(s-top=0) i=s-sts-top; s-sts-top.op=0; s-top-; return i; else return e

    5、rror;void clear(op_stack *s) /定义初始化栈 s-top=-1;/-define the value stack-double Dpeek(D_stack *s) /定义看栈顶函数 if(s-top=0) return s-Ds-top; else return 0;int DIsEmpty(D_stack *s) /定义判断栈空的函数 if(s-topDs-top);double Dpush(D_stack *s,double c) /定义入栈函数 s-top+; s-Ds-top=c; return c;double Dpop(D_stack *s) /定义出栈

    6、函数 double i; if(s-top=0) i=s-Ds-top; s-Ds-top=0; s-top-; return i; else return 0;void Dclear(D_stack *s) /定义初始化栈 s-top=-1;double calval(char *exp) op_stack os; /定义两个栈 D_stack ds; char tmpMAXLEN=; int i=0,leng; double dtmp,dpoptmp; opt A=; opt R=; opt M=; opt D=; opt B=; opt Mo=; clear(&os); Dclear(&

    7、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; /- switch(*exp) case + : if(!IsEmpty(&os) | peek(&os).level =A.level) switch(pop(&os).op) case %: dpoptmp=Dpop(&ds); dpoptmp=

    8、(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)

    9、; 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); Dpush(&ds,dpoptmp); break; case * : dpoptmp=Dpop(&ds)*Dpop(&ds); Dpush(

    10、&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); *exp+; break; case *: if(!IsEmpty(&os)

    11、| 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); break; push(

    12、&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

    13、(&ds)/dpoptmp; Dpush(&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);

    14、 break; case / : dpoptmp=Dpop(&ds); dpoptmp=Dpop(&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);

    15、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; p

    16、op(&os); /弹出 ( exp+; break; while(IsEmpty(&os) 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); break; case +: dpoptmp=Dpop(&ds)+Dpop(&ds); Dpush(&ds,dpoptmp); break; case -: dpoptmp=Dpop(&ds); dpoptmp=Dpop(&ds)-dpoptmp; Dpush(&ds,dpoptmp); break; return Dpop(&ds);void main() char stringMAXLEN; char *p=string; printf(输入表达式:n); gets(p); printf(%s=%fnn,string,calval(p);


    注意事项

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

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

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

    收起
    展开