逆波兰表达式(含小数)、C语言
#inlcude<stdio.h>
#include<math,h>
void Data_transformation(char input[], double sum[], int* pi, int* pj)
{int i = 0;char str[100] = "\0";while (input[*pi] != ' '){str[i] = input[*pi];(*pi)++;i++;}sum[*pj] = atof(str);(*pi)++;//切换至下一个操作数(*pj)++;//切换下一个索引
}
void Trigonometric(char input[], double sum[], int* pi, int* pj)
{if (input[*pi] == 'c'){sum[(*pj) - 1] = cos(sum[*(pj)-1]);}else{sum[(*pj) - 1] = sin(sum[*(pj)-1]);}(*pi) += 4;//切换至下一个操作数
}
void Calculator1(char input[100], double sum[100], int* pi, int* pj)
{switch (input[*pi]){case '+':sum[*(pj)-2] = sum[*(pj)-2] + sum[*(pj)-1];break;case '-':sum[*(pj)-2] = sum[*(pj)-2] - sum[*(pj)-1];break;case '*':sum[*(pj)-2] = sum[*(pj)-2] * sum[*(pj)-1];break;case '/':sum[*(pj)-2] = sum[*(pj)-2] / sum[*(pj)-1];break;}(*pi) += 2;//切换至下一个操作数(*pj)--;
}
int main()
{int i = 0;//作为input的索引int j = 0;//作为sum的索引char input[100] = "\0";double sum[100] = { 0 };gets(input);//输入数据while (input[i] != '\0'){//当input[i]不等于c/s/+/-/*//时进行数据转换,并切换至下一个操作数:后面的操作数只有三种情况,而且只有其中的一种情况成立if (input[i] != 'c' && input[i] != 's' && input[i] != '+' && input[i] != '-' && input[i] != '*' && input[i] != '/'){Data_transformation(input, sum, &i, &j);//数据类型转化,将字符型数据转化为浮点型}//当input[i]操作数为'c'||'s'时进行三角函数运算if (input[i] == 'c' || input[i] == 's'){//不需再进行数据类型转换Trigonometric(input, sum, &i, &j);//三角函数运算}else if (input[i] == '+' || input[i] == '-' || input[i] == '*' || input[i] == '/'){Calculator1(input, sum, &i, &j);}else{Data_transformation(input, sum, &i, &j);//数据类型转化,将字符型数据转化为浮点型}}printf("%lf", sum[j - 1]);return 0;
}
逆波兰表达式(含小数)、C语言相关推荐
- C语言实现逆波兰表达式计算函数(含浮点型、整型混合运算)
基本实现思路: (1)逆波兰表达式运算: 按顺序遍历整个表达式 ,若遇到操作数,则入栈,若遇到操作符,则连续弹出两个操作数(有序)进行运算,并将结果压入栈中,当栈中只剩下一个操作数时,为最终运算结果. ...
- Algorithm:C++语言实现之链表相关算法(单链公共结点问题、一般LCA、括号匹配、最长括号匹配、逆波兰表达式Reverse Polish Notation、直方图矩形面积、收集雨水问题)
Algorithm:C++语言实现之链表相关算法(单链公共结点问题.一般LCA.括号匹配.最长括号匹配.逆波兰表达式Reverse Polish Notation.直方图矩形面积.收集雨水问题) 目录 ...
- 逆波兰表达式[栈 C 语言 实现]
逆波兰表达式 逆波兰表达式又叫做后缀表达式.在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,这种表示法也称为中缀表示.波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示 ...
- C语言栈的运用:后缀表达式(逆波兰表达式)计算器
原理很简单,当操作者输入中每遇数字便将数字压入数栈,每遇符号便进行两次弹栈进行该符号的运算,运算结果再次压入数栈.唯一要注意的一点就是进行除法运算时需要判断除数是否为0. 头文件: /*Captain ...
- Bailian2694 逆波兰表达式(POJ NOI0202-1696, POJ NOI0303-1696)【文本】
问题链接:POJ NOI0202-1696 逆波兰表达式. 问题链接:POJ NOI0303-1696 逆波兰表达式. 逆波兰表达式 描述 逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式 ...
- CCF NOI1121 逆波兰表达式
问题链接:CCF NOI1121 逆波兰表达式. 时间限制: 1000 ms 空间限制: 262144 KB 题目描述 逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰 ...
- 算法一:递归(包含Hanoi问题、N皇后问题、逆波兰表达式、爬楼梯、放苹果、全排列)
递归 递归在算法中具有很重要的地位,也是很多学习编程的初学者非常头疼的问题,看我的这篇文章,希望能为还处于迷雾中的你带来希望 首先我们要知道递归的作用: 1.可替代多重循环 2.解决本来就是用递归形式 ...
- java 实现逆波兰表达式_逆波兰表达式java实现
知道逆波兰表达式是一个偶然的情况,在用js的时候偶然发现了js中的一个eval函数,数学的表达式它竟然能直接解析出结果.后面通过查询才得知里面的核心是用的逆波兰表达式的算法.后面网上找了一下java的 ...
- 逆波兰表达式-----------红黑树--------mysql(DDL)----生产者消费者模式
逆波兰表达式 二元运算符的表达式定义为:(操作数) + (运算符) + (操作数) ,其中操作数也可以为表达式. 在计算机中,根据运算符所在的不同位置来命名,表达式可以有如下三种不同的表示方法: 记表 ...
- 算法训练第十一天|力扣20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值
20. 有效的括号 题目链接:有效的括号 参考:https://programmercarl.com/0020.%E6%9C%89%E6%95%88%E7%9A%84%E6%8B%AC%E5%8F%B ...
最新文章
- Oracle不加IP无法登录,Oracle 无法通过IP连接问题
- 这5个 AI 用例,转变了传统商务沟通
- 未来,中国空间站将成为怎样的“太空科研站”?
- ionic ion-refresher
- python 判断变量是否是 None 的三种写法
- 关于oracleblob字段的用到
- 判断一个int数组中的元素是否存在重复
- jzoj4672-Graph Coloring【图论,模拟】
- 浏览器里面看到的表单数据映射到python_python爬虫入门01:教你在 Chrome 浏览器轻松抓包...
- CODEVS 3269 混合背包
- poj 2502 Subway md自闭了,之后再看吧f**k
- Leetcode每日一题:129.sum-root-to-leaf-numbers(求根到叶子节点数字之和)
- 上车,在北京地铁10号线偶遇一下
- Keras——保存和提取模型
- 感谢大家对课程的关注和喜爱
- 苹果Mac电脑配置flutter开发环境
- 【2020年高被引学者】 陶哲轩 加州大学洛杉矶分校
- 互联网数据防泄密解决方案
- MySQL函数计算24小时平均浓度对应的IAQI和AQI
- 中国联通正式公布3G资费标准
热门文章
- Java异常泄露敏感信息_浅谈“异常信息泄露(应用程序错误)”
- 将列表类型的数据转换为树形数据
- ADC知识(2)——直流参数(输入电压参考,参考电流输入,积分非线性误差,差分非线性误差)
- Windows + Linux 双系统的安装
- 一次搞定亚马逊 Used Sold as New 二手品申诉,速度 Get!
- 从贵价当道到平价之光,我们该如何看待全球智能穿戴市场之间的次元壁?
- 联通HG8347R WO-36光猫 当前用户不允许登录解决办法
- 个推mastersecret_个推 服务端 SDK
- PC浏览器播放m3u8
- 基于Wemos的wifi避障小车部分代码