- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
用到的是算符优先法的思想,现摘自严蔚敏的数据结构(C语言版)的3.2.5章来详细说明算符优先法的思想:
(摘抄结束)
我给出的计算器功能有:支持欧拉数e,支持圆周率pi,支持运算符=,-,*,/,求幂符号^,阶乘!,正弦sin,余弦cos,正切tan,以10为底的对数函数lg,以欧拉数为底的对数函数ln,优先级表为:(!表示不合法)
#includestdio.h
#includestdlib.h
#includectype.h
#includestring.h
#includemath.h
//引用请注明出处:://hi.baidu/liangxiaowen1989/blog/item/af972310f7119670ca80c413.html
#defineMAX_TOKEN_LEN100//标记最大长度
#defineEXPR_INCREMENT20//表达式长度的增量
typedefstruct{
doubleopnd;//操作数
charoptr[11];//运算符
intflag;//若为1,则为单目运算符,2则是双目运算符
}SElemType;//栈元素类型
typedefstructSNode{//栈
SElemTypedate;
structSNode*next;
}SNode,*Stack;
struct{//用来存储一个操作数或运算符
charstr[MAX_TOKEN_LEN];
inttype;//类型,若为0,则为操作数,若为1则为运算符
}token;
struct{//expression,用来存储表达式
char*str;
intcur;//标记读取expr的当前位置
}expr;
StackOPND,OPTR;//操作数栈operand,运算符栈operator
intexpr_size;//表达式长度
voidInitStack(Stack*S){//初始化栈
*S=(Stack)malloc(sizeof(SNode));
if(!(*S)){
printf(动态申请内存失败!\n);
exit(0);
}//if
(*S)-next=NULL;
}//InitStack
voidDestroyStack(Stack*S){//销毁栈
SNode*p;
while(p=*S){
*S=p-next;
free(p);
}//while
}//DestroyStack
voidPush(StackS,SElemTypee){//入栈
SNode*p;
p=(SNode*)malloc(sizeof(SNode));
if(!p){
printf(动态申请内存失败!\n);
exit(0);
}//if
strcpy(p-date.optr,e.optr);
p-date.opnd=e.opnd;
p-date.flag=e.flag;
p-next=S-next;
S-next=p;
}//Push
voidPop(StackS,SElemType*e){//出栈
SNode*p;
p=S-next;
if(!p){
printf(栈为空,不能出栈!\n);
exit(0);
}//if
S-next=p-next;
strcpy(e-optr,p-date.optr);
e-opnd=p-date.opnd;
e-flag=p-date.flag;
free(p);
}//Pop
voidget_expr(){//获取expr字符串
char*p;
intsize;
expr.cur=0;
expr_size=100;
expr.str=(char*)malloc(expr_size*sizeof(char));
if(!expr.str){
printf(内存分配失败!\n);
exit(0);
}//if
size=0;
p=expr.str;
while((*p=getchar())!=\n){
if(*p!=.huisheliren){
if((*p=A)(*p=Z)){
*p=*p+32;//将大写转换成小写
}//if
p++;
size++;
if(size==ex
您可能关注的文档
最近下载
- (高清版)-B-T 34590.2-2022 道路车辆 功能安全 第2部分:功能安全管理.pdf VIP
- 水果超市水果产期及收货标准.xls VIP
- 环境中抗生素抗性基因传播途径.docx VIP
- 2025年监理员考试题库及答案.docx VIP
- Hopewind禾望HV510系列高性能变频器用户手册.pdf
- 2025年度中秋国庆节前安全教育培训.pptx
- 多肉拼盘.pptx VIP
- 养生保健品商业计划书.pptx
- 第六章 智能网联汽车_3 课件(共33张PPT)- 《汽车文化》同步教学(上海交大版).pptx VIP
- 2025-2026学年小学劳动苏科版2023二年级上册-苏科版(2023)教学设计合集.docx
文档评论(0)