MFC计算器报告(源码).docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MFC计算器报告(源码).doc

实习报告 题目: 计算器 系 别 计算机科学与技术系 专业方向 信息安全 班 级 0422 学生学号 042202 学生姓名 靳向维 导师姓名 章小莉 起止时间 2006 年 7 月 至 2006 年 9 月 ①需求分析: 使用面向对象设计环境,仿制电子计算器,使其可以实现整数、实数、复数的加、减、乘、除等运算。请参考Windows操作系统中的科学型计算器。 与一般计算器不同之处在于要求实现复数的运算。这部分也是难点,关键在于:做复数的运算时,带虚部的运算数中的“+”,“-” 号与运算符“+”,“-”难以区分,运算结果中也会有此情况。 设计的解决办法是:在运算界面中添加两个按钮,分别表示复数虚部前的“+”,“-”。从而在程序中和运算符“+”,“-”区分开来。 而实数运算的难点和关键在于:浮点数(术语使用不准确,应该就是实数)的运算。解决时只要在接收运算数后,运算之前,判断好小数点的位置,将接收的字符型运算数转化为数值,再做运算即可。 关键字:面向对象语言,电子计算器界面设计,复数运算。 (1).程序中,用字符串类型变量来接收和输出数据,计算过程中转换为数值进行计算。 数值类型: 复数 运算类型:+、-、*、/ (2).初步测试数据类型: 实数: 正负整数运算的加、减、乘、除;浮点数的加、减、乘、除; 复数:带虚部的复数的加、减、乘法运算。 都只进行了单次使用运算符的测试 ②程序设计 简要流程图: 开始: calresult( )  函数调用   calresult()函数中将字符串转的实部转化为数值的流程图: 当遇到c1=’+’或’-‘号时跳出循环执行 : 把虚部字符转换为数值的并作运算的函数流程图, stradd()函数流程图: show()函数流程图: 点击clear键的函数: 点击+I和I键(添加复数的虚部)的函数: ③调式分析 1. 问题:0作为第一个操作数无法运算 解决:由于当: m_show==0时,即对话框中,可能是没有输入的数,也可能是输入了一个“0”,因此在作输入数据时要判断=0的情况也要判断!=0的情况。 2. 循环运算问题: 实际上每一次点击运算符后都可以把state置为2的! 即把运算数存入m_num2变量中! 把m_num1初始化为0;或把上一次运算的结果赋给它! 4. 作负数运算时,运算结果中虚部为+i或-i时,程序会不显示虚部... 出现问题及解决: 测试数据:1+i + 2+i 结果:= 3 1+2i + 1+2i 结果:=2+4i没看见这种提示信息 问题出在:在区分实部和虚部的字符串转化时,当遇到输入的运算字符串中的第i位为“+”或“-”时,立即把i赋值给j,即认为该运算数为复数有虚部,之后完成字符和数值转化。而在转化过程中一旦遇到i立即停止,而当输入数种虚部为1或-1时(如1+i,1-i...)时存放虚部的变量:m_num1(2)b会被赋为0由此出错。 解决方法: 添加判断语句:if(c==inum1b==0.0)num1b=1.0; //也可以判断i=1否,为1则说明+-号后面既是i。 5.作浮点数运算 小数部分超过两位运算出错:1.11+2.22=3.6…… 原因:原始的,小数部分由字符转化时算法与整数部分的相似: 修改为:if(c1==.){dot=true;c=i;continue;}//i用于记录小数点的位置 注:转换虚部时应该用j!!  if(dot){c1=float(c1-0); d=c; while(i-d) {c1=c1/10; d++; }d=c; num1a=c1+num1a;} 程序不足: 1.在接收字符串变量时,使用的是浮点型变量,由于数字,小数点,字母i,运算符.的ASC码值都在浮点数大小范围内,因此尚可以使用浮点型变量来接收。但数据类型不同,有点牵强,导致编译时总是会有警告。 2.未能实现一般计算器中的连续运算功能,例如:累加,连乘。。。 改进思想: 循环运算问题: 实际上每一次点击运算符后都可以把变量state由1置为2的! 即把新的运算数存入m_num2变量中! 开始时把m_num1初始化为0;运算后把上一次运算的结果赋给它! 3.复数运算 在复数虚部之前输入“+”、“-”的方法可以用运算符重构的

文档评论(0)

蝶恋花 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档