mfc编写计算器程序2_第1页
mfc编写计算器程序2_第2页
mfc编写计算器程序2_第3页
mfc编写计算器程序2_第4页
mfc编写计算器程序2_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算器的介绍(1)在运行程序后,系统会弹出一个基于对话框的计算器界面,如下图所示:图 1.1 计算器界面 (2)在计算器程序中,主要通过一个编辑框来获取表达式和显示计算结果,表达式可以通过键盘和单击按钮 2 种方式输入,输入后的结果如下图所示: 图 1.2 输入表达式后的界面(3)在输入完表达式后,单击“=”后,开始对表达式进行计算,计算完成后,在编辑框中显示计算的结果。图 1.3 计算后的结果(4)计算器可以实现十进制转化为十六进制或二进制,其实现的操作为先输入一个十进制整数,再单击按钮“转化为二进制”或“转化为十六进制。图 1.4 输入一个十进制数 100图 1.5 100转化为二进制后的结果图 1.6 100转化为十六进制后的结果(4)另外,计算器还可以实现一些简单的函数运算,实现的操作和十六进制/二进制转化类似,是先输入一个数字,在单击想要进行的函数的按钮,单击后就会在编辑框中显示运算的结果。 1 算法的实现2.1 把字符串转化为数字和运算符的算法(1)如果字符串中只有数字。这个情况用来实现一些简单函数的运算。在进行简单函数的运算时,都是先输入一个数字,再单击要进行运算的按钮,然后编辑框显示运算的结果。程序用了一个函数 double GetaStr(CString str)来实现这个功能,该函数以编辑框变量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;double rate=10.0,itemp=0.0;for(;i=0;i-) str.Format(“%d“,ni); /用 Format 函数把 ni的值转化为字符串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); /把编辑框显示的字符串传给相应的变量 m_strResultm=(int)GetaStr(m_strResult); /调用 GetaStr(m_strResult),用来获取 m_strResult 中的数字f(m); /调用 f(m)函数,把十进制转化为十六进制 m_strResult=str7; /把 str7 的值赋给 m_strResultstr7=“; /把 str7 初始化OperatorPressed=true; /把 bool 变量 OperatorPressed 的值改为 trueUpdateData(FALSE); /把字符串变量 m_strResult 传给编辑框void CMyDlg:f(int n)CString str1;int x;if(n/16)!=0) /如果 n 大于等于 16f(n/16); /把 n 除以 16,进行递归调用x=n%16; /把 n 除以 16 的余数赋给 xif(x=0/使 m_strResult 长度减少 1,去掉最右边的字符elseRestarted=true;/把 bool 变量 Restarted 的值改为 true,再次输入数字时,覆盖掉现在的 m_strResultm_strResult=“0“;/把字符串“0“赋给 m_strResultUpdateData(FALSE);/把字符串变量 m_strResult 传给编辑框void 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 变量 OperatorPressed 的值改为 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);/调用 Format 函数,把 result 转化为字符串并赋给 m_strResultOperatorPressed=true;/把 bool 变量 OperatorPressed 的值改为 true,再次输入数字时,覆盖掉现在的 m_strResultUpdateData(FALSE);/把字符串变量 m_strResult 传给编辑框void CMyDlg:OnTan() UpdateData(TRUE);/把编辑框显示的字符串传给相应的变量 m_strResultdouble result;/定义一个双精度型变量 result,用来获取进行了 tan 运算的结果result=tan(GetaStr(m_strResult);/先调用 GetaStr 函数用来把字符串变为数字,再进行 tan 运算,把结果赋给 resultm_strResult.Format(“%1f“,result);/调用 Format 函数,把 result 转化为字符串并赋给 m_strResultOperatorPressed=true;/把 bool 变量 OperatorPressed 的值改为 true,再次输入数字时,覆盖掉现在的 m_strResultUpdateData(FALSE);/把字符串变量 m_strResult 传给编辑框void CMyDlg:OnCot() UpdateData(TRUE);/把编辑框显示的字符串传给相应的变量 m_strResultdouble result;/定义一个双精度型变量 result,用来获取进行了 cot 运算的结果result=1/tan(GetaStr(m_strResult);/先调用 GetaStr 函数用来把字符串变为数字,再进行 cot 运算,把结果赋给 resultm_strResult.Format(“%1f“,result);/调用 Format 函数,把 result 转化为字符串并赋给 m_strResultOperatorPressed=true;/把 bool 变量 OperatorPressed 的值改为 true,再次输入数字时,覆盖掉现在的 m_strResultUpdateData(FALSE);/把字符串变量 m_strResult 传给编辑框void CMyDlg:OnLn() UpdateData(TRUE);/把编辑框显示的字符串传给相应的变量 m_strResultdouble result;/定义一个双精度型变量 result,用来获取进行了 ln 运算的结果result=log(GetaStr(m_strResult);/先调用 GetaStr 函数用来把字符串变为数字,再进行 ln 运算,把结果赋给 resultm_strResul

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论