精华内容
参与话题
问答
  • 好东西C#计算器代码C#计算器代码C#计算器代码C#计算器代码C#计算器代码
  • c# 计算器

    2020-07-30 14:52:42
    c#计算器 实验报告 一、实验目的 设计一个简单计算器,在功能上功能尽量模拟windows操作系统中的计算器,系统界面不做强制要求。 最低要求:应具有一般计算功能,能进行基本的加减乘除运算。其他计算功能作为加分项...
       			                       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#计算器

    2015-03-20 14:45:57
    C# 版全能计算器
  • c#计算器

    2017-08-22 12:40:00
    我是一名在校大学生,喜欢编程,我是一个新手,这段代码是我最近才写出来,借鉴了很多前辈们的代码,发现他们基本上都是已经学习编程很久,再重新回来写c#计算器代码,可能不是特别适合新手,我这有的新手写的代码...

    这是我的第一份博客。

    我是一名在校大学生,喜欢编程,我是一个新手,这段代码是我最近才写出来,借鉴了很多前辈们的代码,发现他们基本上都是已经学习编程很久,再重新回来写c#计算器代码,可能不是特别适合新手,我这有的新手写的代码可以更好的理解新手的思维。

    这份博客是我用心去写的,写的可能还不好,希望能够多给我些支持。

    下面是代码部分:

    我的代码总共用1个groupBox 1个textBox1 17个按钮 

    textBox负责输入和输出文本 1 2 3 4按钮是加减乘除 5按钮是=  6到14是数字输出按钮  15按钮是小数点 16按钮是清零 17是清除前一位字符 在代码注释里也有说明

    代码的整体思路:数字按钮负责输入显示数字 运算符按钮负责保存运算符之前的输入数字和运算符本身 他们被分别保存在一个double数组arithmeticData和一个string 数组Arithmetic =按钮将之前保存的数字和运算符按照顺序进行计算,先将最后显示的数字和第

    一个保存的数字计算得出结果,这个结果再和第二个数字组合得出第二个结果,以此类推最后算出最后的结果。

    注意:调用窗口需在主程序写 System.Windows.Forms.Application.Run(new Form1());

    下面是具体的代码

    代码较长,但难度不高慢慢看一定能看懂,实在不懂可以留言询问 希望能够得到大家的支持。

    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;
    using System.Collections;
    using System.Windows;

    namespace studly
    {
    public partial class Form1 : Form
    {
    private string[] Arithmetic=new string[4]; //定义运算符号
    private double prevNum=-1; //计算时使用前一个数字
    private int count=0;
    private double[] arithmeticData=new double[10]; //保存计算的数字
    public Form1()
    {
    InitializeComponent();
    }
    private void Form1_Load(object sender, EventArgs e)
    {

    }
    private void groupBox1_Enter(object sender, EventArgs e)
    {

    }
    private void textBox1_TextChanged(object sender, EventArgs e)
    {

    }
    private void InitArithmetic() //初始化计算时变量,没有初始化prevNum,在addNum()初始化
    {
    for (int i = 0; i < Arithmetic.Length; i++)
    {
    Arithmetic[i] = "";
    }
    for (int i = 0; i < arithmeticData.Length; i++)
    {
    arithmeticData[i] = 0;
    }
    count = 0;

    }
    private void addShowNum(int num) //输入数字并输出到textBox1
    {
    prevNum = 0;
    if (textBox1.Text == "0")
    {
    textBox1.Text = num.ToString();
    }
    else
    {
    textBox1.Text += num;
    }
    }

    private void button1_Click(object sender, EventArgs e) //保存+前的数字,以便后面计算
    {
    Arithmetic[count] = "+";
    arithmeticData[count] = double.Parse(textBox1.Text);
    textBox1.Text = "0";
    count++;
    }
    private void button2_Click(object sender, EventArgs e)
    {
    Arithmetic[count] = "-";
    arithmeticData[count] = double.Parse(textBox1.Text);
    textBox1.Text = "0";
    count++;
    }
    private void button3_Click(object sender, EventArgs e)
    {
    Arithmetic[count] = "*";
    arithmeticData[count] = double.Parse(textBox1.Text);
    textBox1.Text = "0";
    count++;
    }
    private void button4_Click(object sender, EventArgs e)
    {
    Arithmetic[count] = "/";
    arithmeticData[count] = double.Parse(textBox1.Text);
    textBox1.Text = "0";
    count++;
    }

    private void button5_Click(object sender, EventArgs e) //将保存的数字和相应的运算符号进行组合运算得出结果
    {
    prevNum = double.Parse(textBox1.Text);
    for(int i=0;i<count;i++)
    {
    switch(Arithmetic[i])
    {
    case "+":
    prevNum += arithmeticData[i];
    break;
    case "-":
    prevNum -= arithmeticData[i];
    break;
    case "*":
    prevNum *= arithmeticData[i];
    break;
    case "/":
    prevNum /= arithmeticData[i];
    break;
    }
    }
    textBox1.Text = prevNum.ToString();
    InitArithmetic(); //清零计算中使用的数字和运算符号,只保留最后的结果便于直接进行计算
    }

    private void button6_Click(object sender, EventArgs e) //添加数字
    {
    addShowNum(9);
    }
    private void button7_Click(object sender, EventArgs e)
    {
    addShowNum(8);
    }
    private void button8_Click(object sender, EventArgs e)
    {
    addShowNum(7);
    }
    private void button9_Click(object sender, EventArgs e)
    {
    addShowNum(6);
    }
    private void button10_Click(object sender, EventArgs e)
    {
    addShowNum(5);
    }
    private void button11_Click(object sender, EventArgs e)
    {
    addShowNum(4);
    }
    private void button12_Click(object sender, EventArgs e)
    {
    addShowNum(3);
    }
    private void button13_Click(object sender, EventArgs e)
    {
    addShowNum(2);
    }
    private void button14_Click(object sender, EventArgs e)
    {
    addShowNum(1);
    }

    private void button15_Click(object sender, EventArgs e)
    {
    prevNum = 0;
    if(textBox1.Text=="0")
    {
    textBox1.Text = "0.";
    }
    else
    {
    textBox1.Text += ".";
    }
    }

    private void button16_Click(object sender, EventArgs e) //清零
    {
    textBox1.Text = "0";
    }

    private void button17_Click(object sender, EventArgs e)
    {
    textBox1.Text=textBox1.Text.Substring(0, textBox1.Text.Length - 1); //清除前一个字符
    }
    }
    }

     

    转载于:https://www.cnblogs.com/wzq2747527869/p/7411038.html

    展开全文
  • C#计算器工程文件

    2018-01-29 21:02:24
    C#计算器工程文件C#计算器工程文件C#计算器工程文件C#计算器工程文件C#计算器工程文件
  • 模仿简单计算器,加减乘除和记忆,单鼠标操作,最新版本V3.0版,请搜“ C#计算器源码,C#仿真计算器源码-仿真实体计算器V3.0版”
  • C#计算器源码,C#仿真计算器源码。模仿了实体计算器,一个窗口,其余为按钮操作,实现:普通计算和单数字记忆和查询计算。未添加键盘输入计算,需要鼠标点击按钮计算。
  • 模仿了简单功能计算器,进行加减乘除和记忆数字的计算,一个窗口模拟显示计算器屏幕,其余为功能键,未添加键盘输入计算代码,需要...最新版本V3.0版,请搜“ C#计算器源码,C#仿真计算器源码-仿真实体计算器V3.0版”
  • C# 计算器

    热门讨论 2007-11-27 10:52:13
    实现功能: 模拟微软计算器界面,实现四则混合运算 1.键盘输入(KeyUp事件) 2.无焦点(按钮失去焦点) 3.实现优先级运算。比如直接输入1-2*3=-5,而不是微软计算器的-3 4.使用操作工厂,使用接口...
  • C#计算器编写代码

    2020-09-02 02:17:54
    主要为大家分享了C#计算器编写代码,供大家参考,感兴趣的小伙伴们可以参考一下
  • C#计算器实现.zip

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

空空如也

1 2 3 4 5 ... 20
收藏数 1,959
精华内容 783
关键字:

c#计算器

c# 订阅