版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上题目:利用栈求表达式的值一设计任务和目标编写程序实现表达式求值,即验证某算术表达式的正确性,若正确,则计算该算术表达式的值。主要功能描述如下:1、从键盘上输入表达式。2、分析该表达式是否合法:(1)是数字,则判断该数字的合法性。若合法,则压入数据到堆栈中。(2)是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的值。(3)若是其它字符,则返回错误信息。 主要功能描述如下:1、从键盘上输入表达式。2、分析该表达式是否合法:(1)是数字,则判断该数字的合法性。若合法,则压入数据到堆栈中。(2)是规定的运算符,则根据规则进行处理。在处理过程中,将计算该表达式的
2、值。(3)若是其它字符,则返回错误信息。程序应包括以下几个功能函数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_
3、opnd):简单计算 +,-,*,/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;/-对栈操作
4、的定义-opt peek(op_stack *s) /定义看栈顶函数 opt error=; if(s->top>=0) return s->sts->top; else return error;int IsEmpty(op_stack *s) /定义判断栈空的函数 if(s->top<0) return 0; else return s->sts->top.op;char push(op_stack *s,opt c) /定义入栈函数 s->top+; s->sts->top=c; return c.op;opt pop(o
5、p_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 error;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
6、; else return 0;int DIsEmpty(D_stack *s) /定义判断栈空的函数 if(s->top<0) return 0; else return (int)(s->Ds->top);double Dpush(D_stack *s,double c) /定义入栈函数 s->top+; s->Ds->top=c; return c;double Dpop(D_stack *s) /定义出栈函数 double i; if(s->top>=0) i=s->Ds->top; s->Ds->top=&
7、#39;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(&ds); /-定义初始化结束- while(
8、*exp!='0') while(*exp >= '0' && *exp <= '9' | *exp = '.') while(*exp >= '0' && *exp <= '9' | *exp = '.') tmpi+=*exp+; dtmp=atof(tmp); Dpush(&ds,dtmp); leng=strlen(tmp); for(i=0;i<leng;i+) tmpi='0' i=0;
9、 /- switch(*exp) case '+' : if(!IsEmpty(&os) | peek(&os).level < A.level) push(&os,A); *exp+; else while(IsEmpty(&os) && peek(&os).level>=A.level) switch(pop(&os).op) case '%': dpoptmp=Dpop(&ds); dpoptmp=(float)(int)Dpop(&ds)%(int)dpoptmp
10、); 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,dpoptm
11、p); 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) push(&os,R); *exp+; else while(IsEmpty(&os) && peek(&os).lev
12、el>=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(&ds,dpoptmp); break; case '/' : dpoptmp=Dpop(&ds); dpoptmp=D
13、pop(&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(!IsEmp
14、ty(&os) | peek(&os).level < M.level) push(&os,M); *exp+; else while(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 '
15、*' : dpoptmp=Dpop(&ds)*Dpop(&ds); Dpush(&ds,dpoptmp); break; case '/' : dpoptmp=Dpop(&ds); dpoptmp=Dpop(&ds)/dpoptmp; Dpush(&ds,dpoptmp); break; push(&os,M); *exp+; break; case '/': if(!IsEmpty(&os) | peek(&os).level < D.level) push(&os,
16、D); *exp+; else while(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,d
17、poptmp); break; case '/' : dpoptmp=Dpop(&ds); dpoptmp=Dpop(&ds)/dpoptmp; Dpush(&ds,dpoptmp); break; push(&os,D); *exp+; break; case '%': if(!IsEmpty(&os) | peek(&os).level < Mo.level) push(&os,Mo); *exp+; else while(IsEmpty(&os) && peek(&
18、;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);
19、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)dpop
20、tmp); 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; pop(&os); /弹出 ( exp+; break; while(IsEmpty(&os)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB14-T 2762-2023 旱地绿豆地膜覆盖穴播技术规程
- DB14-T 2785-2023 主要造林针叶树种容器苗质量分级
- 七年级下册 第六单元 22 伟大的悲剧 教学设计
- 统编版语文四年级下册1 古诗词三首 清平乐·村居 教学设计
- 2023年数字媒体投资申请报告
- 起重机械安全检查表
- 美国商业银行存款产品实践对养老储蓄产品创设的启示 202409 -招商银行
- 防漏光汽车空调控制面板技术规范编制说明
- 4s店副厂件维修协议书范本
- 2020离婚协议书范文样板电子版
- 《建筑施工图设计》课件-建筑施工图平面图
- 2024年心理咨询师考试题库附参考答案(满分必刷)
- 水轮机检修工考试测试题(题库版)
- W -S-T 347-2024 血细胞分析校准指南(正式版)
- 西安城市介绍课件
- 2024年云南红投国际投资开发集团有限公司招聘笔试冲刺题(带答案解析)
- 顺义小学有哪些
- 阿尔茨海默病的早期预防和治疗
- 医院后勤安全管理措施优化
- 大班语言活动:我骄傲-我是中国娃
- 小学班会 文明习惯及礼仪教育班会 知礼、诚信、感恩 课件
评论
0/150
提交评论