




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1、简单计算器。请按照四则运算加、减、乘、除、幂()和括号的优先关系和惯例,编写计算器程序。要求: 从键盘输入一个完整的表达式,以回车作为表达式输入结束的标志。 输入表达式中的数值均为大于等于零的整数。中间的计算过程如果出现小数也只取整。例如,输入:4+2*5=输出:14 输入:(4+2)*(2-10)=输出:-48程序如下:#include#include#include#define OK 1#define ERROR 0#define OVERFLOW -2#define STACK_INIT_SIZE 100 /存储空间初始分配量#define STACKINCREMENT 10 /存
2、储空间分配增量typedef struct/定义运算符栈数据类型 char *base; char *top; int stacksize;SqStack1;typedef struct/定义操作数栈数据类型 int *base; int *top; int stacksize;SqStack2;int InitStack1(SqStack1 &S)/构造一个空的运算符栈 S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char); if(!S.base) exit(OVERFLOW); S.top=S.base; S.stacksize=STACK_
3、INIT_SIZE; return OK;/InitStack1int InitStack2(SqStack2 &S)/构造一个空的操作数栈 S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int); if(!S.base) exit(OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK;/InitStack2char GetTop1(SqStack1 S)/若栈不空,则用char型元素e返回S的栈顶元素,并返回OK;否则返回ERROR char e; if(S.top=S.bas
4、e) return ERROR; e=*(S.top-1); return e;/GetTop1int GetTop2(SqStack2 S)/若栈不空,则用int型元素e返回S的栈顶元素,并返回OK;否则返回ERROR int e; if(S.top=S.base) return ERROR; e=*(S.top-1); return e;/GetTop2int Push1(SqStack1 &S,char e)/插入char型元素e为新的栈顶元素 if(S.top-S.base=S.stacksize) S.base=(char *)realloc(S.base,(S.stacksize+
5、STACKINCREMENT)*sizeof(char); if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; *S.top+=e; return OK;/Push1int Push2(SqStack2 &S,int e)/插入int型元素e为新的栈顶元素 if(S.top-S.base=S.stacksize) S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int); if(!S.base) ex
6、it(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; *S.top+=e; return OK;/Push2int Pop1(SqStack1 &S,char &e)/若栈不空,则删除S的栈顶元素,用char型元素e返回其值,并返回OK;否则返回ERROR if(S.top=S.base) return ERROR; e=*-S.top; return OK;/Pop1int Pop2(SqStack2 &S,int &e)/若栈不空,则删除S的栈顶元素,用int型元素e返回其值,并返回OK;否则返回ERROR
7、 if(S.top=S.base) return ERROR; e=*-S.top; return OK;/Pop2char Precede(char a,char b)/比较两个相继出现的运算符a和b间的优先级关系switch(a)case +:switch(b)case+:return;break;case-:return;break;case*:return;break;case/:return;break;case(:return;break;case=:return;break;case:return;break;case-:return;break;case*:return;bre
8、ak;case/:return;break;case(:return;break;case=:return;break;case:return;break;case-:return;break;case*:return;break;case/:return;break;case(:return;break;case=:return;break;case:return;break;case-:return;break;case*:return;break;case/:return;break;case(:return;break;case=:return;break;case:return;br
9、eak;case-:return;break;case*:return;break;case/:return;break;case(:return;break;case=:return;break;case:return;break;case(:switch(b)case+:return;break;case-:return;break;case*:return;break;case/:return;break;case(:return;break;case):return=;break;case:return;break;case-:return;break;case*:return;bre
10、ak;case/:return;break;case):return;break;case=:return;break;case:return;break;case#:switch(b)case+:return;break;case-:return;break;case*:return;break;case/:return;break;case(:return;break;case=:return=;break;case:return0;b-) x=x*a; return x;/powint Operate(int a,char theta,int b)/操作数a和b进行运算 switch(t
11、heta)case+:return(a+b);case-:return(a-b);case*:return(a*b);case/:return(a/b);case:return(pow(a,b);/Operateint In(char c)/判断字符c是否为运算符if(c!=+&c!=-&c!=*&c!=/&c!=&c!=&c!=(&c!=) return ERROR;else return OK;/Inint EvaluateExpression()int x,a,b;char c,theta; SqStack1 OPTR;SqStack2 OPND;InitStack1(OPTR);InitStack2(OPND);Push1(OPTR,#);c=getchar();while(c!=n) x=0;if(!In(c)/c是操作数while(!In(c)x=x*10+c-48;c=getchar();Push2(OPND,x);else/c是算符 switch(Precede(GetTop1(OPTR),c)case:/退栈并将运算结果入栈Pop1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 长天科技java面试题及答案
- 航天社团考试题及答案
- 家长必看的考试题及答案
- 城管执法源头管理制度
- 技能培训考试题及答案
- 钢铁物流面试题及答案
- 中药熏洗加热敷治疗老年退行性膝关节骨性关节炎58例总结模版
- 儿童急性早幼粒细胞白血病的临床护理
- 新质生产力落实
- 我的百宝箱三等奖教学设计
- 免拆底模钢筋桁架楼承板图集
- 寻梦环游记(Coco)中英文台词对照
- 宁夏2022年中考地理试卷(含答案)
- 颈椎骨折的护理课件
- 道德与法治《我们的衣食之源》教案教学设计(公开课)四年级下册
- Unit6 Living History of Culture同步梳理-【中职专用】高三英语寒假自学课(高教版2021·基础模块3)
- 反应堆热工分析课程设计报告书
- TL-PMM180超低烟尘使用及维护培训
- 智能交通道路监控设备建设招投标书范本
- 公路防汛安全培训课件模板
- 30题中国民航机场消防员岗位常见面试问题含HR问题考察点及参考回答
评论
0/150
提交评论