不用数据结构中的什么堆栈.还没学过,.能计算1+3*3+4这种的计算器 请讲下原理好吗、最好贴上代码
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/23 16:36:40
不用数据结构中的什么堆栈.还没学过,.能计算1+3*3+4这种的计算器 请讲下原理好吗、最好贴上代码
不用数据结构中的什么堆栈.还没学过,.能计算1+3*3+4这种的计算器 请讲下原理好吗、最好贴上代码
不用数据结构中的什么堆栈.还没学过,.能计算1+3*3+4这种的计算器 请讲下原理好吗、最好贴上代码
定义一个字符串数组,把那些字符输入进去,与close 对比,如果相同的话就退出,不相同的话继续执行,开始判断下面的内容,把( ) + - * / 等字符判断出来,定下位置,还有把数字还原出来,最后整合到一个算式中算出结果,输出就行了.由于题目有以下要求,所以在思考之后决定用如下方法解决它:这里用到了strcmp函数,这个函数在头文件string.h下运行的,这函数的作用是如果字符串相等的话输出为0..在还原字符串中的数字时,遇到了很大的问题,开始是判断 整数和运算符 ,可在程序该如何还原成了这个程序的关键,开始在编的时候我记得在什么书上讲过一个字符串还原的时候要用到 栈 的知识,我就上网去搜了一下还真是发现了一个算法 逆波兰表达式 的方法,可我在看的时候发现了一个问题,这个程序在还原数值的时候用了将近开几百行去判定那些字符,我看了一会儿,发现看的不太懂,突然我发现了一种方法的可行性:这个程序是这样的意思,之前都有定义的如右图:我这编的时候没有想过括号,所以这里只有三个数,两个运算符,所以在没有遇到运算符时,它的数一直都属于第一个数,当遇到运算符时,把这运算符记录下,此时第二个数开始,没有遇到在没有遇到运算符时此数一直属于第二个数,依次可以判断第三个数,这事通过改变下标来完成的,此时已经把sum[0] sum[1] sum[2] ch[0] ch[1] 记录下,在后面运算时虽然有运算符的优先级的判断,但先根据ch[0] ch[1] 来决定运算的方向,此时可以避免运算符的优先级的判断,这只是那种算法的一种形式,其它类似与上面的程序,这里要注意的就是除法的程序了,就是在除法是 分母 要判断是不是0的问题,还有要注意的是在除法时注意要一开始就要判断.这里还有一个 flag 的判断,是为了在分母为0时的输出问题,一般只用输出sum1 就行了,但除法分母为0是,输出为 数据错误 .程序如右:问题:因为在编的时想如何计算实数的时候,我发现如果用上面哪种方法很难实现,因为你判断了小数点后,后面的数如果按上面的程序那样继续运行的话会变成另外一段数,如果每一个都对应一个还好写,但如果只有一个有小数或两个有小数的话,那具体哪个是小数不好定位,具体来说实数的判定我是没有想出办法去成功的还原他们.那还在思考中.还有一个问题就是在sum[2]这里,它的每一个数据后面都加了一个四,我不知道为什么,我问了一些别人,他们也都不知道,但为了程序可执行的问题,我在这后面加了一行sum[2]=sum[20]/10;这是为了调整这个程序而写的,加了这一行之后,这个程序就可以很好的运行了,就可以的到下面的程序结果.程序的运行结果为:这是第一个运算符为 + 的一个程序结果; 这是第一个运算符为 - 的一个程序结果; 这是第一个运算符为 * 的一个程序结果; 这是第一个运算符为 / 的一个程序结果;