计算器
计算机实习报告
题目:设计计算器 指导教师:王艳红 系别:电子信息工程系
班级:0411班 姓名:孙小斐 学号:041121
一:题目要求
用C语言编写一个图形界面计算器程序,可以实现+、-、*、/等四则运算。该程序可以判断输入是否错误,在输入错误时出现文字提醒。 二:需求分析
题目要求中的主要内容为编写计算机程序的计算内核,其次是图形界面问题。因此,我首先进行了数学计算在程序上如何实现的思考,这其中有两方面的问题要解决::
1、如何方便的输入需要计算的数据(用两个变量A、B代替)以及运算符号; 2、输入数据如何判断是否出错以及报错能力。
以上两点就成为本次实习我要解决的最基本,也是最重点的问题。 三:程序设计
整个程序设计围绕需求中所述进行编辑。
由于C++在面向对象操作上的优势,可以很方便的将各种运算进行归类,从而简化程序的编写,因此我考虑将所有的运算进行归类处理,定义为:
class Calculator
在类Calculator中,确定了数据成员以及它们使用的函数。(这样,需要什么样的计算,只要调用了#include 由于数学计算器中就只是用到了两个计算数据和不同的计算规则,因此调用了+、-、*、/、sin、cos等等的计算函数进行归类,以实现实际上的计算。构成公用的数据和成员函数,定义为: public:(公共函数,负责输入数据及计算) 另外,为了减少出错判断所需要的程序量,采用了先定义计算类型,然后分别输入数据的方式,就是将计算符,两个计算数分别输入到计算机,这样就避免了连续输入计算式带来的复杂判断,节省了代码量,这里采用的是数字选择方式: cout<<\"Welcome to use the calculator!please select.\"< switch (sel) { case 0: break; case 1: cal.newab(); cout<<\"The result is:\"< cout<<\"The result is:\"< 以上代码为首先选择运算符而设计,之后提示输入两个数据(A、B)进行计算得到结果结束一个计算过程。并且考虑到计算可能出现的连续应用选择了手动关闭计算器,否则自动循环至下一轮计算的方式。 (一)说明程序中用到的所有数据类型的定义 程序中数据的定义类型如下: double ***; 既程序中所有数据均使用DOUBLE类型进行处理以满足用户对计算器运算范围及精度的需求。 (二)绘制主程序的流程图,以及各子程序模块间的调用关系; 开始 定义相关变量 调用类class Calculator 显示提示信息,要求用户进行运算选择 在CLASS中调用相应函数计算 显示最后结果 结束一组计算 主程序MAIN中调用了“CLASS Calculator”来进行数据的输入和运算,没有过多复杂的调用,比较清晰。 输入两个计算数据A,B 四:调式分析 (一)在调式过程中遇到的问题以及解决方法 在调试过程中进行的还是比较顺利。在认真学习了下C++相关知识后,编写程序变得 比较简单。整个过程中基本上只是出现了一些语法错误,另外在开始的原始程序中自己忽视了除法中除数不为0,调试出现问题,及时补充了如下代码中的IF语句: double Calculator::Div(Calculator &A) { if(A.b==0) {cout<<\"Error! The program will be terminated!\"< if(x<0) {cout<<\"Error! The program will be terminated!\"< (二)时间和空间复杂度 时间复杂度:与所用运算相关。 空间复杂度:使用3个基本变量 (三)算法改进思想 在算数算法中没想到更好的办法,在图形界面上尝试了MFC,但最后还是没能结合的好,报错比较多,没有完成这方面的内容。最后完全使用MFC也做了下计算器的编辑,直接用代码设置不同按键的操作,同样比较方便,不过在输入数据的排错能力上有欠缺,只是尝试了一下,没能更好的深入实验。 五:使用说明及测试结果 使用时,请双击Debug文件夹下的C.exe文件,进入如下界面: 根据提示,以数字对应你所需要的运算进行选择。比如想计算23+12这个算式,则首先选择计算符“+”,方法是输入“1”后回车,如下图: 这时提示输入第一个运算数据,键入23后回车,如下图: 之后输入第二个数据12后回车,如下图: 这时就可以显示答案为35,同时开始下一计算。 如果需要退出,可以在Please select:<0--exit>_这里输入“0”回车,即可退出该程序,如下图: 六:源程序代码 #include double a,b; public: Calculator(){a=0;b=0;}; //could be omitted void newa() { double num; cout<<\"Input the number:\"; cin>>num; a=num; } void newab() { double num1,num2; cout<<\"Input the numbers.the first number:\"; cin>>num1; cout<<\"Input the senond number:\"; cin>>num2; a=num1; b=num2; } double Geta(){return a;} double Getb(){return b;} double Add(Calculator &A); double Sub(Calculator *A); double Mul(Calculator &A); double Div(Calculator &A); double Sin(Calculator &A); double Cos(Calculator &A); double Tan(Calculator &A); double Exp(Calculator &A); double Fabs(Calculator &A); double LogE(Calculator &A); double Log10(Calculator &A); double Pow(double x,double y); double Sqrt(double x); }; double Calculator::Add(Calculator &A) { return A.a+A.b; } double Calculator::Sub(Calculator *A) { return A->a-A->b; } double Calculator::Mul(Calculator &A) { return A.a*A.b; } double Calculator::Div(Calculator &A) { if(A.b==0) {cout<<\"Error! The program will be terminated!\"< return sin(A.a); } double Calculator::Cos(Calculator &A) { return cos(A.a); } double Calculator::Tan(Calculator &A) { return tan(A.a); } double Calculator::Exp(Calculator &A) { return exp(A.a); } double Calculator::Fabs(Calculator &A) { return fabs(A.a); } double Calculator::LogE(Calculator &A) { return log(A.a); } double Calculator::Log10(Calculator &A) { return log10(A.a); } double Calculator::Pow(double x,double y) { return pow(x,y); } double Calculator::Sqrt(double x) { if(x<0) {cout<<\"Error! The program will be terminated!\"< int sel; Calculator cal; cout<<\"Welcome to use the calculator!please select.\"< case 0: break; case 1: cal.newab(); cout<<\"The result is:\"< cout<<\"The result is:\"< 七:实习体会 在本次实习中我的题目是用C++语言编出程序实现计算器。 整个程序的理论比较简单,看过之后就理解的差不多了。在编写程序的时候也很顺利,开等到上机调试的时候,也发现由于写程序时的粗心大意,使程序运行错误重重,经过调试逐一改正。 这次实习虽然图形界面并没有用C最后写出来,但也了解了不少在C环境下的编程技术,并且还初步了解了MFC等设计方法,收获非常丰富。 此次实习使我学到了许多有用的东西。比如,要想做一个好的程序,就要全面考虑它有可能出现的所有问题,这就要求必须有严密的逻辑思维能力。还有输入程序时必须细心,来不得半点马虎。也使我知道了理论与实际的区别和联系,懂得了实践出真知的道理。 本次实习也培养了我独立解决问题的信心和能力,相信会给我以后的学习带来很大帮助。 在此也要感谢老师的指导和帮助! 八:参考书目 《C程序设计》 《TURBOC参考手册》 《C语言实用界面技术》 《C和C++图形程序设计基础》 因篇幅问题不能全部显示,请点此查看更多更全内容