加减乘除计算器设计

合集下载

JavaFx-编写一个简单的计算器,实现加减乘除

JavaFx-编写一个简单的计算器,实现加减乘除

JavaFx-编写⼀个简单的计算器,实现加减乘除0.题⽬描述编写⼀个简单的计算器,完成加、减、乘、除的功能1.源代码import javafx.application.Application;import javafx.stage.Stage;import yout.HBox;import yout.BorderPane;import bel;import javafx.scene.control.TextField;import javafx.scene.control.Button;import javafx.scene.Scene;import javafx.geometry.Insets;import javafx.geometry.Pos;public class Test2 extends Application {private TextField num1 = new TextField();private TextField num2 = new TextField();private TextField res = new TextField();private Button btAdd = new Button("Add");private Button btSub = new Button("Subtract");private Button btMul = new Button("Multiply");private Button btDiv = new Button("Divide");@Overridepublic void start(Stage primaryStage) {HBox top = new HBox();top.setAlignment(Pos.CENTER);top.setPadding(new Insets(5,10,5,10));top.setSpacing(10);top.getChildren().addAll(new Label("Number1"),num1,new Label("Number2"),num2,new Label("Result"),res);HBox bottom = new HBox();bottom.setAlignment(Pos.CENTER);bottom.setPadding(new Insets(5,10,5,10));bottom.setSpacing(10);bottom.getChildren().addAll(btAdd,btSub,btMul,btDiv);BorderPane pane = new BorderPane();pane.setTop(top);pane.setBottom(bottom);btAdd.setOnAction(e -> Add());btSub.setOnAction(e -> Sub());btMul.setOnAction(e -> Mul());btDiv.setOnAction(e -> Div());Scene scene = new Scene(pane, 900, 80);primaryStage.setResizable(false);primaryStage.setScene(scene);primaryStage.setTitle("Calculator");primaryStage.show();}private void Add() {double n1 = Double.parseDouble(num1.getText());double n2 = Double.parseDouble(num2.getText());res.setText(String.format("%.2f", n1+n2));}private void Sub() {double n1 = Double.parseDouble(num1.getText());double n2 = Double.parseDouble(num2.getText());res.setText(String.format("%.2f", n1-n2));}private void Mul() {double n1 = Double.parseDouble(num1.getText());double n2 = Double.parseDouble(num2.getText());res.setText(String.format("%.2f", n1*n2));}private void Div() {double n1 = Double.parseDouble(num1.getText());double n2 = Double.parseDouble(num2.getText());res.setText(String.format("%.2f", n1/n2));}public static void main(String[] args) {unch(args);}}2.运⾏结果3.技术总结 上半部分放⼊⼀个HBox中,下半部分放⼊⼀个HBox中。

简易计算器(源码)

简易计算器(源码)

简易计算器(源码)以下是一个简易计算器的Python源码,用于执行基本的加、减、乘、除运算:```python#简易计算器def add(x, y):"""相加"""return x + ydef subtract(x, y):"""相减"""return x - ydef multiply(x, y):"""相乘"""return x * ydef divide(x, y):"""相除"""if y != 0:return x / yelse:return "除数不能为零!"print("选择操作:")print("1. 相加")print("2. 相减")print("3. 相乘")print("4. 相除")choice = input("输入你的选择(1/2/3/4): ")num1 = float(input("输入第一个操作数: "))num2 = float(input("输入第二个操作数: "))if choice == '1':print(num1, "+", num2, "=", add(num1, num2))elif choice == '2':print(num1, "-", num2, "=", subtract(num1, num2)) elif choice == '3':print(num1, "*", num2, "=", multiply(num1, num2)) elif choice == '4':print(num1, "/", num2, "=", divide(num1, num2)) else:print("无效的选择")```以上代码中,我们定义了四个函数:`add`、`subtract`、`multiply`和`divide`,分别用于执行相加、相减、相乘和相除的操作。

易语言编写计算器教学

易语言编写计算器教学

易语⾔编写计算器教学教⼤家⽤易语⾔实现加减乘除的运算!
1、先打开易语⾔!添加4个按钮!3个编辑框!布置好
2、把标题改⼀下
3、然后开始写代码!先写加的吧!双击加的按钮!来到代码区域!代码如下!看图!⼤家照着写就可以了!
4、再到减的!看图!也是照着写就⾏了!
5、这是乘法的!照着写!那个乘号是按Shift再按U上⾯的8!易语⾔会⾃动转化成乘号的!
6、接下来是除法!如图那个除号打右斜杠就可以了!易语⾔也会⾃动转化成除号的!
7、好接下来我们试试看!按F5运⾏!先试试加法!如图⼀!12+2=14!没有错!再试试减法!图⼆!乘法图三!除法图四!看吧!都对了!
8、/8
是不是很简单啊?⼤家可以⾃⼰制作⼀个⼩计算器哦!
是不是很简单啊?⼤家可以⾃⼰制作⼀个⼩计算器哦!
总结:上⾯就是通过8个简单的步骤⽤易语⾔编写⼀款技巧器⼩软件,感谢⼤家的阅读和对的⽀持。

单片机十进制加法计算器设计.

单片机十进制加法计算器设计.

单⽚机⼗进制加法计算器设计.⽬录⼀、设计任务和要求 (2)1、1 设计要求 (2)1、2 性能指标 (2)1、3 设计⽅案的确定 (2)⼆、单⽚机简要原理 (2)2、1 AT89C51的介绍单⽚机最⼩系统 (2)2、2 单⽚机最⼩系统 (2)三、硬件的设计 (4)3、1 键盘电路的设计 (4)3、2 显⽰电路的设计 (5)四、软件的设计 (6)4、1 系统设计 (6)4、2 显⽰电路的设计 (8)五、调试与仿真 (10)5、1 Keil C51单⽚机软件开发系统 (10)5、2 proteus的操作 (10)六、总结 (11)七、参考⽂献 (11)附录1 程序 (12)附录2 系统硬件电路图 (18)⼀、设计任务和要求1.1 设计要求本次课程设计,我选择的课题是单⽚机⼗进制加法计算器软硬件设计,设计任务为:设计⼀键盘显⽰装置,键盘上除需定义10个⼗进制数字键外还要相应的功能键,其它键不定义⽆响应。

利⽤此系统可分别可输⼊⼗进制被加数与加数,实现两数相加并将结果以⼗进制形式显⽰出来。

1.2 性能指标本课程设计的⼗进制加法计算器的计算范围为0~255,计算结果全为整数,计算结果溢出结果不显⽰。

1、加法:三位加法,计算结果超过255溢出不显⽰2、减法:三位减法,计算结果若⼩于零溢出不显⽰3、乘法:三位数乘法4、除法:整数除法5、有清零功能1.3 设计⽅案的确定按照1.1的设计要求,本课题需要使⽤数码管显⽰和扩展4*4键盘,由于AT89C51芯⽚的I⼝不够多,⽽且为了硬件电路设计的简单化,故选择串⾏动态显⽰和⽤P1⼝扩展4*4键盘,扩展的4*4键盘定义⼗个数字键,六个功能键,使⽤串⾏动态显⽰显⽰运算结果。

主程序进⾏初始化,采⽤⾏列扫描进⾏查表得出键值,每次按键后调⽤显⽰⼦程序。

⼆、单⽚机简要原理在该课程设计中,主要⽤到⼀个AT89C51芯⽚和串接的共阴数码管。

作为该设计的主要部分,下⾯将对它们的原理及功能做详细介绍和说明。

