C#练习:实现基本计算器功能,考虑运算符优先级
来源:互联网 发布:小波分析算法与应用 编辑:程序博客网 时间:2024/06/05 15:21
设计思路:
1 用StringBuilder类变量StrData,动态保存用户输入的数据及运算符2 以加减运算符为分割符,对字符串进行分割,得到字符串数组StrDataArr[]
3 遍历字符串数组StrDataArr,查找其中含有乘除运算的项,对该项进行计算
4 经过乘除计算之后,数组StrDataArr存储的实际结果为加减运算符的操作数,再进行加减运算
主要方法:
StringBuilder类:动态存储数据
string.Split()方法:根据运算符优先级多次分割处理数据
string.Contains()方法:判断是否包含特定字符
Double.Parse()方法:将字符串形式的数字转换为数字(可简单理解为去掉双引号)
代码实现:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace Calculator{ public partial class Frm_Main : Form { StringBuilder StrData = new StringBuilder(); //数据及运算符保存 public Frm_Main() { InitializeComponent(); } private void Frm_Main_Load(object sender, EventArgs e) { calcResult.Clear(); calcProcess.Clear(); } public void DataProcess(string data) { calcProcess.Text = calcProcess.Text + data; StrData.Append(data); } //0 private void button16_Click(object sender, EventArgs e) { DataProcess("0"); } //1 private void button12_Click(object sender, EventArgs e) { DataProcess("1"); } //2 private void button11_Click(object sender, EventArgs e) { DataProcess("2"); } //3 private void button10_Click(object sender, EventArgs e) { DataProcess("3"); } //4 private void button5_Click(object sender, EventArgs e) { DataProcess("4"); } //5 private void button6_Click(object sender, EventArgs e) { DataProcess("5"); } //6 private void button7_Click(object sender, EventArgs e) { DataProcess("6"); } //7 private void button1_Click(object sender, EventArgs e) { DataProcess("7"); } //8 private void button2_Click(object sender, EventArgs e) { DataProcess("8"); } //9 private void button3_Click(object sender, EventArgs e) { DataProcess("9"); } //小数点 private void button15_Click(object sender, EventArgs e) { DataProcess("."); } //除 private void button4_Click(object sender, EventArgs e) { DataProcess("÷"); } //乘 private void button8_Click(object sender, EventArgs e) { DataProcess("×"); } //减 private void button9_Click(object sender, EventArgs e) { DataProcess("-"); } //加 private void button13_Click(object sender, EventArgs e) { DataProcess("+"); } //回退 private void button18_Click(object sender, EventArgs e) { StrData.Remove(StrData.Length-1,1); calcProcess.Text = StrData.ToString(); } //clear private void button20_Click(object sender, EventArgs e) { calcResult.Clear(); calcProcess.Clear(); StrData.Clear(); } double CalcData(string s) { char[] splitor = { '×', '÷' }; string[] strArr = s.Split(splitor); double tempData=0; int i = 0; tempData = Double.Parse(strArr[0]); foreach(char temps in s) { switch (temps) { case '÷': tempData = tempData / Double.Parse(strArr[i+1]); i++; break; case '×': tempData = tempData * Double.Parse(strArr[i + 1]); i++; break; default: break; } } return tempData; } //等于 private void button14_Click(object sender, EventArgs e) { char[] SplitSymbol = { '+', '-' }; string StrDataTemp = StrData.ToString(); ; string[] StrDataArr= StrDataTemp.Split(SplitSymbol); double ResultData = 0; int j = 0; //先以加减运算符为分隔符分割字符串,处理分割后数组中的乘除运算 for (int i=0; i< StrDataArr.Length;i++) { if(StrDataArr[i].Contains("×")|| StrDataArr[i].Contains("÷")) { StrDataArr[i] = CalcData(StrDataArr[i]).ToString(); } } //加减运算 ResultData= Double.Parse(StrDataArr[0]); foreach (char temps in StrDataTemp) { switch (temps) { case '-': ResultData = ResultData - Double.Parse(StrDataArr[j + 1]); j++; break; case '+': ResultData = ResultData + Double.Parse(StrDataArr[j + 1]); j++; break; default: break; } } calcResult.Text = ResultData.ToString(); } private void calcResult_TextChanged(object sender, EventArgs e) { } private void calcProcess_TextChanged(object sender, EventArgs e) { } }}
阅读全文
0 0
- C#练习:实现基本计算器功能,考虑运算符优先级
- C#作业——表达式计算器+小数+运算符优先级
- 运算符优先级练习
- vb简单实现运算符优先级的计算器
- 用栈来实现计算器功能运算
- C#运算符优先级
- c#运算符优先级
- C# 运算符 优先级
- c#运算符优先级
- C# 运算符优先级
- C#运算符优先级
- C#运算符优先级
- C#运算符优先级
- C#运算符优先级
- C#实现简单计算器功能
- C# WPF 制作的计算器,有运算优先级
- 基本运算符及优先级
- 练习4-3 在有了基本框架后,对计算器程序进行扩充就比较简单了。在该程序中加入取模(%)运算符,并注意考虑负数的情况
- Linux VRF(Virtual Routing Forwarding)的原理和实现
- OOP 与 AOP
- 集合元素遍历方式
- gamemaker学习笔记:拖拽
- urlscan使用详解
- C#练习:实现基本计算器功能,考虑运算符优先级
- 递归求Fabonacci数列
- 媳妇写给婆婆一封大逆不道却又非常合情合理且发人深思的信
- 【AppScan深入浅出】修复漏洞:启用不安全的HTTP方法 (中)
- bootstrap总结
- Nginx反向代理与负载均衡
- 十进制转换二进制
- **Leetcode 32. Longest Valid Parentheses
- 正则表达式