简单的计算器模拟程序的设计和实现

合集下载

简单的计算器模拟程序的设计和实现

简单的计算器模拟程序的设计和实现

简单的计算器模拟程序的设计和实现1.问题描述对任意给定的正确四则运算表达式,程序计算其结果值并输出。

程序无需查错功能,假定所输入的都是正确的四则运算表达式,并且表达式中运算分量均为无正负号整数,运算符为 +、-、*、/,表达式以字符 "=" 结束。

程序应有操作提示、输入和输出,界面追求友好,最好是菜单式的界面。

2.设计说明2.1简要的分析根据要求,要先输入包含有+,-,*,/的运算符的表达式,然后经过计算得到正确的答案。

从键盘中输入的是ASCII码,因此要将其转换为十进制的数据然后才能进行计算。

如果输入混合表达式,要将中缀式先变化成后缀式,然后再进行计算。

2.2概要分析2.2.1 定义的数据段用于定义一些中间变量,并将显示在试验界面上,以及提示信息。

data segmentstri db 50 dup(0)exp db 30 dup(0)track db 30 dup(0)instr db 100 dup(0)msg0 db 'please input your formular:',0dh,0ah,'$'msg1 db 0dh,0ah,'wrong input','$'msg2 db 0dh,0ah,') and ( does not match','$'msg3 db 0dh,0ah,'div zero error','$'msg4 db 0dh,0ah,'sorry,minus data appears','$'msg5 db 0dh,0ah,'any key to continue,esc to exit','$'data ends2.2.2 定义的堆栈段声明用于将中缀表达式转换为后缀表达式,以及进行后缀表达式求值过程用到的堆栈段。

简单计算器的制作(实验版)

简单计算器的制作(实验版)
w属性修改为 属性修改为true,才能响应键盘按键 注意:将form1窗体的 窗体的 属性修改为 才能响应键盘按键 的按下消息. 的按下消息.
设计与实现
运算. (13)单个操作数的运算的处理,例如"1/x"运算.在按钮"1/x"的单击 )单个操作数的运算的处理,例如" 运算 在按钮" 的单击 事 件过程OnButton3Click中编写实现代码: 中编写实现代码: 件过程 中编写实现代码
注意: 注意:加,减,乘,除这些按钮都要做相应的处理!! 除这些按钮都要做相应的处理!!
设计与实现
(8)退格键(BackSpace)功能的实现.在按钮"BackSpace"的单击 )退格键( )功能的实现.在按钮" 的单击 事 件过程OnBackSpaceBtnClick中编写实现代码: 中编写实现代码: 件过程 中编写实现代码
设计与实现
当用户按下运算操作符按钮,在按钮" 单击事件过程中编写实现代码 单击事件过程中编写实现代码: 当用户按下运算操作符按钮,在按钮"+"单击事件过程中编写实现代码:
设计与实现
(4)定义一个可以根据不同的操作符进行不同运算的过程: 定义一个可以根据不同的操作符进行不同运算的过程: 定义一个可以根据不同的操作符进行不同运算的过程
设计与分析
混合运算的情况: 混合运算的情况 (1)在没有按下运算操作符按钮之前,通过按钮输入的数 字均作为第一个操作数,保存在opnum1变量中; (2)选择运算的种类,按下运算操作符按钮,首先对上一 次的运算进行求解,并把结果显示出来,同时把该计 算结果作为第一个操作数,存在到opnum1变量中,把 按下的运算操作符也保存在ca_operator变量中; (3)按下运算操作符按钮后(设置一个变量operated来记 录),通过按钮输入的数字均作为第二个操作数保存 在opnum2变量中; (4)按下"="按钮后,根据选择的运算操作符对两个操作数 进行运算,并把结果显示在edit编辑框中.

Java实现简易计算器

Java实现简易计算器

Java实训作业题目:Java实现简易计算器学院:姓名:学号:班级:20 年月一、实验目的通过课程设计,主要要达到两个目的,一是检验和巩固专业知识、二是提高综合素质和能力。

此次课程设计实训主要是Java语言程序设计的实现。

通过该课程设计,可以将课堂上掌握的理论知识与处理数据的业务相结合,以检验自己掌握知识的宽度、深度及对知识的综合运用能力。

二、实验要求用Java编写一个简单的计算器,使其能够实现最基本的功能,如简单的加、减、乘、除;平方根,倒数,平方等功能。

