四则运算(C#版)

  1 ExpandedBlockStart.gif ContractedBlock.gif /**/ /// <summary>
  2InBlock.gif        /// 四则运算
  3InBlock.gif        /// </summary>
  4ExpandedBlockEnd.gif        /// <returns>返回结果</returns>

  5 None.gif          public   int  EvaluateExpression()
  6 ExpandedBlockStart.gifContractedBlock.gif         dot.gif {
  7InBlock.gif            SeqStack<char> optr = new SeqStack<char>(20);    //存放操作符栈
  8InBlock.gif            SeqStack<int> opnd = new SeqStack<int>(20);      //存放操作数栈
  9InBlock.gif
 10InBlock.gif            optr.Push('#');
 11InBlock.gif            char c = (char)Console.Read();                   //读取每一个数
 12InBlock.gif            bool isLoop = true;                              //定义一个循环变量
 13InBlock.gif            char tmp = default(char);                        //临时操作符
 14InBlock.gif            int a = 0;                                       //计算数1
 15InBlock.gif            int b = 0;                                       //计算数2
 16InBlock.gif            while (isLoop)
 17ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 18InBlock.gif                if (c == '#' && opnd.Top == 0)
 19InBlock.gif                    isLoop = false;
 20InBlock.gif                if (c != '+' && c != '-' && c != '*' && c != '/' && c != '(' && c != ')' && c != '#')//不是操作数入数据栈
 21ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
 22InBlock.gif                    opnd.Push(((int)c)- 48);
 23InBlock.gif                    c = (char)Console.Read();
 24ExpandedSubBlockEnd.gif                }

 25InBlock.gif                else
 26ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
 27InBlock.gif                    switch (Precede(optr.GetTop(), c))
 28ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{
 29InBlock.gif                        case '<':
 30InBlock.gif                            optr.Push(c);
 31InBlock.gif                            c = (char)Console.Read();
 32InBlock.gif                            break;
 33InBlock.gif                        case '=':
 34InBlock.gif                            optr.Pop();
 35InBlock.gif                            c = (char)Console.Read();
 36InBlock.gif                            break;
 37InBlock.gif                        case '>':
 38InBlock.gif                            tmp = optr.Pop();
 39InBlock.gif                            a = opnd.Pop();
 40InBlock.gif                            b = opnd.Pop();
 41InBlock.gif                            opnd.Push(Operate(b, tmp, a));
 42InBlock.gif                            break;
 43InBlock.gif                        default:
 44InBlock.gif                            throw new System.ExecutionEngineException("输入错误格式错误!");
 45InBlock.gif                            break;
 46ExpandedSubBlockEnd.gif                    }

 47ExpandedSubBlockEnd.gif                }

 48ExpandedSubBlockEnd.gif            }

 49InBlock.gif            return opnd.Pop();
 50ExpandedBlockEnd.gif        }

 51 None.gif
 52 None.gif         // 判断优先级
 53 None.gif          private   char  Precede( char  optr1,  char  optr2)
 54 ExpandedBlockStart.gifContractedBlock.gif         dot.gif {
 55InBlock.gif            //定义一个比较结果(用二维数组存下来)
 56ExpandedSubBlockStart.gifContractedSubBlock.gif            char[,] optrTable = dot.gif
 57ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif'>''>''<''<''<''>''>' }
 58ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif'>''>''<''<''<''>''>' }
 59ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif'>''>''>''>''<''>''>' }
 60ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif'>''>''>''>''<''>''>' }
 61ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif'<''<''<''<''<''=''?' }
 62ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif'>''>''>''>''?''>''>' }
 63ExpandedSubBlockStart.gifContractedSubBlock.gifdot.gif'<''<''<''<''<''?''=' } }
;
 64InBlock.gif
 65InBlock.gif            int x = 0, y = 0;//申明存符号转化后的整数
 66InBlock.gif
 67InBlock.gif            //定义一个符号数组
 68ExpandedSubBlockStart.gifContractedSubBlock.gif            char[] optrs =dot.gif'+''-''*''/''('')''#' }
 69InBlock.gif            for (int i = 0; i < optrs.Length; ++i)
 70ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 71InBlock.gif                if (optr1 == optrs[i])
 72InBlock.gif                    x = i;
 73InBlock.gif                if (optr2 == optrs[i])
 74InBlock.gif                    y = i;
 75ExpandedSubBlockEnd.gif            }

 76InBlock.gif
 77InBlock.gif            return optrTable[x, y];
 78ExpandedBlockEnd.gif        }

 79 None.gif
 80 None.gif         // 计算两值,得出相应结果
 81 None.gif          private   int  Operate( int  a,  char  optr,  int  b)
 82 ExpandedBlockStart.gifContractedBlock.gif         dot.gif {
 83InBlock.gif            int result = default(int);
 84InBlock.gif            switch (optr)
 85ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 86InBlock.gif                case '+':
 87InBlock.gif                    result = a + b;
 88InBlock.gif                    break;
 89InBlock.gif                case '-':
 90InBlock.gif                    result = a - b;
 91InBlock.gif                    break;
 92InBlock.gif                case '*':
 93InBlock.gif                    result = a * b;
 94InBlock.gif                    break;
 95InBlock.gif                case '/':
 96InBlock.gif                    result = a / b;
 97InBlock.gif                    break;
 98InBlock.gif                default:
 99InBlock.gif                    break;
100ExpandedSubBlockEnd.gif            }

101InBlock.gif
102InBlock.gif            return result;
103ExpandedBlockEnd.gif        }

以上代码仅贡参考,如有雷同,纯属巧合.
中间还可以根据自己的需求改进~~

转载于:https://www.cnblogs.com/tt03030576/archive/2007/05/22/755059.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值