数据结构与算法分析winform算术表达式求值计算

54 篇文章 1 订阅

数据结构与算法分析算术表达式求值计算

数据结构与算法分析

实验三 算术表达式求值计算

要求:创建Form窗体,输入算术表达式,计算出表达式结果。

基本思路:

(1)将表达式串拆分成操作数和操作符混合的字符串数组(可以直接按顺序读出操作数和操作符)

(2)从数组中依此取出一个串,如果是操作数直接放入操作数栈中;如果是操作符(c1),从操作符栈取一个操作符(c2)比较,如果优先级c1>c2,操作符c1直接入栈;

(3)如果c1<=c2,则从操作数栈取2个操作数data1,data2,进行运算,运算结果保存到操作数栈;

(4)重复(2)(3),步骤,最后操作数栈中的结果即为表达式最终的值。

步骤:

  1. 创建基于.Net的Windows窗体程序,设计表达式输入框,计算按钮,结果显示输入框等;
  2. 在窗体类中添加数据声明:

添加操作符定义

定义表达式数组(存放操作数和操作符)

添加数据栈和操作符栈

  1. 双击添加“计算”按钮事件程序,在事件处理程序中完成表达式求值计算;步骤如下:

(1)从输入字符串中得到操作数,存入操作数临时数组dataList

List<string>dataList = new ….

(2)从输入字符串中得到操作符,存入操作符临时数组operList

List<string>dataList = new ….

(3)将操作数和操作符进行重组,存入表达式数组expressList;

(4)逐次输入表达式值,完成表达式计算。

//操作符计算函数DoStatckCalculate()实现

数据结构与算法分析 实验三 算术表达式求值计算 要求:创建Form窗体,输入算术表达式,计算出表达式结果。 基本思路: (1)将表达式串拆分成操作数和操作符混合的字符串数组(可以直接按顺序读出操作数和操作符) (2)从数组中依此取出一个串,如果是操作数直接放入操作数栈中;如果是操作符(c1),从操作符栈取一个操作符(c2)比较,如果优先级c1>c2,操作符c1直接入栈; (3)如果c1<=c2,则从操作数栈取2个操作数data1,data2,进行运算,运算结果保存到操作数栈; (4)重复(2)(3),步骤,最后操作数栈中的结果即为表达式最终的值。 步骤: (1)    创建基于.Net的Windows窗体程序,设计表达式输入框,计算按钮,结果显示输入框等; (2)    在窗体类中添加数据声明: 添加操作符定义 定义表达式数组(存放操作数和操作符) 添加数据栈和操作符栈 (3)    双击添加“计算”按钮事件程序,在事件处理程序中完成表达式求值计算;步骤如下: (1)从输入字符串中得到操作数,存入操作数临时数组dataList List<string>dataList = new …. (2)从输入字符串中得到操作符,存入操作符临时数组operList List<string>dataList = new …. (3)将操作数和操作符进行重组,存入表达式数组expressList; (4)逐次输入表达式值,完成表达式计算。 //操作符计算函数DoStatckCalculate()实现 

  string input = textBox1.Text;
  ExpressionCalculator calculator = new ExpressionCalculator();
  try
  {
      double result = calculator.DoStatckCalculate(input);
      textBox2.Text = result.ToString();
      Console.WriteLine("Result: " + result);   

}
   private char[] operChars = new char[] { '+', '-', '*', '/', '=' };
   private List<string> expressList = new List<string>();
   private Stack<double> dataStack = new Stack<double>();
   private Stack<char> operStack = new Stack<char>();
   public double DoStatckCalculate(string input)
   { 
       ParseInput(input); 
       foreach (string ss in expressList)
       {
           if (IsOperator(ss[0]))
           {
               DoStackCalculate(ss[0]);
           }
           else
           {
               double v1 = double.Parse(ss);
               dataStack.Push(v1);
           }
       } 
       if (dataStack.Count == 1)
       {
           return dataStack.Pop();
       }

完整代码下载链接https://download.csdn.net/download/qq_28821897/89562835

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星尘库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值