用两种方式实现表达式自动计算_第1页
用两种方式实现表达式自动计算_第2页
用两种方式实现表达式自动计算_第3页
用两种方式实现表达式自动计算_第4页
用两种方式实现表达式自动计算_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、% iMX A #includestring h#includestdl让h#includestring#includestack# includeGlgor ithm#include fstream h#define MAXN 1000using namespace std;stack SI;/定义栈SI,转换专用stack S2;/定义栈S2,计算专用char *tranfExp (char* exp)/变换后缀char tempStr 1000 ;/保存后缀表达式的字符串char ch;int i二0, j二0;int a二0;/标记表达式是否正确专用/int b二0;/标记数字格式是否

2、正确待用while (expi !=,0)if(eXpi= &expi= O & expi O) ; printfC进栈计算的数%fn, S2. topO);else if (expi=)double m = S2 top();S2. pop();double n = S2 top();S2. pop();S2 push (nm);else if(expi = +) double m = S2 top();/ printf (M的值dn, m);S2. pop();double n = S2 top 0;/ printf (N的值dn, n);S2. pop();S2 push

3、(n+m);else if (expi = /)double m = S2 top();S2. pop();double n = S2 top();S2. pop();S2 push(n/m);else if (expi = *)double m = S2 top();S2. pop();double n = S2 top 0;S2. pop();S2.push(n*m);i+;return S2 top();mainOchar str1000;char strl 1000;char* tranStr;intdouble rel;/最后结果tranStr = (char *)malloc(10

4、0*sizeof(char);printf (z,输入字符n);scanf (z,%s,z, str);printf (“转换成后缀表达式n);tranStr = tranfExp(str);len=strlen(tranStr);puts(tranStr);for (int i=0; includestring# includes tackusing namespace std;int transform(char s, char stored】)/转化const int a8二T, T, 2, 1, 0, 1, 0, 2 ;/保存优先级int i, j, temp;stack sk;for

5、 (i=0, j二0, temp二0; si != 0 ; i+)/j保存数组stored的有效数字的长度if (si=0&si=9)temp二temp*l0+si0 ;else(if(temp!=0)storedj+= temp+0 ;temp=0;if (! sk. empty ()&sk. top 0 =,) )/弹出)sk pop 0 ;辻(sk. empty () /空就压入sk push(sLiJ);else(if(asi- (=ask. topO- CD/这里看看ASCii表就明白了storedj+=sk top 0;sk pop();sk push(si);el

6、seif(asi- ( ask. topO- ( &si != () | |si=) while (! sk. empty ()&sk. top 0 !二()/停止标志stored LjH二sk top 0 ;sk. pop();if (!sk empty()sk. pop();sk. push(s i);elsesk. push(s i);storedj+=temp+,O;/最后的数字也要拿wh订e (! sk. empty 0)/残余运算符stored.j+二sk top(); sk. pop();return j;int calcular(char stored, int

7、 n)stack cal;int i, x, y, resuIt二0;for(i=0;is)n二transform(s, stored);result=calcular(stored, n);coutresuItendl;return 0;四、运行结果1.后缀输入结呆误,都是思路没问题,但是呢,都是逻辑错误。还有就是老师提问的,分隔符问题。不过可 以解2中缀直接计算输入结呆o 丨回|71+2*55五、遇到的问题及解决经过一个星期的写代码,我遇到了很多问题,并解决了,比如一些莫名其名的错决,但是呢,要人量的改代码,我怕时间不够了,就不改了,因为还要去弄下一个报告 了。算法不一定是程序,但程序一定是算法!六、心得体会在做完本项目之后,体会最深的就是应该细心,并且很多时候我们看见某些事情很简单 就不想去做,而做的时候又总会遗漏很多需要考虑的细节,或者根本就不知道从哪入手更

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论