(完整word版)计算器的设计

(完整word版)计算器的设计

目录1。

设计要求 (2)2.设计方案与论证 (2)2.1总体设计思路 (2)2。

2总体方案 (2)3.设计原理及电路图 (4)3.1硬件设计 (4)3。

2软件设计 (11)3。

3 算术运算程序设计 (12)3。

4 显示程序设计 (13)4。

器件清单 (14)5.器件识别与检测 (15)6。

控制系统实现(软件编程与调试) (16)6。

1 硬件调试 (17)6.2 软件调试 (17)6。

3软件编程 (18)7。

设计心得 (28)8。

参考文献 (29)1。

设计要求要求计算器能实现加减乘除四种运算,具体如下:1.加法:四位整数加法,计算结果若超过四位则显示计算错误2.减法:四位整数减法,计算结果若小于零则显示计算错误3.乘法:多位整数乘法,计算结果若超过四位则显示计算错误4.除法:整数除法5.有清除功能设计要求:分别对键盘输入检测模块;LCD显示模块;算术运算模块;错误处理及提示模块进行设计,keil与protues仿真分析其设计结果。

2。

设计方案与论证2。

1总体设计思路:本计算器是以MCS-51系列8051单片机为核心构成的简易计算器系统。

该系统通过单片机控制,实现对4*4键盘扫描进行实时的按键检测,并把检测数据存储下来。

整个计算器系统的工作过程为:首先存储单元初始化,显示初始值和键盘扫描,判断按键位置,查表得出按键值,单片机则对数据进行储存与相应处理转换,之后送入数码管动态显示。

整个系统可分为三个主要功能模块:功能模块一,实时键盘扫描;功能模块二,数据转换为了数码管显示;功能模块三,数码管动态显示。

2.2总体方案:根据功能和指示要求,本系统选用以MCS—51单片机为主控机.通过扩展必要的外围接口电路,实现对计算器的设计。

具体设计如下:1、由于要设计的是简单的计算器,可以进行四则运算,为了得到教好的显示效果,采用LCD 显示数据和结果。

2、另外键盘包括数字键(0—9)、符号键(+、—、*、/)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算机键盘.3、执行程序:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、—、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果.4、错误提示:当单片机执行程序中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算器得到的结果大于计算器的显示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD上提示错误.①由于要设计的是简单的计算器,可以进行四则运算,对数字的大小范围要求不高故我们采用可以进行四位数字的运算,选用8 个LED 数码管显示数据和结果。

数字逻辑电路课程课程设计--简易加减计算器

数字逻辑电路课程课程设计--简易加减计算器

摘要本次课程设计的任务是设计一个具有加减运算功能的简易计算器,并通过合适的方式来显示最后的计算结果。

此次设计电路的完成主要是利用简单的数字电路和电路逻辑运算来进行的。

简易加减计算器电路主要是对数据的输入与显示,数据的加减运算,数据的输出与显示三个主要的方面来设计研究完成的。

在输入电路的部分,我们通过开关的闭合与断开来实现数据的输入,开关闭合接入高电平“1”,断开接入低电平“0”。

而输入的数据将通过显示译码管以十进制的形式显示出来。

由于输入二进制的位数较多,我们采用个位十位分别输入的方式来简化电路。

加减运算电路则主要通过加法器来实现的。

设计电路时,我们将个位和个位、十位和十位分别接入一片加法器。

在进行加法运算时我们所选择的加法器是完全符合要求的,但是在进行减法运算时加法器就不能满足我们的设计要求了。

因此我们将减法转换为加法进行运算,运算时采用补码的形式。

在进行减法时通过异或门将减数的原码全部转换为补码,输入加法器中进行相加。

最后将进位信号加到十位的运算电路上就实现了加减法的运算电路。

在显示电路中,由加法器输出的数据是二进制码。

这些码可能表示超过十的数字,所以显示译码管就不能正确的显示出数字了。

此时要将二进制转化成BCD码,再将BCD 码送到显示译码管中就可以将计算所得的数字显示出来了。

概述1.1设计题目:简易加减计算器1.2设计任务和要求:1)用于两位以下十进制数的加减运算。

2)以合适的方式显示输入数据及计算结果。

1.3设计方案比较:方案一:输入十进制的数字,再通过编码器对十进制的数字进行编码,输出二进制的数据。

运用显示译码器对输入的数字以十进制的形式进行显示。

在进行加减计算的时候将二进制数字运用数模转换,然后再进行相加减。

然后将这些模拟信号再次转换成数字信号转换成数字信号,再将数字信号输入到显示译码管中来显示数剧。

这个方案中要进行数模转换和模数转换所需要的电路器件有些复杂,并且转换的时候需要很长的时间,而且转换以后数值的精度不高。

c语言计算器加减乘除开方混合计算和清零代码

c语言计算器加减乘除开方混合计算和清零代码

C语言计算器加减乘除开方混合计算和清零代码一、介绍计算器是人们日常生活中常用的工具之一,通过计算器可以进行加减乘除等基本运算,还可以进行开方等复杂运算。

本文将介绍使用C语言编写计算器的加减乘除开方混合计算和清零代码。

二、加法运算代码加法运算是计算器最基本的运算之一,以下是C语言中加法运算的代码示例:```c#include <stdio.h>int m本人n() {int num1, num2, sum;printf("请输入两个整数:");scanf("d d", num1, num2);sum = num1 + num2;printf("它们的和是:d\n", sum);return 0;}```三、减法运算代码接下来是减法运算的C语言代码示例:```c#include <stdio.h>int m本人n() {int num1, num2, diff;printf("请输入两个整数:");scanf("d d", num1, num2);diff = num1 - num2;printf("它们的差是:d\n", diff);return 0;}```四、乘法运算代码乘法运算是计算器中常用的运算之一,以下是C语言中乘法运算的代码示例:```c#include <stdio.h>int m本人n() {int num1, num2, product;printf("请输入两个整数:");scanf("d d", num1, num2);product = num1 * num2;printf("它们的积是:d\n", product);return 0;}```五、除法运算代码除法运算涉及到除数不能为0的情况,以下是C语言中除法运算的代码示例:```c#include <stdio.h>int m本人n() {float num1, num2, quotient;printf("请输入两个数:");scanf("f f", num1, num2);if(num2 != 0) {quotient = num1 / num2;printf("它们的商是:.2f\n", quotient);} else {printf("除数不能为0!\n");}return 0;}```六、开方运算代码开方运算是比较复杂的运算之一,以下是C语言中开方运算的代码示例:```c#include <stdio.h>#include <math.h>int m本人n() {float num, sqrt_num;printf("请输入一个数:");scanf("f", num);if(num >= 0) {sqrt_num = sqrt(num);printf("它的开方是:.2f\n", sqrt_num);} else {printf("输入的数不能为负数!\n");}return 0;}```七、混合计算代码有时候计算器需要进行混合运算,即在一个表达式中包含多种运算,以下是C语言中混合计算的代码示例:```c#include <stdio.h>int m本人n() {float num1, num2, result;char operator;printf("请输入一个表达式(如:2+3*4):");scanf("f c f", num1, operator, num2);switch(operator) {case '+':result = num1 + num2;break;case '-':result = num1 - num2;break;case '*':result = num1 * num2;break;case '/':if(num2 != 0) {result = num1 / num2;} else {printf("除数不能为0!\n"); return 1;}break;default:printf("无效的运算符!\n"); return 1;}printf("结果是:.2f\n", result);return 0;}```八、清零代码最后一个功能是清零,即将计算器上的结果归零,以下是C语言中清零的代码示例:```c#include <stdio.h>int m本人n() {float result = 0;printf("当前结果为:.2f\n", result);char choice;printf("是否清零?(Y/N):");scanf(" c", choice);if(choice == 'Y' || choice == 'y') {result = 0;printf("已清零,当前结果为:.2f\n", result);} else if(choice == 'N' || choice == 'n') {printf("未清零,当前结果为:.2f\n", result);} else {printf("无效的输入!\n");}return 0;}```九、结论在本文中,我们以C语言的形式介绍了计算器的加减乘除开方混合计算和清零代码。

