private void Oper(object obj,EventArgs ea)
{
Button tmp1=(Button)obj;
strOper=tmp1.Text;
switch (strOper)
{
case "/":       //除法运算
if(opt!=NULL&&opt!=DIV)
{
calc();
}
opt = DIV;
if (num != 0)  //判断操作数的个数,如果两个就做二元运算
{
if (tmp != 0)
res = res / tmp;
}
else
res = tmp;
num++;                      
tmp = 0;
TextBox1.Text = res.ToString();
dot = NODOT;
break;
case "*":
// 乘法运算
if(opt!=NULL&&opt!=MUL)
{
calc();
} opt = MUL;
                    
if (num!= 0 )     //判断操作数的个数,如果两个就做二元运算    
{
if(tmp!=0)
res = res * tmp;
}
else
res = tmp;
                    
num++;                                      
tmp = 0;
TextBox1.Text = res.ToString();
dot = NODOT;
break;
case "+":            //加法运算
if(opt!=NULL&&opt!=ADD)
{
calc();
}
opt = ADD;
if (num != 0)    //判断操作数的个数,如果两个就做二元运算
res = res + tmp;
else
res = tmp;
num++;                    
tmp = 0;
TextBox1.Text = res.ToString();
dot = NODOT;
break;
case "-":        //减法运算
if(opt!=NULL&&opt!=SUB)
{
calc();
}
/*if(opt==ADD)
{
res=res+tmp;
tmp=0;
}*/
opt = SUB;
if (num != 0)    //判断操作数的个数,如果两个就做二元运算
res = res - tmp;
else
res = tmp;
num++;                     
tmp = 0;
TextBox1.Text = res.ToString();
dot = NODOT;
break;
case "sqrt":     //平方根运算
if(opt!=NULL)
{
calc();
} //opt=SQRT;
if (tmp > 0)  //要求操作数大于0
{
res = Math.Sqrt(tmp);
//res=tmp;
}
else if(res>0)
res= Math.Sqrt(res);
TextBox1.Text =res.ToString();
num++;    
tmp=0;
dot = NODOT;
break; case "1/x":  //倒数运算
if(opt!=NULL)
{
calc();
}
if (tmp != 0)
{
res = 1 / tmp;
//res=tmp;
}
else                    
res=1/res;
TextBox1.Text = res.ToString();
tmp=0;
dot = NODOT;
break;通过修改以上代码,实现上述要求 连加 减 乘 除。还有连等。

解决方案 »

  1.   

    ArrayList+运算法则要不你用堆栈的思想也行
      

  2.   

    能用正则表达式分析括号嵌套不?类似windows的计算机没有研究的必要,太简单了。
      

  3.   

    楼主如果想自己作个运算器,那就去看看递归表达试算法吧.
    标准算法,看书就行.
    如果是实际需要计算STRING表达试,
    直接交给数据库 一个SELECT就出来了,
    没有数据库用 DATATABLE也可以,DATATABLE也支持SELECT
      

  4.   

    protected void equal_Click(object sender, EventArgs e)
        {
            Operators = Convert.ToString(ViewState["Operators"]);   //将ViewState["Operators"]的值存入Operators中 便于下面的switch语句使用
            switch (Operators)
            {
                case "+":
                    Show.Text = Convert.ToString(Convert.ToDouble(ViewState["out"]) + Convert.ToDouble(ViewState["in"]));        //输出ViewState["out"]和ViewState["in"]所保存的结果并运算 
                    break;
                case "-":
                    Show.Text = Convert.ToString(Convert.ToDouble(ViewState["out"]) - Convert.ToDouble(ViewState["in"]));
                    break;
                case "*":
                    Show.Text = Convert.ToString(Convert.ToDouble(ViewState["out"]) * Convert.ToDouble(ViewState["in"]));
                    break;
                case "/":
                    Show.Text = Convert.ToString(Convert.ToDouble(ViewState["out"]) / Convert.ToDouble(ViewState["in"]));
                    break;
            }
        }
      

  5.   

    那个opt DIV分别是什么意思啊