我想问一下怎么实现科学计算。就比如说1+2*3 先计算乘除法
以下是我的部分程序,谢谢大家
加减乘除里的代码是一样的。
void CMyDlg::Onadd()
{
// TODO: Add your control notification handler code here
char cs[30];
double add;
m_Edit.GetWindowText(cs,30);
add=atof((LPCTSTR)cs); //将字符型换成浮点型
switch(control) //每次计算之前前进行之前的运算
{
case 0: result=add;break; //第一个数应存储
case 1: result=result+add;break;
case 2: result=result-add;break;
case 3: result=result*add;break;
case 4:
{
if(add==0)
{
MessageBox("除数不能为0!请重新输入");
char ed[50];
_gcvt(result,50,ed);
m_Edit.SetWindowText(ed);
Num=' ';
control=0; //control赋初值
return;
}
else
{
result=result/add;
break;
}
}
}
control=1;
char ed[50];
_gcvt(result,50,ed);
m_Edit.SetWindowText(ed); m_Edit.SetWindowText("+");
Num=' ';
UpdateData(FALSE);
}
这里是等于号里边的代码
void CMyDlg::Ondeng()
{
// TODO: Add your control notification handler code here
char cs[30],seq[50];
double equal;
switch(control)
{
case 1:
{
m_Edit.GetWindowText(cs,30);
equal=atof((LPCTSTR)cs);
result=result+equal;
_gcvt(result,6,seq);
m_Edit.SetWindowText(seq);
Num=' ';
result=0;
control=0;
break;
}
case 2:
{
m_Edit.GetWindowText(cs,30);
equal=atof((LPCTSTR)cs);
result=result-equal;
_gcvt(result,6,seq);
m_Edit.SetWindowText(seq);
Num=' ';
result=0;
control=0;
break;
}
case 3:
{
m_Edit.GetWindowText(cs,30);
equal=atof((LPCTSTR)cs);
result=result*equal;
_gcvt(result,6,seq);
m_Edit.SetWindowText(seq);
Num=' ';
result=0;
control=0;
break;
}
case 4:
{
m_Edit.GetWindowText(cs,30);
equal=atof((LPCTSTR)cs);
if(equal==0)
{
MessageBox("除数不能为0!请重新输入");
char ed[50];
_gcvt(result,6,ed);
m_Edit.SetWindowText(ed);
Num=' ';
control=0; //control回到初值
return;
}
else
{
result=result/equal;
_gcvt(result,6,seq);
m_Edit.SetWindowText(seq);
Num=' ';
result=0;
control=0;
break;
}
}
}
}