怎样可以 实现C#计算器连加、减、乘、除????

lindygai 2008-01-03 07:26:54
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;



通过修改以上代码,实现上述要求 连加 减 乘 除。还有连等。
...全文
2008 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
liaohaihui57 2010-05-15
  • 打赏
  • 举报
回复
那个opt DIV分别是什么意思啊
zr1314521 2009-11-10
  • 打赏
  • 举报
回复
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;
}
}
fengyecsdn 2008-01-04
  • 打赏
  • 举报
回复
楼主如果想自己作个运算器,那就去看看递归表达试算法吧.
标准算法,看书就行.


如果是实际需要计算STRING表达试,
直接交给数据库 一个SELECT就出来了,
没有数据库用 DATATABLE也可以,DATATABLE也支持SELECT
xiaomatian 2008-01-04
  • 打赏
  • 举报
回复
这个有个运算符优先级的问题。
yuzhlhua 2008-01-04
  • 打赏
  • 举报
回复
mark
Q_282898034 2008-01-04
  • 打赏
  • 举报
回复
能用正则表达式分析括号嵌套不?类似windows的计算机没有研究的必要,太简单了。
czw5305302 2008-01-03
  • 打赏
  • 举报
回复
ArrayList+运算法则

要不你用堆栈的思想也行
Q_282898034 2008-01-03
  • 打赏
  • 举报
回复
老大,做啥呢?
cnfixit 2008-01-03
  • 打赏
  • 举报
回复
面试呢?

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