编写计算器程序
- 格式:docx
- 大小:78.35 KB
- 文档页数:32
计算器操作与编程教程计算器是一个常见的工具,用于进行数学运算。
它可以帮助我们进行简单到复杂的数学计算,提高我们的工作效率。
在计算器操作与编程教程中,我们将介绍计算器的基本操作和如何进行编程。
首先,让我们从计算器的基本操作开始。
计算器通常具有数字键、运算符键和功能键。
数字键用于输入数字,运算符键用于进行加减乘除等运算,功能键用于进行特殊的计算操作,比如求平方根、求倒数等。
通过这些键,我们可以进行各种数学计算,例如加法、减法、乘法、除法等。
在操作计算器时,我们需要按照正确的顺序输入数字和运算符,以确保得到正确的结果。
除了基本操作,计算器还具有编程功能,可以编写程序来实现复杂的计算。
编程计算器可以帮助我们简化重复的计算过程,提高工作效率。
下面我们将介绍计算器编程的一般步骤:1. 选择计算器编程模式:首先,我们需要将计算器切换到编程模式。
不同的计算器可能有不同的编程模式,一般可以在计算器的设置菜单中找到编程模式选项。
2. 编写程序:在编程模式下,我们可以输入程序的指令,通常是一系列的数字和运算符。
编写程序时,我们需要考虑算法的逻辑,确保程序能够正确地实现我们的计算目的。
3. 运行程序:编写完成程序后,我们可以运行程序来进行计算。
计算器会按照程序的指令执行计算过程,最终得到计算结果。
4. 调试程序:在编程过程中,我们可能会出现程序错误,导致计算结果不正确。
这时,我们需要对程序进行调试,找出错误并进行修正,直到程序能够正确地计算出结果。
计算器编程可以用于各种数学计算,包括数值计算、统计计算、逻辑计算等。
通过编程,我们可以实现复杂的计算,提高计算器的灵活性和功能性。
总的来说,计算器操作与编程教程可以帮助我们更好地利用计算器进行数学计算。
通过掌握计算器的基本操作和编程技能,我们可以提高计算效率,简化计算过程,解决实际的计算问题。
希望以上内容能够帮助您更好地理解计算器的操作与编程,提升计算技能,提高工作效率。
如果您有任何疑问,欢迎随时向我们提问。
1.2计算器的介绍(1)在运行程序后,系统会弹出一个基于对话框的计算器界面,如下图所示:图1.1 计算器界面(2)在计算器程序中,主要通过一个编辑框来获取表达式和显示计算结果,表达式可以通过键盘和单击按钮2种方式输入,输入后的结果如下图所示:图1.2 输入表达式后的界面(3)在输入完表达式后,单击“=”后,开始对表达式进行计算,计算完成后,在编辑框中显示计算的结果。
图1.3 计算后的结果(4)计算器可以实现十进制转化为十六进制或二进制,其实现的操作为先输入一个十进制整数,再单击按钮“转化为二进制”或“转化为十六进制。
图1.4 输入一个十进制数100图1.5 100转化为二进制后的结果图1.6 100转化为十六进制后的结果(4)另外,计算器还可以实现一些简单的函数运算,实现的操作和十六进制/二进制转化类似,是先输入一个数字,在单击想要进行的函数的按钮,单击后就会在编辑框中显示运算的结果。
1算法的实现2.1把字符串转化为数字和运算符的算法(1)如果字符串中只有数字。
这个情况用来实现一些简单函数的运算。
在进行简单函数的运算时,都是先输入一个数字,再单击要进行运算的按钮,然后编辑框显示运算的结果。
程序用了一个函数double GetaStr(CString str)来实现这个功能,该函数以编辑框变量m_strResult为实参,再得到m_strResult的值后,调用GetAt函数,一个字符一个字符的读取,如果碰到整数,执行“itemp=itemp*rate+(str.GetAt(i)-'0');”,其中变量itemp初始值为0,变量rate初始值为10,如果碰到了小数点,改变rate的值,使其等于0.1,再向后继续读取,再碰到整数时执行“itemp=itemp+rate*(str.GetAt(i)-'0');rate=rate/10;”,函数的最后确定返回值为itemp。
简单计算器一、基本功能描绘二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算科学计算函数,包括( 反 ) 正弦、 ( 反) 余弦、 ( 反 ) 正切、 ( 反 ) 余切、开方、指数等函数运行以角度、弧度两种方式实现上述部分函数具备历史计算的记忆功能对不正确的表达式能指出其错误原因二、流程图输入数据子函数编写框关系变量m_num=0键入一个数N可否为正数?Ym_num m_num=10*m_num+i=10*m_num-i可否为小数?Y复原 m_numN依照小数点后位数将键入的数除以 n 次 10 累加到 m_numY连续键入数字?N用 UpdateData(FALSE) 刷新显示图 1 输入数据子函数流程图图 2三、设计步骤翻开 Microsoft Visual C++ 6.0 , 在文件中点击新建,在弹出框内选择MFC AppWizard[exe] 工程,输入工程名Calculter及其所在位置,点击确定,如图3所示。
将弹出这样,图 3 新建 MFC AppWizard[exe] 工程MFC AppWizard-step 1对话框,选择基本对话框,点击达成,如图图 4 基本对话框MFC AppWizard 就成立了一个鉴于对话窗口的程序框架,如图图 5 新建的对话框4 所示。
5 所示。
四、界面设计1、创立控件在图 5 所示的 Resoure View 选项卡中翻开Dialog 资源组,双击IDD_CALCULATOR_DIALOG,在右边的窗口中显示出待编写的对话框。
开始摆放控件,包括编写框和按钮的创立。
按钮的创立1)在图 5 中 Controls 的“编写框”按钮上单击鼠标左键,在对话框编写窗口上合适的地点按下鼠标左键并拖动鼠标画出一个大小合适的编写框。
在编写框上单击鼠标右键,在弹出的快捷莱单中选择属性选项,此时弹出Edit 属性对话框,如图 6 所示,在该对话框中输入ID 属性。
简易计算器小程序使用微信小程序开发工具和JavaScript开发微信小程序是一种基于微信平台的轻量级应用程序,可以在微信中使用。
它具有开发简便、使用方便、功能丰富等特点,在各行各业都得到了广泛的应用。
本文将介绍如何使用微信小程序开发工具和JavaScript开发一个简易计算器小程序。
一、准备工作在开始开发之前,我们需要准备一些基本的工具和环境。
首先,下载并安装微信小程序开发工具,该工具提供了一个可视化的界面,方便我们进行小程序的开发和调试。
其次,我们需要熟悉JavaScript语言的基本语法和特性,因为小程序的逻辑部分主要使用JavaScript来实现。
二、创建小程序项目打开微信小程序开发工具,点击新建项目,填写项目名称、项目目录和AppID等信息。
点击确定后,工具会自动生成一个基本的小程序项目结构。
三、编写界面在小程序项目的根目录下,找到和页面相关的文件夹。
新建一个名为"calculator"的文件夹,用于存放计算器页面的相关文件。
在该文件夹下新建三个文件:calculator.wxml、calculator.wxss、calculator.js,分别用于编写页面的结构、样式和逻辑。
在calculator.wxml文件中,我们可以使用一些基本的标签来构建计算器的界面,例如view、text、button等。
使用这些标签,我们可以创建一个包含数字键盘和运算符键的界面。
在calculator.wxss文件中,我们可以设置各个标签的样式,使界面看起来更加美观。
可以设置按钮的背景色、边框样式等。
四、编写逻辑在calculator.js文件中,我们需要编写计算器的逻辑代码。
首先,我们需要定义一些变量来保存计算器的状态。
比如,一个变量用于保存用户输入的表达式,一个变量用于保存计算结果等。
然后,我们可以通过监听用户的点击事件来获取用户输入的数字和运算符,并更新表达式变量的值。
接下来,我们需要编写一个计算函数,用于根据用户输入的表达式计算结果。
python简易计算器程序代码Python简易计算器程序代码Python是一种高级编程语言,它可以用于开发各种类型的应用程序,包括计算器。
在本文中,我们将介绍如何使用Python编写一个简单的计算器程序。
我们需要定义一个函数来执行计算操作。
这个函数将接收两个参数:操作符和操作数。
操作符可以是加号、减号、乘号或除号,操作数可以是任何数字。
def calculate(operator, operand1, operand2):if operator == '+':return operand1 + operand2elif operator == '-':return operand1 - operand2elif operator == '*':return operand1 * operand2elif operator == '/':return operand1 / operand2接下来,我们需要编写一个主函数来获取用户输入并调用calculate 函数来执行计算操作。
我们将使用一个while循环来持续获取用户输入,直到用户输入“exit”为止。
def main():while True:operator = input("Enter operator (+, -, *, /): ")if operator == 'exit':breakoperand1 = float(input("Enter first operand: "))operand2 = float(input("Enter second operand: "))result = calculate(operator, operand1, operand2)print("Result: ", result)我们需要调用主函数来启动程序。
超详细一、因为计算器设计的控件太多,不便使用控制台应用程序完成,所以这里使用Windows窗体应用程序,并命名为Calc,如下图所示:二、向窗体中拖入需要的控件,如下图所示:(完成效果图)结果显示区(作者博客左边的文本框)是TextBox控件,并修改其name为txtShow ,按键0~9为Button控件,并将其name分别修改为btn_0、btn_1、btn_2、btn_3、btn_4、btn_5、btn_6、btn_7、btn_8、btn_9;按键【负数】的name值修改为btn_sign,按键【.】的name 修改为btn_dot,按键【+ - * /】的name值分别修改为btn_add、btn_sub、btn_mul、btn_div,按键【=】的name值修改为btn_equ,按键【倒数】的name值修改为btn_rev,按键【平方】的name值修改为btn_sqr,按键【开方】的name值修改为btn_sqrt。
右边的计算器图片空间是PictureBox,作者博客控件是LinkLabel,可以不添加,以上所有控件均可按照需求添加,只保留自己需要的按钮控件和textbox控件即可。
三、代码部分(含解释),采用switch多分支语句编写using System;using System.Drawing;using System.Collections;using ponentModel;using System.Windows.Forms;using System.Data;namespace Calc{///<summary>/// QQ:479340056 温柔一刀C#简易计算器的实现///</summary>public class CalcForm : System.Windows.Forms.Form{private System.Windows.Forms.Button btn_0;private System.Windows.Forms.Button btn_1;private System.Windows.Forms.Button btn_2;private System.Windows.Forms.Button btn_3;private System.Windows.Forms.Button btn_4;private System.Windows.Forms.Button btn_5;private System.Windows.Forms.Button btn_6;private System.Windows.Forms.Button btn_7;private System.Windows.Forms.Button btn_8;private System.Windows.Forms.Button btn_9;private System.Windows.Forms.Button btn_add;private System.Windows.Forms.Button btn_sub;private System.Windows.Forms.Button btn_mul;private System.Windows.Forms.Button btn_div;private System.Windows.Forms.Button btn_sqrt;private System.Windows.Forms.Button btn_sign;private System.Windows.Forms.Button btn_equ;private System.Windows.Forms.Button btn_dot;private System.Windows.Forms.Button btn_rev;private System.Windows.Forms.TextBox txtShow;private System.Windows.Forms.Button btn_sqr;private PictureBox pictureBox1;private LinkLabel linkLabel1;///<summary>///必需的设计器变量。
简单计算器程序操作步骤一、建立”D\ajsq”文件夹二、用VC6编写“简单计算器程序”1、启动VC6,创建“简单计算器程序”工程。
选择D:\asjq,工程名:jsq,选择基于对话框,下一步,完成。
(介绍:类卡、文件卡、资源卡,代码提示工具卡两个,安装visual assist X)2、设计主界面对话框:IDD_JSQ_DIALOG,删除自生成的控件,添加三个Edit Box文本编辑框控件、一个Button按钮控件。
(1)对EDIT查看属性、增加、关联变量:右击EDIT1,选属性,查看ID号为:IDC_EDIT1。
增加、关联变量,右击EDIT1,建立类向导,选成员变量,选中IDC_EDIT1,单击增加变量,名称:m_a,value:float,单击OK。
右击EDIT2,选属性,查看ID号为:IDC_EDIT2。
增加、关联变量,右击EDIT2,建立类向导,选成员变量,选中IDC_EDIT2,单击增加变量,名称:m_b,value:float,单击OK。
右击EDIT3,选属性,查看ID号为:IDC_EDIT3。
增加、关联变量,右击EDIT3,建立类向导,选成员变量,选中IDC_EDIT3,单击增加变量,名称:m_c,value:float,单击OK。
(2)对BUTTON1修改属性和增加消息映射响应函数:右击BUTTON1,选属性,查看ID号为:IDC_BUTTON1,修改标题为:add;增加消息映射响应函数,右击,建立类向导,选中Message Maps,选中IDC_BUTTON1,选中BN_CLICKED,单击Add Function,名称:OnButton1,单击OK。
单击edit code,编写代码:BUTTON1的OnButton1的代码.txt。
UpdateData(true); //从控件得到值赋给变量,给m_a=5;m_b=8;m_c=0;m_c=m_a+m_b; // m_c=13;UpdateData(false); //从变量值给控件显示,文本框分别显示:5,8,13;三、操作使用所编写的“简单计算器程序”F7,Ctrl+F51。
实验 Labview编写计算器一.实验要求1,实现计算器的加减乘除功能2,实现计算器的复位功能3,其他若干功能二.实验仪器和材料主要设备有计算机,labview2014软件。
三.实验内容及步骤本程序通过用局部变量来接受按下的值,并且在最开始给它赋值空值,局部变量来接收按下的值。
这里用和来区别操作数和被操作数进行运算。
本实验调用了两个子VI,这两个子VI分别实现加减和乘除。
1面板按键的设计在前面板设计过程中先在主程序前面板整齐排列放置16个确定按钮,然后修改这16个确定按钮的名字分别为:0~9十个数字、加、减、乘、除、等号、CLR如图所示。
P1.1主程序前面板关于两个子VI,识别indicator中的字符组合是否有加减,并且进行加减运算的子VI的前面板为:P1.2 识别加减子VI的前面板识别indicator中字母组合中的乘除,并且进行乘除运算的子VI的前面板:P1.3 识别乘除子VI的前面板2 程序框图的设计1.1主程序程序框图的设计对于主程序的设计,在循环中等待1s,并且在在主循环中加入事件结构,把按下各个按键当做一个事件处理。
并且按照按键的先后顺序对indicator进行赋值相当于进行字符的粘贴。
对于0-9和+-*/的事件的处理方式一致的。
如下:P1.5 0-9与+-*/事件结构的处理对于CLR复位的处理如下图,对局部变量赋空值。
P1.5对于CLR事件的处理对于=事件的处理,事件结构中调用了子VI对于indicator中的字符串进行识别和计算。
图中EQU为调用的子VI,并且将值赋值给显示界面。
如下图:P1.6 对于‘=’事件的处理1.2EQU中程序框图的设计EQU中的程序分为两部分一部分是对于加减的识别,一部分是调用*/的子VI,在对于加减乘除的识别中都用到了匹配模式这个控件对于加减乘除进行识别,并且用条件结构对于加减进行操作。
如下图。
P1.7对于加减的识别对于*/在EQU这个子VI中又调用了另外一个识别*/的子VI来进行操作输出结果P1.8 调用*/模块并且输出结果1.3*/子VI中的程序框图设计。
任务书:C++计算器程序设计一、任务目标1. 完成一个简单的C++计算器程序,能够进行加、减、乘、除等基本运算。
2. 通过学习和实践,掌握C++语言的基础知识和编程技巧,提高编程能力和问题解决能力。
二、任务要求1. 实现加法、减法、乘法、除法四种基本运算功能。
2. 程序能够处理实数和整数运算,并能够识别和处理运算符优先级。
3. 程序能够处理运算溢出和除数为0等异常情况。
4. 程序具有用户友好的界面,能够让用户输入运算表达式,并输出计算结果。
5. 代码清晰、简洁,注释明确,符合C++编程规范。
三、任务内容1. 设计程序界面,包括输入和输出窗口。
2. 实现加法、减法、乘法、除法四种基本运算功能,包括运算符优先级的处理。
3. 实现异常处理机制,包括运算溢出和除数为0等情况。
4. 进行单元测试和集成测试,确保程序的正确性和稳定性。
5. 编写文档,包括程序使用说明和代码注释。
四、任务步骤1. 设计程序界面,包括输入和输出窗口,并确定用户输入的表达式格式。
2. 根据表达式格式,编写解析表达式的方法,将表达式解析为运算符和操作数。
3. 根据运算符和操作数,调用相应的运算函数进行计算。
4. 在运算函数中处理异常情况,包括运算溢出和除数为0等异常情况。
5. 进行单元测试和集成测试,确保程序的正确性和稳定性。
6. 编写文档,包括程序使用说明和代码注释。
五、任务注意事项1. 确保程序的正确性和稳定性,特别是在处理异常情况时。
2. 编写简洁、清晰的代码,并添加适当的注释。
3. 进行充分的测试,包括单元测试和集成测试。
c语言计算器原理随着计算机技术的发展,计算器作为基本的数学运算工具,已经广泛地应用于各个领域。
在计算机编程中,C语言是一种通用的、面相过程的编程语言,它可以用来开发各种类型的应用程序,包括计算器。
本文将介绍使用C语言编写计算器的原理和方法。
一、计算器的基本原理计算器的基本原理是利用数学运算的原理,通过编程实现加、减、乘、除等基本运算功能。
在C语言中,可以使用各种运算符和函数来实现这些运算,例如“+”、“-”、“*”、“/”等运算符,以及“abs”、“sqrt”等函数。
这些运算符和函数可以被嵌入到程序中,以实现各种复杂的数学运算。
二、计算器的设计思路设计一个计算器需要考虑到以下几个问题:1.用户界面:计算器需要有一个直观、易于使用的用户界面,以便用户能够输入要计算的表达式并得到结果。
2.表达式解析:计算器需要能够解析用户输入的表达式,并将其转换为计算机能够处理的数学运算。
3.运算执行:计算器需要能够执行解析后的表达式,并输出结果。
4.错误处理:计算器需要能够处理各种可能的错误情况,例如无效的输入、除以零等。
基于以上思路,我们可以设计一个简单的计算器程序,它使用命令行界面,支持基本的加、减、乘、除运算,并能够处理一些常见的错误情况。
三、计算器的实现方法实现一个计算器需要使用C语言的输入输出函数、字符串处理函数和数学函数等。
下面是一个简单的计算器程序示例:```c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>intmain(){charexpression[100];printf("请输入表达式(如:2+3*4):");fgets(expression,sizeof(expression),stdin);expression[strcspn(expression,"\n")]='\0';//去掉换行符doubleresult=0;intsign='+';//默认运算符为加号inti=0;while(expression[i]!='\0'){if(expression[i]==sign){//如果是运算符,则执行相应的运算if(i+2>strlen(expression)){//确保后面还有数字printf("无效的表达式\n");return1;//返回错误码}doublenum1=atof(expression+i+1);//获取第一个数字result+=num1;//进行运算i+=2;//跳过运算符和数字}elseif(isdigit(expression[i])){//如果是数字,则添加到结果中result+=expression[i]-'0';//进行加法运算}else{//遇到非数字和非运算符字符时,结束表达式解析并输出结果break;}i++;//移动到下一个字符}printf("结果为:%f\n",result);//输出结果return0;//返回正常结束代码}```以上代码实现了一个简单的命令行计算器程序,它使用fgets函数从标准输入读取用户输入的表达式,并使用字符串处理函数和数学函数进行表达式解析和运算。
VB计算器程序代码下面是一个简单的VB计算器程序代码,可以进行基本的四则运算:```VBImports System.MathPublic Class Form1Dim num1, num2, result As DoubleDim operatorType As String = ""Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadEnd SubPrivate Sub Button_Click(sender As Object, e As EventArgs) Handles btn0.Click, btn1.Click, btn2.Click, btn3.Click,btn4.Click, btn5.Click, btn6.Click, btn7.Click, btn8.Click, btn9.Click, btnDot.ClickDim button As Button = CType(sender, Button)If button.Text = "." ThenIf Not txtDisplay.Text.Contains(".") ThentxtDisplay.Text += button.TextEnd IfElsetxtDisplay.Text += button.TextEnd IfEnd SubPrivate Sub Operator_Click(sender As Object, e As EventArgs) Handles btnAdd.Click, btnSubtract.Click, btnMultiply.Click, btnDivide.ClickDim button As Button = CType(sender, Button)num1 = CDbl(txtDisplay.Text)operatorType = button.TexttxtDisplay.ClearEnd SubPrivate Sub btnEquals_Click(sender As Object, e As EventArgs) Handles btnEquals.Clicknum2 = CDbl(txtDisplay.Text)Select Case operatorTypeCase "+"result = num1 + num2Case "-"result = num1 - num2Case "*"result = num1 * num2Case "/"If num2 <> 0 Thenresult = num1 / num2ElseMessageBox.Show("除数不能为零!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error)End IfEnd SelecttxtDisplay.Text = result.ToStringEnd SubPrivate Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.ClicktxtDisplay.ClearEnd SubPrivate Sub btnSqrt_Click(sender As Object, e As EventArgs) Handles btnSqrt.ClickIf txtDisplay.Text = "" ThenMessageBox.Show("请输入一个数字!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error)Elsenum1 = CDbl(txtDisplay.Text)result = Sqrt(num1)txtDisplay.Text = result.ToStringEnd IfEnd SubPrivate Sub btnPower_Click(sender As Object, e As EventArgs) Handles btnPower.ClickIf txtDisplay.Text = "" ThenMessageBox.Show("请输入一个数字!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error)Elsenum1 = CDbl(txtDisplay.Text)result = num1 ^ 2txtDisplay.Text = result.ToStringEnd IfEnd SubPrivate Sub btnBackspace_Click(sender As Object, e As EventArgs) Handles btnBackspace.ClickIf txtDisplay.Text.Length > 0 ThentxtDisplay.Text = txtDisplay.Text.Substring(0, txtDisplay.Text.Length - 1)End IfEnd SubPrivate Sub btnNegative_Click(sender As Object, e As EventArgs) Handles btnNegative.ClickIf txtDisplay.Text.Length > 0 ThenIf txtDisplay.Text.Substring(0, 1) = "-" ThentxtDisplay.Text = txtDisplay.Text.Substring(1, txtDisplay.Text.Length - 1)ElsetxtDisplay.Text = "-" + txtDisplay.TextEnd IfEnd IfEnd SubEnd Class```这个计算器程序具有以下功能:1.支持0-9的数字输入和小数点的输入。
开发一个简单科学计算器(基于对话框模式的应用程序)一. 开发目标及软件功能开发一个科学计算器程序,要求采用基于对话框模式的应用程序,至少具有加、减、乘、除四个基本功能,并在此基础上扩展平方、开方、三角函数等功能。
(1)仔细阅读操作过程,学习如何根据编译信息,定位语法错误。
(2)将警告与错误一律看作是错误。
(3)学习并模仿书上的程序书写风格。
二. 编程步骤1. 启动Visual C++6.0,选择File | new 菜单项,弹出New 对话框。
单击Projects 选项卡,项目类型选择MFC AppWizard(exe),在Project name中填入工程名,在Location 中填用户子目录路径(设置用户程序子目录的目的是,将所有编程时产生的中间文件和最终执行程序文件全部放在自己的目录中,以便管理)。
2. 在程序向导的第1步选择建立一个基于对话框(Dialog based)的应用程序,点击“Finish”结束向导。
3. 在对话框上添加各类控件,设计对话框的界面如图所示。
在对话框中右键点击,弹出属性设置对话框(Dialog Properties),标题(caption)中填入“迷你计算器”;其余各控件的参数设置如下表所示。
控件类型ID号Caption其它Button IDC_ADD+Button IDC_SUB-Button IDC_MUL×Button IDC_DIV/Button IDC_SIN sinButton IDC_COS cosButton IDC_SQU x^2Button IDC_REC1/xButton IDC_EQUAL=Edit Box IDC_FIRSTEdit Box IDC_SECONDEdit Box IDC_RESULT4. 为对话框中的控件添加相应的成员变量:点击菜单“View →ClassWizard”,点击“Member Variables”标签项,为对话框中的三个编辑框控件添加对应的成员变量如图所示。
目录1 前言 (2)2 需求分析 (2)2.1要求 (2)2.2任务 (2)2.3运行环境 (2)2.4开发工具 (2)3 概要设计 (2)3.1系统流程图 (3)3.2查询函数流程图 (4)4 详细设计 (8)4.1分析和设计 (8)4.2具体代码实现 (9)5 课程设计总结 (25)参考文献 (25)致谢 (26)1 前言编写一个程序来实现算术计算器。
通过结构体数组和共用体数组来存放输入的每一数字或运算符号的记录(包括1.2.3等数字, +、--、*、等运算符号), 然后将其信息存入文件中。
输入一个算术计算式, 就在屏幕上显示结果。
2 需求分析2.1要求(1)用C语言实现程序设计;(2)利用结构体、共用体进行相关信息处理;(3)画出查询模块的流程图;(4)系统的各个功能模块要求用函数的形式实现;(5)界面友好(良好的人机互交), 程序要有注释。
2.2任务(1)定义一个结构体类型数组, 输入0~9及+、--、*等符号的信息, 将其信息存入文件中;(2)输入简单的加减乘除算术计算式, 并在屏幕上显示计算结果;(3)画出部分模块的流程图;(4)编写代码;(5)程序分析与调试。
2.3运行环境(1)WINDOWS2000/XP系统(2)TurboC2.0编译环境2.4开发工具C语言3 概要设计3.1系统流程图如图3.1所示。
图3.1系统流程图3.2查询函数流程图4 详细设计4.1分析和设计在程序的开头部分定义了结构替类型, 用来存放按钮信息struct s_button /*按键的结构体*/{int sx,sy,ex,ey;char *head;int press;}button[17]; /*图表按键数*/char far *vid_mem;static int tx=32,ty=3; /*静态变量*/float v1=0.0,v2=0.0;用输入函数input()来输入按键放在s_button数组中。
计算器的介绍(1)在运行程序后,系统会弹出一个基于对话框的计算器界面,如下图所示:图1.1 计算器界面(2)在计算器程序中,主要通过一个编辑框来获取表达式和显示计算结果,表达式可以通过键盘和单击按钮2种方式输入,输入后的结果如下图所示:图1.2 输入表达式后的界面(3)在输入完表达式后,单击“=”后,开始对表达式进行计算,计算完成后,在编辑框中显示计算的结果。
图1.3 计算后的结果(4)计算器可以实现十进制转化为十六进制或二进制,其实现的操作为先输入一个十进制整数,再单击按钮“转化为二进制”或“转化为十六进制。
图1.4 输入一个十进制数100图1.5 100转化为二进制后的结果图1.6 100转化为十六进制后的结果(4)另外,计算器还可以实现一些简单的函数运算,实现的操作和十六进制/二进制转化类似,是先输入一个数字,在单击想要进行的函数的按钮,单击后就会在编辑框中显示运算的结果。
1算法的实现2.1把字符串转化为数字和运算符的算法(1)如果字符串中只有数字。
这个情况用来实现一些简单函数的运算。
在进行简单函数的运算时,都是先输入一个数字,再单击要进行运算的按钮,然后编辑框显示运算的结果。
程序用了一个函数double GetaStr(CString str)来实现这个功能,该函数以编辑框变量m_strResult为实参,再得到m_strResult的值后,调用GetAt函数,一个字符一个字符的读取,如果碰到整数,执行“itemp=itemp*rate+(str.GetAt(i)-'0');”,其中变量itemp初始值为0,变量rate初始值为10,如果碰到了小数点,改变rate的值,使其等于0.1,再向后继续读取,再碰到整数时执行“itemp=itemp+rate*(str.GetAt(i)-'0');rate=rate/10;”,函数的最后确定返回值为itemp。
以下是这个函数的代码[2]:double CMyDlg::GetaStr(CString str){int i=0;double rate=10.0,itemp=0.0;for(;i<str.GetLength();i++){if(isdigit(str.GetAt(i))) //如果字符串str.GetAt(i)的内容是整数{if(rate==10.0) //整数部分itemp=itemp*rate+(str.GetAt(i)-'0');//获得整数else //小数部分{itemp=itemp+rate*(str.GetAt(i)-'0');//获得小数rate=rate/10; //每次让rate小10倍}}else if(str.GetAt(i)=='.') //如果str.GetAt(i)是小数点rate=0.1; //让rate=0.1,开始计算小数部分 }return (itemp);}(2)如果字符串中有运算符和数字,但是没有括号。
程序调用函数void GetStr(CString str),这个函数的前半部分和函数void GetaStr(CString str)一样,都是获取数字的算法,但是因为表达式中可能有多个数字和运算符,所以我们需要定义2个数组,分别用来存放数字和运算符,当读取字符遇到运算符时,把变量itemp的值保存在数组a中,并把0赋给itemp,把10赋给rate,把运算符保存在数组b中。
当不在碰到运算符号时,把最后一个整数itemp 的值数组a中,把z的值赋给s。
(z的值表示运算符加数字一个有多少个,把这个值赋给s,可以在以后的计算中,控制循环的条件,避免造成不必要的误差。
)这个函数的代码如下:void CMyDlg::GetStr(CString str){int i=0,z=0;double rate=10.0,itemp=0.0;for(i=0;i<20;i++)a[i]=1000000.0;//对数组a[20]初始化for(i=0;i<10;i++)b[i]=' ';//对数组b[10]初始化i=0; //把0赋给ifor(;i<str.GetLength();i++){if(isdigit(str.GetAt(i))) //如果字符串str.GetAt(i)的内容是整数{if(rate==10.0) //整数部分itemp=itemp*rate+(str.GetAt(i)-'0');//获得整数else //小数部分{itemp=itemp+rate*(str.GetAt(i)-'0');//获得小数rate=rate/10; //每次让rate小10倍}}else if(str.GetAt(i)=='.') //如果str.GetAt(i)是小数点rate=0.1; //让rate=0.1,开始计算小数部分else if(str.GetAt(i)=='+') //如果str.GetAt(i)是加号{a[z]=itemp;itemp=0;//把itemp的值放入双精度数组a中,并把itemp的值改为0z++; //让z自加一次b[z]='+'; //把加号放入字符数组b中z++; //让z自加一次rate=10.0;//把10赋给rate,确保读取下个数字时,先计算整数部分}else if(str.GetAt(i)=='-') //如果str.GetAt(i)是减号{a[z]=itemp;itemp=0;//把itemp的值放入双精度数组a中,并把itemp的值改为0z++; //让z自加一次b[z]='-'; //把减号放入字符数组b中z++; //让z自加一次rate=10.0;//把10赋给rate,确保读取下个数字时,先计算整数部分}else if(str.GetAt(i)=='*') //如果str.GetAt(i)是乘号{a[z]=itemp;itemp=0;//把itemp的值放入双精度数组a中,并把itemp的值改为0z++; //让z自加一次b[z]='*'; //把减号放入字符数组b中z++; //让z自加一次rate=10.0;//把10赋给rate,确保读取下个数字时,先计算整数部分}else if(str.GetAt(i)=='/') //如果str.GetAt(i)是除号{a[z]=itemp;itemp=0;//把itemp的值放入双精度数组a中,并把itemp的值改为0z++; //让z自加一次b[z]='/'; //把除号放入字符数组b中z++; //让z自加一次rate=10.0;//把10赋给rate,确保读取下个数字时,先计算整数部分}}a[z]=itemp;//把最后一个整数itemp的值放入双精度数组a中s=z;//把z的值赋给变量s,用来控制计算结果的循环中的条件}(3)如果字符串中有括号。
程序用函数voidBracket(CString str0)来解决括号问题,同样,函数以编辑框变量m_strResult为实参,主要思想是把m_strResult先分成3个字符串,比如一个表达式2*(2+3)-6,这个函数的目的是先把表达式2*(2+3)-6分成2*、2+3、-6三个字符串,再计算2+3后,把结果覆盖掉2+3所在的字符串,最后把3个字符串相加,这样就处理掉了括号的问题。
具体实现的算法:定义3个字符串变量str1、str2、str3,这三个变量都初始化为空变量,现在开始一个循环,当没有遇到字符“(”时,把每次得到的字符都加在字符串str1上,当遇到字符“(”时,把“(”后的字符都加在字符串str2上,直到遇到字符“)”。
当遇到字符“)”时,把“)”后的字符都加在字符串str3上,str2再调用函数计算出它的表达式的值,最后把3个字符串相加,这就解决了括号问题。
该函数代码如下:void CMyDlg::Bracket(CString str0){CString str1="",str2="",str3="";int i=0;for(;i<str0.GetLength();i++){if(str0.GetAt(i)=='(') //如果碰到了左括号{i++; //i自加一次,用来跳过左括号for(;i<str0.GetLength();i++){if(str0.GetAt(i)==')') break;//如果碰到右括号,跳出循环str2+=str0.GetAt(i); //把括号内的表达式赋给str2 }i++; //i自加一次,用来跳过右括号for(;i<str0.GetLength();i++){str3+=str0.GetAt(i); //把括号后边的表达式赋给str3 }}elsestr1+=str0.GetAt(i); //把括号前边的表达式赋给str3 }GetStr(str2);//调用GetStr(str2)函数,把str2里的数字和运算符保存在数组中GetResult(); //计算出表达式str2的值for(i=0;i<str0.GetLength();i++)if(str0.GetAt(i)=='(') //如果m_strResult中有括号str2.Format("%1f",a[0]); //把a[0]转化为字符串赋给str2 m_strResult=str1+str2+str3;//把str1,str2,str3的值加起来赋给m_strResult}2.2 计算出结果的算法在把表达式中的数字和运算符分别保存在数组后,接下来我们就要进行表达式的计算了,表达式的计算首先要考虑优先级的问题,这里先把所有的除法转化为乘法,再把除法后的数字取它的倒数,接下来就是进行乘法计算,每次乘法计算后都把计算的结果保存在计算的2个数中的前面的那个数上,并把乘号和后面的数字删除。
进行完乘法运算后,进行一次循环,重新整理下数组,最后进行加法和减法运算。
函数代码如下:void CMyDlg::GetResult(){int i=0,x=0,y=1,t,z=1;//这个循环的目的是把所有除法运算都改为乘法计算for(i=0;i<=s;i++){if(b[i]=='/') //当循环遇到除号时{a[i+1]=1/a[i+1]; //把a[i+1]的值改为1/a[i+1]b[i]='*'; //把b[i]的值改为乘号}}//这个循环可以对所有乘法进行计算for(i=0;i<=s;i++){if(b[i]=='*') //当循环遇到乘号时{//如果i-t==2(再上次循环中,t被赋值成了i,这次2个值只相差2,说明表达式的情况是连续乘法,比如2*3*4)以2*3*4为例,在这个条件之前,函数已经进行了2*3的运算,其计算结果保存在原来的2中,把2的值覆盖了,这个条件的作用是让2*3的结果再和4相乘,结果保存在原来的2中if(i-t==2){a[t-z]=a[t-z]*a[i+1];//进行乘法运算,把结果保存在前面的数组元素中z=z+2;//这里引进变量z,可以解决很多数连续相乘的问题,比如2*2*2*2*2*2}a[i-1]=a[i-1]*a[i+1];//碰到乘号后把乘号前后2个数字相乘,结果保存在前面的数组元素a[i+1]=1000000.0; //对乘号后面的数字初始化为0.0b[i]=' '; //对乘号初始化为空格//2数相乘后把乘号及其后面的数字初始化了,如果是2*3*4的情况,将会无法计算*4,所以要用开始的条件语句来解决t=i; //把i的值赋给t}}//这个循环的目的是对数组a和b进行整理,因为已经进行了乘法和除法运算,进行运算的时候,把一些数字和运算符初始化了这个函数的作用可以使中间一些初始化了的数字和符号被后面的数字和符号代替,让数组可以重新排列for(i=0;i<=s;i++){if(a[i]!=1000000.0) //如果a[i]的值不为0.0{a[x]=a[i]; //把a[i]的值赋给a[x]x+=2; //x自加2}if(b[i]!=' ') //如果b[i]的值不为空格{b[y]=b[i]; //把b[i]的值赋给b[y]y=y+2; //y自加2}}//这个循环是进行最后的加减法运算for(i=0;i<=y-2;i++)//这里i的上限小于等于y-2,可以保证不进行多余的运算{if(b[i]=='+') //如果b[i]等于加号a[0]=a[0]+a[i+1];//把加号后的数字和a[0]相加,结果保存在a[0]中else if(b[i]=='-') //如果b[i]等于减号a[0]=a[0]-a[i+1];//把减号后的数字和a[0]相减,结果保存在a[0]中}}2.3 转化为十六进制和二进制的算法(1)转化为二进制的算法。