计算器文档精要.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算器文档精要.doc

问题描述:输入中缀式,进行加减乘除混合四则运算,同时可以进行正弦,余弦,log()对数计算以及ln()自然对数计算。 算法思路:对于加减乘除四则混合运算利用栈先将中缀式转化为后缀式,再对后缀式进行计算。正弦,余弦,log()对数计算以及ln()自然对数的计算都较为简单实现。 算法描述:以下主要写将中缀式转化为后缀式的过程以及计算的过程两个子函数 void Translate(char s[] , char e[])//将中缀式转化为后缀式 { Ch=s[]; While(ch!=’\0’) { Case ‘(’: 入栈; Case‘)’: 退栈直到遇到‘(’,并且将‘(’也出栈; 出栈元素放入e[] Case ‘+’: Case ‘-’: 退栈直到遇到‘(’,再将‘+’‘-’入栈; 出栈元素放入e[] Case ‘*’: Case ‘/’: 退栈直到遇见‘*’或‘/’再将‘*’‘/’入栈 出栈元素放入e[] Default 直接放入e[]中; } } float Compute(char a[]) //将后缀式进行计算 { while(a[i]!=\0) //依次扫描后缀表达式 { if(a[i]!= a[i]=0a[i]=9)//如果是数字 { 将a[]中的字符型转化为int 型; S.top++; S.data[S.top]=value; //处理成int型后进栈 } else //如果是运算符 { switch(a[i]) { case+: x1=S.data[S.top]; S.top--; x2=S.data[S.top]; S.top--; result=x1+x2; S.top++; S.data[S.top]=result; break; case-: 运算和加法相同 Break; case*: x1=S.data[S.top]; S.top--; x2=S.data[S.top]; S.top--; result=x1*x2; S.top++; S.data[S.top]=result; break; case/: 运算和乘法相同 break; } i++; } } if(!S.top!=-1) //如果栈不空,将结果出栈并返回 { result=S.data[S.top]; S.top--; if(S.top==-1) return result; else { printf(表达式错误); exit(-1); } } } 源程序以及驱动程序: #includestdio.h #includestdlib.h #includemath.h #define MaxS 100 typedef struct { float data[MaxS]; int top; }PStack; typedef struct { char data[MaxS]; int top; }SeqStack; void InitStack(SeqStack *S)//初始化栈 { S-top=0; } int StackEmpty(SeqStack S)//判断栈是否为空 { if(S.top ==0) return 1; else return 0; } int PushStack(SeqStack *S,char e)//进栈 { if(S-top=MaxS) { printf(栈已满,不能进栈!); return 0; } else { S-data[S-top]=e; S-top++; return 1; } } int PopStack(SeqStack *S,char *e)//删除栈顶元素 { if(S-top==0) { printf(栈已空,不能出栈\n); return 0; } else { S-top--; *e=S-data[S-top]; return 1; } } int GetTop(SeqStack S,char *e)//取栈顶元素 { if(S.top=0) { printf(栈已空); return 0; } else { *e=S.data[S.top-1]; return 1; } } void Translate(char s[],cha

文档评论(0)

三哥 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档