简易加减计算器设计(数电)

简易加减计算器设计(数电)

电子技术课程设计电气与信息工程学院建筑电气与智能化专业题目:简易加减计算器设计姓名:徐雪娇学号:094412110指导教师:祁林简易加减计算器设计一、设计目的1、在前导验证性认知实验基础上,进行更高层次的命题设计实验.2、在教师指导下独立查阅资料、设计、特定功能的电子电路。

3、培养利用数字电路知识,解决电子线路中常见实际问题的能力.4、积累电子制作经验,巩固基础、培养技能、追求创新、走向实用。

5、培养严肃认真的工作作风和严谨的科学态度。

二、设计要求1、用于两位一下十进制的加减运算。

2、以合适方式显示输入数据及计算结果。

三、总体设计第一步置入两个四位二进制数。

例如(1001)2,(0011)2和(0101)2,(1000)2,同时在两个七段译码显示器上显示出对应的十进制数9,3和5,8。

第二步通过开关选择加(减)运算方式;第三步若选择加运算方式所置数送入加法运算电路进行运算;同理若选择减运算方式,则所置数送入减法运算电路运算;第四步前面所得结果通过另外两个七段译码器显示。

即:方案一通过开关J1-J8接不同的高低电平来控制输入端所置的两个一位十进制数,译码显示器U10和U13分别显示所置入的两个数。

数A直接置入四位超前进位加法器74LS283的A4-A1端,74LS283的B4-B1端接四个2输入异或门。

四个2输入异或门的一输入端同时接到开关S1上,另一输入端分别接开关J5-J8,通过开关J5-J8控制数B的输入。

当开关S1接低电平时,B与0异或的结果为B,通过加法器74LS283完成两个数A和B的相加。

当开关J1接高电平时,B与1异或的结果为B非,置入的数B在74LS283的输入端为B的反码,且74LS283的进位信号C0为1,其完成S=A+B(反码)+1,实际上其计算的结果为S=A-B完成减法运算。

由于译码显示器只能显示0-9,所以当A+B>9时不能显示,我们在此用另一片芯片74LS283完成二进制码与8421BCD码的转换,即S>9(1001)时加上6(0110)2,产生的进位信号送入译码器U12来显示结果的十位,U11 2显示结果的个位。

C语言实现简易计算器(可作加减乘除)

C语言实现简易计算器(可作加减乘除)

