主体:两个函数

 transMtoA(std,stdA);//将中缀表达式->后缀表达式caculate(stdA,stacknum);//计算结果

注意!!! 减法和除法时stack[top - 2] - stack[top - 1]!!!
全部代码:

#include<stdio.h>
int cur = 0;
int isDigit(char* s) {return s >= '0' && s <= '9';
}
int getBit(int num) {int count = 0;while(num > 0) {num = num/10;count++;}return count;
}
int getPri(char op) {switch(op){case '+':return 1;case '-':return 1;case '*':return 2;case '/':return 2;case '(':return 0;default: return 0;}
}
void transMtoA(char* strM,char* strA) {int i;char out[100] = {0};int  lo = 0;char stack[100] = {0};int top = 0;for(i = 0;i < strlen(strM);i++) {if(isDigit(strM[i])) {out[lo++] = strM[i];}else if(strM[i] == '(') {stack[top++] = strM[i];}else if(strM[i] == ')') {while(top > 0 && stack[top - 1] != '(') {out[lo++] = stack[top - 1];top--;}top--;//弹出左括号 }else {if(getPri(strM[i]) > getPri(stack[top - 1])) {stack[top++] = strM[i];}else {while( top > 0 && getPri(stack[top - 1]) >= getPri(strM[i]) ) {out[lo++] = stack[top - 1];top--;  }stack[top++] = strM[i];}} } while(top > 0) {out[lo++] = stack[top - 1];top--;}strcpy(strA,out);return;
}
void caculate(char* stdA,int* stacknum) {double stack[100] = {0};int top = 0;int cur = 0;int count = 0;double tmp = 0;while(cur < strlen(stdA)) {if(isDigit(stdA[cur])) {stack[top++] = (double)stacknum[count];cur = cur+getBit(stacknum[count]);count++;}else {switch (stdA[cur]){case '+' : tmp = stack[top - 1] + stack[top - 2]; //printf("%.2f + %.2f -> %.2f\n",stack[top - 1],stack[top - 2],tmp);top = top - 2; stack[top++] = tmp;break;case '-' :tmp = stack[top - 2] - stack[top - 1];//printf("%.2f - %.2f -> %.2f\n",stack[top - 2],stack[top - 1],tmp);top = top - 2;stack[top++] = tmp;break;case '*' :tmp = stack[top - 1] * stack[top - 2];//printf("%.2f * %.2f -> %.2f\n",stack[top - 1],stack[top - 2],tmp);top = top - 2;stack[top++] = tmp;break;case '/' :tmp = stack[top - 2] / stack[top - 1];//printf("%.2f / %.2f -> %.2f\n",stack[top - 2],stack[top - 1],tmp);top = top - 2;stack[top++] = tmp;break;default:break;}cur++;}}printf("%.2f",stack[0]);
}
int main() {char str[100] = {0};char std[100] = {0};char stdA[100] = {0};int stacknum[100] = {0};int num = 0;int topN = 0;gets(str);int i;int length = 0;for(i = 0;i < strlen(str);i++) {if(str[i] == ' ') {continue;}else if(str[i] == '=') {continue;}else std[length++] = str[i];}std[length++] = '\0';int isNum = 0;//---------------------------------------i = 0;while(i < strlen(std)) {isNum = 0;while(isDigit(std[i])) {num = num*10 + std[i] - '0';i++;isNum = 1;}if(isNum) {stacknum[topN++] = num;num = 0;//printf("%d ",stacknum[topN - 1]);}else {i++;}}//-----------------------------------------//printf("\n");transMtoA(std,stdA);//printf("%s\n",stdA);caculate(stdA,stacknum);return 0;
}

C语言实现逆波兰法计算表达式相关推荐

  1. c语言数据结构逆波兰算法,[分享]表达式二叉树逆波兰式的转换程序源代码(C++)...

    [分享]表达式二叉树逆波兰式的转换程序源代码(C++) RT,这是我两年前学数据结构时的作品. 拿出来给大家分享. ps:当时才学C++,代码写的不好,见笑了./*将中缀式转换为表达式树,并打印逆波兰 ...

  2. php逆波兰表达式,PHP逆波兰示意与表达式计算

    PHP逆波兰表示与表达式计算 ????? 说起表达式计算,想起一个笑话.我向他介绍,我们的PHP开发框架中有使用RPN对公式解析计算的类.于是,他笑我无知了.并且,还列出一系列的佐证,证明,在PHP中 ...

  3. 波兰式、逆波兰式与表达式求值

    波兰式.逆波兰式与表达式求值 <数据结构>中关于栈的解释经常会涉及到逆波兰式,波兰式,中缀式表达式的求值问题.但是,十分惭愧,整个大一阶段, 数据结构的课程没有上够5节,没有意识要学习,吃 ...

  4. 逆波兰式数学表达式求解

    逆波兰式数学表达式求解 //输入逆波兰式表达式 #include<iostream> #include<string.h> using namespace std; //函数表 ...

  5. C语言实现逆波兰表达式计算函数(含浮点型、整型混合运算)

    基本实现思路: (1)逆波兰表达式运算: 按顺序遍历整个表达式 ,若遇到操作数,则入栈,若遇到操作符,则连续弹出两个操作数(有序)进行运算,并将结果压入栈中,当栈中只剩下一个操作数时,为最终运算结果. ...

  6. php逆波兰表达式,PHP实现逆波兰式 - 计算工资时用

    近期一个小项目需要用到公式运算, 所以就进行一些了解,以下内容均属于个人经验. 在PHP中实现公式表达式四则运算大概有两种方法: 1)使用系统函数eval 2)将表达式转换成逆波兰表达式进行计算. / ...

  7. java逆波兰式求值_波兰式、逆波兰式与表达式求值

    波兰式.逆波兰式是<数据结构>课程中讲解关于栈的时候提到的,栈是很简单的一种数据结构.但是这些理论的提出却是计算机早期发展领域的重大突破,值得仔细回味. 1. 中缀表达式 我们在数学中学到 ...

  8. c语言逆波兰计算器程序,c语言实现逆波兰计算器

    最近学算法学到了栈 写了一个典型例子逆波兰计算器.用很像链表的形式写的下面来看思路. 首先要做的是一个栈的模型具有压栈和出栈的功能 #include #include #define MAX_S 20 ...

  9. 逆波兰式与表达式求值

    何为波兰式?何为逆波兰式? 如何与表达式求值联系起来? 波兰式.逆波兰式是数据结构和编译原理里面提到的知识点,我们平时的运算式都是这样的 2 + 3 * (5 - 1)-10(中缀表达式),这样表达式 ...

最新文章

  1. 【log】12/11 checking project:(Laravel)snsTest
  2. python类的函数_python 类函数
  3. C/C++中Static和Const的作用
  4. 逻辑java练习_逻辑结构常见练习 Java_Note
  5. C语言标准库中常见字符串处理函数
  6. java 3%3_Java 代码界 3% 的王者?看我是如何解错这 5 道题的
  7. 实现一个 webpack loader
  8. WSL2之kali从C盘迁移到E盘
  9. html2canvas 如何去掉空白区域_在Ai中,如何快速制作牛奶字效果
  10. 罗马数字和阿拉伯数字转换
  11. 计算机联锁车务仿真培训系统 casco模式,计算机联锁仿真培训系统
  12. matlab打开excel乱码,ArcGis 属性表.dbf文件使用Excel打开中文乱码的解决方法
  13. java-微信语言amr文件转码为Mp3文件
  14. KECRS: Towards Knowledge-Enriched Conversational Recommendation System
  15. 闲鱼双11全链路营销体系初体验
  16. CH32F103热敏打印机方案分享
  17. npm i 安装时报错问题解决
  18. anywhere 随起随用本地服务器
  19. 前端React 框架- UmiJS有听说过吗?
  20. python拼接字符串的方法,Python2中文字符串拼接

热门文章

  1. [MIT]微积分重点 第八课 链式法则 学习笔记
  2. 如果上班的时候累了,该怎么休息?
  3. 基于ubuntu16.04操作系统安装tensorlfow-gpu版(GPU板卡:nvidia tesla P100)
  4. Unity3d Vector3点
  5. 说英雄,谁是英雄——由《父辈的旗帜》说开去
  6. 【转载】有了这个列表,程序员不愁没练手的小项目了
  7. 智慧养殖:鸡舍环境监测智慧管理系统
  8. CSS清除浮动-after伪元素
  9. SOLIDWORKS 2023 新功能亮点:SW Simulation接触的惩罚刚度控制
  10. 算法 - 凸包(Graham算法)