已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*表达式求值,输入一个表达式,如1+2*3#,程序可计算出结果为7支持以下符号:+ - * / ( ) .可以计算整数、小数其中表示次方,25表示2的5次方*/*头文件*/#include #include #include #include #include /*宏定义*/#define INIT_STACK_SIZE 100#define SET_NUM 8#define N 100/*字符优先级表*/unsigned char priorSET_NUMSET_NUM = /* + - * / ( ) # */ /*+*/, , , , , , , , , , , , , , , , , , , , , , , , , /*(*/, , , , , =, , , , , , , , , , /*#*/, , , , , , =, , , , , , , ; unsigned char priorSetSET_NUM = +, -, *, /, (, ), #, ;/*结构体定义,这是用来存放字符的栈*/typedef structchar *base;char *top;int stacksize; SqStackC;/*结构体定义,这是用来存放数字的栈*/typedef structdouble *base;double *top;int stacksize; SqStackN;void initStackN(SqStackN &);void initStackC(SqStackC &);void pushN(SqStackN &, double);void pushC(SqStackN &, double);void popN(SqStackN &, double &);void popC(SqStackN &, double &);double calculate(double, char, double);int findInSet(char);char compare(char, char);void getSolution();/*主函数*/void main()getSolution();/*初始化数字栈*/void initStackN(SqStackN &S)S.base = (double*) malloc(INIT_STACK_SIZE * sizeof(double);S.top = S.base;S.stacksize = INIT_STACK_SIZE;/*初始化字符栈*/void initStackC(SqStackC &S)S.base = (char*) malloc(INIT_STACK_SIZE * sizeof(char);S.top = S.base;S.stacksize = INIT_STACK_SIZE;/*向数字栈中存放数字*/void pushN(SqStackN &S, double x)if (S.top-S.base = S.stacksize) return;*(S.top+) = x;/*向字符栈中存放字符*/void pushC(SqStackC &S, char x)if (S.top - S.base = S.stacksize) return;*(S.top+) = x;/*从数字栈中取出数字*/void popN(SqStackN &S, double &x)if (S.top=S.base) return;x = *(-S.top);/*从字符栈中取出字符*/void popC(SqStackC &S, char &x)if (S.top = S.base) return;x = *(-S.top);/*这个函数返回a operation b的值。假如operation为+,则返回a+b的值*/double calculate(double a, char operation, double b)/*判断operation,返回对应的计算结果*/switch (operation) case +:return a + b;case -:return b - a;case *:return a * b;case /:return b / a;case :return pow(b, a);default:return 0;/*查找字符c在priorSet中的什么位置*/*priorSet是所支持的所有字符的集合*/int findInSet(char c)int i;for (i = 0; i = 0 & tempi = 0 & tempi :/*取出字符栈顶运算符,和数字栈顶的两个数字*/popC(OPTR, operation);popN(OPND, a);popN(OPND, b);/*计算结果*/sum = calculate(a, operation, b);/*结果入栈*/pushN(OPND, sum);break;/*如果优先级小*/case :/*入栈,继续循环*/pushC(OPTR, tempi);i+;break;/*如果优先级相等*/case =:/*优先级相等只
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年新时代师德师风建设要求解读课件
- 2026事业单位工勤技能-甘肃-甘肃地图绘制员四级(中级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-湖南-湖南舞台技术工三级(高级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-湖北-湖北收银员五级(初级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-湖北-湖北中式烹调师二级(技师)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-海南-海南林木种苗工三级(高级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-河北-河北计算机信息处理员一级高级技师历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-吉林-吉林工程测量工二级(技师)历年参考题库含答案详解3套试卷
- 2026年11月大学生节主题教育 大学生与社会责任
- 工厂安全生产风险分级管控制度
- 街道老年体协工作制度
- 眼科OCT培训教学课件
- 工行合规教育培训课件
- 2026中国资源循环集团电池有限公司招聘4人考试参考题库及答案解析
- 2025版《csco肿瘤厌食-恶病质综合征诊疗指南》
- 高校实验课程项目评估标准
- 2025年中国带状疱疹疫苗行业发展研究报告
- 浦发银行招聘真题及答案
- 设备维修与保养标准化流程表
- T-CIESC 93-2025 锂离子电池正极 负极水性丙烯酸类共聚物粘结剂
- 药店常用药品专业知识手册
评论
0/150
提交评论