精华内容
下载资源
问答
  • c# 计算器
    千次阅读
    2020-07-30 14:52:42
       			                       c#计算器      实验报告
    

    一、实验目的
    设计一个简单计算器,在功能上功能尽量模拟windows操作系统中的计算器,系统界面不做强制要求。
    最低要求:应具有一般计算功能,能进行基本的加减乘除运算。其他计算功能作为加分项。
    二、实验原理
    1.本实验包含22个控件,其中20个button按钮用于表达式的输入,2个textbox用于显示输出表达式和计算结果。
    2.按下button按钮时,textbox的内容会随之更新。expression列表会根据布尔类型的pull值进行更新。当pull为真时,表示当前输入运算符,会单独占用列表的一个位置。当pull为假时,表示当前输入数字,会根据具体情况决定是否与其他内容共同占用一个列表位置。
    3.按下AC清零按钮时,textbox中的文本清空,expression列表内容清空。
    4.按下CE清除按钮时,textbox删除一个字符。当expression最后一个字符串中含有小数点或者不含有小数点但大于9时,此字符串删除最后一个字符,除此之外,删除该字符串。
    5.按下等于按钮时,输出计算结果。首先将中缀表达式转后缀表达式,数字直接入后缀表达式,运算符优先级高,入运算符列表,运算符优先级低,运算符列表出去一个元素,直至完成。再对后缀表达式求值,如果是数字,加入到数组中,如果是运算符,从数组中取出两个数进行运算,结果放到数组中。最后进行输出。
    三、实验要求
    具有一般计算功能,能进行基本的加减乘除运算,包括小数的运算,并且能够使用括号,能够清零和删除。
    四、实验结果(程序)及分析
    源代码:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsFormsApplication1
    {
    public partial class Calculator : Form
    {
    List expression = new List();
    bool pull = false; //运算符未输入设为false,输入设为true
    public Calculator()
    {
    InitializeComponent();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
    resultBox.Text = “”;
    }

        private void button0_Click(object sender, EventArgs e)
        {
            addExpression("0");
        }
        private void button1_Click(object sender, EventArgs e)
        {
            addExpression("1");
        }
        private void button2_Click(object sender, EventArgs e)
        {
            addExpression("2");
        }
        private void button3_Click(object sender, EventArgs e)
        {
            addExpression("3");
        }
        private void button4_Click(object sender, EventArgs e)
        {
            addExpression("4");
        }
        private void button5_Click(object sender, EventArgs e)
        {
            addExpression("5");
        }
        private void button6_Click(object sender, EventArgs e)
        {
            addExpression("6");
        }
        private void button7_Click(object sender, EventArgs e)
        {
            addExpression("7");
        }
        private void button8_Click(object sender, EventArgs e)
        {
            addExpression("8");
        }
        private void button9_Click(object sender, EventArgs e)
        {
            addExpression("9");
        }
        private void addbutton_Click(object sender, EventArgs e)
        {
            addOperat("+");
        }
        private void subbutton_Click(object sender, EventArgs e)
        {
            addOperat("-");
        }
        private void mulbutton_Click(object sender, EventArgs e)
        {
            addOperat("*");
        }
        private void divbutton_Click(object sender, EventArgs e)
        {
            addOperat("/");
        }
        private void buttonleft_Click(object sender, EventArgs e)
        {
            addOperat("(");
        }
        private void buttonright_Click(object sender, EventArgs e)
        {
            addOperat(")");
        }
        private void button_pot_Click(object sender, EventArgs e)
        {
            resultBox.Text += ".";
            expression[expression.Count - 1] = expression.Last() + ".";
            pull = false;
        }
    
        //添加表达式的运算符
        private void addOperat(string str)
        {
            resultBox.Text += str;
            expression.Add(str);
            pull = true;
        }
    
        //添加表达式的值
        private void addExpression(string str)
        {
            resultBox.Text += str;
            if (pull) expression.Add(str);
            else
            {
                if (expression.Count <= 0) expression.Add(str);
                else expression[expression.Count - 1] = expression.Last() + str;
            }
            pull = false;
        }
    
        //优先级判断
        public bool priority(string a, string b)
        {
            if (a == "+")
            {
                if (b == "-" || b == "(") return true;
                else return false;
            }
            else if (a == "-")
            {
                if (b == "(") return true;
                else return false;
            }
            else if (a == "(") return true;
            else if (a == ")")
            {
                if (b == "(") return true;
                else return false;
            }
            else if (a == "*")
            {
                if (b == "/" || b == "+" || b == "-" || b =="(") return true;
                else return false;
            }
            else if (a == "/")
            {
                if (b == "+" || b == "-" || b == "(") return true;
                else return false;
            }
            else return false;
        }
    
        //等号点击事件触发
        private void equalbutton_Click(object sender, EventArgs e)
        {
            formulaBox.Text = resultBox.Text + "=";
            resultBox.Text = Convert.ToString(Result(Suffix()));//中缀转后缀,后缀表达四求值
        }
    
        //中缀表达式转后缀表达式
        private List<string> Suffix()
        {
            List<string> suffix = new List<string>();
            List<string> operat = new List<string>();
            operat.Add("(");
            for (int i = 0; i < expression.Count; i++)
            {
                //数字直接入后缀表达式列表
                if (isNum(expression[i]))
                    suffix.Add(expression[i]);
                //运算符考虑优先级    
                else
                {
                    //运算符优先级高,入运算符列表
                    if (priority(expression[i], operat.Last()))
                    {
                        if (operat.Last() == "(" && expression[i] == ")") 
                            operat.RemoveAt(operat.Count-1);
                        else operat.Add(expression[i]); 
                    }
                    //运算符优先级低,运算符列表出去一个元素,继续比较此元素
                    else
                    {
                        suffix.Add(operat.Last());
                        operat.RemoveAt(operat.Count - 1);
                        i--;
                    }
                }
            }
            //处理列表剩余元素
            while (operat.Count > 1)
            {
                suffix.Add(operat.Last());
                operat.RemoveAt(operat.Count - 1);
            }
            return suffix;
        }
    
        //判断字符串是否为数字
        private bool isNum(string str)
        {   if(str!="+"&&str!="-"&&str!="*"&&str!="/"&&str!="("&&str!=")")
                return true;
            else
                return false;
        }
    
        //后缀表达式求值
        private double Result(List<string> suffix)
        {
            double []stack = new double[100];
            int j = -1;
            for (int i = 0; i < suffix.Count; i++)
            {
                //如果是数字,加入到数组中
                if (isNum(suffix[i]))
                    stack[++j] = Convert.ToDouble(suffix[i]);
                //是运算符,从数组中取出两个数进行运算,结果放到数组中
                else
                    if (suffix[i] == "+")
                    {
                        double b = stack[--j] + stack[++j];
                        stack[--j] = b;
                    }
                    else if (suffix[i] == "-")
                    {
                        double b = stack[--j] - stack[++j];
                        stack[--j] = b;
                    }
                    else if (suffix[i] == "*")
                    {
                        double b = stack[--j] * stack[++j];
                        stack[--j] = b;
                    }
                    else if (suffix[i] == "/")
                    {
                        double b = stack[--j] / stack[++j];
                        stack[--j] = b;
                    }
            }
            double result = stack[0];
            return result;
        }
    
        //清除按钮事件触发
        private void buttonCE_Click(object sender, EventArgs e)
        {
            resultBox.Text = resultBox.Text.Remove(resultBox.Text.Count() - 1);
            //当前字符串有"."或者字符串数值大于9,此字符串去掉最后一个字符
            if (isPot(expression.Last()) || isOperate(expression.Last())==false && Convert.ToDouble(expression.Last()) > 9.0)
                expression[expression.Count - 1] = expression.Last().Remove(expression.Last().Length - 1);
            //去掉该字符串
            else expression.Remove(expression.Last());
            //需要对pull的值进行修改
            if (isOperate(expression.Last()))
                pull = true;
            else pull = false;
    
        }
    
        //判断字符串中是否有"."
        private bool isPot(string str)
        {
            for (int i = 0; i < str.Count(); i++)
                if (str[i] == '.') return true;
            return false;
        }
        //判断字符串中是否有加减乘除和括号
        private bool isOperate(string str)
        {
            if (str == "+" || str == "-" || str == "*" || str == "/" || str == "(" || str == ")")
                return true;
            else return false;
        }
    
        //清0按钮触发
        private void buttonAC_Click(object sender, EventArgs e)
        {
            formulaBox.Text = "";
            resultBox.Text = "";
            expression.RemoveRange(0, expression.Count);
            pull = false;
        }
    
       
    }
    

    }

    实验结果:

    更多相关内容
  • C#计算器源码

    2017-11-29 11:21:12
    C#计算器源码C#计算器源码C#计算器源码C#计算器源码C#计算器源码C#计算器源码C#计算器源码C#计算器源码C#计算器源码C#计算器源码C#计算器源码
  • C#计算器_计算器_

    2021-10-03 04:24:04
    采用窗体程序实现一简单计算器计算器具有加减乘除以及开方功能,功能采用Dll方式封装。
  • 摘要:C#源码,算法相关,计算器 C#计算器 Calculator源码+注释,参考价值大,此计算器源码记录操作运算符:  step用于标记是否刚按了运算符,为0时,没有按,按了运算符,置1,则再按数字时清空显示框,置0,这样,输入123,...
  • 本程序是用C#实现的计算器可以绘制函数图像,模仿MSSQL的查询分析器,可以输入表达式计算,支持多行表达式,支持选择部分表达式,能定位语法错误,支持数值、字符串和逻辑运算。运算符的具体用法请参考bin\Debug\...
  • C# 计算器.zip

    2021-01-25 11:48:00
    C#源码,winform界面实现计算器功能,类似电脑自带的计算器界面,源码,需要加减乘除运算函数的可以直接调用使用
  • C#计算器,应C#贴吧人的反应,加上了注释,希望你们能看懂,能帮到大家。 C#计算器,应C#贴吧人的反应,加上了注释,希望你们能看懂,能帮到大家。
  • C# 计算器

    2015-12-08 17:34:47
    本程序是使用C#开发的计算器,适合初学者学习。
  • C#计算器

    2015-03-20 14:45:57
    C# 版全能计算器
  • C#计算器功能,完成老师布置的大作业,页面很好看,没有缺陷。 各种运算都已涵盖 包括异常处理等等 。作业老师已经给了满分,大家可以下载下来参考 嗯嗯嗯,非常棒
  • C#计算器实现.zip

    2020-04-29 21:25:51
    C#计算器实现.zip
  • 第一次写这样的windows窗体程序,为了达到操作系统里提供的计算器的功能,本计算器,大量使用了if条件语句;个人能力毕竟有限,希望大家批评指正,小弟感激不尽!!!
  • C#计算器设计

    2018-10-27 14:00:38
    一个通过C#开发语言设计开发的计算器小实例,介绍C#基本开发技巧。
  • c#计算器源码

    2019-02-16 16:08:17
    有需要的可以拿去看一下。
  • C#计算器加减乘除窗体功能的实现。使用C#窗体控件等实现了一个两个数之间的加减乘除等功能,是当初学习C#写的一个小程序。本来想设置资源分为0的,为啥最低是1啦?如有哪位知道怎么能设置资源分为0,敬请告知,因为...
  • C#计算器程序

    2018-05-11 09:40:43
    C#编写的计算器程序(源码),编译环境VS2010。运用了字符串分割和匹配的算法,可以实现无限长度计算式的计算,效率高,包括加减乘除括号乘方运算,清测可用。并且制作界面简洁,不逊色于系统自带计算器
  • C# 计算器实现

    2017-12-06 16:27:24
    本Demo适合初学者学习,逻辑清晰,容易理解。。。。。
  • c#计算器小作业1

    2018-06-22 12:28:01
    计算器小作业,里面有代码 可运行 
  • 华农C#计算器demo作业

    2019-07-17 16:01:01
    华农 C# 计算器 课程设计 刘汉星 作业 !无buger
  • C#计算器代码

    2017-08-23 23:54:51
    代码易懂,计算器功能比较完善,是很好的学习过程。
  • 模仿了简单功能计算器,进行加减乘除和记忆数字的计算,一个窗口模拟显示计算器屏幕,其余为功能键,未添加键盘输入计算代码,需要...最新版本V3.0版,请搜“ C#计算器源码,C#仿真计算器源码-仿真实体计算器V3.0版”
  • C#窗体i简易计算器源码 从上到下排序 textbox *3: textresult3,textresult,textresult, button 20 数字按钮11:num00,num0,—,num9, 小数点numdot, Ac:zeroAc,M+:nummc, MR:nummr, 加numplus 减...

    C#计算器源码,C#窗体计算器(模拟实体计算器)源码
    仿真计算器效果图
    完整源码下载:https://download.csdn.net/download/angelsapple/14154695
    空间名称从上到下排序
    textbox:textresult
    button 20
    数字按钮:num00,num0,—,num9,
    小数点:numdot,
    Ac:zeroAc,M+:nummc, MR:nummr,
    加numplus 减numsub 乘nummul 除numdiv 等于numeq,
    result1主要表示运算符之前的数值,result2主要表示运算符之后的数值,最后点击等号按钮,将2个数值进行运算得出结果。

    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 c1602
    {
        public partial class calculator : Form
        {
            public calculator()
            {
                InitializeComponent();
                
            }
            
            double res1d = 0;
            double jiyizheng = 0;
            double jia = 0;
            double jian = 0;
            double cheng = 0;
            double chu = 0;        
            double yingzi1 = 0;
            double yingzi2 = 0;
            double yingzi3 = 0;
            string result1 = "0";
            string result2 = "0";
            string res1 = "0";
            string res2 = "0";
            string yingzi = "0";
            string snum1 = "1";
            string snum2 = "2";
            string snum3 = "3";
            string snum4 = "4";
            string snum5 = "5";
            string snum6 = "6";
            string snum7 = "7";
            string snum8 = "8";
            string snum9 = "9";
            string snum0 = "0";
            string snum00 = "00";
            string snumdot = ".";
            #region 数字功能键
            private void zeroAc_Click(object sender, EventArgs e)
            {
                result2 = "0";
                textresult.Text = "0";
            }
            private void numdot_Click(object sender, EventArgs e)
            {
                    result2 = result2 + snumdot;
    
            }
    
            private void num00_Click(object sender, EventArgs e)
            {
                snum00 = result2;
                snum00 = snum00 + "00";
                yingzi3 = double.Parse(snum00);
                snum00 = Convert.ToString(yingzi3);
                result2 = snum00;
                textresult.Text = result2;
            }
            private void num0_Click(object sender, EventArgs e)
            {
                snum0 = result2;
                snum0 = snum0 + "0";
                yingzi3 = double.Parse(snum0);
                snum0 = Convert.ToString(yingzi3);
                result2 = snum0;
                textresult.Text = result2;
            }
            private void num1_Click_1(object sender, EventArgs e)
            {
                snum1 = result2;
                snum1 = snum1+"1";
                yingzi3 = double.Parse(snum1);
                snum1 = Convert.ToString(yingzi3);
                result2 = snum1;
                textresult.Text = result2;
            }
            private void num2_Click(object sender, EventArgs e)
            {
                snum2 = result2;
                snum2 = snum2 + "2";
                yingzi3 = double.Parse(snum2);
                snum2 = Convert.ToString(yingzi3);
                result2 = snum2;
                textresult.Text = result2;
            }
            private void num3_Click(object sender, EventArgs e)
            {
                snum3 = result2;
                snum3 = snum3 + "3";
                yingzi3 = double.Parse(snum3);
                snum3 = Convert.ToString(yingzi3);
                result2 = snum3;
                textresult.Text = result2;
            }
    
            private void num4_Click(object sender, EventArgs e)
            {
                snum4 = result2;
                snum4 = snum4 + "4";
                yingzi3 = double.Parse(snum4);
                snum4 = Convert.ToString(yingzi3);
                result2 = snum4;
                textresult.Text = result2;
            }
    
            private void num5_Click(object sender, EventArgs e)
            {
                snum5 = result2;
                snum5 = snum5 + "5";
                yingzi3 = double.Parse(snum5);
                snum5 = Convert.ToString(yingzi3);
                result2 = snum5;
                textresult.Text = result2;
            }
    
            private void num6_Click(object sender, EventArgs e)
            {
                snum6 = result2;
                snum6 = snum6 + "6";
                yingzi3 = double.Parse(snum6);
                snum6 = Convert.ToString(yingzi3);
                result2 = snum6;
                textresult.Text = result2;
            }
    
            private void num7_Click(object sender, EventArgs e)
            {
                snum7 = result2;
                snum7 = snum7 + "7";
                yingzi3 = double.Parse(snum7);
                snum7 = Convert.ToString(yingzi3);
                result2 = snum7;
                textresult.Text = result2;
            }
    
            private void num8_Click(object sender, EventArgs e)
            {
                snum8 = result2;
                snum8 = snum8 + "8";
                yingzi3 = double.Parse(snum8);
                snum8 = Convert.ToString(yingzi3);
                result2 = snum8;
                textresult.Text = result2;
            }
    
            private void num9_Click(object sender, EventArgs e)
            {
                snum9 = result2;
                snum9 = snum9 + "9";
                yingzi3 = double.Parse(snum9);
                snum9 = Convert.ToString(yingzi3);
                result2 = snum9;
                textresult.Text = result2;
            }
    
           
            #endregion
            private void nummc_Click(object sender, EventArgs e)
            {
                res1 = textresult.Text;
                res1d = double.Parse(res1);
                jiyizheng = res1d;
            }
    
           
    
            private void nummr_Click(object sender, EventArgs e)
            {
                res2 = Convert.ToString(jiyizheng);
                result2 = res2;
                textresult.Text = result2;
            }
            #region 加减乘除等于
            //除法
            private void numdiv_Click(object sender, EventArgs e)
            {
                
                result1 = result2;
                string res1 = result2;
                chu = double.Parse(res1);
                yingzi = "chu";
                textresult.Text = result2;
                res1 = "0";
                result2 = res1;
                
            }
            //乘法
            private void nummul_Click(object sender, EventArgs e)
            {
                result1 = result2;
                string res1 = result2;
                cheng = double.Parse(res1);            
                yingzi = "cheng";
                textresult.Text = res1;
                res1 = "0";
                result2 = res1;
                
            }
            //减法
            private void numsub_Click(object sender, EventArgs e)
            {
                result1 = result2;
                textresult.Text = result2;
                string res1 = result2;
                jian = double.Parse(res1);
                yingzi = "jian";
                textresult.Text = result2;
                res1 = "0";
                result2 = res1; 
                
            }
            //加法
            private void numplus_Click(object sender, EventArgs e)
            {
                result1 = result2;
                string res1 = result2;
                jia = double.Parse(res1);
                yingzi = "jia";
                textresult.Text = res1;
                res1 = "0";
                result2 = res1;
                
            }
            
            //等于
            private void numeq_Click(object sender, EventArgs e)
            {
                string res1 = result2;
                yingzi1 = double.Parse(res1);
                if (yingzi == "jia")
                {
                    yingzi2 = jia + yingzi1;
                    res2 = Convert.ToString(yingzi2);
                    result2 = res2;
                    result1 = res2;
                    textresult.Text = res2;
                }
                else if
                    (yingzi == "jian")
                {
                    yingzi2 = jian - yingzi1;
                    res2 = Convert.ToString(yingzi2);
                    result2 =  res2;
                    result1 = res2;
                    textresult.Text = res2;
                }
                else if
                  (yingzi == "cheng")
                {
                    
                    yingzi2 = cheng * yingzi1;
                    res2 = Convert.ToString(yingzi2);
                    result2 = res2;
                    result1 = res2;
                    textresult.Text = res2;
                }
                else if
                (yingzi == "chu")
                {
                    yingzi2 = chu / yingzi1;
                    res2 = Convert.ToString(yingzi2);
                    result2 = res2;
                    result1 = res2;
                    textresult.Text = res2;
                }
                #endregion
            }
        }
    }
    
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,185
精华内容 5,274
关键字:

c# 计算器

c# 订阅
友情链接: L1Login-Login_221.rar