




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.2计算器的介绍(1)在运行程序后,系统会弹出一个基于对话框的计算器界面,如下图所示:图1.1计算器界面(2)在计算器程序中,主要通过一个编辑框来获取表达式和显示计算结果,表达式可以 通过键盘和单击按钮2种方式输入,输入后的结果如下图所示:图1.2输入表达式后的界面(3)在输入完表达式后,单击“=后,开始对表达式进行计算,计算完成后,在编辑 框中显示计算的结果。图1.3计算后的结果acsqr t4.000000转化为二进制转化为十六进制in后退+ i sin-cos*tan/cot其实现的操作为先输入一个十进(4)计算器可以实现十进制转化为十六进制或二进制,制整数,再单击按钮“转化为二进制”
2、或“转化为十六进制图1.5 100转化为二进制后的结果图1.4 输入一个十进制数100图1.6 100转化为十六进制后的结果(4)另外,计算器还可以实现一些简单的函数运算,实现的操作和十六进制/二进制转化类似,是先输入一个数字,在单击想要进行的函数的按钮,单击后就会在编辑框中显示运 算的结果。1算法的实现2.1把字符串转化为数字和运算符的算法(1)如果字符串中只有数字。这个情况用来实现一些简单函数的运算。在进行简单函数 的运算时,都是先输入一个数字,再单击要进行运算的按钮,然后编辑框显示运算的结果。 程序用了一个函数double getastr(cstring str)来实现这个功能,该函数以
3、编辑框变量m_strresult为实参,再得到m_strresult的值后,调用getat函数,一个字符一个字符的读 取,如果碰到整数,执行itemp=itemp*rate+(str.getat(i)-0); ,其中变量itemp初始值为0, 变量rate初始值为10,如果碰到了小数点,改变rate的值,使其等于0.1,再向后继续读取,再碰到整数时执行“itemp=itemp+rate*(str.getat(i)-0);rate=rate/10;” ,函数的最后确定返回值为itemp。以下是这个函数的代码2:double cmydlg:getastr(cstring str)int i=0;d
4、ouble rate=10.0,itemp=0.0;for(;istr.getlength();i+)if(isdigit(str.getat(i)/如果字符串 str.getat(i) 的内容是整数if(rate=10.0)/整数部分itemp=itemp*rate+(str.getat(i)-0); / 获得整数else/小数部分itemp=itemp+rate*(str.getat(i)-0); / 获得小数rate=rate/10;每次让 rate 小 10 倍/如果str.getat(i)是小数点/让rate=0.1,开始计算小数部分else if(str.getat(i)=.)ra
5、te=0.1;return (itemp);(2) 如果字符串中有运算符和数字,但是没有括号。 程序调用函数void getstr(cstring str),这个函数的前半部分和函数 void getastr(cstring str)一样,都是获取数字的算法,但是因为表达式中可能有多个数字和运算符,所以我们需要定义2 个数组,分别用来存放数字和运算符,当读取字符遇到运算符时,把变量itemp的值保存在数组a中,并把0赋给itemp,把10赋给rate,把运算符保存在数组b中。当不在碰到运算符号时,把最后一个整数itemp的值数组a中,把z的值赋给so (z的值表示运算符加数字一个有多少个,把这
6、个值赋给s,可以在以后的计算中,控制循环的条件,避免造成不必要的误差。 )这个函数的代码如下:void cmydlg:getstr(cstring str)int i=0,z=0;double rate=10.0,itemp=0.0;for(i=0;i20;i+)ai=1000000.0;for(i=0;i10;i+)bi= ;i=0;for(;istr.getlength();i+)if(isdigit(str.getat(i)if(rate=10.0)/对数组 a20 初始化/对数组 b10 初始化/把 0 赋给 i/如果字符串str.getat(i) 的内容是整数/整数部分itemp=i
7、temp*rate+(str.getat(i)-0); / 获得整数else/小数部分itemp=itemp+rate*(str.getat(i)-0); / 获得小数/每次让rate小10倍else if(str.getat(i)=.)/如果str.getat(i)是小数点rate=0.1;/让rate=0.1,开始计算小数部分rate=rate/10;/如果str.getat(i) 是加号else if(str.getat(i)=+)az=itemp;itemp=0;/把 itemp 的值放入双精度数组a 中,并把 itemp 的值改为 0z+;/让z 自加一次bz=+;/把加号放入字符数
8、组b 中z+;/让z 自加一次rate=10.0;/把10赋给rate,确保读取下个数字时,先计算整数部分else if(str.getat(i)=-)如果 str.getat(i)是减号az=itemp;itemp=0;/把itemp的值放入双精度数组a中,并把itemp的值改为0z+;/让 z 自加一次bz=-;/把减号放入字符数组b 中z+;/让 z 自加一次rate=10.0;/把10赋给rate,确保读取下个数字时,先计算整数部分else if(str.getat(i)=*)/如果 str.getat(i) 是乘号az=itemp;itemp=0;把itemp的值放入双精度数组a中,
9、并把itemp的值改为0z+;/让 z 自加一次bz=*;/把减号放入字符数组b 中z+;/让 z 自加一次rate=10.0;/把10赋给rate,确保读取下个数字时,先计算整数部分else if(str.getat(i)=/)/如果str.getat(i) 是除号az=itemp;itemp=0;/把itemp的值放入双精度数组a中,并把itemp的值改为0z+;/让 z 自加一次bz=/;z+;rate=10.0;/ 把除号放入字符数组b 中/让 z 自加一次/把10赋给rate,确保读取下个数字时,先计算整数部分 az=itemp;/把最后一个整数itemp 的值放入双精度数组a 中s
10、=z;/把z的值赋给变量s,用来控制计算结果的循环中的条件(3)如果字符串中有括号。程序用函数void bracket(cstring str0)来解决括号问题,同样, 函数以编辑框变量 m_strresult为实参,主要思想是把 m_strresult先分成3个字符串,比 如一个表达式2*(2+3)-6 ,这个函数的目的是先把表达式2*(2+3)-6 分成 2*、 2+3、 -6 三个字符串,再计算2+3 后,把结果覆盖掉2+3所在的字符串,最后把3个字符串相加,这样就处理掉了括号的问题。具体实现的算法:定义 3个字符串变量stu、str2、str3,这 三个变量都初始化为空变量,现在开始一
11、个循环,当没有遇到字符“ (”时,把每次得到的字符都加在字符串 str1 上,当遇到字符“ (”时,把“ (”后的字符都加在字符串 str2 上, 直到遇到字符“)。当遇到字符“)”时,把“)”后的字符都加在字符串str3上,str2再 调用函数计算出它的表达式的值,最后把3 个字符串相加,这就解决了括号问题。该函数代码如下:void cmydlg:bracket(cstring str0)cstring str1=,str2=,str3=;int i=0;for(;istr0.getlength();i+)if(str0.getat(i)=()i+;for(;istr0.getlength(
12、);i+)if(str0.getat(i)=) break;str2+=str0.getat(i);i+;for(;istr0.getlength();i+)str3+=str0.getat(i);elsestr1+=str0.getat(i);/如果碰到了左括号/i 自加一次,用来跳过左括号/如果碰到右括号,跳出循环/把括号内的表达式赋给str2/i 自加一次,用来跳过右括号/把括号后边的表达式赋给str3/ 把括号前边的表达式赋给str3getstr(str2);调用getstr(str2)函数,把str2里的数字和运算符保存在数组中getresult();for(i=0;istr0.ge
13、tlength();i+)if(str0.getat(i)=()str2.format(%1f,a0);/ 计算出表达式str2 的值/如果 m_strresult 中有括号/把 a0 转化为字符串赋给str2m_strresult=str1+str2+str3;/把 str1,str2,str3 的值加起来赋给m_strresult2.2 计算出结果的算法在把表达式中的数字和运算符分别保存在数组后,接下来我们就要进行表达式的计算了,表达式的计算首先要考虑优先级的问题,这里先把所有的除法转化为乘法,再把除法后的数字取它的倒数,接下来就是进行乘法计算,每次乘法计算后都把计算的结果保存在计算的 2
14、 个数中的前面的那个数上,并把乘号和后面的数字删除。进行完乘法运算后,进行一次循环,重新整理下数组,最后进行加法和减法运算。函数代码如下:void cmydlg:getresult()int i=0,x=0,y=1,t,z=1;/这个循环的目的是把所有除法运算都改为乘法计算for(i=0;i=s;i+)if(bi=/)ai+1=1/ai+1;bi=*;/这个循环可以对所有乘法进行计算for(i=0;i=s;i+)if(bi=*)/当循环遇到除号时/把 ai+1的值改为 1/ai+1 /把 bi 的值改为乘号/当循环遇到乘号时/如果i-t=2(再上次循环中,t被赋值成了 i,这次2个值只相差2,
15、说明表达式的情况是连续乘法 ,比如 2*3*4) 以 2*3*4 为例,在这个条件之前,函数已经进行了 2*3 的运算, 其计算结果保存在原来的 2 中,把 2 的值覆盖了,这个条件的作用是让 2*3 的结果再和 4 相乘,结果保存在原来的 2 中if(i-t=2)at-z=at-z*ai+1;/进行乘法运算,把结果保存在前面的数组元素中z=z+2;/这里引进变量z ,可以解决很多数连续相乘的问题,比如2*2*2*2*2*2ai-1=ai-1*ai+1;/碰到乘号后把乘号前后2 个数字相乘,结果保存在前面的数组元素ai+1=1000000.0;/对乘号后面的数字初始化为 0.0bi= ;/对乘
16、号初始化为空格/2 数相乘后把乘号及其后面的数字初始化了,如果是2*3*4 的情况,将会无法计算*4 ,所以要用开始的条件语句来解决t=i;/把 i 的值赋给 t/这个循环的目的是对数组a 和 b 进行整理,因为已经进行了乘法和除法运算,进行运算的时候,把一些数字和运算符初始化了这个函数的作用可以使中间一些初始化了的数字和符号被后面的数字和符号代替,让数组可以重新排列for(i=0;i=s;i+)if(ai!=1000000.0)ax=ai;x+=2;if(bi!= )by=bi;y=y+2;/这个循环是进行最后的加减法运算for(i=0;i=y-2;i+)/如果ai 的值不为 0.0/把 a
17、i 的值赋给 ax/x 自加 2/如果 bi 的值不为空格/把 bi 的值赋给 by/y 自加 2/这里i的上限小于等于y-2,可以保证不进行多余的运算if(bi=+)/如果bi 等于加号a0=a0+ai+1;/把加号后的数字和a0 相加,结果保存在 a0 中else if(bi=-)如果 bi等于减号a0=a0-ai+1; /把减号后的数字和a0 相减,结果保存在 a0 中 2.3 转化为十六进制和二进制的算法1 1) 转化为二进制的算法。将数值除以2 并记录余数,只要商不为0,继续将最新的商除以2 并记录余数,当商为 0 以后,此数的二进制便可以由记录下来的余数得到 3 。以下是函 数的代
18、码:void cmydlg:on2()int m,n20;cstring str;updatedata(true);/把编辑框显示的字符串传给相应的变量m_strresultm=(int)getastr(m_strresult);调用 getastr(m_strresult)用来获取 m_strresult 中的数字m_strresult=;for(int i=0;i=0;i-)/对 m_strresult 的值初始化/把 m 除 2 的余数保存在ni 中/把 m/2 的值赋给 m/ 当 m 为 0 时,退出循环str.format(%d,ni);/用 format 函数把 ni 的值转化为字
19、符串m_strresult+=str;/把 str 的值加在 m_strresult 上operatorpressed=true;把 bool 变量 operatorpressed勺值改为 trueupdatedata(false);/把字符串变量m_strresult传给编辑框(2)转化为十六进制的算法。 如果要转化的数字大于16, 则把这个数字除以 16并记录余数,继续将最新的商除以 16 并记录余数,当商为 0 以后,把大于 9 的数字转化为字母记录,这样得到的字符串就是十六进制数了。函数代码如下;void cmydlg:on16()int m;updatedata(true);/把编辑
20、框显示的字符串传给相应的变量m_strresultm=(int)getastr(m_strresult);调用 getastr(m_strresult),用来获取 m_strresult中的数字f(m);/调用f(m) 函数,把十进制转化为十六进制m_strresult=str7;str7=;operatorpressed=true;updatedata(false);/把 str7 的值赋给m_strresult/把 str7 初始化把 bool 变量 operatorpressed勺值改为 true/把字符串变量m_strresult 传给编辑框void cmydlg:f(int n)cs
21、tring str1;int x;if(n/16)!=0)f(n/16);x=n%16;if(x=0&x=9)str1.format(%d,x);str7+=str1;elsestr7+=char(x+55);/如果n 大于等于 16/ 把 n 除以16,进行递归调用/ 把 n 除以 16 的余数赋给x/如果x 在 0 到 9 之间/用 format 函数把 x 的值转化为字符串/把 str1 加在 str3 上/把x的值加55 (利用ascii码)再转化为字符型加在str3上3 参考文献1谭浩强.c+程序设计.清华大学出版社2004.2 郑阿奇 .visual c+ 教程 . 机械工业出版社
22、20043j.gleen brookshear. 计算机科学概论. 人民邮电出版社2003.4 程序代码void cmydlg:onno0()updatedata(true);/把编辑框显示的字符串传给相应的变量m_strresultif(operatorpressed=true|restarted=true)/在按下了 =,ac,sqrt,tan,sin 等按忸时,m_strresult=0;/变量m_strresult 的值为按下的按忸0else /在按下数字键的情况下,则在m_strresult 后加 0m_strresult+=0; operatorpressed=false; 把 b
23、ool 变量 operatorpressedf口 restarted 的值改为 false restarted=false; updatedata(false);/把字符串变量m_strresult传给编辑框void cmydlg:onno1() updatedata(true);/把编辑框显示的字符串传给相应的变量m_strresultif(operatorpressed=true|restarted=true) /在按下了 =,ac,sqrt,tan,sin 等按忸时,m_strresult=1;变量 m_strresult的值为按下的按忸1else /在按下数字键的情况下,则在 m_st
24、rresult后加1 m_strresult+=1; operatorpressed=false; 把 bool 变量 operatorpressedf口 restarted的值改为 false restarted=false; updatedata(false);/把字符串变量m_strresult传给编辑框void cmydlg:onno2()updatedata(true);/把编辑框显示的字符串传给相应的变量 m_strresult if(operatorpressed=true|restarted=true) /在按下了 =,ac,sqrt,tan,sin 等按忸时,m_strres
25、ult=2;/变量m_strresult 的值为按下的按忸2else /在按下数字键的情况下,则在m_strresult 后加 2m_strresult+=2; operatorpressed=false; 把 bool 变量 operatorpressedf口 restarted 的值改为 false restarted=false; updatedata(false);/把字符串变量m_strresult传给编辑框void cmydlg:onno3() updatedata(true);/把编辑框显示的字符串传给相应的变量m_strresultif(operatorpressed=true
26、|restarted=true) /在按下了 =,ac,sqrt,tan,sin 等按忸时,m_strresult=3;/变量 m_strresult的值为按下的按忸3else /在按下数字键的情况下,则在 m_strresult后加3 m_strresult+=3; operatorpressed=false; 把 bool 变量 operatorpressedf口 restarted 的值改为 false restarted=false; updatedata(false);/把字符串变量m_strresult传给编辑框updatedata(true);/把编辑框显示的字符串传给相应的变量
27、 m_strresultif(operatorpressed=true|restarted=true)/在按下了 =,ac,sqrt,tan,sin 等按忸时,m_strresult=4;/变量m_strresult 的值为按下的按忸4else /在按下数字键的情况下,则在m_strresult 后加 4m_strresult+=4;operatorpressed=false;把 bool 变量 operatorpressedf口 restarted 的值改为 falserestarted=false;updatedata(false);/把字符串变量m_strresult传给编辑框void
28、cmydlg:onno5()updatedata(true);/把编辑框显示的字符串传给相应的变量 m_strresultif(operatorpressed=true|restarted=true)/在按下了 =,ac,sqrt,tan,sin 等按忸时,m_strresult=5;/变量m_strresult 的值为按下的按忸5else /在按下数字键的情况下,则在m_strresult 后加 5m_strresult+=5;operatorpressed=false;把 bool 变量 operatorpressedf口 restarted 的值改为 falserestarted=fal
29、se;updatedata(false);/把字符串变量m_strresult传给编辑框void cmydlg:onno6()updatedata(true);/把编辑框显示的字符串传给相应的变量 m_strresult if(operatorpressed=true|restarted=true) /在按下了 =,ac,sqrt,tan,sin 等按忸时,m_strresult=6;/变量 m_strresult 的值为按下的按忸6else /在按下数字键的情况下,则在 m_strresult后加6 m_strresult+=6;operatorpressed=false;把 bool 变量
30、 operatorpressedf口 restarted的值改为 falserestarted=false;updatedata(false);/把字符串变量m_strresult传给编辑框void cmydlg:onno7() updatedata(true);/把编辑框显示的字符串传给相应的变量m_strresultif(operatorpressed=true|restarted=true) /在按下了 =,ac,sqrt,tan,sin 等按忸时,m_strresult=7;变量 m_strresult的值为按下的按忸7else /在按下数字键的情况下,则在m_strresult 后加
31、 7m_strresult+=7; operatorpressed=false; 把 bool 变量 operatorpressedf口 restarted 的值改为 false restarted=false; updatedata(false);/把字符串变量m_strresult传给编辑框void cmydlg:onno8()updatedata(true);/把编辑框显示的字符串传给相应的变量m_strresultif(operatorpressed=true|restarted=true)/在按下了 =,ac,sqrt,tan,sin 等按忸时,m_strresult=8;变量 m_
32、strresult的值为按下的按忸8else /在按下数字键的情况下,则在m_strresult 后加 8m_strresult+=8;operatorpressed=false;把 bool 变量 operatorpressedf口 restarted 的值改为 falserestarted=false;updatedata(false);/把字符串变量m_strresult传给编辑框void cmydlg:onno9()updatedata(true);/把编辑框显示的字符串传给相应的变量 m_strresultif(operatorpressed=true|restarted=true)
33、/在按下了 =,ac,sqrt,tan,sin 等按忸时,m_strresult=9;/变量 m_strresult 的值为按下的按忸9else /在按下数字键的情况下,则在m_strresult 后加 9m_strresult+=9; operatorpressed=false; 把 bool 变量 operatorpressedf口 restarted 的值改为 false restarted=false;updatedata(false);/把字符串变量m_strresult传给编辑框void cmydlg:onadd()updatedata(true);/把编辑框显示的字符串传给相应的
34、变量m_strresultm_strresult+=+”;/在变量 m_strresult后加+operatorpressed=false;把 bool 变量 operatorpressecf口 restarted 的值改为 falserestarted=false;updatedata(false);/把字符串变量m_strresult传给编辑框 void cmydlg:ondec()updatedata(true);/把编辑框显示的字符串传给相应的变量m_strresultm_strresult+=-;/在变量m_strresult 后加 -operatorpressed=false;把
35、bool 变量 operatorpressedf口 restarted 的值改为 falserestarted=false;updatedata(false);/把字符串变量m_strresult传给编辑框void cmydlg:onmut()updatedata(true);/把编辑框显示的字符串传给相应的变量m_strresultm_strresult+=*;/在变量m_strresult 后加 *operatorpressed=false;把 bool 变量 operatorpressedf口 restarted 的值改为 falserestarted=false;updatedata(
36、false);/把字符串变量m_strresult 传给编辑框if(isdigit(str.getat(i)/如果字符串str.getat(i) 的内容是整数void cmydlg:ondiv()updatedata(true);/把编辑框显示的字符串传给相应的变量m_strresultm_strresult+=/;/在变量 m_strresult后加/operatorpressed=false;把 bool 变量 operatorpressedf口 restarted 的值改为 falserestarted=false;updatedata(false);/把字符串变量m_strresult
37、传给编辑框/通过这个函数,实现把字符串中的数字和运算符读取出来,并分别储存在2 个数组里void cmydlg:getstr(cstring str)int i=0,z=0;double rate=10.0,itemp=0.0;for(i=0;i20;i+)ai=1000000.0;for(i=0;i10;i+)bi= ;i=0;for(;istr.getlength();i+)/对数组a20 初始化/对数组b10 初始化/把 0 赋给 iif(rate=10.0)/整数部分itemp=itemp*rate+(str.getat(i)-0); /获得整数else/小数部分itemp=itemp
38、+rate*(str.getat(i)-0); /获得小数rate=rate/10;else if(str.getat(i)=.) rate=0.1;else if(str.getat(i)=+)az=itemp;itemp=0;/ 每次让 rate 小 10 倍/如果 str.getat(i) 是小数点/让rate=0.1,开始计算小数部分/如果 str.getat(i) 是加号/把 itemp 的值放入双精度数组 a 中,并把 itemp 的值改为 0z+;bz=+;z+;/让 z 自加一次/把加号放入字符数组b 中/让 z 自加一次rate=10.0;/把10赋给rate,确保读取下个数
39、字时,先计算整数部分else if(str.getat(i)=-)如果 str.getat(i)是减号az=itemp;itemp=0;/把itemp的值放入双精度数组a中,并把itemp的值改为0z+;/ 让 z 自加一次bz=-;/把减号放入字符数组 b 中z+;/让 z 自加一次rate=10.0;/把10赋给rate,确保读取下个数字时,先计算整数部分else if(str.getat(i)=*)如果 str.getat(i)是乘号az=itemp;itemp=0;/把itemp的值放入双精度数组a中,并把itemp的值改为0z+;/让 z 自加一次bz=*;/把减号放入字符数组b 中
40、z+;/让 z 自加一次rate=10.0;/把10赋给rate,确保读取下个数字时,先计算整数部分else if(str.getat(i)=7)如果 str.getat(i)是除号az=itemp;itemp=0;/把itemp的值放入双精度数组a中,并把itemp的值改为0z+;/让 z 自加一次bz=/;/把除号放入字符数组b 中z+;/让 z 自加一次rate=10.0;/把10赋给rate,确保读取下个数字时,先计算整数部分az=itemp;/把最后一个整数itemp 的值放入双精度数组a 中s=z;/把z的值赋给变量s,用来控制计算结果的循环中的条件/这个函数结束后编辑框的表达式被
41、分成了数字和运算符2部分, 数字保存在a0,a2,a4.中,运算符保存在b1,b3. 中void cmydlg:getresult()int i=0,x=0,y=1,t,z=1;/这个循环的目的是把所有除法运算都改为乘法计算for(i=0;i=s;i+)if(bi=/)ai+1=1/ai+1;bi=*;/这个循环可以对所有乘法进行计算for(i=0;i=s;i+)if(bi=*)/当循环遇到除号时/把 ai+1 的值改为 1/ai+1/把 bi 的值改为乘号/当循环遇到乘号时/如果i-t=2(再上次循环中,t被赋值成了 i,这次2个值只相差2,说明表达式的情况是连续乘法 ,比如 2*3*4)
42、以 2*3*4 为例, 在这个条件之前, 函数已经进行了 2*3 的运算, 其计算结果保存在原来的 2 中,把 2 的值覆盖了,这个条件的作用是让2*3 的结果再和4 相乘,结果保存在原来的 2 中if(i-t=2)at-z=at-z*ai+1;/进行乘法运算,把结果保存在前面的数组元素中z=z+2;/这里引进变量z ,可以解决很多数连续相乘的问题,比如2*2*2*2*2*2ai-1=ai-1*ai+1;/碰到乘号后把乘号前后2 个数字相乘,结果保存在前面的数组元素ai+1=1000000.0;/对乘号后面的数字初始化为0.0bi= ;/对乘号初始化为空格/2 数相乘后把乘号及其后面的数字初始
43、化了, 如果是 2*3*4 的情况, 将会无法计算*4 , 所以要用开始的条件语句来解决t=i;/把 i 的值赋给 t/这个循环的目的是对数组a 和 b 进行整理,因为已经进行了乘法和除法运算,进行运算的时候, 把一些数字和运算符初始化了这个函数的作用可以使中间一些初始化了的数字和符号被后面的数字和符号代替,让数组可以重新排列for(i=0;i=s;i+)if(ai!=1000000.0)/如果ai 的值不为 0.0ax=ai;/把 ai 的值赋给 axx+=2;/x 自加 2if(bi!= )/如果bi 的值不为空格by=bi;/把 bi 的值赋给 byy=y+2;/y 自加 2/这个循环是
44、进行最后的加减法运算for(i=0;i1)/ 当 m_strresult 不等于0 且 m_strresult 长度大于 1 时m_strresult=m_strresult.left(m_strresult.getlength()-1);/使m_strresult长度减少1,去掉最右边的字符elserestarted=true;/把bool变量restarted的值改为true,再次输入数字时,覆盖掉现在的 m_strresult m_strresult=0;/把字符串0赋给 m_strresultupdatedata(false); /把字符串变量m_strresult传给编辑框void
45、cmydlg:onsin()updatedata(true) ;/把编辑框显示的字符串传给相应的变量m_strresultdouble result/定义一个双精度型变量result,用来获取进行了 sin运算的结果result=sin(getastr(m_strresult);/先调用 getastr 函数用来把字符串变为数字,再进行sin 运算,把结果赋给resultm_strresult.format(%1f,result);/调用format函数,把result转化为字符串并赋给 m_strresultoperatorpressed=true;把bool变量operatorpresse
46、d勺值改为true,再次输入数字时,覆盖掉现在的m_strresultupdatedata(false); 把字符串变量 m_strresult传给编辑框void cmydlg:oncos()updatedata(true) ;/把编辑框显示的字符串传给相应的变量m_strresultdouble result/定义一个双精度型变量result,用来获取进行了 cos运算的结果result=cos(getastr(m_strresult);/先调用getastr函数用来把字符串变为数字,再进行 cos运算,把结果赋给resultm_strresult.format(%1f,result);/调
47、用format函数,把result转化为字符串并赋给 m_strresultoperatorpressed=true;把bool变量operatorpressed勺值改为true,再次输入数字时,覆盖掉现在的 m_strresult updatedata(false),把字符串变量m_strresult传给编辑框void cmydlg:ontan()updatedata(true); /把编辑框显示的字符串传给相应的变量m_strresultdouble result/定义一个双精度型变量result,用来获取进行了 tan运算的结果result=tan(getastr(m_strresult
48、);/先调用getastr 函数用来把字符串变为数字,再进行tan 运算,把结果赋给resultm_strresult.format(%1f,result);/调用format函数,把result转化为字符串并赋给 m_strresultoperatorpressed=true;把bool变量operatorpressed勺值改为true,再次输入数字时,覆盖掉现在的 m_strresult updatedata(false); 把字符串变量 m_strresult传给编辑框void cmydlg:oncot()updatedata(true); /把编辑框显示的字符串传给相应的变量m_strresultdouble result/定义一个双精度型变量result,用来获取进行了 cot运算的结果result=1/tan(getastr(m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025商业贷款合同范本示例
- 与车商签合同范例
- 供货合同标准文本(二)
- 中国钢结构施工合同范例
- 光伏用户合同样本
- 几人共同购房合同样本
- 免烧砖厂合同样本
- 农村买房协议合同标准文本
- 个人职业发展规划计划
- 冠名商赞助合同标准文本
- 2024年甘肃省定西市中考地理试卷(含答案解析)
- 高速公路路网数字底座研究与建设
- 药学专业岗位分析报告范文
- 七年级道法上册 第一单元 少年有梦 单元测试卷(人教版 2024年秋)
- 一年级古诗带拼音
- DL-T586-2008电力设备监造技术导则
- 河南省南阳市唐河县2023-2024学年八年级下学期期末数学试题
- 虚拟现实设施维护管理规程
- 2023-2024学年浙江省杭州市学军中学高一(下)期中数学试卷(含解析)
- 2024年山东省枣庄市薛城区中考二模数学试题
- 医院检验科实验室生物安全程序文件SOP
评论
0/150
提交评论