C语⾔实现简易计算器(可作加减乘除)C语⾔实现简易计算器(加减乘除)计算器作为课设项⽬,已完成答辩,先将代码和思路(注释中)上传⼀篇博客已增添、修改、整理⾄⽆错且可正常运⾏虽使⽤了栈,但初学者可在初步了解栈和结构语法后理解代码#include <stdlib.h>#include <stdio.h>#include <string.h>#define IsDouble 0#define IsChar 1//_______________________________________________________________________________________________________________________________________________________ //1.⽀持浮点数和字符的栈typedef struct {char * buffer;int typesize;int top;int max;} stack;stack * CreateStack(int max, int typesize);//创建⼀个栈void DestroyStack(stack *);//释放栈的空间void ClearStack(stack *);//清空栈int Push(stack *, void *);//⼊栈int Pop(stack *, void *);//出栈int GetSize(stack *s);//得到栈的⼤⼩int GetTop(stack *, void *);//找到栈顶int IsEmpty(stack *);//判断是否为空栈,空则下溢int IsFull(stack *);//判断栈是否已满,满则溢出stack * CreateStack(int max, int typesize){stack * s = (stack*)malloc(sizeof(stack));//为栈s malloc内存if (!s) return 0;//为结构中buffer元素malloc内存s->buffer = (char *)malloc(sizeof(char) * max * typesize);if (!s->buffer) return 0;//初始化结构中的栈顶,最⼤值,类型⼤⼩s->top = -1;s->max = max;s->typesize = typesize;return s;}void DestroyStack(stack* s){free(s->buffer);//先释放buffer的空间free(s);//在释放s的空间}void ClearStack(stack * s){s->top = -1;//清空栈(栈头位置归零)}int Push(stack * s, void * data){if (IsFull(s)) return 0;//如果栈已满则return 0,防⽌溢出//栈未满则将栈头移动打动下⼀位置,并将data中的元素拷⼊栈中buffer的第top位置s->top++;memcpy(s->buffer + s->top*s->typesize, data, s->typesize);//⼊栈成功return 1return 1;}int Pop(stack * s, void * data){if (IsEmpty(s)) return 0;//出栈判断栈是否为空,若为空则return 0//栈未空则将buffer中top位置的字符拷⼊data记录,并让栈头向前移动⼀个位置memcpy(data, s->buffer + s->top*s->typesize, s->typesize);s->top--;//成功则return 1return 1;}int GetSize(stack *s){return s -> top+1;//栈头位置+1得到⼤⼩}int GetTop(stack *s, void * data){if (IsEmpty(s)) return 0;//如果栈空return 0//栈不为空则将top位置的字符拷回data记录,得到栈头memcpy(data, s->buffer + s->top*s->typesize, s->typesize);//成功则return 1;return 1;}int IsEmpty(stack * s){return s->top == -1;//如果top为-1则栈空}int IsFull(stack * s){return s->top == s->max-1;//如果top为max-1则栈满}//___________________________________________________________________________________________________________________________________________________ //2.定义⼀个cal类型,其中data存数时sign为IsDouble,存字符时,sign为Ischartypedef struct {double data;char sign;} cal;//3.查找对应符号(找到则返回该符号下标)(找不到则说明该部分为数字返回-1)int SearchCode(char ch){char * code = "+-*/()@";//@为终⽌符,算式输⼊结束int index = 0;//while (code[index]){if (code[index] == ch) return index;index++;}return -1;}//4.得到两个符号间的优先级//与SearchCode相对应,char GetPriority(char ch, char next){//创建⼀个perferen表,第i⾏(列)对应SearchCode函数中code中的第i个字符char perferen[7][7] = {">><<<>>",">><<<>>",">>>><>>",">>>><>>","<<<<<=E",">>>>E>>","<<<<<E="};//找到两个形参对应的字符int c = SearchCode(ch);int n = SearchCode(next);//如果找不到对应运算符(字符不是运算符⽽是为数字)return Eif (c==-1 || n==-1) return 'E';//如果找到两个对应运算符则按照优先级表返回两个运算符的优先级return perferen[c][n];}//5.四则运算double add(double a, double b) { return a+b; }double sub(double a, double b) { return a-b; }double mul(double a, double b) { return a*b; }double ddiv(double a, double b) { return a/b; }//整合四种运算double calcu(double a, char ch, double b){double (*calculation[4])(double,double) = {add,sub,mul,ddiv};return calculation[SearchCode(ch)](a,b);}//6.检测字符串int CheckStr(char * buffer){int n;//遍历字符串确保算式中⽆⾮法字符若检测到⾮法字符return 0,若都合法则return 1for (n = 0;buffer[n];n++){if ((SearchCode(buffer[n]) != -1 || buffer[n] == '.' || (buffer[n] >= '0' && buffer[n] <= '9')) && buffer[n] != '@') continue;else return 0;}buffer[n] = '@';//加上终⽌符,表⽰算式结束buffer[n+1] = '\0';return 1;}//7.得到数据转化为double类型存⼊rsint GetDigit(char * buffer, int * n, double * rs){char str[30];int i,j = 0;for (i = 0;SearchCode(buffer[*n]) == -1;i++){str[i] = buffer[*n];//从*n位置开始,将这⼀串数字字符存⼊str(*n)++;}str[i] = '\0';for (i = 0;str[i];i++){if (str[i] == '.') j++;}//如果⼀段⼩数有多个⼩数点或⼩数点在数字⾸尾,return 0if (j>1 || str[i-1] == '.' || str[0] == '.') return 0;//rs接收转化为double的数据*rs = atof(str);//操作成功return 1return 1;}//8.将⽤户输⼊的buffer字符串转化为可供程序运算的calstr数组int resolu(char * buffer, cal * calstr){int i = 0, j = 0;cal c;while (buffer[i]){if (SearchCode(buffer[i]) == -1){//如果得到数据不成功则return 0if (GetDigit(buffer,&i, &c.data) == 0) return 0;//如果成功得到数据则在c.sign标记为浮点数c.sign = IsDouble;//将c存⼊数组calstr中calstr[j++] = c;}else{//若符号为运算符//判断正负号if (buffer[i] == '-' && (buffer[i-1] == '('||buffer[i-1] == '+'||buffer[i-1] == '-'||buffer[i-1] == '*'||buffer[i-1] == '/') || (i==0 && buffer[0] == '-')){ i++;if (GetDigit(buffer,&i, &c.data) == 0) return 0;//在符号的下⼀位开始查找,若找不到数字return 0//否则,给数字取相反数,c.sign标记为浮点数,存⼊calstr中c.data = 0 - c.data;c.sign = IsDouble;calstr[j++] = c;} else//如果是正号,与符号处理⽅式同理if (buffer[i] == '+' && (buffer[i-1] == '('||buffer[i-1] == '+'||buffer[i-1] == '-'||buffer[i-1] == '*'||buffer[i-1] == '/') || (i==0 && buffer[0] == '+')){ i++;if (GetDigit(buffer, &i, &c.data) == 0) return 0;c.sign = IsDouble;calstr[j++] = c;}else{//如果不是正负号,则为运算符,先强制转换为double类型存在c.data⾥,然后c.sign标记为char类型,存⼊calstrc.data = (double)buffer[i++];c.sign = IsChar;calstr[j++] = c;}}}//操作蔡成功则return 1return 1;}//9.计算出结果int result(cal * calstr, double * rs){stack * pst = CreateStack(100,sizeof(char));//运算符栈stack * pnd = CreateStack(100,sizeof(double));//数据栈double num1,num2;int n = 0;char ch = '@';Push(pst, &ch);//在转换得到的calstr中遍历直到终⽌符'@"while(ch != '@' || !(calstr[n].sign == IsChar && (char)calstr[n].data == '@')){//如果calstr的n位上是浮点数,则将这个data压栈进⼊数据栈pnd中if (calstr[n].sign == IsDouble){Push(pnd, &(calstr[n].data));n++;}//反之,如果是运算符,则要检测优先级else{switch( GetPriority(ch, (char)calstr[n].data)){//如果运算符优先级较⼩,则让ch等于优先级⼤的符号并压⼊符号栈pst中case '<':ch = (char)calstr[n].data;Push(pst, &ch);n++;break;//如果结果为等号,让符号出栈暂存到ch中case '=':if (!Pop(pst, &ch)) return 0;n++;break;//如果ch优先级较⾼,则将前两个数字及运算符出栈,分别储存⾄num2,ch,num1中,进⾏运算,得到的结果再次压栈进⼊pnd中 case '>':if (!(Pop(pnd,&num2) && Pop(pst,&ch) && Pop(pnd,&num1))) return 0;num1 = calcu(num1,ch,num2);Push(pnd, &num1);break;//如果符号顺序出错,return 0case 'E':return 0;}}//检测是否可以得到栈顶符号,栈空则return 0if (!GetTop(pst, &ch)) return 0;}//如果栈中得到了最终结果,并且取出pnd中的最终结果到rs,return 1if (GetSize(pnd) == 1 && GetTop(pnd,rs)){DestroyStack(pst);DestroyStack(pnd);return 1;}//否则 return 0else{return 0;}}//10.⽤户交互函数void treatment(){char buffer[100];//⽤户输⼊的字符串(算式)cal calstr[50];//计算⽤的数组double rs = 0;//计算结果printf("Enter your equation:");gets(buffer);//让⽤户输⼊算式buffer//⽤户不输⼊"exit"就不退出while (!(buffer[0]=='e' && buffer[1]=='x' && buffer[2]=='i' && buffer[3]=='t')){//检查buffer中字符君合法,成功将buffer转化为⽤于计算的calstr数组,成功计算出结果存⼊rsif (CheckStr(buffer) && resolu(buffer,calstr) && result(calstr,&rs)){printf("\n%lf\n",rs);}else{printf("\nError!\n");}printf("Enter \"exit\"to quit");printf("\nEnter your equation:");gets(buffer);//再次让⽤户输⼊算式}printf("\nbye\n");}//11.主函数int main(){treatment();}参考⽂献链接如下[参考⽂献]()。

计算器设计,包括数字按钮0-9,以及加减乘除法

计算器设计,包括数字按钮0-9,以及加减乘除法

使用Java Application编写满足下列要求的程序:(1)使用GridLayout布局(2)设计一个简单的计算器,包括数字按钮0-9,以及加、减、乘、除、清零,等于运算按钮和一个现实计算结果的文本区。

