保护加减乘除,三角函数,log,开平方,平方,退格,记忆加减清除,多重括号,
主要制作思路是什么

解决方案 »

  1.   

    可用OOP思路
    界面,功能,方法
    做出来不难
      

  2.   

    微软已经把“计算器”开源,c++代码,有兴趣自己看ps:基本上为命令模式,命令字+命令参数底层:后缀表达式,有限状态机。因为是单步执行,所以这个就够了。如果是批次执行,需要知识 “词法分析”+“表达式树”+“访问者模式”+“命令模式”基本演示 1+2栈:
    操作数栈 1,2
    操作符栈 +操作符出栈:+-------------+操作,操作需要2操作数(左操作数+右操作数)-----操作数出2个操作数------------命令模式发给add操作方法
      

  3.   

    若只是作业,不是职业开发的话,可以参考:
    log,三角函数,开方等都已经封装到了Math这个类里面,调用即可
    退格不就是删除么
    记忆,应该就是保存运算值有括号就难了点,参考楼上几位
      

  4.   


    public class Calculator
            {
                public Calculator()
                {
                    _OptStack = new Stack<char>();
                    _SuffixStack = new Stack<float>();
                }
     
                private Stack<char> _OptStack;
                private Stack<float> _SuffixStack;
     
                public float Calculate(string expression)
                {
                    string lastNum = string.Empty;
                    for (int i = 0; i < expression.Length; i++)
                    {
                        if (char.IsNumber(expression[i]) || expression[i].Equals('.'))
                        {
                            lastNum += expression[i];
                        }
                        else
                        {
                            if (lastNum != string.Empty)
                            {
                                Merger(float.Parse(lastNum));
                                lastNum = string.Empty;
                            }
                            AddOpt(expression[i]);
                        }
                    }
                    if (lastNum != string.Empty)
                    {
                        Merger(float.Parse(lastNum));
                    }
                    while (_OptStack.Count > 0)
                    {
                        Merger(_OptStack.Pop());
                    }
     
                    return _SuffixStack.Pop();
                }
     
                private void AddOpt(char opt)
                {
                    if (_OptStack.Count == 0)
                    {
                        _OptStack.Push(opt);
                        return;
                    }
                    if (opt.Equals(')'))
                    {
                        while (!_OptStack.Peek().Equals('('))
                        {
                            Merger(_OptStack.Pop());
                        }
                        _OptStack.Pop();
                        return;
                    }
                    char tempOpt = _OptStack.Peek();
                    if ((opt.Equals('-') || opt.Equals('+')) &&
                        (tempOpt.Equals('*') || tempOpt.Equals('/')))
                    {
                        while (_OptStack.Count > 0)
                        {
                            Merger(_OptStack.Pop());
                        }
                    }
     
                    _OptStack.Push(opt);
                }
     
                private void Merger(float exp)
                {
                    _SuffixStack.Push(exp);
                }
     
                private void Merger(char exp)
                {
                    float num1 = _SuffixStack.Pop();
                    float num2 = _SuffixStack.Pop();
                    float result = 0;
                    switch (exp)
                    {
                        case '+':
                            result = num2 + num1;
                            break;
                        case '-':
                            result = num2 - num1;
                            break;
                        case '*':
                            result = num2 * num1;
                            break;
                        case '/':
                            result = num2 / num1;
                            break;
                        case。可以加上log、sin。。什么的
                            break;
                    }
                    _SuffixStack.Push(result);
                }
            }
    调用,做个输入界面,取最后的string就行了string calc = "89+(126/2)*3-6/3+(96+3-8/2)";// 随便写四则运算
    Calculator calculator = new Calculator();
     MessageBox.Show(calculator.Calculate(calc).ToString()); // 结果
      

  5.   

    isnumber函数是在哪个空间里,还是说自己建立的