求C++大神帮忙编简单的四则运算练习题程序
4个回答
2014-09-28
展开全部
/*****stack.h*****/
typedef char flag;
#define NEW_STACK(STACK_NAME,TYPE) \
struct STACK_NAME \
{ \
TYPE*b;TYPE*h;int size; \
\
flag init(STACK_NAME* in) \
{ \
if(!(in->b=(TYPE*)malloc(10*sizeof(TYPE))))return 0; \
in->size=10*sizeof(TYPE); \
in->h=in->b; \
return 1; \
\
} \
flag isnull(STACK_NAME*in) \
{ \
if(in->b==in->h) \
return 1; \
else \
return 0; \
} \
flag pop(STACK_NAME*in,TYPE *a) \
{ \
if(isnull(in))return 0; \
*a=*(--in->h); \
return 1; \
\
} \
flag push(STACK_NAME*in,TYPE a) \
{ \
if(in->h-in->b>=in->size) \
{ \
if(!(in->b=(TYPE*)realloc(in->b,in->size+10*sizeof(TYPE))))return 0; \
in->h=in->b+in->size; \
in->size+=10*sizeof(TYPE); \
} \
*(in->h)=a; \
in->h++; \
return 1; \
} \
\
TYPE gettop(STACK_NAME*in) \
{ \
TYPE*a=in->h-1; \
return *a; \
} \
};
/******源文件******/
include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include"stack.h"
#define isnum(n) ((n>='0'&&n<='9')||n=='.')
NEW_STACK(csta,char)
NEW_STACK(dsta,double)
/*precede block*/
int ctoiex(char a)
{
int b;
if (a==')') b=1;
if(a=='+'||a=='-')b=2;
if(a=='*'||a=='/')b=3;
if(a=='(')b=4;
if(a=='#')b=0;
return b;
}
char precede(char a,char b)
{
int a1=ctoiex(a);
int b1=ctoiex(b);
if((a1==4&&b1==1)||((a1==0)&&(b1==0)))return '=';
if(a1>=b1) return '>';
else return '<';
}
double atonum(char*a,int len)
{
int inum=0;
double dnum=0;
char f=1;
int j=1;
for (int i=0;i<len;i++)
{
if(a[i]=='.')
{
f=0;
continue;
}
if(f)inum=inum*10+(a[i]-'0');
else dnum=dnum+(a[i]-'0')*pow(0.1,j++);
}
return inum+dnum;
}
double operate(double a,double b,char op)
{
double c;
switch(op)
{
case '+':c=a+b;break;
case '-':c=a-b;break;
case '*':c=a*b;break;
case '/':c=a/b;break;
}
return c;
}
void insert(char*a)
{
int len=strlen(a);
a[len]='#';
a[len+1]=0;
}
int main()
{
csta optr;dsta opnd;
optr.init(&optr);opnd.init(&opnd);
optr.push(&optr,'#');
char s[200];
char b[20];
char c;
char tmp1='1';
double op1,op2;
char f=0;
printf("请输入公式: ");
scanf("%s",s);
insert(s);
for(int i=0,j=0;tmp1!='#'||optr.gettop(&optr)!='#';)
{
if(isnum(tmp1))
{
b[j++]=s[i++];
tmp1=s[i];
}
else
{
if(f!='>')
{
opnd.push(&opnd,atonum(b,j));
j=0;
}
switch(f=precede(optr.gettop(&optr),tmp1))
{
case '<':
optr.push(&optr,tmp1);tmp1=s[++i];break;
case '=':
optr.pop(&optr,&c);tmp1=s[++i];break;
case '>':
optr.pop(&optr,&c);
opnd.pop(&opnd,&op1);
opnd.pop(&opnd,&op2);
opnd.push(&opnd,operate(op2,op1,c));
break;
}
}
}
printf("\n%f\n",opnd.gettop(&opnd));
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
30(7)64(9)73(64)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include "stdafx.h"
#include "MyDlg.h"
#include "math.h"
#define Pi 3.14159
// CMyDlg 对话框
IMPLEMENT_DYNAMIC(CMyDlg, CDialog)
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyDlg::IDD, pParent)
{
m_sign = 0;
num_sign = 0;
}
CMyDlg::~CMyDlg()
{
}
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
/*DDX_Control(pDX, IDC_USERNAME, m_EDIT);*/
}
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
/*ON_BN_CLICKED(IDC_BUTTON1, &CMyDlg::OnBnClickedButton1)*/
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_BUTTON17, &CMyDlg::OnBnClickedButton17)
ON_BN_CLICKED(IDC_BUTTON18, &CMyDlg::OnBnClickedButton18)
ON_BN_CLICKED(IDC_BUTTON21, &CMyDlg::OnBnClickedButton21)
ON_BN_CLICKED(IDC_BUTTON2, &CMyDlg::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON3, &CMyDlg::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON4, &CMyDlg::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON5, &CMyDlg::OnBnClickedButton5)
ON_BN_CLICKED(IDC_BUTTON6, &CMyDlg::OnBnClickedButton6)
ON_BN_CLICKED(IDC_BUTTON7, &CMyDlg::OnBnClickedButton7)
ON_BN_CLICKED(IDC_BUTTON8, &CMyDlg::OnBnClickedButton8)
ON_BN_CLICKED(IDC_BUTTON9, &CMyDlg::OnBnClickedButton9)
ON_BN_CLICKED(IDC_BUTTON10, &CMyDlg::OnBnClickedButton10)
ON_BN_CLICKED(IDC_BUTTON12, &CMyDlg::OnBnClickedButton12)
ON_BN_CLICKED(IDC_BUTTON13, &CMyDlg::OnBnClickedButton13)
ON_BN_CLICKED(IDC_BUTTON14, &CMyDlg::OnBnClickedButton14)
ON_BN_CLICKED(IDC_BUTTON15, &CMyDlg::OnBnClickedButton15)
ON_BN_CLICKED(IDC_BUTTON19, &CMyDlg::OnBnClickedButton19)
ON_BN_CLICKED(IDC_BUTTON11, &CMyDlg::OnBnClickedButton11)
ON_BN_CLICKED(IDC_BUTTON16, &CMyDlg::OnBnClickedButton16)
ON_BN_CLICKED(IDC_BUTTON20, &CMyDlg::OnBnClickedButton20)
ON_BN_CLICKED(IDC_BUTTON22, &CMyDlg::OnBnClickedButton22)
ON_BN_CLICKED(IDC_BUTTON25, &CMyDlg::OnBnClickedButton25)
ON_BN_CLICKED(IDC_BUTTON24, &CMyDlg::OnBnClickedButton24)
ON_BN_CLICKED(IDC_BUTTON23, &CMyDlg::OnBnClickedButton23)
ON_BN_CLICKED(IDC_BUTTON26, &CMyDlg::OnBnClickedButton26)
ON_BN_CLICKED(IDC_BUTTON27, &CMyDlg::OnBnClickedButton27)
ON_BN_CLICKED(IDC_BUTTON29, &CMyDlg::OnBnClickedButton29)
ON_BN_CLICKED(IDC_BUTTON30, &CMyDlg::OnBnClickedButton30)
ON_BN_CLICKED(IDC_BUTTON31, &CMyDlg::OnBnClickedButton31)
ON_BN_CLICKED(IDC_BUTTON28, &CMyDlg::OnBnClickedButton28)
END_MESSAGE_MAP()
//根号键功能实现
void CMyDlg::OnBnClickedButton17()
{
// TODO: 在此添加控件通知处理程序代码
}
//取倒数功能实现
void CMyDlg::OnBnClickedButton18()
{
// TODO: 在此添加控件通知处理程序代码
}
void CMyDlg::OnBnClickedButton21()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "1";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "2";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "3";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "4";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton5()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "5";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton6()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "6";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton7()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "7";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton8()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "8";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton9()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "9";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton10()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "0";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
//常量的实现
void CMyDlg::OnBnClickedButton27()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "3.14";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton12()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "+";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton13()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "-";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton14()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "*";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton15()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "/";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton11()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
Getstr(Bracket(m_EDIT1));
Getresult();
m_EDIT1.Format("%.2f",a[0]);
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton19()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1.Format("%s","");
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton16()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "0";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton20()//退格键
{
}
void CMyDlg::OnBnClickedButton22()
{
}
void CMyDlg::OnBnClickedButton25()
{
// TODO: 在此添加控件通知处理程序代码
}
void CMyDlg::OnBnClickedButton24()
{
// TODO: 在此添加控件通知处理程序代码
}
void CMyDlg::OnBnClickedButton23()
{
// TODO: 在此添加控件通知处理程序代码
}
void CMyDlg::OnBnClickedButton26()
{
// TODO: 在此添加控件通知处理程序代码
}
void CMyDlg::OnClose()
{
if ( MessageBox(_T("是否退出程序?"),_T("提示"),MB_YESNO|MB_ICONQUESTION) == IDYES )
{
CDialog::OnClose();
}
}
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam == VK_ESCAPE)
{
return true;
}
if(pMsg->wParam == VK_RETURN)
{
return true;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
double CMyDlg::GetatStr(CString str)
{
int i = 0;
double rate = 10.0,itemp = 0.0;
for (;i<str.GetLength();i++)
{
if (isdigit(str.GetAt(i)))
{
if (rate ==10.0)
{
itemp = itemp*rate + (str.GetAt(i)-'0');
}
else
{
itemp = itemp + rate*(str.GetAt(i)-'0');
rate *= 0.1;
}
}
else if ( str.GetAt(i)=='.')
{
rate = 0.1;
}
}
return itemp;
}
//字符串中有括号的处理
CString CMyDlg::Bracket(CString Str0)
{
CString Str1="",Str2="",Str3="";
int k = Str0.GetLength();
int i = -1; int j = -1;
i = Str0.Find('(');
j = Str0.ReverseFind(')');
Str2 = Str0.Mid(i+1,j-i-1);
Str1 = Str0.Left(i);
Str3 = Str0.Right(k-j-1);
Getstr(Str2);
Getresult();
if(a[0])
Str2.Format("%.2f",a[0]);
Str0 = Str1 + Str2 + Str3;
return Str0;
}
//获取表达式中的数字和运算符(这里的运算符是双目运算符)
void CMyDlg::Getstr(CString str)
{
int i = 0,z = 0;
double rate = 10.0, itemp = 0.0;
for (i;i<20;i++)
{
a[i]=0.0;
}
for (i=0;i<10;i++)
{
b[i]=' ';
}
for (i=0;i<str.GetLength();i++)
{
if (str.GetAt(i)=='+'||str.GetAt(i)=='-'||str.GetAt(i)=='*'||str.GetAt(i)=='/')
{
num_sign ++;
}
}
for (i=0;i<str.GetLength();i++)
{
if (isdigit(str.GetAt(i)))
{
if (rate ==10.0)
{
itemp = itemp*rate + (str.GetAt(i)-'0');
}
else
{
itemp = itemp + rate*(str.GetAt(i)-'0');
rate *= 0.1;
}
}
if (str.GetAt(i)=='.')
{
rate = 0.1;
}
/***********************************获取操作数和运算符**********************************/
if (str.GetAt(i)=='+')
{
a[z]= itemp;
z++;
itemp = 0;
b[z]='+';
z++;
rate = 10.0;
m_sign ++;
}
if (str.GetAt(i)=='-')
{
a[z]= itemp;
z++;
itemp = 0;
b[z] = '-';
z++;
rate = 10.0;
m_sign ++;
}
if (str.GetAt(i)=='*')
{
a[z]= itemp;
z++;
itemp = 0;
b[z] = '*';
z++;
rate = 10.0;
m_sign ++;
}
if (str.GetAt(i)=='/')
{
a[z]= itemp;
z++;
itemp = 0;
b[z] = '/';
z++;
rate = 10.0;
m_sign ++;
}
/***********************************获取最后一个操作数**********************************/
int m = i;
m++;
if (m_sign == num_sign)
{
CString S_last = str.Right((str.GetLength()-m));
for (int j = 0;j<S_last.GetLength();j++)
{
if (isdigit(S_last.GetAt(j)))
{
if (rate ==10.0)
{
itemp = itemp*rate + (S_last.GetAt(j)-'0');
}
else
{
itemp = itemp + rate*(S_last.GetAt(j)-'0');
rate *= 0.1;
}
}
else
{
rate = 0.1;
}
}
a[z] = itemp;
s = z;
return;
}
}
}
// 对表达式进行运算,并记录表达式的最终结果在界面上显示
void CMyDlg::Getresult()
{
int i = 0,x = 0,y = 1,m=1,t=0;
for (i;i<s;i++)
{
if (b[i] == '/')
{
a[i+1] = 1/a[i+1];
b[i] = '*';
}
}
for (i=0;i<s;i++)
{
if (b[i] == '*')
{
if (i-t == 2)
{
a[t-m] =a[t-m]*a[i+1];
m = m+2;
}
a[i-1]= a[i-1]* a[i+1];
a[i+1] = 0;
b[i] = ' ';
t = i;
}
}
for(i=0;i<=s;i++)
{
if(a[i]!=0.0)
{
a[x]=a[i];
x+=2;
}
if( b[i]=='+'|| b[i]=='-')
{
b[y]=b[i];
y+=2;
}
}
for(i=1;i<=y-2;i++)
{
if(b[i]=='+')
a[0]=a[0]+a[i+1];
else if(b[i]=='-')
a[0]=a[0]-a[i+1];
}
}
void CMyDlg::OnBnClickedButton29()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += ")";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton30()
{
// TODO: 在此添加控件通知处理程序代码
}
void CMyDlg::OnBnClickedButton31()
{
// TODO: 在此添加控件通知处理程序代码
}
void CMyDlg::OnBnClickedButton28()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "(";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
#include "MyDlg.h"
#include "math.h"
#define Pi 3.14159
// CMyDlg 对话框
IMPLEMENT_DYNAMIC(CMyDlg, CDialog)
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMyDlg::IDD, pParent)
{
m_sign = 0;
num_sign = 0;
}
CMyDlg::~CMyDlg()
{
}
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
/*DDX_Control(pDX, IDC_USERNAME, m_EDIT);*/
}
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
/*ON_BN_CLICKED(IDC_BUTTON1, &CMyDlg::OnBnClickedButton1)*/
ON_WM_CLOSE()
ON_BN_CLICKED(IDC_BUTTON17, &CMyDlg::OnBnClickedButton17)
ON_BN_CLICKED(IDC_BUTTON18, &CMyDlg::OnBnClickedButton18)
ON_BN_CLICKED(IDC_BUTTON21, &CMyDlg::OnBnClickedButton21)
ON_BN_CLICKED(IDC_BUTTON2, &CMyDlg::OnBnClickedButton2)
ON_BN_CLICKED(IDC_BUTTON3, &CMyDlg::OnBnClickedButton3)
ON_BN_CLICKED(IDC_BUTTON4, &CMyDlg::OnBnClickedButton4)
ON_BN_CLICKED(IDC_BUTTON5, &CMyDlg::OnBnClickedButton5)
ON_BN_CLICKED(IDC_BUTTON6, &CMyDlg::OnBnClickedButton6)
ON_BN_CLICKED(IDC_BUTTON7, &CMyDlg::OnBnClickedButton7)
ON_BN_CLICKED(IDC_BUTTON8, &CMyDlg::OnBnClickedButton8)
ON_BN_CLICKED(IDC_BUTTON9, &CMyDlg::OnBnClickedButton9)
ON_BN_CLICKED(IDC_BUTTON10, &CMyDlg::OnBnClickedButton10)
ON_BN_CLICKED(IDC_BUTTON12, &CMyDlg::OnBnClickedButton12)
ON_BN_CLICKED(IDC_BUTTON13, &CMyDlg::OnBnClickedButton13)
ON_BN_CLICKED(IDC_BUTTON14, &CMyDlg::OnBnClickedButton14)
ON_BN_CLICKED(IDC_BUTTON15, &CMyDlg::OnBnClickedButton15)
ON_BN_CLICKED(IDC_BUTTON19, &CMyDlg::OnBnClickedButton19)
ON_BN_CLICKED(IDC_BUTTON11, &CMyDlg::OnBnClickedButton11)
ON_BN_CLICKED(IDC_BUTTON16, &CMyDlg::OnBnClickedButton16)
ON_BN_CLICKED(IDC_BUTTON20, &CMyDlg::OnBnClickedButton20)
ON_BN_CLICKED(IDC_BUTTON22, &CMyDlg::OnBnClickedButton22)
ON_BN_CLICKED(IDC_BUTTON25, &CMyDlg::OnBnClickedButton25)
ON_BN_CLICKED(IDC_BUTTON24, &CMyDlg::OnBnClickedButton24)
ON_BN_CLICKED(IDC_BUTTON23, &CMyDlg::OnBnClickedButton23)
ON_BN_CLICKED(IDC_BUTTON26, &CMyDlg::OnBnClickedButton26)
ON_BN_CLICKED(IDC_BUTTON27, &CMyDlg::OnBnClickedButton27)
ON_BN_CLICKED(IDC_BUTTON29, &CMyDlg::OnBnClickedButton29)
ON_BN_CLICKED(IDC_BUTTON30, &CMyDlg::OnBnClickedButton30)
ON_BN_CLICKED(IDC_BUTTON31, &CMyDlg::OnBnClickedButton31)
ON_BN_CLICKED(IDC_BUTTON28, &CMyDlg::OnBnClickedButton28)
END_MESSAGE_MAP()
//根号键功能实现
void CMyDlg::OnBnClickedButton17()
{
// TODO: 在此添加控件通知处理程序代码
}
//取倒数功能实现
void CMyDlg::OnBnClickedButton18()
{
// TODO: 在此添加控件通知处理程序代码
}
void CMyDlg::OnBnClickedButton21()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "1";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "2";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "3";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "4";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton5()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "5";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton6()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "6";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton7()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "7";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton8()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "8";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton9()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "9";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton10()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "0";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
//常量的实现
void CMyDlg::OnBnClickedButton27()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "3.14";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton12()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "+";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton13()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "-";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton14()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "*";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton15()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "/";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton11()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
Getstr(Bracket(m_EDIT1));
Getresult();
m_EDIT1.Format("%.2f",a[0]);
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton19()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1.Format("%s","");
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton16()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "0";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton20()//退格键
{
}
void CMyDlg::OnBnClickedButton22()
{
}
void CMyDlg::OnBnClickedButton25()
{
// TODO: 在此添加控件通知处理程序代码
}
void CMyDlg::OnBnClickedButton24()
{
// TODO: 在此添加控件通知处理程序代码
}
void CMyDlg::OnBnClickedButton23()
{
// TODO: 在此添加控件通知处理程序代码
}
void CMyDlg::OnBnClickedButton26()
{
// TODO: 在此添加控件通知处理程序代码
}
void CMyDlg::OnClose()
{
if ( MessageBox(_T("是否退出程序?"),_T("提示"),MB_YESNO|MB_ICONQUESTION) == IDYES )
{
CDialog::OnClose();
}
}
BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam == VK_ESCAPE)
{
return true;
}
if(pMsg->wParam == VK_RETURN)
{
return true;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
double CMyDlg::GetatStr(CString str)
{
int i = 0;
double rate = 10.0,itemp = 0.0;
for (;i<str.GetLength();i++)
{
if (isdigit(str.GetAt(i)))
{
if (rate ==10.0)
{
itemp = itemp*rate + (str.GetAt(i)-'0');
}
else
{
itemp = itemp + rate*(str.GetAt(i)-'0');
rate *= 0.1;
}
}
else if ( str.GetAt(i)=='.')
{
rate = 0.1;
}
}
return itemp;
}
//字符串中有括号的处理
CString CMyDlg::Bracket(CString Str0)
{
CString Str1="",Str2="",Str3="";
int k = Str0.GetLength();
int i = -1; int j = -1;
i = Str0.Find('(');
j = Str0.ReverseFind(')');
Str2 = Str0.Mid(i+1,j-i-1);
Str1 = Str0.Left(i);
Str3 = Str0.Right(k-j-1);
Getstr(Str2);
Getresult();
if(a[0])
Str2.Format("%.2f",a[0]);
Str0 = Str1 + Str2 + Str3;
return Str0;
}
//获取表达式中的数字和运算符(这里的运算符是双目运算符)
void CMyDlg::Getstr(CString str)
{
int i = 0,z = 0;
double rate = 10.0, itemp = 0.0;
for (i;i<20;i++)
{
a[i]=0.0;
}
for (i=0;i<10;i++)
{
b[i]=' ';
}
for (i=0;i<str.GetLength();i++)
{
if (str.GetAt(i)=='+'||str.GetAt(i)=='-'||str.GetAt(i)=='*'||str.GetAt(i)=='/')
{
num_sign ++;
}
}
for (i=0;i<str.GetLength();i++)
{
if (isdigit(str.GetAt(i)))
{
if (rate ==10.0)
{
itemp = itemp*rate + (str.GetAt(i)-'0');
}
else
{
itemp = itemp + rate*(str.GetAt(i)-'0');
rate *= 0.1;
}
}
if (str.GetAt(i)=='.')
{
rate = 0.1;
}
/***********************************获取操作数和运算符**********************************/
if (str.GetAt(i)=='+')
{
a[z]= itemp;
z++;
itemp = 0;
b[z]='+';
z++;
rate = 10.0;
m_sign ++;
}
if (str.GetAt(i)=='-')
{
a[z]= itemp;
z++;
itemp = 0;
b[z] = '-';
z++;
rate = 10.0;
m_sign ++;
}
if (str.GetAt(i)=='*')
{
a[z]= itemp;
z++;
itemp = 0;
b[z] = '*';
z++;
rate = 10.0;
m_sign ++;
}
if (str.GetAt(i)=='/')
{
a[z]= itemp;
z++;
itemp = 0;
b[z] = '/';
z++;
rate = 10.0;
m_sign ++;
}
/***********************************获取最后一个操作数**********************************/
int m = i;
m++;
if (m_sign == num_sign)
{
CString S_last = str.Right((str.GetLength()-m));
for (int j = 0;j<S_last.GetLength();j++)
{
if (isdigit(S_last.GetAt(j)))
{
if (rate ==10.0)
{
itemp = itemp*rate + (S_last.GetAt(j)-'0');
}
else
{
itemp = itemp + rate*(S_last.GetAt(j)-'0');
rate *= 0.1;
}
}
else
{
rate = 0.1;
}
}
a[z] = itemp;
s = z;
return;
}
}
}
// 对表达式进行运算,并记录表达式的最终结果在界面上显示
void CMyDlg::Getresult()
{
int i = 0,x = 0,y = 1,m=1,t=0;
for (i;i<s;i++)
{
if (b[i] == '/')
{
a[i+1] = 1/a[i+1];
b[i] = '*';
}
}
for (i=0;i<s;i++)
{
if (b[i] == '*')
{
if (i-t == 2)
{
a[t-m] =a[t-m]*a[i+1];
m = m+2;
}
a[i-1]= a[i-1]* a[i+1];
a[i+1] = 0;
b[i] = ' ';
t = i;
}
}
for(i=0;i<=s;i++)
{
if(a[i]!=0.0)
{
a[x]=a[i];
x+=2;
}
if( b[i]=='+'|| b[i]=='-')
{
b[y]=b[i];
y+=2;
}
}
for(i=1;i<=y-2;i++)
{
if(b[i]=='+')
a[0]=a[0]+a[i+1];
else if(b[i]=='-')
a[0]=a[0]-a[i+1];
}
}
void CMyDlg::OnBnClickedButton29()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += ")";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
void CMyDlg::OnBnClickedButton30()
{
// TODO: 在此添加控件通知处理程序代码
}
void CMyDlg::OnBnClickedButton31()
{
// TODO: 在此添加控件通知处理程序代码
}
void CMyDlg::OnBnClickedButton28()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
m_EDIT1 += "(";
SetDlgItemText(IDC_EDIT1,m_EDIT1);
UpdateData(FALSE);
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询