简单计算器c++课程设计讲解 下载本文

13

4结论与心得体会

经过多次调试,设计的计算器可以实现本次要求的所有功能。

此次VC++课程设计,在同学的帮助下,顺利完成,收获也很大。本学期我们开设了《面向对象程序设计与VC++实践》这门课,其中MFC部分皆是需要实践的,所以,此次课程设计是很及时、很有必要的。这样,不仅能加深我们对MFC程序设计的掌握,而且,还能让我们真正做到学以致用。

课程设计刚开始的时候,觉着比较轻松,毕竟上课时做过简单计算器,觉着这次的题目也不会太难。后来,通过老师的讲解,发现这次课程设计与平时做的计算器有很多不同,不仅需要考虑运算的优先级,还需要实现连续运算,而且还有单目运算与双目运算的不同等一系列新的问题。但是,真正开始做的时候,通过查找资料和与同学的交流,渐渐有了头绪。在完成过程中,仍然避免不了会遇到一些问题,这时,不仅需要思考,还需要查阅相关资料来解决。

当然,做课程设计,基本知识是必备的。只有具有了一定的基础知识,才能在课程设计过程中高质高效完成。同时,也不能请示任何一道题,每一道题都有它自己的难点。

这次课程设计让我学到了很多,不仅巩固了先前学的MFC程序设计知识,而且也培养了我的实践能力,将理论知识与实践联系起来,更令我的创造性思维得到了拓展。希望以后类似这样的课程设计、这样的实践机会能多一些。

5思考题

1、程序中如何实现小数的显示与运算?

答:编辑框所关联的变量为Cstring类的m_str,当输入小数点时,直接将字符’.’加在之前已输入字符后面即可。运算时,通过BOOL型变量pass2判断是否有小数点,有,则为0;无,则为1。当有小数点时,在把已输入的字符串转化为相应数值时,乘以的比率rate为0.1,且每乘一次,都使rate值变为原来rate值的十分之一,之后由于头文件中加了“math.h”,故,再通过进行相关

13 1

14

数学运算即可得到结果。

2、描述等号对应的消息处理函数中需要处理的问题及相应的实现代码? 答:等号对应的消息处理函数中需要实现双目运算符的功能和连续运算,同时还要解决运算优先级的问题,另外还需要有相应的错误提示。 实现代码:

void CLuxiaoyingDlg::OnDengyuButton20() {

// TODO: Add your control notification handler code here int i, j, z, s, x=0, y=1, t, m=1; char b[10];

double rate=10.0, itemp=0.0,a[20], l; for(i=0;i<20;i++)

a[i]=100000000.0;

for(i=0;i<10;i++)

b[i]=' ';

//以下为双目运算; z=0;

for(i=0;i

//长度

{

if(isdigit(m_str.GetAt(i)))//isdigit 若参数c为阿拉伯数字,则

//返回TRUE,否则返回NULL(0)。

//m_str.GetAt(i)取出字符串 中的第i个字符

//(编号从 0起)

{

if(rate==10.0) {

itemp=itemp*rate+(m_str.GetAt(i)-'0');

14 1

15

}

if(i==m_str.GetLength()-1)

a[z]=itemp;

else { itemp=itemp+rate*(m_str.GetAt(i)-'0'); rate=rate/10;

if(i==m_str.GetLength()-1)

a[z]=itemp;

}

}

else if(m_str.GetAt(i)=='.')

rate=0.1;

else if(m_str.GetAt(i)=='+') { a[z]=itemp;itemp=0; z++; b[z]='+'; z++; rate=10.0;

}

else if(m_str.GetAt(i)=='-') { a[z]=itemp;itemp=0; z++; b[z]='-'; z++; rate=10.0;

}

15 1

16

}

else if(m_str.GetAt(i)=='*') { }

else if(m_str.GetAt(i)=='/') { }

a[z]=itemp;itemp=0; z++; b[z]='/'; z++; rate=10.0;

a[z]=itemp;itemp=0; z++; b[z]='*'; z++; rate=10.0;

s=z;

for(j=0;j<=s;j++)//除法转换成乘法 {

if(b[j]=='/') {

if(a[j+1]==0)

MessageBox(\不能作为除数!\

else {

a[j+1]=1/a[j+1];

16 1