c#科学计算器用stack,考虑括号,用window窗体
时间: 2024-02-05 09:13:16 浏览: 174
Jisuanqi.zip_计算器 括号
首先,需要在 Visual Studio 中创建一个新的窗体应用程序项目。然后,在窗体设计器中布置一些按钮和文本框,用于用户输入和显示计算结果。接下来,需要编写 C# 代码来实现计算器功能。
首先,定义一个 Stack 对象来存储数字和运算符。当用户输入一个数字或运算符时,将其压入堆栈。当用户输入一个右括号时,从堆栈中弹出元素,直到遇到左括号为止,并对弹出的元素进行计算,将计算结果压入堆栈。最后,当用户按下“=”按钮时,从堆栈中弹出最后的结果,将其显示在结果文本框中。
以下是示例代码:
```c#
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Calculator
{
public partial class Form1 : Form
{
private Stack<string> stack = new Stack<string>();
public Form1()
{
InitializeComponent();
}
private void btnNum_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
txtInput.Text += btn.Text;
}
private void btnOperator_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
stack.Push(txtInput.Text);
stack.Push(btn.Text);
txtInput.Text = "";
}
private void btnLeftParen_Click(object sender, EventArgs e)
{
stack.Push("(");
}
private void btnRightParen_Click(object sender, EventArgs e)
{
stack.Push(txtInput.Text);
txtInput.Text = "";
string op = stack.Pop();
double num2 = double.Parse(stack.Pop());
while (op != "(")
{
double num1 = double.Parse(stack.Pop());
switch (op)
{
case "+":
num2 += num1;
break;
case "-":
num2 -= num1;
break;
case "*":
num2 *= num1;
break;
case "/":
num2 /= num1;
break;
}
op = stack.Pop();
}
stack.Push(num2.ToString());
}
private void btnEquals_Click(object sender, EventArgs e)
{
stack.Push(txtInput.Text);
txtInput.Text = "";
string op = stack.Pop();
double num2 = double.Parse(stack.Pop());
while (stack.Count > 0)
{
double num1 = double.Parse(stack.Pop());
switch (op)
{
case "+":
num2 += num1;
break;
case "-":
num2 -= num1;
break;
case "*":
num2 *= num1;
break;
case "/":
num2 /= num1;
break;
}
if (stack.Count > 0)
{
op = stack.Pop();
}
}
txtResult.Text = num2.ToString();
}
}
}
```
在代码中,我们使用了四个事件处理程序来处理用户的输入:btnNum_Click、btnOperator_Click、btnLeftParen_Click 和 btnRightParen_Click。每当用户按下数字、运算符或括号按钮时,相应的事件处理程序将会被调用。
在 btnNum_Click 事件处理程序中,我们将用户的输入追加到输入文本框中。
在 btnOperator_Click 事件处理程序中,我们将当前的输入文本框中的内容和用户按下的运算符都压入堆栈中,并清空输入文本框。
在 btnLeftParen_Click 事件处理程序中,我们只需要将左括号压入堆栈中即可。
在 btnRightParen_Click 事件处理程序中,我们将当前的输入文本框中的内容压入堆栈中,并弹出堆栈中的元素,直到遇到左括号为止。然后,对弹出的数字和运算符进行计算,并将计算结果压入堆栈中。
最后,在 btnEquals_Click 事件处理程序中,我们将当前的输入文本框中的内容压入堆栈中,并弹出堆栈中的元素,直到堆栈为空。在这个过程中,我们对弹出的数字和运算符进行计算,并将计算结果存储在一个变量中。最后,将计算结果显示在结果文本框中。
通过这种方式,我们可以实现一个基本的科学计算器,支持括号和基本的加减乘除运算。
阅读全文