标题:求c#高手帮助,c#设计的计算器怎样实现先乘除后加减
只看楼主
lwd620337
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-6-16
结帖率:100%
已结贴  问题点数:20 回复次数:2 
求c#高手帮助,c#设计的计算器怎样实现先乘除后加减
比如:2+3*5   怎么让程序自动判别先乘除后加减啊?
程序代码:
using System;
using System.Collections.Generic;
using using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Calculator
{
    public partial class Form1 : Form
    {
        //定义一个控制标志
        int flag=-1;
       //存储第一个操作数
        int num1,num2;
        //存储最后的结果
        int results;
        
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
         //当用户按下0-9数字键时触发
        private void num_Click(object sender, EventArgs e)
        {
            Button a = (Button)sender;
            txtOutput.Text = txtOutput.Text + a.Text;
            
        }
         //当用户按下运算符时触发
        private void operator_Click(object sender, EventArgs e)
        {
            Button b = (Button)sender;
            if (b.Text == "+")
            {
                if (flag == -1)
                {
                    num1 = int.Parse(txtOutput.Text); 
                }
                else
                { 
                    switch(flag)
                    { 
                        case 0: 
                             num1 = num1 + int.Parse(txtOutput.Text);
                            break;
                        case 1:
                             num1 = num1 - int.Parse(txtOutput.Text);
                            break;
                        case 2:
                             num1 = num1 *int.Parse(txtOutput.Text); 
                            break;
                        case 3: 
                             num1 = num1 / int.Parse(txtOutput.Text);
                             break;
                       }

                };
                if (num2==-1)
                {
                    num1 = 0;
                }
                txtOutput.Text = "";
                flag = 0;
            }
            if (b.Text == "-")
            {
                if (flag == -1)
                {
                    num1 = int.Parse(txtOutput.Text);
                }
                else
                {
                    switch (flag)
                    {
                        case 0:
                            num1 = num1 + int.Parse(txtOutput.Text);
                            break;
                        case 1:
                            num1 = num1 - int.Parse(txtOutput.Text);
                            break;
                        case 2:
                            num1 = num1 * int.Parse(txtOutput.Text);
                            break;
                        case 3:
                            num1 = num1 / int.Parse(txtOutput.Text);
                            break;
                    }

                };
                txtOutput.Text = "";
                flag = 1;
            }
            if (b.Text == "*")
            {
                if (flag == -1)
                {
                    num1 = int.Parse(txtOutput.Text);
                }
                else
                {
                    switch (flag)
                    {
                        case 0:
                            num1 = num1 + int.Parse(txtOutput.Text);
                            break;
                        case 1:
                            num1 = num1 - int.Parse(txtOutput.Text);
                            break;
                        case 2:
                            num1 = num1 * int.Parse(txtOutput.Text);
                            break;
                        case 3:
                            num1 = num1 / int.Parse(txtOutput.Text);
                            break;
                    }
                }
                txtOutput.Text = "";
                flag = 2;
            }
            if (b.Text == "/")
            {
                if (flag == -1)
                {
                    num1 = int.Parse(txtOutput.Text);
                }
                else
                {
                    switch (flag)
                    {
                        case 0:
                            num1 = num1 + int.Parse(txtOutput.Text);
                            break;
                        case 1:
                            num1 = num1 - int.Parse(txtOutput.Text);
                            break;
                        case 2:
                            num1 = num1 * int.Parse(txtOutput.Text);
                            break;
                        case 3:
                            num1 = num1 / int.Parse(txtOutput.Text);
                            break;
                    }
                }
                txtOutput.Text = "";
                flag = 3;
            }
            if (b.Text == "C")
            {
              txtOutput.Text = "";

                num1 = 0;
                txtOutput.Focus();
              
            }

            if (b.Text == "=")
            {
                if (flag == 0)
                {
                    results = num1 + int.Parse(txtOutput.Text);
                    flag = -1;
                }
                if (flag == 1)
                {
                    results = num1 - int.Parse(txtOutput.Text);
                    flag = -1;
                }
                if (flag == 2)
                {
                    results = num1 * int.Parse(txtOutput.Text);
                    flag = -1;
                }
                if (flag == 3)
                {
                    results = num1 / int.Parse(txtOutput.Text);
                    flag = -1;
                }
                txtOutput.Text = results.ToString();
            }

        }

        private void btnDivide_Click(object sender, EventArgs e)
        {

        }

    }
}
搜索更多相关主题的帖子: 计算器 
2011-06-16 17:18
hhwz
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:87
帖 子:687
专家分:4502
注 册:2011-5-22
得分:0 
只需要记录下所按的过程下来就行了。 接收就是"2"+"+"+"3"+"*"+"5" 连接成一个公式 按了等号输出出来就行了
个人的 一点拙见
2011-06-16 18:59
fily1314
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1190
注 册:2007-7-18
得分:20 
如果是没有括号的式子,扫描整个式子,碰到乘除的地方,计算这个地方的值,用这个值把原式子中的那部分替换,
继续扫描新的式子,如果没有乘除了,进行加减运算,方法给乘除时一样,直到式子里没有运算符合为止,
可能用递归实现起来比较方便
2011-06-17 12:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-343082-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.047939 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved