【后序式的运算】
2018-06-18 04:09:19来源:未知 阅读 ()
/* 后序式的运算 说明: 将中序式转换为后序式的好处是,不用处理运算子先后顺序问题,只要依序由运算式由前往后读取即可。 解法: 运算时由后序式的前方开始读取,遇到运算元先存入堆叠,如果遇到运算子,则由堆叠中取出两个运算元进行对应的运算,然后将 结果存回堆叠,如果运算式读取完毕,那么堆叠顶的值就是答案了,例如我们计算12+34+* 这个运算式 (也就 是(1+2)*(3+4) ): 读取 堆叠 1 1 2 12 + 3 3 33 (1+2后存回) 4 334 + 37 (3+4后存回) * 21 (3*7后存回) */ #include <stdio.h> #include <stdlib.h> void evalPf(char* ); double cal(double, char, double); int main(void) { char input[80]; printf("input the postfix: "); scanf("%s", input); evalPf(input); return 0; } void evalPf(char* postfix) { double stack[80] = {0.0}; char temp[2]; char token; int top = 0, i = 0; temp[1] = '\0'; while(1) { token = postfix[i]; switch(token) { case '\0': printf("ans = %f \n", stack[top]); return; case '+': case '-': case '*': case '/': stack[top-1] = cal(stack[top], token, stack[top-1]); top--; break; default: if(top < sizeof(stack) / sizeof(float)) { temp[0] = postfix[i]; top++; stack[top] = atof(temp); } break; } i++; } } double cal(double p1, char op, double p2) { switch(op) { case '+': return p1 + p2; case '-': return p1 - p2; case '*': return p1 * p2; case '/': return p1 / p2; } }
运行结果:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ 运算符重载 2020-06-10
- C++ new初始化与定位new运算符 2020-05-22
- 重载矩阵加法运算 代码参考 2020-04-29
- 重载加法运算符的复数运算 代码参考 2020-04-29
- C++基础 学习笔记五:重载之运算符重载 2020-04-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash