C语言实现算术表达式运算,支持小数与乘方

4星 · 超过85%的资源 需积分: 12 10 下载量 71 浏览量 更新于2024-09-17 1 收藏 7KB TXT 举报
"该资源提供了一个C++程序,用于计算包含加法(+), 减法(-), 乘法(*), 除法(/)以及乘方运算的算术表达式。程序设计基于栈的数据结构,可以处理包含小数的运算,并且能够处理10以上的浮点数。用户输入以#为结束标志的表达式,程序会计算并输出结果。" 这篇代码的核心是实现一个简单的计算器,它使用两个栈——一个`Sqstack1`用于存储运算符(OPTR),另一个`Sqstack2`用于存储操作数(OPND)。程序首先初始化这两个栈,然后从输入读取字符,直到遇到表达式的结束标志'#'或者运算符栈为空。 `InitStack`函数用于初始化栈,`Push`函数将元素压入栈,`GetTop`获取栈顶元素,`Pop`函数用于弹出栈顶元素。`Precede`函数用来判断运算符的优先级,这在处理运算符的顺序时非常关键。`Operate`函数则执行实际的数学运算,如加、减、乘、除和乘方。 `In`函数检查输入的字符是否是有效的运算符或括号。在读取输入表达式时,如果遇到括号,程序会记录括号的位置(`j`变量),以便在计算过程中正确处理括号内的表达式。 `main`函数是程序的入口,它循环读取输入的字符,根据字符类型(运算符或操作数)进行相应的处理。当遇到操作数时,将其转换为双精度浮点数并压入`OPND`栈;当遇到运算符时,会比较当前运算符与栈顶运算符的优先级,如果当前运算符优先级更高,则压入`OPTR`栈,否则,从`OPTR`栈弹出栈顶运算符,获取对应的`OPND`栈顶的两个操作数,进行运算并将结果压回`OPND`栈。 整个程序使用了后缀表达式(逆波兰表示法)的思路,这是一种没有括号并且运算符位于操作数之后的表示方式,使得运算过程简化为简单的栈操作。这种方式对于解析和计算复杂的算术表达式非常有效。 在程序的最后,`OPTR`栈中的运算符会被依次弹出并进行计算,直到栈为空,最终的结果会被存储在`OPND`栈的栈顶,即为整个表达式的计算结果。