您的当前位置:首页正文

计算器

来源:华拓网


计算机实习报告

题目:设计计算器 指导教师:王艳红 系别:电子信息工程系

班级:0411班 姓名:孙小斐 学号:041121

一:题目要求

用C语言编写一个图形界面计算器程序,可以实现+、-、*、/等四则运算。该程序可以判断输入是否错误,在输入错误时出现文字提醒。 二:需求分析

题目要求中的主要内容为编写计算机程序的计算内核,其次是图形界面问题。因此,我首先进行了数学计算在程序上如何实现的思考,这其中有两方面的问题要解决::

1、如何方便的输入需要计算的数据(用两个变量A、B代替)以及运算符号; 2、输入数据如何判断是否出错以及报错能力。

以上两点就成为本次实习我要解决的最基本,也是最重点的问题。 三:程序设计

整个程序设计围绕需求中所述进行编辑。

由于C++在面向对象操作上的优势,可以很方便的将各种运算进行归类,从而简化程序的编写,因此我考虑将所有的运算进行归类处理,定义为:

class Calculator

在类Calculator中,确定了数据成员以及它们使用的函数。(这样,需要什么样的计算,只要调用了#include,就可以非常方便的直接加入该运算对应的函数,非常方便,在该程序中我共加入13种常用运算函数。)

由于数学计算器中就只是用到了两个计算数据和不同的计算规则,因此调用了+、-、*、/、sin、cos等等的计算函数进行归类,以实现实际上的计算。构成公用的数据和成员函数,定义为:

public:(公共函数,负责输入数据及计算)

另外,为了减少出错判断所需要的程序量,采用了先定义计算类型,然后分别输入数据的方式,就是将计算符,两个计算数分别输入到计算机,这样就避免了连续输入计算式带来的复杂判断,节省了代码量,这里采用的是数字选择方式:

cout<<\"Welcome to use the calculator!please select.\"<cout<<\"1:\\'+\\' 2:\\'-\\' 3:\\'*\\' 4:\\'/\\' 5:\\'sin\\' 6:\\'cos\\' 7:\\'tan\\'\"<cout<<\"Please select:(0--exit)\"; cin>>sel;

switch (sel) {

case 0: break;

case 1: cal.newab();

cout<<\"The result is:\"<case 13: cal.newa();

cout<<\"The result is:\"<default: cout<<\"Your selection is ERROR! Select again!\"<}while(sel!=0);

以上代码为首先选择运算符而设计,之后提示输入两个数据(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语句:(开方问题) double Calculator::Sqrt(double x) {

if(x<0)

{cout<<\"Error! The program will be terminated!\"<另一方面在编写图形界面上面遇到较大问题。由于算法在屏幕上的连续循环显示,没有能够用C写出可用的图形界面,这方面的知识没能够好好的学习明白,阅读的参考书也没完全搞清楚图形界面的操控,没能够完成。而后期也尝试了MFC窗口模式,太过仓促每能最后调试成功。

(二)时间和空间复杂度

时间复杂度:与所用运算相关。 空间复杂度:使用3个基本变量

(三)算法改进思想

在算数算法中没想到更好的办法,在图形界面上尝试了MFC,但最后还是没能结合的好,报错比较多,没有完成这方面的内容。最后完全使用MFC也做了下计算器的编辑,直接用代码设置不同按键的操作,同样比较方便,不过在输入数据的排错能力上有欠缺,只是尝试了一下,没能更好的深入实验。

五:使用说明及测试结果

使用时,请双击Debug文件夹下的C.exe文件,进入如下界面:

根据提示,以数字对应你所需要的运算进行选择。比如想计算23+12这个算式,则首先选择计算符“+”,方法是输入“1”后回车,如下图:

这时提示输入第一个运算数据,键入23后回车,如下图:

之后输入第二个数据12后回车,如下图:

这时就可以显示答案为35,同时开始下一计算。

如果需要退出,可以在Please select:<0--exit>_这里输入“0”回车,即可退出该程序,如下图:

六:源程序代码

#include #include #include class Calculator {

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!\"<double Calculator::Sin(Calculator &A) {

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!\"<void main() {

int sel;

Calculator cal;

cout<<\"Welcome to use the calculator!please select.\"<cout<<\"1:\\'+\\' 2:\\'-\\' 3:\\'*\\' 4:\\'/\\' 5:\\'sin\\' 6:\\'cos\\' 7:\\'tan\\'\"<cout<<\"Please select:(0--exit)\"; cin>>sel; switch (sel) {

case 0: break;

case 1: cal.newab();

cout<<\"The result is:\"<cout<<\"The result is:\"<cout<<\"The result is:\"<cout<<\"The result is:\"<cout<<\"The result is:\"<cout<<\"The result is:\"<cout<<\"The result is:\"<cout<<\"The result is:\"<cout<<\"The result is:\"<break; case 10: cal.newa();

cout<<\"The result is:\"<cout<<\"The result is:\"<cout<<\"The result is:\"<cout<<\"The result is:\"<default: cout<<\"Your selection is ERROR! Select again!\"<}while(sel!=0); }

七:实习体会

在本次实习中我的题目是用C++语言编出程序实现计算器。

整个程序的理论比较简单,看过之后就理解的差不多了。在编写程序的时候也很顺利,开等到上机调试的时候,也发现由于写程序时的粗心大意,使程序运行错误重重,经过调试逐一改正。

这次实习虽然图形界面并没有用C最后写出来,但也了解了不少在C环境下的编程技术,并且还初步了解了MFC等设计方法,收获非常丰富。

此次实习使我学到了许多有用的东西。比如,要想做一个好的程序,就要全面考虑它有可能出现的所有问题,这就要求必须有严密的逻辑思维能力。还有输入程序时必须细心,来不得半点马虎。也使我知道了理论与实际的区别和联系,懂得了实践出真知的道理。

本次实习也培养了我独立解决问题的信心和能力,相信会给我以后的学习带来很大帮助。

在此也要感谢老师的指导和帮助! 八:参考书目

《C程序设计》

《TURBOC参考手册》 《C语言实用界面技术》

《C和C++图形程序设计基础》

因篇幅问题不能全部显示,请点此查看更多更全内容