MFC计算器课程设计

MFC计算器课程设计

ID:39466186

大小:99.00 KB

页数:7页

时间:2019-07-04

MFC计算器课程设计_第1页
MFC计算器课程设计_第2页
MFC计算器课程设计_第3页
MFC计算器课程设计_第4页
MFC计算器课程设计_第5页
资源描述:

《MFC计算器课程设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、计算器实验报告2013年6月11日星期二系统设计要求用MFC制作一个计算器,它能在实数范围内进行加、减、乘、除运算。在运算时要考虑运算符的优先顺序。要求能显示输入的算式和输出的结果。设计思路充分利用CString的功能:1.读入表达式在该过程中,只需要考虑会输入哪些算式,不需要考虑算式的合理性。2.解析表达式2.1将CString类的表达式转化为易操作的char类字符数组。2.2在运算时,要区分运算符和数字,将它们分别存到两个数组中,由于加减乘除运算符都是二元的,所以数字的个数一定比运算符的个数多一个。3.运算3.1在运算时,第i个运算符要做的是将第

2、i个数字与第i+1个数字相运算,运算完后将值赋给第i个数字,而i后面的每一个数字都可以往前面挪一个;运算符自运算过的运算符后的每一个都可以往前挪一个。形象地表示为:a[i]=a[i]*a[i+1](红色括号内为变化后的值)第i个数字Float(a)12345(0)Char(b)+-*/(‘0’)a[i]=a[i]/a[i+1]第i个运算符得到结果:Float(a)12125(0)Char(b)+-/(‘0’)在进行一次运算后,若后面补过来的运算符是与它同等级的,则此时的i依旧没变,所以再对该i进行运算。3.2运算符的优先级。乘除的优先级大于加减,所以

3、先对乘除进行以上的计算,同样同等级的i不变,若变化后的b[i]不为乘除,则i++,看下一个运算符。4.附加功能4.1括号括号采用递归运算。运算的函数得到一个CString类型的形参,返回一个float型的值。要处理括号,则截取括号里的字符串,递归调用运算的函数,将返回的值存到float型的数组中去。4.2三角函数,指数函数,对数函数采用和括号相类似的方式,在解析时,若读到有三角函数,则递归计算三角函数括号内的式子,将返回的值用中的函数计算。4.3十进制与十六进制的转换将十六进制转化为十进制,只要从左向右,第i个数字乘以16的i-1次幂即

4、可;将十进制转化为十六进制,则要将对16取模,再将得到的char数组倒置一下。系统功能模块图计算器系统加减乘除进制间转换三角函数指数函数对数函数系统流程图Input转化为十进制转化为十六进制ProcessingCosSinTanExpLn()Output类的层次图MemberFunctionClickFunctionOnNum1~OnNum2;OnPoint;OnPlus~OnDivide;OnLeft;OnRight;OnCos~OnTan;OnA~OnF;OnExp;OnLn;OnClear;OnDec;OnHex;OnEqualProcessi

5、ng&CalculatingProcessingCmathcos;tan;sin;exp;logMemberVariablesm_strInput输入的表达式m_strOutput输出的结果ClassCCalculatorDlgUML关键程序代码1.显示输入UpdateData(true);m_strInput+="0";UpdateData(false);2.将CString转化为字符数组constintlen=m_strInput.GetLength();charm[100];memcpy(m,m_strInput,len);3.将存在字符数组的

6、数字转为float型数字存在float型的数组里for(i=0;i='0'&&m[j]<='9'){while(m[j]>='0'&&m[j]<='9'){num[countNum]=num[countNum]*10+(m[j]-'0');j++;c++;}//没有小数点的读法if(m[j]=='.'){c++;floatt=static_cast(0.1);j++;while((m[j]-'0'>=0)&&(m[j]-'0'<=9)){num[countNum]+=t*static_

7、cast(m[j]-'0');t*=static_cast(0.1);j++;c++;}}//有小数点countNum++;}//取数字4.取运算符if(m[i]=='+'

8、

9、m[i]=='-'

10、

11、m[i]=='*'

12、

13、m[i]=='/'){op[countOperator]=m[i];c++;countOperator++;}//取运算符5.运算(以乘法为例)for(i=0;i

14、

15、op[i]=='/'){if(op[i]=='*'){count1+

16、+;num[i]*=num[i+1];op[i]=op[i+1];intj;for(j=i+1;j

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。