




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 矿山智能化监测与数据驱动的治理研究-洞察阐释
- 网络设备配置发现-洞察阐释
- 机械装备可靠性评估-洞察阐释
- 智能化后勤管理系统开发与评估-洞察阐释
- 城乡一体化规划与实践-洞察阐释
- 饲料中离凹凸棒石对肉鸡健康的影响研究
- 算法作品的版权与著作权归属研究
- 虾爪状手的护理课件
- 癫痫患者的护理查房
- 丘脑继发恶性肿瘤护理
- LS-T8014-2023高标准粮仓建设标准
- 小儿心力衰竭的护理查房
- TCSTM00829-2022钢轨自动涡流检测系统综合性能测试方法
- 护理中的卫生防护
- 2025年美术教师编制考试模拟试卷:美术教育心理学在课堂管理中的应用试题
- 农村商业银行贷款协议书
- DB62T 3081-2022 绿色建筑工程验收标准
- 2024年云南文山州州属事业单位选调109名工作人员考试试卷笔试题库含答案
- 建筑与环境设计专题知到智慧树期末考试答案题库2025年宁夏大学
- 从北银消费金融骗贷事件透视北京银行风险结构与应对策略
- 《蜡染与扎染》教学课件-2024-2025学年人教版(2024)初中美术九年级上册
评论
0/150
提交评论