c#科学计算器用上stack
时间: 2023-10-10 17:10:14 浏览: 95
好的,我很乐意回答你的问题。在 C# 科学计算器中,我们可以使用 stack(堆栈) 来实现计算器的核心功能,也就是计算表达式。
具体来说,我们可以将表达式中的每个操作数和运算符都压入 stack 中,然后按照运算符的优先级依次弹出操作数和运算符进行计算,最终得到计算结果。这个过程可以通过逆波兰表达式实现。
例如,我们可以将中缀表达式 "3 + 4 × 2 ÷ ( 1 − 5 ) ^ 2" 转换为逆波兰表达式 "3 4 2 × 1 5 − 2 ^ ÷ +",然后使用 stack 来计算表达式的值。
具体的实现方法可以参考以下代码:
```
Stack<double> stack = new Stack<double>();
string[] tokens = expression.Split(' ');
foreach (string token in tokens)
{
if (double.TryParse(token, out double number))
{
stack.Push(number);
}
else
{
double operand2 = stack.Pop();
double operand1 = stack.Pop();
switch (token)
{
case "+":
stack.Push(operand1 + operand2);
break;
case "-":
stack.Push(operand1 - operand2);
break;
case "*":
stack.Push(operand1 * operand2);
break;
case "/":
stack.Push(operand1 / operand2);
break;
case "^":
stack.Push(Math.Pow(operand1, operand2));
break;
default:
throw new ArgumentException("Invalid token: " + token);
}
}
}
double result = stack.Pop();
```
这段代码实现了一个逆波兰表达式求值的计算器,其中 stack 存储了操作数和运算符,按照运算符的优先级依次进行计算,最终得到计算结果。
阅读全文