import java.applet.*;import java.awt.*;import java.awt.event.*;public class TestText extends Applet implements ActionListener {Label lb1,lb2;//Button btn1;Button btn2;TextField tf1;TextArea ta1;public void init(){lb1=new Label("请在文本框中输入内容!");lb2=new Label("文本区显示的内容为:");//btn1=new Button("提交");btn2=new Button("退出");tf1=new TextField(20);ta1=new TextArea();add(lb1);add(tf1);add(lb2);add(ta1);//add(btn1);add(btn2);setLayout(new FlowLayout());setSize(600,400);setVisible(true);//btn1.addActionListener(this);btn2.addActionListener(this);}public void actionPerformed(ActionEvent e){/*if(e.getSource()==btn1){ta1.setText(tf1.getText());}*/if(e.getSource()==btn2){System.exit(0);}}}(8)import java.applet.*;import java.awt.*;import java.awt.event.*;public class JiSuan extends Applet implements ActionListener{Button []buts;String names[] = {"0","1","2","3","4","5","6","7","8","9","+","-","*","/","=","置零"};TextArea text;public void init(){text = new TextArea(" ",20,2);add(text);setLayout(new GridLayout(9,4,5,5));buts = new Button[names.length];for(int i = 0;i < names.length;i++){buts[i] = new Button(names[i]);buts[i].addActionListener(this);add(buts[i]);}}static int y = 0;static float j = 0;static int z = 0;public void actionPerformed(ActionEvent e){for(int i = 0;i < 10;i++)if(e.getSource() == buts[i]){char x;x = (char)(i + '0');text.append(""+x);y = y * 10 + i;}if(e.getSource() == buts[10]) {int i = y;y = 0;j = j + i;z = 1;text.append(" + ");}if(e.getSource() == buts[11]) {int i = y;y = 0;if(j == 0)j = j + i;elsej = j - i;z = 2;text.append(" - ");}if(e.getSource() == buts[12]) {int i = y;y = 0;if(j == 0)j = j + i;elsej = j * i;z = 3;text.append(" * ");}if(e.getSource() == buts[13]) {int i = y;y = 0;if(j == 0)j = j + i;elsej = j / i;z = 4;text.append(" / ");}if(e.getSource() == buts[14]) {if(z == 1)j = j + y;else if(z == 2)j = j - y;else if(z == 3)j = j * y;elsej = j / y;text.append(" = "+j);y = 0;}if(e.getSource() == buts[15]) {text.replaceRange(" ",0,50); y = 0;j = 0;}repaint();}}。

python中计算器四则运算功能代码

python中计算器四则运算功能代码

python中计算器四则运算功能代码Python是一种功能强大的编程语言,它提供了丰富的库和模块,可以用于各种不同的应用场景。

其中,计算器是Python中常见的一个功能,可以用来进行四则运算。

本文将为大家介绍如何使用Python实现一个简单的计算器,并进行四则运算。

在Python中,可以使用基本的数学运算符号来进行四则运算,包括加法(+)、减法(-)、乘法(*)和除法(/)。

下面我们通过一个实例来演示如何使用Python编写一个计算器。

我们需要使用input()函数来获取用户输入的两个数字和运算符号。

代码如下所示:```pythonnum1 = float(input("请输入第一个数字:"))operator = input("请输入运算符号:")num2 = float(input("请输入第二个数字:"))```接下来,我们需要根据用户输入的运算符号来进行对应的运算操作。

使用if语句来判断运算符号,并执行相应的计算操作。

代码如下所示:```pythonif operator == "+":result = num1 + num2elif operator == "-":result = num1 - num2elif operator == "*":result = num1 * num2elif operator == "/":result = num1 / num2else:print("输入的运算符号不正确!")```我们将计算结果输出给用户。

代码如下所示:```pythonprint("运算结果为:", result)```至此,我们完成了一个简单的计算器的编写。

用户可以输入两个数字和运算符号,程序将输出计算结果。

java程序设计报告---设计一个计算器

java程序设计报告---设计一个计算器

课程设计课程设计目的设计一个基于Swing的计算器应用程序,完成普通的算术运算。

课程设计要求1.设计的计算器是基于Swing的,可以完成加减乘除和取余运算。

2.增加计算器的日期计算功能,能够计算两个日期之间相距的天数。

(要判断键入的日期格式是否正确,并能正确处理按钮动作事件,同时能够得到正确的计算结果)设计要点主要练习使用布局管理器设计一个计算器的界面,并使用事件监听器处理数据的输入,完成相关的计算。

在面板上可以增加一个算术/日期的转换按钮来选择是普通计算还是日期计算。

以及增加一个清零的按钮CE,用以将显示结果的单行文本域清空,同时将各个参数设置为默认值。

二、总体方案设计日常生活中经常需要用到计算器,比如科学计算,数值计算,会计业务等等,在Applet 中实现一个精巧的计算器,可以让用户的操作也更方便和快捷。

本项目需要实现一个具有四则运算的计算器,能够实现基本的加、减、乘、除运算,以及其它的辅助功能;界面简洁适用;要提供主要的设计思路、类的设计,本次设计添加转进制等功能。

本应用程序继承自框架(frame),此程序使用frame布局管理器bordelayout,将单行文本加入相应区域,包含各种按纽的面板buttonpanel加入相应区域还可以将进制转换的面板与单行文本框放一块包含各种按纽的面板buttonpanel采用N行N列的网格布局,然后将数字按钮和运算符按钮以及控制按钮添加到面板中,同时注册按钮事件监听器。

布局设计好后再添加按钮事件。

对于此程序要考虑到点击加、减、乘、除按钮时是否有点击数字按钮,如果是第一次点击数字按钮或者是点击数字按钮前点击了加、减、乘、除按钮则直接把数字按钮的数值设置到文本框中,否则则应把文本框中的内容加上你所点击按钮的数值设置到文本框中。

四、程序的调试与运行结果说明程序功能实现:使用swing组件和awt图形用户界面以及BroadLayout布局管理器。

通过在按钮的单击事件处理方法中调用类的成员方法calculator()来进行简易计算器的各种运算,并正确实现运算功能。

实用计算器的程序设计及代码示例

实用计算器的程序设计及代码示例

实用计算器的程序设计及代码示例计算器是现代人经常使用的工具,它能够进行各种数学运算,如加减乘除、取余、开方等。

本文将介绍实用计算器的程序设计和提供代码示例,帮助读者了解计算器的原理和实现方式。

一、程序设计思路在设计实用计算器的程序时,首先需要确定计算器的功能和界面设计。

一般来说,一个基本的计算器应该具备以下功能:数字键、运算符键、等号键、清除键和显示屏。

程序的设计思路如下:1. 定义一个变量num,用于保存当前输入的数字。

2. 定义一个变量result,用于保存计算结果。

3. 通过按钮点击事件,获取用户输入的数字和运算符,并根据用户的选择进行相应的计算。

4. 将计算结果显示在显示屏上。

二、代码示例下面是一个简单的实用计算器程序的代码示例,采用Python语言编写:```from tkinter import *def clear():display.delete(0, END)def calculate():expression = display.get()result = eval(expression)display.delete(0, END)display.insert(0, result)def button_click(number):current = display.get()display.delete(0, END)display.insert(0, str(current) + str(number))root = Tk()root.title("实用计算器")display = Entry(root, width=25, borderwidth=5)display.grid(row=0, column=0, columnspan=4, padx=10, pady=10)button_1 = Button(root, text="1", padx=10, pady=10, command=lambda: button_click(1))button_2 = Button(root, text="2", padx=10, pady=10, command=lambda: button_click(2))button_3 = Button(root, text="3", padx=10, pady=10, command=lambda: button_click(3))button_4 = Button(root, text="4", padx=10, pady=10, command=lambda: button_click(4))button_5 = Button(root, text="5", padx=10, pady=10, command=lambda: button_click(5))button_6 = Button(root, text="6", padx=10, pady=10, command=lambda: button_click(6))button_7 = Button(root, text="7", padx=10, pady=10, command=lambda: button_click(7))button_8 = Button(root, text="8", padx=10, pady=10, command=lambda: button_click(8))button_9 = Button(root, text="9", padx=10, pady=10, command=lambda: button_click(9))button_0 = Button(root, text="0", padx=10, pady=10, command=lambda: button_click(0))button_add = Button(root, text="+", padx=10, pady=10,command=lambda: button_click("+"))button_subtract = Button(root, text="-", padx=10, pady=10,command=lambda: button_click("-"))button_multiply = Button(root, text="*", padx=10, pady=10, command=lambda: button_click("*"))button_divide = Button(root, text="/", padx=10, pady=10, command=lambda: button_click("/"))button_clear = Button(root, text="C", padx=10, pady=10, command=clear)button_equal = Button(root, text="=", padx=10, pady=10, command=calculate)button_1.grid(row=1, column=0)button_2.grid(row=1, column=1)button_3.grid(row=1, column=2)button_add.grid(row=1, column=3)button_4.grid(row=2, column=0)button_5.grid(row=2, column=1)button_6.grid(row=2, column=2)button_subtract.grid(row=2, column=3)button_7.grid(row=3, column=0)button_8.grid(row=3, column=1)button_9.grid(row=3, column=2)button_multiply.grid(row=3, column=3)button_0.grid(row=4, column=0)button_clear.grid(row=4, column=1)button_equal.grid(row=4, column=2)button_divide.grid(row=4, column=3)root.mainloop()```以上代码使用了`tkinter`库创建了一个简单的图形界面,包含数字按钮、运算符按钮、清除按钮和等于按钮。

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

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

毕业设计题目简易加减乘除计算器系别专业班级姓名学号指导教师日期设计任务书设计题目:简易加减乘除计算器设计要求: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的许多特性。

python实现简单四则运算计算器

python实现简单四则运算计算器

python实现简单四则运算计算器基本需求:1. 实现加减乘除及拓号优先级解析2. ⽤户输⼊ 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须⾃⼰解析⾥⾯的(),+,-,*,/符号和公式(不能调⽤eval等类似功能偷懒实现),运算后得出结果正确。

基本思路:1. 根据运算优先级,先处理公⽰内所含括号中的运算。

2. 利⽤正则表达式,对输⼊的内容进⾏解析(加减乘除、数字等)3. 通过循环遍历,或者递归对待处理部分进⾏充分运算处理流程图:略直接上代码1#!/usr/bin/env python2#-*- coding:utf-8 -*-3"""4四则运算,版本1.05"""6import re7def re_set(item):8"""9对输⼊的公式进⾏规范化处理,符号转化10"""11 item = str(item)12 item = item.replace("+-","-")13 item = item.replace("-+","-")14 item = item.replace("--","+")15 item = item.replace("++","+")16 item = item.replace("*+","*")17 item = item.replace("/+","/")18return item19def multiple(item_mult):20"""21公⽰中乘除运算22 :param item_mult:23 :return:24"""25while True:26 item_mult = re_set(item_mult)27if ("*"in item_mult) or ("/"in item_mult) :28if ("*-"in item_mult) or ("/-"in item_mult):29 R_0_formula = re.search("([0-9]+\.[0-9]+|[0-9]+)((\*\-)|(\/\-))([0-9]+\.[0-9]+|[0-9]+)", item_mult).group()30else:31 R_0_formula = re.search("([0-9]+\.[0-9]+|[0-9]+)(\*|\/)([0-9]+\.[0-9]+|[0-9]+)", item_mult).group()32 num1 = re.search("^(([0-9]+\.[0-9]+)|[0-9]+)", R_0_formula).group()33 num2 = re.search("(([0-9]+\.[0-9]+)|[0-9]+)$", R_0_formula).group()34 R_1_formula = (float(num1) * float(num2)) if ("*"in R_0_formula) else (float(num1) / float(num2))35if"-"in R_0_formula:36 R_1_formula = "-" + str(R_1_formula)37 item_mult = item_mult.replace(R_0_formula,str(R_1_formula))38else:break39return item_mult40def comb(item_comb):41"""42完成加减运算、结果合并43 :param item_comb:44 :return:45"""46while True:47 item_comb = re_set(item_comb)48if ("*"in item_comb) or ("/"in item_comb):49 item_comb = multiple(item_comb)50elif ("+"in item_comb[1:]) or ("-"in item_comb[1:]):51 R_0_formula = re.search("([0-9]+\.[0-9]+|[0-9]+)(\+|\-)([0-9]+\.[0-9]+|[0-9]+)", item_comb).group()52 num1 = re.search("^(([0-9]+\.[0-9]+)|[0-9]+)", R_0_formula).group()53 num2 = re.search("(([0-9]+\.[0-9]+)|[0-9]+)$", R_0_formula).group()54if"-"in item_comb[0]:55 R_1_formula = float(num1) - float(num2) if ("+"in R_0_formula) else float(num1) + float(num2)56else:57 R_1_formula = float(num1) + float(num2) if ("+"in R_0_formula) else float(num1) - float(num2)58 item_comb = item_comb.replace(R_0_formula,str(R_1_formula))59else:60break61return item_comb62def sp(item_sp):63"""64对运算中的括号进⾏处理65 :param item_sp:66 :return:67"""68while True:69if"("in item_sp:70 R_0_formula = re.search("\(([^\(|\)]*)\)",item_sp).group()71 R_1_formula = comb(R_0_formula.replace("(","").replace(")",""))72 item_sp = item_sp.replace(R_0_formula,str(R_1_formula))73else:74break75return item_sp76def coms(item_coms):77"""78最终合并79 :param item_coms:80 :return:81"""82 item_coms = re_set(item_coms)83 item_coms = sp(item_coms)84 item_coms = comb(item_coms)85return item_coms86 formula = input("请输⼊计算公式——>:").strip()87 formula = formula.replace("","")88print(eval(formula))89print(coms(formula))四则计算器1.01#!/usr/bin/env python2# -*- coding : utf-8 -*-3"""4⽤于常规四则运算,版本1.15"""6import re7def func_reset(func):8"""9对输⼊的公式进⾏规范化处理,符号转化10 :param func: 输⼊的原始公式11 :return: 符号等价替换完成的公⽰12"""13 func = str(func)14 func = func.replace("+-","-").replace("-+","-").replace("++","+").replace("--","+").replace("*+","*") 15return func16def multiple(func_mul):17"""18公⽰中乘除运算19 :param func_mul: 待处理,含有*,/ 运算符号的公⽰20 :return: 将* ,/ 运算完成的结果21"""22while ("*"in func_mul) or ("/"in func_mul):23 func_mul = func_reset(func_mul)24if ("*-"in func_mul) or ("/-"in func_mul):25 Re_0_func = re.search("([0-9]+(\.[0-9]+)?)((\*\-)|(\/\-))([0-9]+(\.[0-9]+)?)",func_mul).group() 26else:Re_0_func = re.search("([0-9]+(\.[0-9]+)?)(\*|\/)([0-9]+(\.[0-9]+)?)",func_mul).group()27 num_0 = re.search("^([0-9]+(\.[0-9]+)?)",Re_0_func).group()28 num_1 = re.search("([0-9]+(\.[0-9]+)?)$",Re_0_func).group()29 Re_1_func = (float(num_0)*float(num_1)) if ("*"in Re_0_func) else (float(num_0)/float(num_1)) 30if"-"in Re_0_func:31 Re_1_func = "-" + str(Re_1_func)32 func_mul = func_mul.replace(Re_0_func, str(Re_1_func))33return func_mul3435def comb(func_coms):36"""37完成加减运算、结果合并38 :param func_coms: 待处理公⽰39 :return: 处理完成+,-的结果40"""41while True:42 func_coms = func_reset(func_coms)43if ("*"in func_coms) or ("/"in func_coms):44 func_coms = multiple(func_coms)45elif ("+"in func_coms[1:]) or ("-"in func_coms[1:]):46 func_coms = func_reset(func_coms)47 Re_0_func = re.search("([0-9]+(\.[0-9]+)?)(\+|\-)([0-9]+(\.[0-9]+)?)",func_coms).group()48 num_0 = re.search("^([0-9]+(\.[0-9]+)?)",Re_0_func).group()49 num_1 = re.search("([0-9]+(\.[0-9]+)?)$",Re_0_func).group()50if"-"in func_coms[0] :51 Re_1_item = (float(num_0)-float(num_1)) if("+"in Re_0_func) else (float(num_0)+float(num_1)) 52else:53 Re_1_item = (float(num_0)+float(num_1)) if("+"in Re_0_func) else (float(num_0)-float(num_1))54 func_coms = func_coms.replace(Re_0_func,str(Re_1_item))55else:56return func_coms5758def spl(func_spl):59"""60对运算中的括号进⾏处理61 :param func_spl: 对运算中的括号进⾏处理,可以⽤循环,或者递归62 :return: 公式内包含的括号及其内部运算处理完成63"""64while"("in func_spl:65 spl_0_func = re.search("\([^\(|\)]*\)",func_spl).group()66 spl_1_func = comb(spl_0_func.replace("(","").replace(")",""))67 func_spl = func_spl.replace(spl_0_func,str(spl_1_func))68return func_spl69while True:70 formula = input("请输⼊计算公式,退出(q)——>").strip()71 formula = formula.replace("","")72if formula == "q":73break74elif re.search("[^\d|\(|\)|\+|\-|\*|\/]*",formula).group():75print("输⼊有误,仅⽀持四则运算----->",re.search("[^\d|\(|\)|\+|\-|\*|\/]*",formula).group())76break77print(eval(formula)) # ⽤于输出检验结果78 formula = spl(formula)79 formula = comb(formula)80print(formula)四则计算器1.1待续……。

汇编语言课程设计报告——实现加减乘除四则运算的计算器

汇编语言课程设计报告——实现加减乘除四则运算的计算器

汇编语言课程设计报告( 2011 -- 2012 年度第 2 学期)实现加减乘除四则运算的计算器专业 计算机科学与技术 学生姓名班级学号指导教师完成日期目录目录错误!未定义书签。

1 概述错误!未定义书签。

设计目的错误!未定义书签。

设计内容错误!未定义书签。

2 系统需求分析错误!未定义书签。

系统目标错误!未定义书签。

主体功能错误!未定义书签。

开发环境错误!未定义书签。

3 系统概要设计错误!未定义书签。

系统的功能模块划分错误!未定义书签。

系统流程图错误!未定义书签。

4系统详细设计错误!未定义书签。

5 测试错误!未定义书签。

测试方案错误!未定义书签。

测试结果错误!未定义书签。

6 小结错误!未定义书签。

参考文献错误!未定义书签。

附录错误!未定义书签。

附录源程序清单错误!未定义书签。

实现加减乘除四则运算的计算器1 概述设计目的本课程设计是在学完教学大纲规定的全部内容、完成所有实践环节的基础上,旨在深化学生学习的汇编语言课程基本知识,进一步掌握汇编语言程序设计方法,提高分析问题、解决问题的综合应用能力。

设计内容能实现加、减、乘、除的计算;该程序接受的是16进制数;执行时,需要在文件名后直接跟上计算表达式,如在命令提示符下执行结果如下:c:\tasm>js 3+252 系统需求分析系统目标本次汇编语言课程设计的最终目的是要实现一个简单加减乘除四则运算的计算器,要求编写一个程序,每运行一次可执行程序,可以实现数的加减乘除四则运算。

比如,十进制数的加减乘除四则运算。

我们曾经学习过两个具体数字进行加减法运算,但是对于简单计算器用汇编语言实现难点在于这两个要做运算的数是未知的,是由自己调用中断输入到屏幕上并要用程序存储起来的数,然后才能对这两个数进行运算,而且做的是加法运算、减法运算乘法运算还是除法运算也未可知,为此我们还要判断用户所输入的运算是四则运算中的哪一个运算。

此外,运算过程中的进位或是借位,选择用什么样的方式进行输出,如何实现清屏等也是要解决的问题。

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

DATA SEGMENTX DB ?,?,?,? ;存放数据的每一位X1 DW ? ;存放第一个数据值X2 DW ? ;存放第二个数据值Y DW ? ;存放运算结果S DB ? ;存放运算符号值E DB ? ;按下等号键标记CC DB ? ;存放运算数据位数H DB 0 ;存放按键行号L DB 0 ;存放按键列号DISCODE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H ;段码表DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AL,90H ;设置为A口输入,B口输出,C口输出OUT 46H,ALMOV DI,OFFSET X+3 ;DI指向X的高位KKK: CALL KEY ;扫描按键JMP KKK;以下为按键扫描子程序,程序返回后,在变量H和L中存放当前按键的行列号KEY PROCCHECK: CALL DISP ;等待按键按下的同时进行显示MOV AL,0F0H ;所有行输出低电平OUT 44H,ALIN AL,40HCMP AL,0FFH ;读列值JZ CHECK ;若都为高电平则无键按下,等待MOV CX,50LOOP $ ;延时消抖IN AL,DX ;重读列值CMP AL,0FFHJZ CHECK ;无键按下一直等待MOV H,0 ;有键按下,先把行列号变量清0MOV L,0MOV BL,01HMOV BH,0FEH ;扫描法读键值:从第一行开始测试,即PC0输出NEXT: MOV AL,BHOUT 44H,ALNEXTH: IN AL,40H ;读列值,判断是第几列有键按下TEST AL,BL ;从第一列开始判断JZ WAIT0ROL BL,1CMP BL,10H ;当前行状态下没有任何列有键按下,则转为对下一行的测试JZ NEXTLINC H ;每判断一列,列号加1JMP NEXTH ;再对下一列进行判断NEXTL: MOV H,0MOV BL,01HROL BH,1 ;对下一行测试,让下一个PC口输出低电平CMP BH,0EFHJZ EXITINC LJMP NEXTWAIT0: IN AL,40H ;若有键按下,则等该按键松开后再计算键值CMP AL,0FFHJNZ WAIT0MOV CX,50LOOP $ ;延时消抖IN AL,40HCMP AL,0FFHJNZ WAIT0CALL KEYVALUE ;调计算键值子程序EXIT: RETKEY ENDP;以下为计算键值子程序,通过行列号计算键值(键值=列号*4+行号);键值存放在DL寄存器中KEYVALUE PROCMOV DL,LMOV DH,HSHL DL,1SHL DL,1 ;列号乘4ADD DL,DHCMP DL,0JZ NUM_CALL ;按下的是数字键CMP DL,1JZ NUM_CALL ;按下的是数字键CMP DL,2JZ NUM_CALL ;按下的是数字键CMP DL,4JZ NUM_CALL ;按下的是数字键CMP DL,5JZ NUM_CALL ;按下的是数字键CMP DL,6JZ NUM_CALL ;按下的是数字键CMP DL,8JZ NUM_CALL ;按下的是数字键CMP DL,9JZ NUM_CALL ;按下的是数字键CMP DL,10JZ NUM_CALL ;按下的是数字键CMP DL,13JZ NUM_CALL ;按下的是数字键CMP DL,3JZ CONT_CALL ;按下的是运算键 CMP DL,7JZ CONT_CALL ;按下的是运算键 CMP DL,11JZ CONT_CALL ;按下的是运算键 CMP DL,15JZ CONT_CALL ;按下的是运算键CMP DL,14JZ OUTP_CALL ;按下的是等于键 CMP DL,12JZ CLR_CALL ;按下的是清除键NUM_CALL: CALL NUMBER ;调数字键处理子程序JMP EXIT1CONT_CALL: MOV S,DL ;存放运算键的键值MOV E,0CALL COUNT ;调运算键处理子程序,计算第一个加数JMP EXIT1OUTP_CALL: CALL OUTP ;调等号键处理子程序JMP EXIT1CLR_CALL: CALL CLEAR ;调清除键处理子程序EXIT1: RETKEYVALUE ENDP;以下为清除键处理子程序,按下清除键后,X变量全部清0CLEAR PROCMOV X[3],0MOV X[2],0MOV X[1],0MOV X[0],0CALL BITPRETCLEAR ENDP;以下为等号键处理子程序,该子程序负责将第二个运算数据的数值计算出来存入X2变量;并根据运算符号,调用相应的运算子程序OUTP PROCPUSH AXPUSH DXPUSH BXINC ECALL COUNT ;调运算键处理子程序,计算第二个运算数据CMP S,15JZ ADD_CALL ;运算符为加号,则调用加法子程序CMP S,11JZ SUB_CALL ;运算符为减号,则调用减法子程序CMP S,7JZ MUL_CALL ;运算符为乘号,则调用乘法子程序CMP S,3CALL DIVP ;运算符为除号,则调用除法子程序JMP STORE1ADD_CALL: CALL ADDPJMP STORE1SUB_CALL: CALL SUBPJMP STORE1MUL_CALL: CALL MULPSTORE1: MOV AX,Y ;以下程序将各运算子程序返回的运算结果,按位分解,送入X变量MOV DX,0MOV BX,1000DIV BXMOV X[0], ALMOV AX,DXMOV BL,100DIV BLMOV X[1],ALMOV AL,AHMOV AH,0MOV BL,10DIV BLMOV X[2],ALMOV X[3],AHPOP BXPOP DXPOP AXRETOUTP ENDP;以下为运算键处理子程序,该程序将第一个运算数据的数值计算出来并存入X1变量;或者将第二个运算数据的数值计算出来并存入X2变量;将运算符的值存入S变量COUNT PROCPUSH AXPUSH BXPUSH DXMOV DX,0CALL BITP ;测试X中的数据是多少位CMP CC,4 ;输入的数据是4位数?JZ C4CMP CC,3 ;输入的数据是3位数?JZ C3CMP CC,2 ;输入的数据是2位数?JZ C2JMP C1 ;输入的数据是1位数?C4: MOV AX,0MOV AL,X[0]MOV BX,1000MUL BXMOV DX,AXC3: MOV AL,X[1]MOV BL,100MUL BLADD DX,AXC2: MOV AL,X[2]MOV BL,10MUL BLADD DX,AXC1: MOV AL,X[3]MOV AH,0ADD DX,AXCMP E,1JNZ X1_SMOV X2,DX ;按下的是等号,则将第二个运算数据的值存入X2变量JMP EXIT3X1_S: MOV X1,DX ;按下的是运算符号,则将第一个运算数据的值存X1变量MOV X[3],0 ;清空X变量MOV X[2],0MOV X[1],0MOV X[0],0EXIT3: POP DXPOP BXPOP AXRETCOUNT ENDP;以下为数字键处理子程序;该程序,将输入的数据按位存放在X变量中,并由CC记录数据的位数NUMBER PROCCMP DL,8JZ K1CMP DL,9JZ K2CMP DL,10JZ K3CMP DL,4JZ K4CMP DL,5JZ K5CMP DL,6JZ K6CMP DL,0JZ K7CMP DL,1JZ K8CMP DL,2JZ K9CMP DL,13JZ K0K1:MOV DL,1 JMP N1K2:MOV DL,2 JMP N1 K3:MOV DL,3 JMP N1K4:MOV DL,4 JMP N1 K5:MOV DL,5 JMP N1K6:MOV DL,6 JMP N1K7:MOV DL,7 JMP N1 K8:MOV DL,8 JMP N1 K9:MOV DL,9 JMP N1K0:MOV DL,0N1: CMP E,1JNZ CONTINUEMOV E,0CALL CLEARCONTINUE: CMP CC,0 ;目前数据为0位,即没有数据,则转到SSS JZ SSS;若已有数据,以下程序将X左移8位。

;例如:先输入“1”,当再输入2时,;先要将“1”从个位移到十位,然后再将“2”存放到个位PUSH AXPUSH DXMOV AL,X[3]MOV AH,X[2]MOV DL,X[1]MOV DH,X[0]MOV CX,8LL: SHL AX, 1RCL DX,1LOOP LLMOV X[3],ALMOV X[2],AHMOV X[1],DLMOV X[0],DHPOP DXPOP AXSSS: MOV [DI],DLINC CC ;数据位数加1CMP CC,4 ;判断数据位数JNG EXIT2MOV CC,0 ;如果数据超过4位,重新从最低位开始存放 MOV X[2],0MOV X[1],0MOV X[0],0EXIT2: CALL DISP ;调显示子程序,显示输入的数据RETNUMBER ENDP;加法子程序ADDP PROCPUSH AXMOV AX,X1ADD AX,X2POP AXRETADDP ENDP;减法子程序SUBP PROCPUSH AXMOV AX,X1SUB AX,X2MOV Y,AXPOP AXRETSUBP ENDP;乘法子程序MULP PROCPUSH AXPUSH DXMOV AX,X1MOV DX,X2MUL DXMOV Y,AXPOP DXPOP AXRETMULP ENDP;除法子程序DIVP PROCPUSH AXPUSH BXPUSH DXMOV DX,0MOV AX,X1MOV BX,X2DIV BXMOV Y,AXPOP DXPOP BXPOP AXRETDIVP ENDP;显示子程序,将X中的数值按位显示出来 DISP PROCPUSH BXMOV BH,0LEA SI,DISCODECALL BITP ;测试X位数CMP CC,4JZ QIANCMP CC,3JZ BAICMP CC,2JZ SHICMP CC,1JMP GJMP NONEQIAN: MOV AH,11100000B ;从第4位开始显示 MOV AL,AHOUT 44H,ALMOV BL,X[0]MOV AL,[SI+BX]OUT 42H,ALCALL DELYMOV AL,0OUT 42H,ALBAI: MOV AH,11010000B ;从第3位开始显示 MOV AL,AHOUT 44H,ALMOV BL,X[1]MOV AL,[SI+BX]OUT 42H,ALCALL DELYMOV AL,0OUT 42H,ALSHI: MOV AH,10110000B ;从第2位开始显示 MOV AL,AHOUT 44H,ALMOV BL,X[2]MOV AL,[SI+BX]OUT 42H,ALCALL DELYMOV AL,0OUT 42H,ALG: MOV AH,01110000B ;从第1位开始显示 MOV AL,AHOUT 44H,ALMOV BL,X[3]MOV AL,[SI+BX]OUT 42H,ALCALL DELYJMP EXIT4NONE: MOV AL,0 ;X中没有数据,不显示OUT 42H,ALEXIT4: POP AXPOP BXRETDISP ENDP;分析数据位数子程序BITP PROCCMP X[0],0 ;如果X[0]不为0,则数据为4位数 JNZ FOURBITCMP X[1],0 ;如果X[1]不为0,则数据为3位数 JNZ THREEBITCMP X[2],0 ;如果X[2]不为0,则数据为2位数 JNZ TOWBITCMP X[3],0 ;如果X[3]不为0,则数据为1位数 JNZ ONEBITJMP ZER0BIT ;否则,没有数据FOURBIT: MOV CC,4JMP EXIT5THREEBIT: MOV CC,3JMP EXIT5TOWBIT: MOV CC,2JMP EXIT5ONEBIT: MOV CC,1JMP EXIT5ZER0BIT: MOV CC,0EXIT5: RETBITP ENDP;延时子程序DELY PROCPUSH CXMOV CX,100LOOP $POP CXRETDELY ENDPCODE ENDSEND START(注:可编辑下载,若有不当之处,请指正,谢谢!)。

相关文档
最新文档