文档详情

用c语言编写的计算器源代码

hao****021
实名认证
店铺
DOC
83.01KB
约13页
文档ID:158329351
用c语言编写的计算器源代码_第1页
1/13

作品:科学计算器 作者:欧宗龙编写环境:vc++6.0语言:c#include "stdafx.h"#include #include #include #include "resource.h"#include "MainDlg.h"#include #include #define PI 3.141593BOOL A_Op=FALSE;BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){ switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); } return FALSE;}BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam){ return TRUE;}void TrimNumber(char a[])//判断并删除小数点后无用的零{ for(unsigned i=0;i=i;j--) { if(a[j]=='0') { a[j]='\0'; } else if(a[j]=='.') { a[j]='\0'; } else break; } } }}double Operate(char Operator,double n1,double n2) //判断符号,进行相应的运算{ if(Operator=='0') { } if(Operator=='+') { n2+=n1; } if(Operator=='-') { n2=n1-n2; } if(Operator=='*') { n2*=n1; } if(Operator=='/') { n2=n1/n2; } if(Operator=='^') { n2=pow(n1,n2); } return n2;}////////////////////////////////////////////////void IntBinary(char a[],int n){ if(n>1)IntBinary(a,n/2); sprintf(a,"%s%i",a,n%2);}void decimal(char a[],double m){ if(m>0.000001) { m=m*2; sprintf(a,"%s%d",a,(long)m); decimal(a,m-(long)m); }}void Binary(char a[],double Num){ char DecP[256]=""; double x,y; double *iptr=&y; x=modf(Num,iptr); decimal(DecP,x); IntBinary(a,(int)y); strcat(a,"."); strcat(a,DecP);}////////////////////////////////////void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify){ static DELTIMES=0; static char str[256]; static char Operator='0'; static double RNum[3]; switch(id) { case IDC_BUTTONN1://数字1 { if(A_Op) { SetDlgItemText(hwnd,IDC_EDIT,NULL); } GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); strcat(str,"1"); SetDlgItemText(hwnd,IDC_EDIT,str); RNum[1]=atof(str); A_Op=FALSE; } break; case IDC_BUTTONN2://数字2 { if(A_Op) { SetDlgItemText(hwnd,IDC_EDIT,NULL); } GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); strcat(str,"2"); SetDlgItemText(hwnd,IDC_EDIT,str); RNum[1]=atof(str); A_Op=FALSE; } break; case IDC_BUTTONN3://数字3 { if(A_Op) { SetDlgItemText(hwnd,IDC_EDIT,NULL); } GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); strcat(str,"3"); SetDlgItemText(hwnd,IDC_EDIT,str); RNum[1]=atof(str); A_Op=FALSE; } break; case IDC_BUTTONN4://数字4 { if(A_Op) { SetDlgItemText(hwnd,IDC_EDIT,NULL); } GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); strcat(str,"4"); SetDlgItemText(hwnd,IDC_EDIT,str); RNum[1]=atof(str); A_Op=FALSE; } break; case IDC_BUTTONN5://数字5 { if(A_Op) { SetDlgItemText(hwnd,IDC_EDIT,NULL); } GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); strcat(str,"5"); SetDlgItemText(hwnd,IDC_EDIT,str); RNum[1]=atof(str); A_Op=FALSE; } break; case IDC_BUTTONN6://数字6 { if(A_Op) { SetDlgItemText(hwnd,IDC_EDIT,NULL); } GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); strcat(str,"6"); SetDlgItemText(hwnd,IDC_EDIT,str); RNum[1]=atof(str); A_Op=FALSE; } break; case IDC_BUTTONN7://数字7 { if(A_Op) { SetDlgItemText(hwnd,IDC_EDIT,NULL); } GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); strcat(str,"7"); SetDlgItemText(hwnd,IDC_EDIT,str); RNum[1]=atof(str); A_Op=FALSE; } break; case IDC_BUTTONN8://数字8 { if(A_Op) { SetDlgItemText(hwnd,IDC_EDIT,NULL); } GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); strcat(str,"8"); SetDlgItemText(hwnd,IDC_EDIT,str); RNum[1]=atof(str); A_Op=FALSE; } break; case IDC_BUTTONN9://数字9 { if(A_Op) { SetDlgItemText(hwnd,IDC_EDIT,NULL); } GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); strcat(str,"9"); SetDlgItemText(hwnd,IDC_EDIT,str); RNum[1]=atof(str); A_Op=FALSE; } break; case IDC_BUTTONN0://数字0 { if(A_Op) { SetDlgItemText(hwnd,IDC_EDIT,NULL); } GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); strcat(str,"0"); SetDlgItemText(hwnd,IDC_EDIT,str); RNum[1]=atof(str); A_Op=FALSE; } break; case IDC_BUTTONDEL://小数点.del { if(A_Op) { SetDlgItemText(hwnd,IDC_EDIT,NULL); } GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); if(DELTIMES==0) { strcat(str,"."); } DELTIMES++; SetDlgItemText(hwnd,IDC_EDIT,str); A_Op=FALSE; } break; case IDC_BUTTONADD: //加法运算 { RNum[1]=atof(str); RNum[0]=RNum[1]; RNum[1]=RNum[2]; RNum[2]=Operate(Operator,RNum[1],RNum[0]); sprintf(str,"%f",RNum[2]); TrimNumber(str); SetDlgItemText(hwnd,IDC_EDIT,str); Operator='+'; DELTIMES=0; A_Op=TRUE; } break; case IDC_BUTTONSUB: //减法运算 { RNum[1]=atof(str); RNum[0]=RNum[1]; RNum[1]=RNum[2]; RNum[2]=Operate(Operator,RNum[1],RNum[0]); sprintf(str,"%f",RNum[2]); TrimNumber(str); SetDlgItemText(hwnd,IDC_EDIT,str); DELTIMES=0;A_Op=TRUE; Operator='-'; } break; case IDC_BUTTONMUL: //乘法运算 { RNum[1]=atof(str); RNum[0]=RNum[1]; RNum[1]=RNum[2]; RNum[2]=Operate(Operator,RNum[1],RNum[0]); sprintf(str,"%f",RNum[2]); TrimNumber(str); SetDlgItemText(hwnd,IDC_EDIT,str); Operator='*'; DELTIMES=0; A_Op=TRUE; } break; case IDC_BUTTONDIV: //除法运算 { RNum[1]=atof(str); RNum[0]=RNum[1]; RNum[1]=RNum[2]; RNum[2]=Operate(Operator,RNum[1],RNum[0]); sprintf(str,"%f",RNum[2]); TrimNumber(str); SetDlgItemText(hwnd,IDC_EDIT,str); Operator='/'; DELTIMES=0; A_Op=TRUE; } break; case IDC_BUTTONXY://x的y次方 {GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); RNum[1]=atof(str); RNum[0]=RNum[1]; RNum[1]=RNum[2]; RNum[2]=Operate(Operator,RNum[1],RNum[0]); sprintf(str,"%f",RNum[2]); TrimNumber(str); SetDlgItemText(hwnd,IDC_EDIT,str); Operator='^'; DELTIMES=0; } break; case IDC_BUTTONPI: //圆周率PI,弧度 { GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); if(atof(str)!=0) { RNum[2]=atof(str)*PI; sprintf(str,"%f",RNum[2]); TrimNumber(str); SetDlgItemText(hwnd,IDC_EDIT,str); } else { sprintf(str,"%f",PI); SetDlgItemText(hwnd,IDC_EDIT,str); } A_Op=TRUE; } break; case IDC_BUTTONSQRT: //开根号 { GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); RNum[2]=sqrt(atof(str)); sprintf(str,"%f",RNum[2]); TrimNumber(str); SetDlgItemText(hwnd,IDC_EDIT,str); A_Op=TRUE; } break; case IDC_BUTTONSIN: //三角函数sin函数 { GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); RNum[2]=sin(atof(str)); sprintf(str,"%f",RNum[2]); TrimNumber(str); SetDlgItemText(hwnd,IDC_EDIT,str); A_Op=TRUE; } break; case IDC_BUTTONCOS://三角函数cos函数 { GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); RNum[2]=cos(atof(str)); sprintf(str,"%f",RNum[2]); TrimNumber(str); SetDlgItemText(hwnd,IDC_EDIT,str); A_Op=TRUE; } break; case IDC_BUTTONTAN://三角函数tan函数 { GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); RNum[2]=tan(atof(str)); sprintf(str,"%f",RNum[2]); TrimNumber(str); SetDlgItemText(hwnd,IDC_EDIT,str); A_Op=TRUE; } break; case IDC_BUTTONSQ: //平方 { GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); RNum[2]=atof(str)*atof(str); sprintf(str,"%f",RNum[2]); TrimNumber(str); SetDlgItemText(hwnd,IDC_EDIT,str); A_Op=TRUE; } break; case IDC_BUTTONCUBE://三次方 { GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); RNum[2]=atof(str)*atof(str)*atof(str); sprintf(str,"%f",RNum[2]); TrimNumber(str); SetDlgItemText(hwnd,IDC_EDIT,str); A_Op=TRUE; } break; case IDC_BUTTONEX://e的x次方 { GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); RNum[2]=exp(atof(str)); sprintf(str,"%f",RNum[2]); TrimNumber(str); SetDlgItemText(hwnd,IDC_EDIT,str); A_Op=TRUE; } break; case IDC_BUTTON10X://10的x次方 { GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); RNum[2]=pow(10,atof(str)); sprintf(str,"%f",RNum[2]); TrimNumber(str); SetDlgItemText(hwnd,IDC_EDIT,str); A_Op=TRUE; } break; case IDC_BUTTONLN: //ln x { GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); RNum[2]=log(atof(str)); sprintf(str,"%f",RNum[2]); TrimNumber(str); SetDlgItemText(hwnd,IDC_EDIT,str); A_Op=TRUE; } break; case IDC_BUTTONLOG10: //log10 { GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); RNum[2]=log10(atof(str)); sprintf(str,"%f",RNum[2]); TrimNumber(str); SetDlgItemText(hwnd,IDC_EDIT,str); A_Op=TRUE; } break; case IDC_BUTTONBINARY: //十进制转换为二进制 { char a[256]=""; GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); RNum[2]=atof(str); Binary(a,RNum[2]); strcpy(str,a); TrimNumber(str); SetDlgItemText(hwnd,IDC_EDIT,str); A_Op=TRUE; } break; case IDC_BUTTONCLEAR://清除数据 { DELTIMES=0; Operator='0'; RNum[0]=RNum[1]=RNum[2]=0; memset(str,0,sizeof(str)); SetDlgItemText(hwnd,IDC_EDIT,NULL); A_Op=FALSE; } break; case IDC_BUTTONBACKSPACE://退格键 { GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); int i=strlen(str); str[i-1]='\0'; SetDlgItemText(hwnd,IDC_EDIT,str); } break; case IDC_ENTER://Enter键 { GetDlgItemText(hwnd,IDC_EDIT,str,sizeof(str)); RNum[1]=atof(str); RNum[0]=RNum[1]; RNum[1]=RNum[2]; RNum[2]=Operate(Operator,RNum[1],RNum[0]); sprintf(str,"%f",RNum[2]); TrimNumber(str); SetDlgItemText(hwnd,IDC_EDIT,str); Operator='0'; DELTIMES=0; } break; default: break; }}void Main_OnClose(HWND hwnd){ EndDialog(hwnd, 0);}本人拙作,如有不足之处请谅解。

下载提示
相关文档
正为您匹配相似的精品文档