三、详细内容1.界面设计界面设计使用GUI,其中有用到swing组件的TextField和Button,用到awt中的BorderLayout和GridLayout布局管理方式,其图形界面如图1-1所示:图1-1其中主要代码为:public mainWindow(){this.setTitle("计算器");//用户图形界面标题this.setVisible(true);//用户图形界面可缩小this.setResizable(false);//用户图形界面不可放大this.setSize(350,300);//设置用户图形界面的大小this.setLocation(400,150);//用户图形界面在屏幕中的显示位置JPanel panel1 = new JPanel();//新建一个画板JPanel panel2 = new JPanel();button1 = new JButton("1");...reset = new JButton("CE");Container container = this.getContentPane();container.add(panel2,BorderLayout.NORTH);container.add(panel1);panel1.setLayout(new GridLayout(5,4));//将画板1分为4行5列result.setEnabled(false);result.setFont(new Font("Dialog",Font.BOLD,25));//运算结果的字体大小result.setEditable(false);result.setHorizontalAlignment(SwingConstants.RIGHT);panel1.add(reciprocal);//分别将20个按钮依次添加到画板panel1中,并设置各自的大小reciprocal.setFont(new Font("Dialog",Font.PLAIN,20));...panel1.add(divide);divide.setFont(new Font("Dialog",Font.PLAIN,20));panel2.setLayout(new GridLayout());panel2.add(result);//画板panel2添加运算结果2.四则运算较为简单的实现了简单的加、减、乘、除运算,主要代码如下:ActionListener equal1 = new ActionListener(){ //实现四则运算public void actionPerformed(ActionEvent e){String str = result.getText();b = DatatypeConverter.parseDouble(str);{if(flag == "+")c = a + b;else if(flag == "-")c = a - b;else if(flag == "*")c = a * b;else if(flag == "/" || b != 0)c = a / b;}if(flag != "=")result.setText("" + c);elseresult.setText("零不能做除数!");a = 0;b = 0;c = 0;flag = "";}};3.其他功能另外添加了平方根,倒数,平方等功能,主要代码如下:平方根运算的实现:ActionListener sqrt1= new ActionListener(){public void actionPerformed(ActionEvent e){String str = result.getText();double i = DatatypeConverter.parseDouble(str);i = Math.sqrt(i);result.setText("" + i);}};倒数运算的实现:ActionListener reciprocal1 = new ActionListener(){ public void actionPerformed(ActionEvent e){String str = result.getText();double i = DatatypeConverter.parseDouble(str);i = 1/i;result.setText("" + i);}};平方运算的实现:ActionListener square1 = new ActionListener(){public void actionPerformed(ActionEvent e){String str = result.getText();double i = DatatypeConverter.parseDouble(str);i = i*i;result.setText("" + i);}};4.程序测试经测试发现本计算器基本功能均能实现,可正常运行计算,针对功能实现的代码部分过于简单,可以对其进行改善提高,方便用户使用!5.实训小结通过对计算器窗体的编写,熟悉了java图形用户界面的设计原理和程序结构,熟悉了java中awt和swing的组合。

简易计算器的设计与实现

简易计算器的设计与实现

简易计算器的设计与实现设计一个简易计算器涉及以下几个方面:1.需求分析:-定义计算器的功能-确定计算器支持的数学运算,如加法、减法、乘法、除法等2.用户界面设计:-设计计算器的界面布局,包括数字按键、运算符按键、等号按键等-考虑使用框架或库来构建用户界面3.输入处理:-设计解析用户输入的算式-处理用户点击按键时的输入4.运算处理:-实现各种数学运算的算法-将用户输入的算式传入运算处理函数进行计算5.显示结果:-将计算结果显示在计算器的界面上下面是一个简易计算器的实现示例,使用Python语言和PyQt库来构建:```pythonimport sysfrom PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QGridLayout, QPushButton, QLineEdit class Calculator(QWidget):def __init__(self):super(.__init__self.setWindowTitle("简易计算器")yout = QVBoxLayoutself.input_box = QLineEdityout.addWidget(self.input_box)self.buttons =['7','8','9','/'],['4','5','6','*'],['1','2','3','-'],['0','.','=','+']self.grid_layout = QGridLayoutfor i in range(4):for j in range(4):button = QPushButton(self.buttons[i][j])button.clicked.connect(self.button_clicked)self.grid_layout.addWidget(button, i, j)yout.addLayout(self.grid_layout)self.setLayout(yout)self.equal_clicked = Falsedef button_clicked(self):button = self.sendertext = button.textif text == '=':self.calculateelse:self.input_box.setText(self.input_box.text( + text) def calculate(self):expression = self.input_box.texttry:result = eval(expression)self.input_box.setText(str(result))except Exception as e:self.input_box.setText("错误:{}".format(e))if __name__ == '__main__': app = QApplication(sys.argv) calculator = Calculator calculator.showsys.exit(app.exec_()。

编写一个简单的计算器程序

编写一个简单的计算器程序

编写一个简单的计算器程序计算器程序是一种非常实用的工具,它可以帮助我们进行数学计算,并简化复杂的运算过程。

本文将介绍如何编写一个简单的计算器程序,实现基本的加减乘除运算。

首先,我们需要确定计算器程序的功能和界面设计。

在本文中,我们将使用Python编程语言来编写计算器程序,并使用命令行界面(CLI)进行交互。

这意味着我们将在终端窗口中输入表达式,并显示结果。

接下来,我们需要考虑计算器程序的基本运算功能。

一个简单的计算器需要实现四个基本的运算:加法、减法、乘法和除法。

我们将使用函数来实现每个运算功能。

以下是一个示例代码:```pythondef add(x, y):return x + ydef subtract(x, y):return x - ydef multiply(x, y):return x * ydef divide(x, y):return x / y```在这个示例代码中,我们定义了四个函数,每个函数接受两个参数,并返回计算结果。

接下来,我们需要处理输入表达式并调用相应的运算函数。

我们将使用一个循环来持续接收用户输入,并在用户输入“exit”时退出程序。

以下是一个示例代码:```pythonwhile True:expression = input("请输入一个表达式:")if expression == "exit":break#解析表达式,提取运算符和操作数operator = Nonefor op in ["+", "-", "*", "/"]:if op in expression:operator = opbreakif not operator:print("表达式错误,请重新输入!") continueoperands = expression.split(operator) x = float(operands[0])y = float(operands[1])if operator == "+":result = add(x, y)elif operator == "-":result = subtract(x, y)elif operator == "*":result = multiply(x, y)elif operator == "/":result = divide(x, y)print("运算结果:", result)print("谢谢使用,再见!")```在这个示例代码中,我们使用了一个无限循环来持续接收用户输入。

实操考核:设计并实现一个简单的计算器

实操考核:设计并实现一个简单的计算器

实操考核:设计并实现一个简单的计算器
简介
本文档将详细介绍如何设计并实现一个简单的计算器。

计算器是一种用于进行基本数学运算的电子设备或程序。

我们将使用 Python 编程语言来实现该计算器,并通过命令行界面与用户进行交互。

功能需求
计算器需要实现以下基本功能:
1.支持加法、减法、乘法和除法运算;
2.具备输入验证功能,确保用户输入的是有效的数值;
3.能够处理不同类型的数值,如整数和浮点数;
4.提供清除操作,以便用户能重新进行计算;
5.具备退出功能,用户可以选择退出计算器。

设计思路
为了实现上述功能需求,我们可以按照以下步骤来设计和实现这个简单的计算器:
1.接收用户输入的数值和运算符,并进行输入验证;
2.根据输入的运算符执行相应的运算操作;
3.输出结果并询问用户是否继续计算;
4.如果用户选择继续计算,则返回第一步,否则退出计算器。

代码实现
下面将逐步介绍如何使用 Python 代码实现这个简单的计算器。

首先,我们需要引入sys模块,以便在退出计算器时能够使用sys.exit()方法。

然后,我们定义一个函数calculator(),用来进行计算。

```python import sys
def calculator(): while True: try: num1 = float(input(。

单片机设计实验报告简单计算器的设计

单片机设计实验报告简单计算器的设计

目录1.总体方案选择 (2)1.1 实验要求: (2)1.2方案设计 (2)2.硬件原理电路图的设计及分析 (3)2.1主控模块 (3)2.1.1 STC89C52单片机主要特性 (3)2.1.2 STC89C52单片机管脚图 (4)2.1.3 STC89C52单片机的中断系统 (5)2.1.4 STC89C52单片机的定时/计数器 (5)2.2矩阵键盘模块设计: (5)2.2.1矩阵键盘原理介绍 (5)2.2.2矩阵键盘电路设计 (6)2.3 LCD液晶显示器简介 (7)2.3.1液晶模块简介 (7)2.3.2液晶显示部分与89S52的接口 (8)3系统软件设计 (10)3.1系统软件流程图 (10)3.2系统整体原理图 (11)4.系统调试 (12)4.1硬件调试 (12)4.2软件调试 (12)4.3调试结果 (13)5.心得体会131.总体方案选择1) 1.1 实验要求:2)通过小键盘实现数据的输入, 并在LED数码管上显示3)实现+、-、*、/4)在LED数码管上显示结果并有清零, 退出功能1.2方案设计本系统以STC89C52单片机为控制核心, 对系统进行初始化, 主要完成对键盘的响应、液晶显示灯功能的控制, 起到总控和协调各模块之间工作的作用。

单片机通过检测键盘读取使用者按下对用功能的按键, 然后通过单片机内部运放把运算的结果显示在液晶屏幕上。

图1-1系统结构框图本系统结构如图1-1所示, 本设计可分为以下模块: 单片机主控模块、键盘模块、功率放大模块、闹铃模块、按键设置模块。

下面对各个模块的设计方案逐一进行论证分析。

2.硬件原理电路图的设计及分析2.1主控模块STC89C52有40个引脚, 4个8位并行I/O口, 1个全双工异步串行口, 同时内含5个中断源, 2个优先级, 2个16位定时/计数器。

STC89C52的存储器系统由4K的程序存储器(掩膜ROM), 和128B的数据存储器(RAM)组成。

简易计算器实验报告

简易计算器实验报告

简易计算器实验报告一、实验目的本次实验的目的是设计并实现一个简易计算器,能够进行基本的四则运算(加、减、乘、除),以及处理括号的优先级运算,提高对程序设计和逻辑思维的理解与应用能力。

二、实验原理1、四则运算的优先级规则在数学运算中,先计算括号内的表达式,然后按照先乘除后加减的顺序进行计算。

乘除法的优先级高于加减法,如果在同一级运算中,按照从左到右的顺序进行。

2、数据结构的选择使用栈(Stack)数据结构来存储操作数和运算符。

栈具有先进后出的特点,非常适合处理表达式中的括号和优先级。

3、算法思路首先,将输入的表达式进行解析,将数字和运算符分别存储到不同的栈中。

然后,根据运算符的优先级进行计算,将计算结果重新压入栈中,直到表达式计算完毕。

三、实验设备及环境1、编程工具:选择了 Python 语言作为主要的编程工具,使用PyCharm 集成开发环境进行代码编写和调试。

2、操作系统:Windows 10 操作系统。

四、实验步骤1、定义数据结构定义两个栈,一个用于存储操作数(operandStack),一个用于存储运算符(operatorStack)。

2、表达式解析遍历输入的表达式字符串,将数字转换为整数并压入操作数栈,将运算符压入运算符栈。

遇到左括号直接压入运算符栈,遇到右括号则进行括号内的运算。

3、运算处理当运算符栈不为空时,取出栈顶的运算符和两个操作数进行计算。

根据运算符的优先级进行相应的运算,将结果压入操作数栈。

4、最终结果当表达式解析完毕后,操作数栈中的唯一元素即为表达式的计算结果。

五、代码实现```pythonclass SimpleCalculator:def __init__(self):selfoperandStack =selfoperatorStack =def calculate(self, expression):for char in expression:if charisdigit():selfoperandStackappend(int(char))elif char in '+/()':if char =='(':selfoperatorStackappend(char)elif char ==')':while selfoperatorStack-1!='(':operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackpop()else:while selfoperatorStack and selfhasHigherPrecedence(selfoperatorStack-1, char):operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)selfoperatorStackappend(char)while selfoperatorStack:operator = selfoperatorStackpop()operand2 = selfoperandStackpop()operand1 = selfoperandStackpop()result = selfperformOperation(operand1, operand2, operator)selfoperandStackappend(result)return selfoperandStackpop()def hasHigherPrecedence(self, op1, op2):if op1 in '/' and op2 in '+':return Trueelif op1 in '+' and op2 in '+':return Falseelif op1 in '/' and op2 in '/':return Falsereturn Falsedef performOperation(self, operand1, operand2, operator):if operator =='+':return operand1 + operand2elif operator =='':return operand1 operand2elif operator =='':return operand1 operand2elif operator =='/':if operand2 == 0:raise ValueError("除数不能为 0")return operand1 / operand2if __name__ =="__main__":calculator = SimpleCalculator()expression ="2 + 3 (4 1) / 2"result = calculatorcalculate(expression)print("计算结果:", result)```六、实验结果与分析1、测试用例及结果输入表达式:"2 + 3 4",计算结果:14输入表达式:"(2 + 3) 4",计算结果:20输入表达式:"5 2 3",计算结果:-1输入表达式:"10 / 2 + 1",计算结果:62、结果分析对于简单的四则运算表达式,计算器能够正确计算出结果。

实验01 简易计算器设计

实验01 简易计算器设计

实验1简易计算器设计一、实验目的1、掌握事件结构的编程2、掌握字符串与数字的相互转化3、掌握条件结构的编程4、生成exe文件二、实验要求利用LabVIEW的事件结构编写一个简单的计算器程序,实现加、减、乘、除等运算,并能对计算结果进行清除,前面板按钮及布局如下图所示。

图1 计算机界面要求最后创建项目,生成exe可执行文件。

三、实验设备1、计算机2、安装LabVIEW软件(版本不限,本实验指导书以2018版为例)四、实验说明1、程序流程图图2 程序流程图2、设计思路计数器界面中每个按键相当于一个布尔输入控件,共17个;计算结果的显示为一个字符串显示控件。

每次按键触发一个按键事件,利用LabVIEW的事件响应结构对每个按键进行响应,实现要求的简易计算器功能。

表1 布尔输入控件的说明前面板除了17个布尔输入控件外,还包含输入数据的输入临时值控件、输入1、输入2、存储操作运算符的运算符临时值控件、运算结果和过程显示,过程显示充当计算器的显示器。

3、算法流程图包括程序初始化、运算符判断、数据存储与运算、显示等。

图3 算法流程图五、实验过程1、前面板设计打开IabVIEW2018软件,新建一个VI,并命名为虚拟计算器。

在前面板上右击,在布尔控件中选择“确定按钮”;右击,打开显示项,去掉标签;调整按键到合适的大小;再拷贝16个按键,排列好,C键和±键还需要调整一下大小;修改各按键的布尔文本;双击各按键到后面板中修改各自的标签,例如将布尔文本为1的按键标签改为“数字1”,将布尔文本为+的按键标签改为“加”,以方便编程时识别各按键。

再设置一个字符串显示控件,用来显示运算数值、运算符号和运算结果,修改标签为“过程显示”;还需要设置5个字符串显示控件,标签分别为“输入临时值”、“输入1”、“输入2”、“运算符临时值”、“运算结果”。

得到如下图所示的计算器前面板、后面板。

图4 前面板布局图图4 后面板2、初始化将前面板中的各个显示控件初始化,如图5所示。

课程设计 简易计算器设计与实现

课程设计 简易计算器设计与实现

课程设计简易计算器设计与实现长江职业学院工学院毕业实践报告课题名称:简易计算器设计与实现专业班级:计算机控制技术081班学生姓名:黄杨学号: 20082940班级序号 6实践性质:校内毕业实践实践成绩:指导老师:杜力2011年2月25日目录一、绪论1.1 计算器的历史 (5)1.2 电子计算器的特殊键 (6)1.3单片机概述 (6)1.4设计要求 (6)1.5我做简易模拟计算器的过程说明 (7)1.6系统的基本功能 (7)二、课题设计的分析与思路的确定 (7)三、芯片简介 (8)3.1MSC-51芯片简介 (8)3.2 MCS-51的引脚说明 (10)四、计算器程序设计 (12)4.1存储单元分配 (12)4.2主程序设计 (12)4.3 数码管显示数据转换子程序CONV (13)4.4 数码管动态显示子程序 (13)五、连接知识 (13)5.1键盘的连接 (13)5.2、显示器的连接 (14)六、仿真过程 (15)八、参考文献 (18)一、绪论本课题拟定以MCS-51系列单片机为控制中心,采用模块化的设计方案,运用液晶显示器或LED显示数据/键盘输入数据,以实现能够完成加、减、乘、除、数据存储等运算的简易计算器。

系统的功能是:(1)模拟的计算器能显示10位数字,开机运行时,只显示最低位为“0”,其余不显示;(2)4×4键盘分别表示:0到9,+,-,×,/,=,CL;(3)第一次按下,显示“D1”,第二次按下,显示“D1D2”,第三次按下,显示“D1D2D3”…8个全显示完毕,再次按下按键时,给出“嘀”的提示音;(4)可以对计算结果小于256的两个无符号数进行加、减、乘、除运算。

单片机程序用汇编语言编写,经过Wave软件调试,生成HEX文件,再用Proteus软件进行计算机仿真。

程序中键盘部分使用行列式扫描原理,若无键按下则调用动态显示程序,并继续检测键盘;若有键按下则得其键值,并通过查表转换为数字0—9和功能键与清零键的代号。

简易计算器设计与实现

简易计算器设计与实现

简易计算器设计与实现一、引言计算器是一种广泛应用的工具,可以进行基本的算数运算和一些科学计算,能够极大地方便人们的日常生活和工作。

本文将介绍一个简易的计算器的设计和实现方案。

二、设计思路1.功能选择:通过提供菜单供用户选择,以实现计算器常见功能如加法、减法、乘法、除法等。

2.输入输出处理:用户通过键盘输入待计算的数字和操作符,计算器将结果输出到屏幕上。

3.算术运算:根据用户选择的功能,进行相应的算术运算,如加法、减法、乘法、除法等。

4.错误处理:对于非法的输入,如除数为0,需要给出错误提示。

三、详细设计1.界面设计:计算器通过命令行界面展示,用户通过菜单选择功能。

界面可以提供以下功能选择菜单:1)加法2)减法3)乘法4)除法5)退出2.输入输出处理:在命令行界面上提示用户输入数字和操作符,并读取用户输入的数据。

用户输入格式为两个数字和一个操作符,操作符为"+","-","*"或"/"。

3.算术运算:a)加法运算:将两个数字相加,得到结果。

b)减法运算:将第一个数字减去第二个数字,得到结果。

c)乘法运算:将两个数字相乘,得到结果。

d)除法运算:将第一个数字除以第二个数字,得到结果。

在执行除法运算前,需要检查除数是否为0,如果为0,则给出错误提示。

4.错误处理:在用户选择除法运算时,需要检查除数是否为0。

如果为0,则输出错误提示信息,提示用户输入合法操作数。

五、实现以下为Python语言实现的简易计算器代码示例:```pythondef add(a, b):return a + bdef subtract(a, b):return a - bdef multiply(a, b):return a * bdef divide(a, b):if b == 0:raise ValueError("除数不能为0")return a / bdef calculator(:while True:print("请选择功能:")print("1) 加法")print("2) 减法")print("3) 乘法")print("4) 除法")print("5) 退出")choice = int(input()if choice == 1:a = float(input("请输入第一个数字:"))b = float(input("请输入第二个数字:")) result = add(a, b)print("计算结果:%f" % result)elif choice == 2:a = float(input("请输入第一个数字:"))b = float(input("请输入第二个数字:")) result = subtract(a, b)print("计算结果:%f" % result)elif choice == 3:a = float(input("请输入第一个数字:"))b = float(input("请输入第二个数字:")) result = multiply(a, b)print("计算结果:%f" % result)elif choice == 4:a = float(input("请输入第一个数字:"))b = float(input("请输入第二个数字:")) try:result = divide(a, b)print("计算结果:%f" % result)except ValueError as e:print("错误:%s" % str(e))elif choice == 5:breakelse:print("无效的选择,请重新选择功能。

简易计算器的设计及实现

简易计算器的设计及实现

简易计算器的设计及实现随着社会经济的发展,计算器在日常生活中扮演着越来越重要的角色,成为人们学习和工作不可或缺的工具,计算器的设计无论在何时都有着很大的实际意义。

文章在分析简易计算器的主要功能和设计思路的基础上,使用C#语言对计算器进行了具体的程序开发与实现。

标签:C#;计算器;程序设计引言计算器作为必备的办公工具,渗透在人们日常生活的每个角落,特别是随着社会经济的发展,人们需要处理的数据越来越多、越来越繁杂,计算器带来的便捷也越来越明显。

虽然如今网络和市面上的计算器已非常之多,但功能过于简单的无法满足个人需求,功能过多的价格较贵且很多功能根本用不到,所以设计一款简单却实用的计算器具有很大的实际意义。

而C#是一种功能非常强大的编程语言,其易于掌握、支持跨平台、面向对象的优点使得它非常适合用来开发一些常用的界面工具,故本文介绍了简易计算器的主要功能和设计思路,并在此基础上使用C#语言进行了具体的程序开发与实现。

1 C#语言和开发工具1.1 C#简介C#是一种面向对象的程序设计语言,是专门用于.NET的编程语言,用C#编写的代码总是在.NET Framework中运行(.NET Framework简称.NET,是微软为开发应用程序创建的平台)。

使用C#可以编写传统的Windows桌面应用程序、Windows服务程序、Web应用程序、Web服务程序等。

1.2 开发工具Visual StudioVisual Studio是一套完整的开发工具集,可以用来创建Windows平台下的Windows应用程序和网络程序,也可以用来创建网络服务、智能设备应用程序和Office插件等。

Visual Studio有多种版本,本次设计使用的版本是Visual Studio 2013。

2 简易计算器的基本功能精确、便捷、高效是计算器的主要特点,考虑到生活中人们常用的数据格式和运算需求,简易计算器需要具备以下几个功能:(1)简洁直观的可操作界面;(2)基本的四则运算和清零功能;(3)支持正负数运算和小数操作;(4)支持乘方与开方运算。

简单计算器程序设计

简单计算器程序设计

《网络编程技术》结课论文2012 — 2013学年第二学期题目:简单计算器程序专业班级:网信10-2学号:************姓名:-----------指导老师:---------日期:2013-06-25目录1引言 (3)2基础理论 (3)2.1 AWT 组件 (3)2.2 Swing 组件 (3)2.3 java事件处理机制 (4)3 功能设计 (5)3.1计算器系统概述 (5)3.2功能模块设计 (6)3.3详细设计 (6)4 系统实现 (7)4.1需求分析 (7)4.2设计思路 (8)4.3主要代码展示及说明 (8)4.4调试与分析 (12)5 总结 (12)参考文献 (13)1引言近年来随着计算机和网络在社会领域的发展,java的应用正在不断地走向深入, Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。

Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。

Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。

特别是Java企业应用编程接口为企业计算及电子商务应用系统提供了有关技术和丰富的类库。

本次设计是通过java编程技术来设计一个图形界面(GUI)的计算器应用程序,完成简单的算术运算,该计算器可以实现加法、减法、乘法、除法的简单运算,也可以实现一些简单的扩展运算,这次课程设计的主要目的在于检测对java 应用的熟练程度,发现问题并及时改正和提高,同时扩展对java知识的进一步了解和认识,强化自己的编程能力,为将来在新的旅途中能更好的发挥自身的才能!2基础理论2.1 AWT 组件布局管理器管理组件如何放置在容器中,AWT 中最常用的四种布局类:FlowLayout、BorderLayout、GridLayout、CardLayout。

本项目主要采用了GridLayout 布局。

简单计算器操作

简单计算器操作

安阳师范学院计算机与信息工程学院期末设计作品报告书指导教师:赵红丹题目:设计一个模拟计算器程序一、试验目的、试验环境、设计思路:设计一个程序来模拟一个简单的手持计算器。

程序支持算术运算+、-、*、/、=,以及C(清除)、A(全清除)操作。

程序能正常运行,能够完成题目要求的运算,在程序编译中要做到简洁明了,使用户能够方便易懂。

初步想法:要做到运行时只需按日常习惯输入计算式,当用户输入运算符时,判断所要进行的运算,后调用函数进行运算,例如:要计算“1+2”的值,则输入“1+2”。

判断在输入“+”时进行,调用加法成员函数,然后运算,其中乘方运算符用“^”表示, “5的平方”输入的形式为“5^2”。

然后输出结果表达式,输出结果。

要定义一个类,做加减乘除等的简单运算,另外还需要一个解释清楚、美观方便的初始使用列表指导用户进行操作。

二、功能模块及结构描述(函数功能和数据结构类型的定义。

)功能模块:#include<iostream> 编译预处理命令using namespace std; 使用命名空间stdClass jsq 定义计算器类void set(double a,double b) 赋值函数int main()主函数结构描述:1.定义一个计算器类class jsq{public:void set(double a,double b) //赋值函数{x=a;y=b;}void add() //加法运算{cout<<x<<"+"<<y<<"="<<x+y<<"\n";}void sub() //减法运算{cout<<x<<"-"<<y<<"="<<x-y<<"\n";}void mul() //乘法运算{cout<<x<<"*"<<y<<"="<<x*y<<"\n";}void div() //除法运算{if(y==0)cout<<"除数为零,重新输入";elsecout<<x<<"/"<<y<<"="<<x/y<<"\n";}void cf() //乘方类{double q=1;int i;for(i=1;i<=y;i++){q=q*x;}cout<<x<<"的"<<y<<" 次幂"<<"="<<q;}private:double x,y;2. 计算阶乘的子函数void cf(){long q=1;int i;for(i=1;i<=y;i++){q=q*x;}cout<<x<<"的"<<y<<"次幂"<<"="<<q<<endl;}3. 计算阶乘的子函数void jc(int n){int i,w=1;for(i=1;i<=n;i++)w=w*i;cout<<n<<"的阶乘"<<"="<<w;}4.int menu_select(){int c;do{cout<<"\n 选择需要执行的操作序列号: "<<endl;scanf("%d",&c);}while(c<0||c>3);return c; }5 .运算界面int mainmenu()三、流程描述:(函数流程图)流程图:四、源代码:#include<iostream>#include<math.h>#include<stdlib.h>using namespace std;const double PI=3.14;//----------------------------定义一个计算器类------------------------------- class jsq{public:void set(double a,double b) //赋值函数{x=a;y=b;}void add() //加法运算{cout<<x<<"+"<<y<<"="<<x+y<<"\n";}void sub() //减法运算{cout<<x<<"-"<<y<<"="<<x-y<<"\n";}void mul() //乘法运算{cout<<x<<"*"<<y<<"="<<x*y<<"\n";}void div() //除法运算{if(y==0)cout<<"除数为零,重新输入";elsecout<<x<<"/"<<y<<"="<<x/y<<"\n";}void cf() //乘方类{double q=1;int i;for(i=1;i<=y;i++){q=q*x;}cout<<x<<"的"<<y<<" 次幂"<<"="<<q;}private:double x,y;};//--------------------------------阶乘的子函数------------------------------ void jc(int n){int i,w=1;for(i=1;i<=n;i++)w=w*i;cout<<n<<"的阶乘"<<"="<<w;}int Tuichu(int i){return 0;}//--------------------------------选择菜单----------------------------------- int menu_select(){int c;do{cout<<"\n 选择需要执行的操作序列号: "<<endl;scanf("%d",&c);}while(c<0||c>3);return c;}//--------------------------------运算界面----------------------------------- int mainmenu(){double x,y;char ys;jsq j;int i,ch;for(i=1;i<=7;i++){ // 重复输出用户守则 cout<<" * * * * * * * 运算界面 * * * * * * *"<<endl;cout<<" * 加法:+ *"<<endl;cout<<" * 减法: - *"<<endl;cout<<" * 乘法: * *"<<endl;cout<<" * 除法: / *"<<endl;cout<<" * 幂次: ^ *"<<endl;cout<<" * * * * * * * * * * * * * * * * * * * *"<<endl;cout<<" "<<endl;cout<<"请您输入要计算的算式:\n";cin>>x>>ys;switch(ys){ //判断所输入的运算符case'+':cin>>y;j.set(x,y);j.add();break;case'-':cin>>y;j.set(x,y);j.sub();break;case'*':cin>>y;j.set(x,y);j.mul();break;case'/':cin>>y;j.set(x,y);j.div();break;case'^':cin>>y;j.set(x,y);j.cf();break;case'!':if(x<0)cout<<" 请输入非负数 ";else if(x==0)cout<<" 0的阶乘"<<"="<<"0 ";elsejc(x);break;default:cout<<"输入出现错误!!!";break;}/*cout<<"是否继续(a/b):"<<endl;char ch='a';if(ch=='a'){continue;}elsebreak;*/}return 0;}int tuichu(){cout<<" "<<endl;cout<<" 已退出 "<<endl;cout<<" ──────◎谢谢使用◎──────"<<endl;exit(0);}//--------------------------------主菜单----------------------------------- void main(){int n=0;cout<<" ───────欢迎使用─────"<<endl;cout<<" * * * * * * * * * * * * * * * * * * * *"<<endl;cout<<" * 1.进入运算 *"<<endl;cout<<" * 2.结束退出 *"<<endl; cout<<" * * * * * * * * * * * * * * * * * * * *"<<endl; int choose;for(;;){choose=menu_select();switch(choose){case 1:mainmenu();break;case 2:tuichu();break;}}}五、使用说明:1.程序运行后,进入界面:2.在如上所示的界面下,根据提示进行基本的操作。

c#实验报告_简易计算器

c#实验报告_简易计算器

重庆邮电大学移通学院C#课程设计一、实验目的:构造一个类似Windows自带的计算器一样的简易计算器,能够连续进行加、减、乘、除四则整数运算,并能随时清除计算结果进行下一次计算。

二、具体实验步骤:1、添加编辑框对应的变量m_Display2、添加运算符类型变量char CompuType; //用于存储运算符类型CString FirstInput; //用于保存运算符前面的输入值三、实验内容设计的基本要求:能正确输入数据,能实现加,减,乘,除等算术运算,能实现简单的三角运算,运行结果能正确显示,可以清除数据等。

1、要点分析:这是一个简单的对话窗体设计,涉及button,editbox,static text,radio button,group box等控件,主要影响事件为BN_CLICKED2、程序源代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace Study{public partial class Form1 : Form{public Form1(){InitializeComponent();}private int opMain = 0; // 运算类型,其中1(加法) 2(减法) 3(乘法) 4(除法)private double mainNum1 = 0; // 存储第一个数private double mainNum2 = 0; // 存储第二个数private bool isSecond = false; // 用来判断输入的是第一个还是第二个数private bool isDone = false; // 用来判断是否按了等于按钮private bool isDecimal = false; // 用来判断是否有小数private bool isNokeydown = false;// 用来判断是否没输入第二个数而按了"="号键private bool isKeyupclear = true;//用来判断是否按了clear键,程序开始前默认按了;public void setText(string textest) //设置文本框的值{if (textest.Equals("clear")){textBox1.Text = "0.";isSecond = false;isDone = false;isDecimal = false;isKeyupclear = true;}else{if (isSecond){textBox1.Text = textest;isSecond = false;isDecimal = false;}else{if (isDone){textBox1.Text = textest;isDone = false;}else{if (isKeyupclear) //对是否按下clear键的判断{textBox1.Text = textest;isKeyupclear = false;}elsetextBox1.Text += textest;}}}btnEqual.Select(); //设置"="号的焦点}public void Calc(double num1, double num2, int op){double answer = 0;switch (op) //判断所进行的运算{case 1:answer = num1 + num2;break;case 2:answer = num1 - num2;break;case 3:answer = num1 * num2;break;case 4:answer = num1 / num2;break;case 5:answer = num1 % num2;break;}setText(answer.ToString()); //显示结果}//执行运算private void doEquals(){if (isNokeydown) //判断已经输入第二个数后按了"="号键{mainNum2 = double.Parse(textBox1.Text);setText("clear");Calc(mainNum1, mainNum2, opMain);isDone = true;isNokeydown = false;}}//切换正负private void changeSign(){double storNum;if (textBox1.Text.Length > 0){storNum = double.Parse(textBox1.Text); storNum *= -1;textBox1.Text = storNum.ToString();}btnEqual.Select(); //设置"="号的焦点}//设置运算类型private void setOperator(int operation){if (textBox1.Text.Length > 0){opMain = operation;mainNum1 = double.Parse(textBox1.Text); isSecond = true;isDone = false;isNokeydown = true;btnEqual.Select(); //设置"="号的焦点}}//设置小数点private void setDecimal(){if (!isDecimal){setText(".");isDecimal = true;}btnEqual.Select(); //设置"="号的焦点}//开平方private void doSquart(){double storNum;storNum = double.Parse(textBox1.Text);if (storNum > 0){storNum = Math.Sqrt(storNum);textBox1.Text = storNum.ToString();}elsetextBox1.Text = "负数不能开平方。

毕业设计简易加减乘除计算器

毕业设计简易加减乘除计算器

毕业设计题目简易加减乘除计算器系别专业班级姓名学号指导教师日期设计任务书设计题目:简易加减乘除计算器设计要求:1.根据所学内容运用编程做一个简易加减乘除计算器,实现加、减、乘、除、等以及清零的功能。

2.设置一组数码管, 使其能够显示程序运行,按键动作的内容。

3.设置一组按键,使其键依次对应0——9、“+”、“-”、“*”、“/”、“=”和清除键。

4.可以进行小于255的数的加减乘除运算,并可连续运算。

当键入值大于255时,将自动清零,可重新输入。

设计进度要求:第一周:确定题目,寻找单片机和计算器设计的相关资料;第二周:读懂资料,有初步的设计思路;第三周:绘制硬件电路图;第三周:设计软件框图;第四周:相应软件设计(程序设计);第五周:进行程序调试并且修改;第六周:写毕业设计论文;第七周:修改并提交毕业设计;第八周:准备论文答辩;指导教师(签名):摘要在很多领域的数据处理中要用到数学运算,作为计算机自动处理系统更显得重要。

此项目设计以单片机为核心部件的计算器,采用4*4矩阵式键盘,16个键依次对应0——9、“+”、“-”、“*”、“/”、“=”和清除键。

使用单片机最小应用系统1模块,简单方便。

采用静态显示,显示器由5个共阴极数码管组成。

输入只有两个信号,它们是串行数据线DIN和移位信号CLK。

5个串/并行移位寄存器芯片74LS164首尾相连。

每片的并行输出作为LED数码管的段码。

本计算器系统简单,实用性强,成本低,使用维护方便,软件功能强,运行稳定可靠等优点。

关键词:单片机,计算器,键盘,静态显示前言随着半导体集成工艺的不断发展,单片机的集成度将更高、体积将更小、功能将更强。

在单片机家族中,80C51系列是其中的佼佼者,加之Intel公司将其MCS –51系列中的80C51内核使用权以专利互换或出售形式转让给全世界许多著名IC制造厂商,如Philips、 NEC、Atmel、AMD、华邦等,这些公司都在保持与80C51单片机兼容的基础上改善了80C51的许多特性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简单的计算器模拟程序的设计和实现1.问题描述对任意给定的正确四则运算表达式,程序计算其结果值并输出。

程序无需查错功能,假定所输入的都是正确的四则运算表达式,并且表达式中运算分量均为无正负号整数,运算符为 +、-、*、/,表达式以字符 "=" 结束。

程序应有操作提示、输入和输出,界面追求友好,最好是菜单式的界面。

2.设计说明2.1简要的分析根据要求,要先输入包含有+,-,*,/的运算符的表达式,然后经过计算得到正确的答案。

从键盘中输入的是ASCII码,因此要将其转换为十进制的数据然后才能进行计算。

如果输入混合表达式,要将中缀式先变化成后缀式,然后再进行计算。

2.2概要分析2.2.1 定义的数据段用于定义一些中间变量,并将显示在试验界面上,以及提示信息。

data segmentstri db 50 dup(0)exp db 30 dup(0)track db 30 dup(0)instr db 100 dup(0)msg0 db 'please input your formular:',0dh,0ah,'$'msg1 db 0dh,0ah,'wrong input','$'msg2 db 0dh,0ah,') and ( does not match','$'msg3 db 0dh,0ah,'div zero error','$'msg4 db 0dh,0ah,'sorry,minus data appears','$'msg5 db 0dh,0ah,'any key to continue,esc to exit','$'data ends2.2.2 定义的堆栈段声明用于将中缀表达式转换为后缀表达式,以及进行后缀表达式求值过程用到的堆栈段。

stack segment para stackdw 256 dup(0)stack ends2.2.3 用到的子过程2.2.3.1 compare子过程作用:用于判断键盘输入的符号是否合法,若合法,则在屏幕上显示,否则报错。

2.2.3.2 mult子过程作用:用于对输入的数字进行乘10累加操作,以便将连续输入的数字字符串转换为相对应的数值。

2.2.3.3 trans子过程作用:将输入的中缀表达式转换为后缀表达式。

2.2.3.4 value子过程作用:将后缀表达式结合堆栈结构进行表达式求值。

2.2.3.5 divi子过程作用:通过除以10以及进一步处理将某数值转换为相应的ASCII字符串。

2.2.3.6 print子过程作用:将表达式求值结果输出到屏幕上。

3.详细的算法描述3.1.程序运行流程3.2程序代码STACK SEGMENT PARA STACKDW 256 DUP(0)STACK ENDSDATA SEGMENTSTRI DB 50 DUP(0)EXP DB 30 DUP(0)TRACK DB 30 DUP(0)INSTR DB 100 DUP(0)MSG0 DB 'please input the formular:',0DH,0AH,'$'MSG1 DB 0DH,0AH,'sorrry,wrong input','$'MSG2 DB 0DH,0AH,') and ( does not match','$'MSG3 DB 0DH,0AH,'div by zero error','$'MSG4 DB 0DH,0AH,'sorry,minus data appears','$'MSG5 DB 0DH,0AH,'any key to continue,esc to exit','$'DATA ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK,DS:DATA START: MOV AX,STACKMOV SS,AXMOV AX,DATAMOV DS,AXMOV DX,OFFSET MSG0MOV AH,9INT 21HXOR AX,AX;READMOV BX,OFFSET INSTRMOV DL,20HJMP L2COMPARE PROC NEARCMP AL,0DHJZ L2MOV DL,ALMOV AH,2INT 21HRETCOMPARE ENDPL2: MOV AH,8INT 21HCALL COMPARECMP AL,3DH ;end with '='JZ L2_OVERMOV AH,39HCMP AH,AL ;del the wrong data ( > 9 )JNB CONTIMOV AH,2MOV DL,8INT 21HMOV DL,20HINT 21HMOV DL,8INT 21HJMP L2CONTI: CMP AL,28H ;'('JZ L2_YESCMP AL,29HJZ L2_YES ;')'CMP AL,2AH ;'*'JZ L2_YESCMP AL,2BH ; '+'JZ L2_YESCMP AL,2DH ; '-'JZ L2_YESCMP AL,2FH ; '/'JZ L2_YES; back function ' <- 'CMP AL,08HJNZ NO_8L2_NEXT: PUSH DXMOV DL,20HMOV AH,2INT 21HMOV DL,8MOV AH,2INT 21HCMP BX,OFFSET INSTRJZ L2DEC BXMOV AL,0MOV [BX],ALPOP DXJMP L2;NO_8: MOV AH,2FHCMP AH,AL ;del the wrong data ( < 0 )JB L2_YESMOV AH,2MOV DL,8INT 21HMOV DL,20HINT 21HMOV DL,8INT 21HJMP L2L2_YES: MOV DH,DLMOV DL,ALCMP DL,20HJNZ L2_NO20CMP DH,20HJZ L2L2_NO20: MOV [BX],ALINC BXJMP L2L2_OVER: MOV AH,3DHMOV [BX],AH;check inputMOV SI,OFFSET INSTRMOV AH,30HMOV CH,0 ;record ( )MOV CL,0L3: MOV AL,[SI]INC SICMP AL,3DHJZ L3_OVERCMP AL,2AHJNB MAY_WRONGCMP AL,29HJZ L3_29INC CHJMP L3_RIGHTL3_29: INC CLJMP L3_RIGHTMAY_WRONG: CMP AL,30HJNB L3_RIGHTCMP AL,28HJZ L3_RIGHTCMP AH,29HJZ L3_RIGHT;cmp ah,28h;jz L3_rightCMP AH,30HJNB L3_RIGHTMOV DX,OFFSET MSG1MOV AH,9INT 21HJMP OVER3L3_RIGHT: MOV AH,ALJMP L3L3_OVER: CMP CH,CLJZ INPUT_WRIGHTMOV DX,OFFSET MSG2MOV AH,9INT 21HJMP OVER3;;chech overINPUT_WRIGHT: MOV BX,OFFSET STRIMOV SI,OFFSET INSTR;readREAD: ;mov ah,1;int 21hMOV AL,[SI] ;reserve the data by decimal{test}INC SIMOV AH,28H ;(CMP AH,ALJZ IN_STRIMOV AH,29H ;)CMP AH,ALJZ IN_STRIMOV AH,2AH ;*CMP AH,ALJZ IN_STRIMOV AH,2BH ;+CMP AH,ALJZ IN_STRIMOV AH,2DH ;-CMP AH,ALJZ IN_STRIMOV AH,2FH ;/CMP AH,ALJZ IN_STRIMOV AH,2FH ;delete the wrong inputCMP AH,ALJNB READMOV AH,3DH ;=CMP AH,ALJZ IN_STRIMOV AH,39H ;delete the wrong inputCMP AH,ALJB READCALL NEAR PTR MULTJMP READ ; the end of reserve;IN_STRI: MOV AH,0CMP AH,[BX]JZ NO_BX ;inc bxINC BXNO_BX: MOV [BX],ALMOV AH,3DHCMP AH,ALJNZ NO_OVERSUB AL,25 ;transplant '=' to '$'MOV [BX],ALJMP OVERNO_OVER: JMP READMULT PROC NEAR ;mult data*10,add upPUSH DXPUSH CXPUSH AXMOV AH,0CMP [BX],AHJZ NO_INC_BXMOV AH,30HCMP [BX],AHJNB NO_INC_BXINC BXNO_INC_BX: MOV DX,0MOV CX,10MOV AH,[BX]CMP AH,30HJB NO_SUBSUB AH,30HNO_SUB: MOV [BX],AHNEXT: ADD DX,[BX]LOOP NEXTSUB AL,30H ;tras to decimalADD DL,ALMOV [BX],DLMOV AH,[BX]ADD AH,30HMOV [BX],AHPOP AXPOP CXPOP DXRETMULT ENDP;;end of readOVER: CALL NEAR PTR TRANS ;the outlet of the programOVER1: CALL NEAR PTR VALUE ;jmp instead of ret inprocedure transOVER2: CALL NEAR PTR PRINTOVER3: MOV AH,9MOV DX,OFFSET MSG5INT 21HMOV AH,8INT 21HCMP AL,1BHJZ OVER4MOV CX,210MOV BX,OFFSET STRIMOV AL,0OVER_LOOP: MOV [BX],ALINC BXLOOP OVER_LOOPMOV AH,2MOV DL,0DHINT 21HMOV DL,0AHINT 21HJMP STARTOVER4: MOV AH,4CHINT 21H;;transTRANS PROC NEAR ;PUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIXOR CX,CXMOV BX,OFFSET STRIMOV SI,OFFSET EXPMOV DI,OFFSET TRACKTRANS_WHILE:MOV AL,[BX]INC BXMOV AH,24H ;'$'CMP AH,ALJZ TRANS_OVER ;end with '='MOV AH,2FH ;judge L digitalCMP AH,ALJNB NO_DIGITALMOV [SI],ALINC SIJMP TRANS_WHILENO_DIGITAL: MOV AH,28H ;judge L '('CMP AH,ALJNZ NO_9MOV [DI],AL ;push alINC DIJMP TRANS_WHILENO_9: MOV AH,29H ;judge L ')'CMP AH,ALJNZ NO_0POP_WHILE: DEC DIMOV AL,[DI] ; pop alMOV AH,28HCMP AH,ALJZ OVER_POP_WHILEMOV [SI],ALINC SIJMP POP_WHILEOVER_POP_WHILE:;mov al,dlJMP TRANS_WHILENO_0: MOV AH,2BHCMP AH,ALJZ OR1_YESMOV AH,2DHCMP AH,AL ;if al is '+' or '-'JNZ NO_OR1OR1_YES:CMP DI,OFFSET TRACK ;jmp if stack is blankJZ STACK_BLANKDEC DI ;pop alMOV CL,[DI]MOV AH,28HCMP AH,CLJZ OVER_OR1_YESMOV [SI],CLINC SIJMP OR1_YESOVER_OR1_YES: MOV [DI],CLINC DI;reserve the ')'STACK_BLANK: MOV [DI],AL ;push alINC DIJMP TRANS_WHILENO_OR1: MOV AH,2AHCMP AH,ALJZ OR2_YESMOV AH,2FHCMP AH,ALJNZ NO_OR2 ;if al is '*' or '/' OR2_YES: DEC DI ;push dlMOV CL,[DI]MOV AH,2AHCMP AH,CLJZ OR2_YES_ORMOV AH,2FHCMP AH,CLJNZ OR2_OVEROR2_YES_OR: MOV [SI],CLINC SIJMP OR2_YESOR2_OVER: MOV [DI],CLINC DI ;push alMOV [DI],ALINC DINO_OR2: ;mov al,[bx];inc bx;JMP TRANS_WHILETRANS_OVER: CMP DI,OFFSET TRACKJZ POP_OVERDEC DIMOV AL,[DI]MOV [SI],ALINC SIJMP TRANS_OVERPOP_OVER: MOV AL,24H ;end with '='MOV [SI],ALPOP DIPOP SIPOP DXPOP CXPOP BXPOP AXJMP OVER1TRANS ENDP; end of trans;start valueVALUE PROC NEAR ;get the valuePUSH AXPUSH BXPUSH CXPUSH DXPUSH SIMOV BX,OFFSET EXPMOV SI,OFFSET TRACKXOR AX,AXVALUE_WHILE: MOV AL,[BX]INC BXMOV AH,24HCMP AH,ALJZ VALUE_OVERMOV AH,2FH ;judge L digitalCMP AH,ALJNB VALUE_NO_DIGITALSUB AL,30HMOV [SI],ALINC SIJMP VALUE_WHILEVALUE_NO_DIGITAL: MOV AH,2BH ;+ CMP AH,ALJNZ NO_ADDDEC SIMOV DL,[SI]DEC SIMOV DH,[SI]ADD DH,DLMOV [SI],DHINC SIJMP VALUE_WHILENO_ADD: MOV AH,2DH ;-CMP AH,ALJNZ VALUE_NO_SUBDEC SIMOV DL,[SI]DEC SIMOV DH,[SI]CMP DH,DLJNB SUB_RIGHTMOV DX,OFFSET MSG4MOV AH,9INT 21HJMP OVER3SUB_RIGHT: SUB DH,DLMOV [SI],DHINC SIJMP VALUE_WHILEVALUE_NO_SUB: MOV AH,2AH ;*CMP AH,ALJNZ NO_MULDEC SIMOV DH,[SI]DEC SIMOV AL,[SI]MUL DHMOV [SI],ALINC SIJMP VALUE_WHILENO_MUL: MOV AH,2FH ;/CMP AH,ALJNZ NO_DIVDEC SIMOV DH,[SI]DEC SIMOV AL,[SI]XOR AH,AHCMP DH,0JNZ DIV_RIGHTMOV DX,OFFSET MSG3MOV AH,9INT 21HJMP OVER3DIV_RIGHT: DIV DHMOV [SI],ALINC SINO_DIV: JMP VALUE_WHILE;VALUE_OVER: POP SIPOP DXPOP CXPOP BXPOP AXRETVALUE ENDP; end value procedure;;start printPRINT PROC NEARPUSH AXPUSH DX;mov dl,al;mov ah,2;int 21h;mov dl,0dh;mov ah,2;int 21h;mov dl,0ah;mov ah,2;int 21hMOV BX,OFFSET TRACKCALL NEAR PTR DIVIDEC ALOK: POP DXPOP AXRETPRINT ENDP ;end of print;DIVI PROC NEAR ;div data/10 funtion:print the data PUSH BXPUSH AXPUSH DXMOV AL,[BX]XOR AH,AHXOR CX,CXNEXT1: MOV BL,0AHDIV BLMOV DL,AHADD DL,30HXOR DH,DHPUSH DXINC CXMOV DH,0H ;judge L the endCMP DH,ALJNB DIVI_OVER1XOR AH,AHJMP NEXT1DIVI_OVER1: POP DXMOV AH,2INT 21HLOOP DIVI_OVER1MOV DL,20HMOV AH,2INT 21HPOP DXPOP AXPOP BXRETDIVI ENDP; end of printCODE ENDSEND START 4.测试结果进行加法运算得到的结果为进行结果为负数的减法运算进行除数为0的除法运算进行加减乘除混合运算5.使用说明当进入操作界面后,提示输入正确的表达式,以等号结束,然后程序给出正确结果。

相关文档
最新文档