基于c#的简易逆波兰式算法的计算器,用集合来处理运算符和运算数,包含平方、开方、三角函数、log、加减乘除、M+、M-、MS,能退格和清除,写出窗体程序代码并有详细中文注释,并且写出总体思路流程,窗体界面需要包含1、2、3、4、5、6、7、8、9、.、0、*、/、+、-、sin、cos、M+、M-、MS、=等以及写出详细的各控件属性表格。

时间: 2023-07-10 22:35:52 浏览: 51
总体思路流程: 1. 使用集合来存储运算符和运算数,并且使用栈来处理逆波兰式表达式的计算。 2. 在窗体界面中添加各种控件,包括数字按钮、运算符按钮、退格按钮、清除按钮、文本框等等。 3. 对于数字按钮和运算符按钮,使用事件处理程序将其添加到集合中,并在文本框中显示当前表达式。 4. 对于退格按钮和清除按钮,使用事件处理程序来处理文本框中的内容。 5. 对于等号按钮,将集合中的逆波兰式表达式计算出结果,并在文本框中显示。 6. 对于M+、M-、MS按钮,使用全局变量来存储和处理内存中的值。 窗体界面控件属性表格: | 控件名称 | 属性名称 | 属性值 | | --- | --- | --- | | 数字按钮1-9 | Text | 1-9 | | 数字按钮0 | Text | 0 | | 加法按钮 | Text | + | | 减法按钮 | Text | - | | 乘法按钮 | Text | * | | 除法按钮 | Text | / | | 等号按钮 | Text | = | | 正弦按钮 | Text | sin | | 余弦按钮 | Text | cos | | 平方按钮 | Text | ^2 | | 开方按钮 | Text | sqrt | | 对数按钮 | Text | log | | 退格按钮 | Text | ← | | 清除按钮 | Text | C | | M+按钮 | Text | M+ | | M-按钮 | Text | M- | | MS按钮 | Text | MS | | 结果文本框 | Multiline | True | | 内存文本框 | ReadOnly | True | 窗体程序代码: ```csharp using System; using System.Collections.Generic; using System.Windows.Forms; namespace Calculator { public partial class Form1 : Form { private List<string> expression = new List<string>(); // 存储逆波兰式表达式 private double memory = 0; // 存储内存中的值 public Form1() { InitializeComponent(); } // 数字按钮事件处理程序 private void numberButton_Click(object sender, EventArgs e) { Button button = sender as Button; expression.Add(button.Text); displayText.Text = string.Join(" ", expression); } // 运算符按钮事件处理程序 private void operationButton_Click(object sender, EventArgs e) { Button button = sender as Button; expression.Add(button.Text); displayText.Text = string.Join(" ", expression); } // 正弦按钮事件处理程序 private void sinButton_Click(object sender, EventArgs e) { expression.Add("sin"); displayText.Text = string.Join(" ", expression); } // 余弦按钮事件处理程序 private void cosButton_Click(object sender, EventArgs e) { expression.Add("cos"); displayText.Text = string.Join(" ", expression); } // 平方按钮事件处理程序 private void squareButton_Click(object sender, EventArgs e) { expression.Add("^2"); displayText.Text = string.Join(" ", expression); } // 开方按钮事件处理程序 private void sqrtButton_Click(object sender, EventArgs e) { expression.Add("sqrt"); displayText.Text = string.Join(" ", expression); } // 对数按钮事件处理程序 private void logButton_Click(object sender, EventArgs e) { expression.Add("log"); displayText.Text = string.Join(" ", expression); } // 退格按钮事件处理程序 private void backButton_Click(object sender, EventArgs e) { if (expression.Count > 0) { expression.RemoveAt(expression.Count - 1); displayText.Text = string.Join(" ", expression); } } // 清除按钮事件处理程序 private void clearButton_Click(object sender, EventArgs e) { expression.Clear(); displayText.Text = ""; } // M+按钮事件处理程序 private void memoryPlusButton_Click(object sender, EventArgs e) { memory += double.Parse(displayText.Text); memoryText.Text = memory.ToString(); } // M-按钮事件处理程序 private void memoryMinusButton_Click(object sender, EventArgs e) { memory -= double.Parse(displayText.Text); memoryText.Text = memory.ToString(); } // MS按钮事件处理程序 private void memorySaveButton_Click(object sender, EventArgs e) { memory = double.Parse(displayText.Text); memoryText.Text = memory.ToString(); } // 等号按钮事件处理程序 private void equalsButton_Click(object sender, EventArgs e) { Stack<double> stack = new Stack<double>(); foreach (string token in expression) { if (double.TryParse(token, out double number)) { stack.Push(number); } else if (token == "sin") { stack.Push(Math.Sin(stack.Pop())); } else if (token == "cos") { stack.Push(Math.Cos(stack.Pop())); } else if (token == "^2") { stack.Push(Math.Pow(stack.Pop(), 2)); } else if (token == "sqrt") { stack.Push(Math.Sqrt(stack.Pop())); } else if (token == "log") { stack.Push(Math.Log10(stack.Pop())); } else { double rightOperand = stack.Pop(); double leftOperand = stack.Pop(); switch (token) { case "+": stack.Push(leftOperand + rightOperand); break; case "-": stack.Push(leftOperand - rightOperand); break; case "*": stack.Push(leftOperand * rightOperand); break; case "/": stack.Push(leftOperand / rightOperand); break; } } } displayText.Text = stack.Pop().ToString(); } } } ```

相关推荐

最新推荐

recommend-type

C#实现排列组合算法完整实例

主要介绍了C#实现排列组合算法的完整实例,文中实例主要展示了排列循环方法和排列堆栈方法,需要的朋友可以参考下
recommend-type

c# 实现轮询算法实例代码

主要介绍了c# 实现轮询算法实例代码的相关资料,这里附有实例代码,具有一定的参考价值,需要的朋友可以参考下
recommend-type

C#实现输入10个数存入到数组中并求max和min及平均数的方法示例

主要介绍了C#实现输入10个数存入到数组中并求max和min及平均数的方法,涉及C#简单数据转换与数值运算相关操作技巧,需要的朋友可以参考下
recommend-type

C#中判断一个集合是否是另一个集合的子集的简单方法

本文介绍利用C#中内置的系统函数判断一个集合是否是一个集合的子集的方法,此方法代码量极少,分享给大家。
recommend-type

C#常见算法面试题小结

主要介绍了C#常见算法面试题,包含了常见的排序、字符串操作、类的操作等技巧,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

用Spring boot和vue写一个登录注册界面

好的,这是一个比较常见的技术问题,我可以为您提供一些参考资料和思路。首先,您可以使用Spring Boot作为后端框架来处理用户认证和注册的逻辑,比如使用Spring Security实现用户登录认证。同时,您还需要设计相应的数据模型和数据库表结构来存储用户信息。在前端方面,您可以使用Vue.js作为框架来构建登录注册页面,使用Axios来发起API请求并和后端进行交互。当然,在实现过程中,还需要考虑一些具体细节,比如数据校验、安全性和用户体验等方面。希望这些信息能够帮助到您。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。