




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
用到的是算符优先法的思想,现摘自严蔚敏的数据结构(C语言版)的3.2.5章来详细说明算符优先法的思想:(摘抄结束)我给出的计算器功能有:支持欧拉数e,支持圆周率pi,支持运算符=,-,*,/,求幂符号,阶乘!,正弦sin,余弦cos,正切tan,以10为底的对数函数lg,以欧拉数为底的对数函数ln,优先级表为:(!表示不合法)#include #include #include #include #include /引用请注明出处:/liangxiaowen1989/blog/item/af972310f7119670ca80c413.html#define MAX_TOKEN_LEN 100 /标记最大长度#define EXPR_INCREMENT 20/表达式长度的增量typedef struct double opnd; /操作数char optr11; /运算符int flag; /若为1,则为单目运算符,2则是双目运算符 SElemType; /栈元素类型typedef struct SNode /栈SElemType date;struct SNode * next; SNode, *Stack;struct /用来存储一个操作数或运算符char strMAX_TOKEN_LEN;int type; /类型,若为0,则为操作数,若为1则为运算符 token;struct /expression,用来存储表达式char *str;int cur; /标记读取expr的当前位置expr;Stack OPND, OPTR; /操作数栈operand,运算符栈operatorint expr_size; /表达式长度void InitStack(Stack *S) /初始化栈*S = (Stack)malloc(sizeof(SNode);if(!(*S) printf(动态申请内存失败!n);exit(0); /if(*S)-next = NULL; /InitStackvoid DestroyStack(Stack *S) /销毁栈SNode *p;while(p = *S) *S = p-next;free(p); /while /DestroyStackvoid Push(Stack S, SElemType e) /入栈SNode *p;p = (SNode *)malloc(sizeof(SNode);if(! p) printf(动态申请内存失败!n); exit(0); /ifstrcpy(p-date.optr,e.optr);p-date.opnd = e.opnd;p-date.flag = e.flag;p-next = S-next;S-next = p; /Pushvoid Pop(Stack S,SElemType *e) /出栈SNode *p;p = S-next;if(! p) printf(栈为空,不能出栈!n);exit(0); /ifS-next = p-next;strcpy(e-optr,p-date.optr);e-opnd = p-date.opnd;e-flag = p-date.flag;free(p); /Popvoid get_expr() /获取expr字符串char *p;int size;expr.cur = 0;expr_size = 100;expr.str = (char*)malloc(expr_size * sizeof(char);if(! expr.str) printf(内存分配失败!n);exit(0); /ifsize = 0;p = expr.str;while(*p = getchar() != n) if(*p != ) if(*p = A) & (*p = 0) & (ch = a) & (*p = a) & (expr.strexpr.cur+1 optr;str2 = optr2-optr;if(!strcmp(str1,ln) | !strcmp(str1,lg) | !strcmp(str1,sin) | !strcmp(str1,cos) | !strcmp(str1,tan) optr1-flag = 1; /这些均为单目运算符return (!strcmp(str2,() | !strcmp(str2,) | !strcmp(str2,!) ? ; /ifif(!strcmp(str1,!) optr1-flag = 1;return ; /ifoptr1-flag = 2;switch(str10) case +: case -: return (!strcmp(str2,+) |!strcmp(str2,-) | !strcmp(str2,) | !strcmp(str2,#) ? : : ;case (: return !strcmp(str2,) ? = : ;case : return (!strcmp(str2,() | !strcmp(str2,!) | !strcmp(str2,) ? ;case #: return !strcmp(str2,#) ? = : ; /switch /Precedelong factorial(long n) /阶乘return (n next-date.optr,#) if(token.type) /说明token存储的是运算符strcpy(optr.optr,token.str);switch(Precede(&(OPTR-next-date),&optr) case : /退栈并将运算结果入栈Pop(OPTR,&optr);Pop(OPND,&opnd2);if(optr.flag = 2) /是双目运算符才需另一个操作符Pop(OPND,&opnd1); /ifPush(OPND,Operate(opnd1,optr,opnd2); /switch /ifelse /说明token存储的是操作数opnd1.opnd = atof(token.str);Push(OPND,opnd1);/atof将token.str转换为双精度数gettoken(); /获取下一个标记 /else /whileprintf(%.16gnn,OPND-next-date.opnd);free(expr.str);DestroyStack(&OPTR);DestroyStack(&OPND); /whilefree(expr.str);return 0; /main/实例测试:23.243*(5 - (2-13/.23)/(2-9.235)-(4-20) / 2)-32*(3+2.23/ (2*3)/标准答案为:-2380.7610725282693238114006817341/实例测试2: 23.243*(5-(2!-13/0.23)/(2!-9.235)-(4!-20)!/2!)-32*(3!+2.23/(2*3)!)/答案: -
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025国际关系学院应届毕业生招聘1人(第2号)考前自测高频考点模拟试题及答案详解(必刷)
- 2025广西平果市农业机械化服务中心城镇公益性岗位人员招聘1人模拟试卷及一套参考答案详解
- 2025广东广州市中级人民法院招聘劳动合同制审判辅助人员模拟试卷及答案详解(必刷)
- 2025甘肃定西市人力资源有限公司招聘9人模拟试卷及完整答案详解一套
- 2025贵州黔东南州镇远县青溪司法所招聘1人模拟试卷及完整答案详解一套
- 2025年春季中国电子校园招聘模拟试卷及完整答案详解一套
- 2025辽宁盘锦建设投资有限责任公司招聘工作人员和模拟试卷完整参考答案详解
- 2025贵州三穗县第七批城镇公益性岗位招聘15人模拟试卷及一套参考答案详解
- 2025江苏连云港市灌南县招聘事业单位人员43人考前自测高频考点模拟试题及完整答案详解1套
- 班组安全培训活动记录课件
- 零星维修工程施工组织设计方案方案
- 2025年汽车驾驶员(技师)考试试题及答案(含答案)
- 2025大连国际机场招聘25人笔试历年参考题库附带答案详解
- 2025年浙江铁塔招聘笔试备考题库(带答案详解)
- 2025年上海市(秋季)高考语文真题详解
- 《秘书文档管理第三版》课件第七章
- 电力工程电缆设计课件
- 施工班组驻地管理制度
- 城投公司成本控制管理制度
- 中国磷化工行业市场规模及发展前景研究报告(智研咨询)
- 万亨工业科技(台州)股份有限公司年产500万套逆变器及配件、800万套新能源汽车控制器配件技改项目环评报告
评论
0/150
提交评论