简单计算器可视化程序编程Word文件下载.docx
- 文档编号:21766184
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:38
- 大小:182.73KB
简单计算器可视化程序编程Word文件下载.docx
《简单计算器可视化程序编程Word文件下载.docx》由会员分享,可在线阅读,更多相关《简单计算器可视化程序编程Word文件下载.docx(38页珍藏版)》请在冰豆网上搜索。
6
IDC_BUTTON7
7
IDC_BUTTON8
8
IDC_BUTTON9
9
IDC_BUTTON10
IDC_BUTTON11
.
IDC_BUTTON12
空格
IDC_BUTTON23
-
IDC_BUTTON26
*
IDC_BUTTON27
/
IDC_BUTTON38
sqrt
IDC_BUTTON30
%
IDC_BUTTON25
^
IDC_BUTTON31
sin
IDC_BUTTON32
cos
IDC_BUTTON33
tan
IDC_BUTTON34
cot
IDC_BUTTON40
sin~1
IDC_BUTTON41
cos~1
IDC_BUTTON35
log
IDC_BUTTON36
ln
IDC_BUTTON14
a
IDC_BUTTON15
b
IDC_BUTTON16
c
IDC_BUTTON17
d
IDC_BUTTON18
e
IDC_BUTTON19
f
IDC_BUTTON13
退格
IDC_BUTTON37
e^
IDC_BUTTON22
清空
IDOK
计算
IDC_RADIO_DEGREE
角度
IDC_RADIO_RADIAN
弧度
IDC_STATIC
计算结果
IDC_BTN_HISTREXP
历史表达式
IDCANCEL
退出
IDC_BTN_CONVERT
进制
完成后界面如图8所示。
图8计算器界面
五、计算器源程序代码
//Calculation.cpp:
implementationoftheCCalculationclass.
//MadebyGamsnin10.26.2005
//////////////////////////////////////////////////////////////////////
#include"
stdafx.h"
Calculator.h"
Calculation.h"
math.h"
#ifdef_DEBUG
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#definenewDEBUG_NEW
#endif
#defineFUNCNUM15//函数个数
#defineCONSTNUM11//常数个数
#defineE2.7182818284590452353
#definePI3.1415926535897932384
//Construction/Destruction
CCalculation:
:
CCalculation()
{
//初始化函数和常数
m_bDegree=0;
m_nOutputFlag=0;
opt[0]="
e^"
;
opt[1]="
ch"
opt[2]="
sqr"
opt[3]="
sh"
opt[4]="
log"
opt[5]="
cos"
opt[6]="
sin"
opt[7]="
tan"
opt[8]="
ln"
opt[9]="
abs"
opt[10]="
at"
opt[11]="
as"
opt[12]="
ac"
opt[13]="
th"
opt[14]="
cot"
opt2[0]='
^'
opt2[1]='
/'
opt2[2]='
*'
opt2[3]='
%'
opt2[4]='
+'
opt2[5]='
-'
m_strConValue[0]="
3.1415926535897932384"
m_strConName[0]="
PI"
m_strConValue[1]="
9.80665"
m_strConName[1]="
GG"
m_strConValue[2]="
(8.988*10^9)"
m_strConName[2]="
EF"
m_strConValue[3]="
0.02241383"
m_strConName[3]="
VM"
m_strConValue[4]="
(1.380662*10^(-23))"
m_strConName[4]="
BC"
m_strConValue[5]="
8.3144"
m_strConName[5]="
MG"
m_strConValue[6]="
(6.6720*10^(-11))"
m_strConName[6]="
GR"
m_strConValue[7]="
(6.022045*10^23)"
m_strConName[7]="
NA"
m_strConValue[8]="
(2.99792458*10^8)"
m_strConName[8]="
LS"
m_strConValue[9]="
(8.854187818*10^(-12))"
m_strConName[9]="
DC"
m_strConValue[10]="
2.7182818284590452353"
m_strConName[10]="
E"
}
~CCalculation()
boolCCalculation:
IsDigital(CStringstr)
while(str.GetAt(0)=='
)str.Delete(0);
for(inti=0;
i<
FUNCNUM;
i++)if(str.Find(opt[i])!
=-1)return0;
for(i=0;
6;
i++)if(str.Find(opt2[i])!
return1;
CStringCCalculation:
NtoS(doubled)
intdecimal,sign;
char*buffer;
buffer=_ecvt(d,16,&
decimal,&
sign);
CStringstr=buffer;
if(decimal>
=0&
&
decimal<
=16)str.Insert(decimal,"
."
);
elseif(decimal>
16)
{
for(inti=str.GetLength();
decimal;
i++)str+="
0"
str+="
.0"
}
else
for(inti=0;
-decimal;
i++)str.Insert(0,"
str.Insert(0,"
if(sign==1)str.Insert(0,"
-"
returnstr;
doubleCCalculation:
StoN(CStringstr)
char*stopstring;
doublex;
x=strtod(str.GetBuffer(0),&
stopstring);
m_strTmp=stopstring;
returnx;
TwoE(CStringstrExp)
doublex2,y,x1=StoN(strExp);
strExp=m_strTmp;
charop=strExp.GetAt(0);
strExp.Delete(0);
x2=StoN(strExp);
if(m_strTmp!
="
"
)return"
ERROR_"
+m_strTmp+"
未知符号_"
if(op=='
){y=x1+x2;
elseif(op=='
){y=x1*x2;
){y=x1-x2;
){y=pow(x1,x2);
){y=x1/x2;
){y=fmod(x1,x2);
elsereturn"
未知运算符_"
returnNtoS(y);
SingleE(CStringop,doubledx)
if(op=="
)
returnNtoS(log(dx));
elseif(op=="
returnNtoS(log10(dx));
returnNtoS(sqrt(dx));
returnNtoS(exp(dx));
returnNtoS(fabs(dx));
returnNtoS(acos(dx));
returnNtoS(asin(dx));
returnNtoS(atan(dx));
if(m_bDegree)dx=dx*PI/180;
returnNtoS(tan(dx));
{
returnNtoS(sin(dx));
returnNtoS(cos(dx));
returnNtoS(1/tan(dx));
returnNtoS(sinh(dx));
}
returnNtoS(cosh(dx));
returnNtoS(sinh(dx)/cosh(dx));
exp"
returnNtoS(pow(10,dx));
return"
ERROR"
+op+"
_未知函数_"
intCCalculation:
LocateLBra(CStringstrExp)
intlen=strExp.GetLength();
intpos=-1;
len;
i++)
if(pos>
strExp.GetAt(i)=='
)'
)break;
if(strExp.GetAt(i)=='
('
)
{
pos=i;
}
returnpos;
voidCCalculation:
DelBracket(CString*strExp)
intpos=LocateLBra(*strExp);
inti,len=strExp->
GetLength();
if(pos==-1){*strExp="
ERROR_无效表达式_"
return;
for(i=pos;
i++)if(strExp->
GetAt(i)=='
CStringstr;
str=strExp->
Mid(pos+1,i-pos-1);
MultiE(&
str);
strExp->
Delete(pos,i-pos+1);
Insert(pos,str);
MultiE(CString*strExp)
if(strExp->
IsEmpty())*strExp="
ERROR_函数表达式为空_"
if(IsDigital(*strExp)){return;
while
(1)/*处理所有的一元运算*/
intpos=strExp->
Find(opt[i]);
if(pos!
=-1)
{
CStringstr=strExp->
Right(strExp->
GetLength()-pos-opt[i].GetLength());
doubledx=StoN(str);
if(m_strTmp==str){*strExp="
+str+"
_无法识别的函数_"
strExp->
Delete(pos,strExp->
GetLength()-pos);
*strExp+=SingleE(opt[i],dx)+m_strTmp;
MinusMinus(strExp);
if(pos>
=1)
{
charch=strExp->
GetAt(pos-1);
if(ch>
=48&
ch<
=57)
{*strExp="
ERROR_缺少二元运算符_"
}
break;
}
if(i==FUNCNUM)break;
//按运算符优先级处理二元运算
while
(1)
pos=strExp->
Find('
if(pos==-1)break;
elseCalcu(strExp,pos);
pos=0;
GetAt(0)=='
||strExp->
)strExp->
Insert(0,"
inttmpos=strExp->
GetLength()-pos).Find('
if(tmpos==-1)break;
elsepos+=tmpos;
if(pos==0&
GetAt(pos+1)=='
||pos>
0)
if(strExp->
Delete(pos+1);
pos=0;
continue;
/*********处理连减(如:
----1)的情况***********/
intnCount=0;
while
(1)
if(++pos>
if(strExp->
GetAt(pos)!
='
elsenCount++;
elsebreak;
if(nCount>
0)
Delete(pos-nCount-1,nCount+1);
if(nCount%2==0)strExp->
Insert(pos-nCount-1,"
elseif(pos-nCount-1>
0)strExp->
+"
elsepos--;
/***********************************************/
if(pos>
0&
GetAt(pos-1)=='
pos++;
Calcu(strExp,pos);
elsepos++;
//inttmpos=strExp->
//elsepos+=tmpos;
/*********处理连加(如:
++++1)的情况***********/
Calcu(CString*strExp,intpos)
charch;
for(intj=pos-1;
j>
=0;
j--)
ch=strExp->
GetAt(j);
if(ch=='
||ch=='
||ch=='
)
if(j==0&
ch!
){*strExp="
ERROR_缺少参数_"
ch=='
)j=-1;
//防止把负号误判为减号
elseif(j>
&
!
IsDigital(strExp->
Mid(j-1,1)))j--;
break;
for(intk=pos+1;
k<
strExp->
k++)
GetAt(k);
if(ch=='
k>
pos+1)break;
IsDigital(st
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 计算器 可视化 程序 编程