简单计算器的程序
简易计算器 (1)
目录第一章:设计目的11.1课程设计目的.................................................................................. 错误!未定义书签。
1.2简易计算器设计的意义 (1)1.3系统的基本要求 (1)1.4功能设计 (3)第二章:功能描述 (3)2.1功能模块框图 (3)2.2相关功能介绍.................................................................................. 错误!未定义书签。
2.1系统模块机构框图 (4)第三章:总体设计 (5)3.1系统流程图 (3)3.2模块描述 (5)3.3函数声明 (5)第四章:程序实现 (5)4.1界面设计 (10)4.2计算界面 (11)4.3退出界面 (12)第五章:课程设计的结果展示 (13)第六章:参考文献................................................................................................. - 15 -第七章:课程设计总结......................................................................................... - 16 -第一章课程设计目的1.通过一个学期的学习,我认为要学好C语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践才能增强和巩固我的知识。
特别是作为本科生,更要注重实践这一环节,只有这样我们才能成为合格的计算机人材。
通过这次课程设计,进一步巩固所学的语句,如语句嵌套等;加深对循环,分支等结构的运用;最后还可以熟悉四则运算﹑三角函数等经典算法。
2.通过此次课程设计扩展自己的知识面,课本上的东西是远远不够的,可以通过去图书馆查资料,上网找资料等手段学到一些新知识,比如画图函数,颜色填充函等。
开发一个简单计算器程序-基于对话框
开发一个简单科学计算器(基于对话框模式的应用程序)一。
开发目标及软件功能开发一个科学计算器程序,要求采用基于对话框模式的应用程序,至少具有加、减、乘、除四个基本功能,并在此基础上扩展平方、开方、三角函数等功能。
(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_REC 1/xButton IDC_EQUAL =Edit Box IDC_FIRSTEdit Box IDC_SECONDEdit Box IDC_RESULT4。
为对话框中的控件添加相应的成员变量:点击菜单“View →ClassWizard" ,点击“Member Variables”标签项,为对话框中的三个编辑框控件添加对应的成员变量如图所示。
Python之实现一个简易计算器
Python之实现⼀个简易计算器⾃⼰动⼿写计算器⼀、功能分析 ⽤户输⼊⼀个类似这样 3*( 4+ 50 )-(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4) 这样的表达式,假设表达式⾥⾯除了包含空格、'+'、'-'、'*'、'/'和括号再⽆其他特殊符号,然后⾃⼰动⼿写代码解析其中的表达式,实现加减乘除,最后得出的结果与真实的计算机所算的结果必须⼀致。
⼆、所需的知识点字符串的处理正则表达式的运⽤函数递归三、程序实现流程分析1. ⽤正则表达式处理字符串,只提取其中的数字和运算符,并转换成列表2. 编写⼀个函数,处理没有括号的基本运算的基本表达式3. 再写⼀个函数递归处理带有括号的函数,先计算最内部括号中的表达式, 然后将最内部的括号替换为计算后的结果, 在递归外部⼀层的,最后返回的就是所需的结果四、具体实现过程1.正则表达式处理⽤户输⼊字符串 这⾥我不会讲正则表达式具体的⽤法,要将的话都可以讲⼀本书了,我只讲本⽂⽤到的正则表达式。
根据需求,我们需要提取出⽤户输⼊字符串中的数字和运算符到⼀个列表中,⽽空格将会被忽略掉,假设⽤户输⼊的表达式是 expression,我们可以写出下⾯的代码:1 2 3 4import reexpression='(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4)'l=re.findall('([\d\.]+|/|-|\+|\*)',expression)print(l) #['100', '+', '40', '*', '5', '/', '2', '-', '3', '*', '2', '*', '2', '/', '4', '+', '9', '*', '3', '+', '4', '-', '4', '-', '4'] ⾸先我们先看⼀下 findall 的⽤法,findall可以匹配所有符合规律的内容,返回包含结果的列表。
简单计算器可视化程序编程
简单计算器一、基本功能描绘二进制、八进制、十进制及十六进制数的加、减、乘、除、乘方、取模等简单计算科学计算函数,包括( 反 ) 正弦、 ( 反) 余弦、 ( 反 ) 正切、 ( 反 ) 余切、开方、指数等函数运行以角度、弧度两种方式实现上述部分函数具备历史计算的记忆功能对不正确的表达式能指出其错误原因二、流程图输入数据子函数编写框关系变量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 属性。
计算器课程设计--简易计算器
1 设计课题任务、功能要求说明及总体方案介绍1.1 设计课题任务课题:简易计算器任务:设计一个具有特定功能的计算器。
该计算器上电或按键复位后能自动显示系统提示界面,进入准备工作状态。
能实现基本的加、减、乘、除四则运算。
1.2 功能要求说明在本次工程实践中,主要完成如下方面的设计任务:(1)计算器上电或按键复位后能显示初始化界面(2)2秒后进入计算器界面(3)按键能进行加、减、乘、除运算并显示结果(4)按清零键后能进行下一次计算1.3 设计课题总体方案介绍及工作原理说明计算器的总体功能原理是以AT89S52单片机为主要控制核心,通过外接4*4行列式键盘作为控制信号输入源,一块12864液晶作为显示器件,通过按键控制,单片机实时地去执行,在12864液晶上显示界面。
系统控制原理图如图1所示。
图1系统控制原理图2 设计课题硬件系统的设计2.1 设计课题硬件系统各模块功能简要介绍2.1.1 AT89S52控制模块考虑到设计功能需要,控制器的功能用于外部键盘信号的接收和识别、液晶模块的显示控制、复位电路等,我们选择了AT89S52系列单片机,具有反应速度极快,工作效率特高的特点。
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。
用语言编写的加减乘除计算器程序
用语言编写的加减乘除计算器程序下面是一个使用Python编写的加减乘除计算器程序,超过1200字。
请注意,这是一个基本的计算器程序,可能还有一些功能可以改进和扩展。
你可以根据自己的需求进行修改和增加功能。
```python#定义加法函数def add(x, y):return x + y#定义减法函数def subtract(x, y):return x - y#定义乘法函数def multiply(x, y):return x * y#定义除法函数def divide(x, y):#检查除数是否为0if y == 0:return "除数不能为0"else:return x / y#打印菜单选项def print_menu(:print("欢迎使用加减乘除计算器")print("1. 相加")print("2. 相减")print("3. 相乘")print("4. 相除")print("5. 退出")#主函数def main(:while True:print_menuchoice = input("请选择操作(1/2/3/4/5):") #获取用户的选择if choice in ['1', '2', '3', '4']:num1 = float(input("请输入第一个数字:")) num2 = float(input("请输入第二个数字:"))#根据用户选择的操作调用相应的函数if choice == '1':print("结果:", add(num1, num2))elif choice == '2':print("结果:", subtract(num1, num2))elif choice == '3':print("结果:", multiply(num1, num2))else:print("结果:", divide(num1, num2))elif choice == '5':print("感谢使用加减乘除计算器!")breakelse:print("无效的选择,请重新输入。
创建简单计算器程序
实验一创建简单计算器程序实验目标本试验介绍如何创建一个简单的计算器应用程序。
技术要点创建windows窗体应用程序的基本步骤。
实验步骤1.首先,运行visual studio2005,新建一个Windows应用程序命名为calculate2.向窗体中添加【Button】按钮控件,数字0-9,并设置控件的ForeColor 属性为Blue.布局如下:3. 向窗体添加【Button】按钮控件,运行符“+”“-”“*”“/”“.”“-/+”“C”“=”。
并设置控件的ForeColor属性为Red。
4.向窗体添加【TextBox】空间用于显示数据,并将其TextAlign属性设置为“Right”。
5.在Form1类中对下列数据进行定义和初始化:6. 在类中增加如下方法:7. 双击【Button】空间0-9,分别在每个按钮的Click事件处理程序中添加如下代码:setText("0");setText("1");setText("2");setText("3");setText("4");setText("5");setText("6");setText("7");setText("8");setText("9");8.双击“+”号按钮,添加如下事件处理代码:setOperator(1);9.双击“-”号按钮,添加如下事件处理代码:setOperator(2);10.双击“*”号按钮,添加如下事件处理代码:setOperator(3);11.双击“/”号按钮,添加如下事件处理代码:setOperator(4);12.双击“=”号按钮,添加如下事件处理代码:doEquals();13.双击“.”号按钮,添加如下事件处理代码:setDecimal();14.双击“C”号按钮,添加如下事件处理代码:isSecond = false;setText("clear");15.程序运行结果如图:实验二使用菜单实验目标本实验介绍如何在应用程序中加入菜单,并通过菜单响应用户的请求技术要点创建窗体应用程序菜单的简单步骤,时间响应方法。
简单计算器程序操作步骤
简单计算器程序操作步骤一、建立”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。
C语言实现简单计算器程序
C语⾔实现简单计算器程序这两天在看⼀个C语⾔写的计算器程序,做了不少的功夫,跟着作者⼀步步的进⾏完善,了解了许多细节性的东西,在此⾃⼰做个总结,加深⾃⼰对程序的印象,也算是梳理。
在该计算器程序,能进⾏加减乘除、sin、cos、exp等操作,同时能进⾏数值保存功能。
⽽该计算器使⽤逆波兰表⽰法。
即所有运算符都跟在操作数的后⾯,⽐如下列表达式:(1 - 2) * (4 + 5)采⽤逆波兰表⽰法表⽰为:1 2 - 4 5 + *逆波兰表达法中不需要圆括号,只要知道每个运算符需要⼏个操作数就不会引起歧义。
计算器程序实现很简单,具体原理如下:while(/* 下⼀个运算符或操作数不是⽂件结束指⽰符 */)if(/* 是数 */)/* 将该数压⼊到栈中 */else if (/* 是运算符 */)/* 弹出所需数⽬的操作数 *//* 执⾏运算 *//* 将结果压⼊到栈中 */else if (/* 是换⾏符 */)/* 弹出并打印栈顶的值 */else/* 出错 */在程序设计中,使⽤模块化思想,getop函数来进⾏读⼊,该函数返回⼀个标识,⽤来标识读⼊的是什么类型。
主循环体中根据该标识执⾏相应的动作。
以下是该程序:(我将所有函数和变量放在同⼀⽂件)#include <stdlib.h>#include <stdio.h>#include <string.h>#define MAXOP 100#define NUMBER '0' //标识读⼊的是数字#define NAME 'n' //标识读⼊的是字符串(函数名或⾮法字符串)#define ALPHA 26int getop(char []);void push (double); //压栈double pop(void); //出栈void clear(void); //清空栈void mathfnc(char []); //执⾏相应的数学函数sin、cos、exp等int main(void){int type;int i, var = 0;double op1, op2,v;char s[MAXOP];double variable[ALPHA];for (i = 0; i < ALPHA; i++) //初始化⽤于保存数值的变量数组variable[i] = 0.0;while ((type = getop(s)) != EOF) //读取输⼊{switch (type){case NUMBER:push (atof(s));break;case NAME:mathfnc(s);break;case '+':push (pop() + pop());break;case '*':push (pop() * pop());break;case '-':op2 = pop();push (pop() - op2);break;case '/':op2 = pop();if (op2 != 0.0)push (pop() / op2);elseprintf ("error: zero divisor\n");break;case '%':op2 = pop();if (op2 != 0.0)push (fmod(pop(), op2));elseprintf ("error: zero divisor\n");break;case '?': //打印栈顶元素op2 = pop();printf ("\t%.8g\n", op2);push (op2);break;case '=': //保存数值pop();if (var >= 'A' && var <= 'Z')variable[var - 'A'] = pop();elseprintf ("error: no variable name\n");break;case 'c':clear();break;case 'd': //复制栈顶元素op2 = pop();push(op2);push(op2);break;case 's': //交换栈元素op1 = pop();op2 = pop();push(op1);push(op2);case '\n':v = pop(); //v保存最后的⼀次结果printf ("\t%.8g\n", v);break;default:if (type >= 'A' && type <= 'Z')push(variable[type - 'A']);else if (type == '@') //输⼊的字符@表⽰最近⼀次结果值 push(v);elseprintf ("error: unknown command %s\n", s);break;}var = type;}return 0;}/* ----------------------------------------------------------- */#define MAXVAL 100int sp = 0; //标识栈顶double val[MAXVAL];void push(double f){if (sp < MAXVAL)val[sp++] = f;elseprintf ("error: stack full, can't push %g\n", f);}double pop(void){if (sp > 0)return val[--sp];else{printf ("error: statck empty\n");return 0.0;}}void clear(void){sp = 0;}void mathfnc (char s[]){double op2;if (strcmp (s, "sin") == 0)push(sin(pop()));else if(strcmp (s, "cos") == 0)push(cos(pop()));else if(strcmp (s, "exp") == 0)push(exp(pop()));else if(strcmp (s, "pow") == 0){op2 = pop();push (pow(pop(), op2));}elseprintf ("error: %s not supported\n", s);}/* ----------------------------------------------------------- */#include <ctype.h>int getch(void);void ungetch(int);int getop(char s[]){int i, c;while ((s[0] = c = getch()) == ' ' || c == '\t') //过滤开头的空⽩字符;s[1] = '\0';i = 0;if (islower(c)) //判断是否为⼩写字母,也即读取由⼩写字母组成的字符串 {while (islower(s[++i] = c = getch()));s[i] = '\0';if (c != EOF)ungetch(c);if (strlen (s) > 1)return NAME;elsereturn c;}if (!isdigit(c) && c != '.' && c != '-')return c;if (c == '-') //⽤于判断是负数还是减操作{if (isdigit(c = getch()) || c == '.')s[++i] = c;else{if (c != EOF)ungetch(c);return '-';}}if (isdigit(c)) //收集整数部分while (isdigit(s[++i] = c = getch()));if (c == '.') //收集⼩数部分while (isdigit(s[++i] = c = getch()));s[i] = '\0';if (c != EOF)ungetch(c);return NUMBER;}/* ----------------------------------------------------------- *//** 引⽤以下两个函数是因为:程序不能确定它已经读⼊的输⼊是否⾜够 ** 除⾮超前多读⼊⼀些输⼊,在本程序中,读⼊⼀些字符合成⼀个数字 ** 所以在看到第⼀个⾮数字字符之前,已经读⼊的数的完整性是不能确定的* 由于程序要超前读⼊⼀个字符,这样就导致最后⼜⼀个字符不属于当前所要读⼊的数*/#define BUFSIZE 100char buf[BUFSIZE];int bufp = 0;int getch(void){return (bufp > 0) ? buf[--bufp] : getchar();}void ungetch (int c){if (bufp >= BUFSIZE)printf ("ungetch: too many characters\n");elsebuf[bufp++] = c;}该程序虽然简单,但是还是存在⼀些⼩⼩的问题,⽐如没有数据时进⾏pop的话,会打印栈中⽆数据同时返回数值0.0,在循环体中许多执⾏操作会将该数值保存到栈中,之后打印该值,⽤户体验度⽐较差。
简单的四则运算计算器程序
简单的四则运算计算器程序
实验目的与要求: 目的: 1、掌握类、构造函数/析构函数、栈等概念,掌握字符串操作; 2、步了解类的设计方法,初步了解词法分析、表达式求值的算符优先算法等 内容。 要求:
cout<<"程序错误,0作为除数出现!";
} else
a=a/b; }break; case '+':a=a+b;break; case '-':a=a-b;break; default:{}break; } Operand oper(a); sOperand.push(oper);
//cout<<"计算,并将结果压:"<<sOperand.getTop().get()<<"入栈\n";
char ch=temp[0]; double a,b; if(ch=='(') {
Operator oper('('); sOperator.push(oper);
//cout<<"符号:"<<sOperator.getTop().get()<<"入栈\n";
} else if(ch==')') {
//cout<<"计算,并将结果压:"<<sOperand.getTop().get()<<"入栈\n";
派大星的python程序代码
派大星的python程序代码派大星是一位非常聪明的海绵宝宝的朋友,他最近学习了Python 编程语言,并且写了一些不错的代码。
以下是他的一些Python程序代码:1. 计算器这是一个简单的计算器程序,可以进行加、减、乘、除运算。
用户输入两个数字和操作符,程序会输出计算结果。
def calculator():num1 = float(input('Enter first number: '))op = input('Enter operator (+, -, *, /): ')num2 = float(input('Enter second number: '))if op == '+':print(num1 + num2)elif op == '-':print(num1 - num2)elif op == '*':print(num1 * num2)elif op == '/':print(num1 / num2)else:print('Invalid operator')2. 猜数字游戏这是一个简单的猜数字游戏,程序会生成一个随机数,用户需要猜出这个数是多少。
程序会提示用户猜的数字是大了还是小了,直到用户猜出正确答案。
import randomdef guess_number():num = random.randint(1, 100)guess = int(input('Guess the number (1-100): '))while guess != num:if guess < num:print('Too low')else:print('Too high')guess = int(input('Guess the number (1-100): '))print('Congratulations, you guessed the number!')3. 加密解密程序这是一个简单的加密解密程序,用户可以输入一段文字和一个密钥,程序会将这段文字加密或解密。
C语言实现简单计算器功能(1)
C语⾔实现简单计算器功能(1)本⽂为⼤家分享了C语⾔实现简单计算器功能的具体⽅法,供⼤家参考,具体内容如下这⼏天⼀直上控制语句,在学完if、switch和循环语句后,为了巩固所学知识点,想给学⽣出⼀道简单的计算器程序。
题⽬如下:通过所学的知识(选择语句、循环语句)完成⼀个简单的计算器编程,要求不许抄袭,只能⽤⾃⼰所学的知识点,不可引⽤⽹上⾃⼰的不懂的程序。
要求的格式如下图:要求以这样的⼀种格式进⾏输出,并能通过选择完成不同的功能。
如:选择1,完成整数相加功能,算完后⼜能回到该页⾯。
经过分析,我简单的写了⼀段代码,代码如下:#include <stdio.h>void main(){while(1) // while循环操作,实现计算机功能提⽰{int a = 0;int x = 0;int y = 0;int result = 0;printf("****欢迎使⽤计算器****\n");printf("[1] 完成两个整数相加\n");printf("[2] 完成两个整数相减\n");printf("[3] 完成两个整数相乘\n");printf("[4] 完成两个整数取整\n");printf("[5] 完成两个整数取余\n");printf("[0] 退出计算器系统\n");printf("请选择:");scanf("%d",&a);if(a < 0 || a > 5) // 判断输⼊的是否在0~5范围内,不在输出错误提⽰{printf("选择有误,请重新选择!\n");continue;}elseif(0 == a) // 当输⼊为0时需要退出系统{printf("欢迎下次使⽤!\n");break;}switch(a) // 使⽤switch语句进⾏对每个功能的具体操作{case 1: // 加法操作printf("请输⼊两个整数:");scanf("%d%d",&x,&y);result = x+y;printf("结果为:%d\n",result);break;case 2: // 减法操作printf("请输⼊两个整数:");scanf("%d%d",&x,&y);result = x-y;printf("结果为:%d\n",result);break;case 3: // 乘法操作printf("请输⼊两个整数:");scanf("%d%d",&x,&y);result = x*y;printf("结果为:%d\n",result);break;case 4: // 取整操作printf("请输⼊两个整数:");scanf("%d%d",&x,&y);result = x/y;printf("结果为:%d\n",result);break;case 5: // 取余操作printf("请输⼊两个整数:");scanf("%d%d",&x,&y);result = x%y;printf("结果为:%d\n",result);break;default:break;}}}这样就能简单完成⼀个两个整数的计算器功能。
毕业设计简易加减乘除计算器
毕业设计题目简易加减乘除计算器系别专业班级姓名学号指导教师日期设计任务书设计题目:简易加减乘除计算器设计要求: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编程语言来实现这个计算器程序。
第一步是创建一个新的Python文件。
在你喜欢的文本编辑器中打开一个新的文件,并保存为calculator.py。
现在我们已经准备好开始编写我们的计算器程序了。
首先,我们需要定义一个函数来执行加法运算。
在Python中,我们可以通过使用def关键字来定义一个新的函数。
我们将这个函数命名为add,并给它两个参数num1和num2,分别表示要相加的两个数。
```pythondef add(num1, num2):result = num1 + num2return result```接下来,我们定义一个函数来执行减法运算。
与加法函数类似,我们将这个函数命名为subtract,并给它两个参数num1和num2,分别表示要相减的两个数。
```pythondef subtract(num1, num2):result = num1 - num2return result```接下来,我们定义一个函数来执行乘法运算。
同样地,我们将这个函数命名为multiply,并给它两个参数num1和num2,分别表示要相乘的两个数。
```pythondef multiply(num1, num2):result = num1 * num2return result```最后,我们定义一个函数来执行除法运算。
同样地,我们将这个函数命名为divide,并给它两个参数num1和num2,分别表示被除数和除数。
在这个函数中,我们需要注意除数不能为0的情况。
```pythondef divide(num1, num2):if num2 == 0:return "除数不能为0"else:result = num1 / num2return result```现在,我们已经定义了四个函数来执行加法、减法、乘法和除法运算。
简易计算器完整课程设计
一、设计要求1.设计4*4的键盘,其中10个数字键0~9,第十三个键为”+“,第十五个键为”=“2 ,实现1位数的简单加运算二、硬件系统设计1、LED接口电路简易计算器需要2位8段码LED显示电路。
用LED显示器,用8255A的A口作为段码(字形代码)数据口,PB0和PB1作为位控制端口。
然后接至各数码显示器的共阴极端。
2、键盘接口电路简易计算器需要4*4的行列式键盘。
8255A的B口作为输出端,C口作为输出端。
采用的是方式0。
3、计算器逻辑电路图将LED接口电路和键盘接口电路结合到一起就是简易计算器的逻辑电路图逻辑电路结构如下:Cpu 8255 键盘三、软件设计1、LED显示程序设计LED显示器由七段发光二极管组成,排列成8字形状,因此也成为七段LED 显示器,器排列形状如下图所示:为了显示数字或符号,要为LED显示器提供代码,即字形代码。
七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。
简易计算器用到的数字0~9的共阴极字形代码如下表:0~9七段数码管共阴级字形代码2位LED显示的程序框图如下:2、读键输入程序设计为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。
为了得到被按键的键码,现使用行扫描法识别按键。
其程序框图如下:3、主程序设计(1)数值送显示缓冲程序设计简易计算器所显示的数值最大位为一位。
(2)运算主程序设计首先初始化参数,送LED低位显示“0”,高位不显示。
然后扫描键盘看是否有键输入,若有,读取键码。
判断键码是数字键、还是功能键(“+”“=”),是数值键则送LED显示并保存数值,是功能键则又判断是“=”还是运算键,若是“=”则计算最后结果并送LED显示,若是运算键则保存相对运算程序的首地址。
运算主程序框图如下所示:4、简易计算器源程序con8255 equ 06c6h ;8255的控制端口的物理号c8255 equ 06c4h ;C端口的端口号b8255 equ 06c2h ; B端口的端口号a8255 equ 06c0h ; A端口的端口号data segmentlist DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H ;对应数字的显示码keycode DB 0EEH, 0DEH, 0BEH, 7EHDB 0EDH, 0DDH, 0BDH, 7DHDB 0EBH, 0DBH, 0BBH, 7BHDB 0E7H, 0D7H, 0B7H, 77H;对应键的特征值(键盘识别码)num1 dw 0 ;偏移量x DB 0FFH ;存放参与运算的第一个数y DB 0FFH ;存放运算符z DB 0FFH ;存放参与运算的第二个数re DB 0FFH ;存放运算结果data endssstack segment stackssda db 100 dup(?)sstack endscode segmentassume cs:code, ds:datastart: mov ax, datamov ds, axcall init8255 ;初始化8255 ispk:call clear ;B端口清零call ispkey ;判断是否有建按下and al, 0fhcmp al, 0fhje ispkcall findkeyboardcall dispnumcmp num1, 14je js1call cunshujmp disnum1js1: call jisuanmov x, 0ffhmov y, 0ffhmov z, 0ffhmov nUM1, 0mov re,0ffhcall dispnummov cx,1000www: loop wwwjmp ispkdisnum1:is: jmp ispkmov ah, 4chint 21hinit8255 proc near ;初始化8255 mov al, bmov dx, 06c6hout dx, alretinit8255 endpclear proc nearmov dx, b8255out dx, alclear endpispkey proc near ;判断是否有建按下mov al, 00hmov dx, a8255out dx, almov dx, c8255in al, dxretispkey endpfindkeyboard proc near ;找具体键盘按键cl1: mov al, bmov ah, alshl ah, 4mov dx, a8255 ;al传递给a端口out dx, almov dx, c8255 ;c端口读入数据赋值给alin al, dxcmp al, 0fhje cl2jmp exitkcl2: mov al, bmov ah, alshl ah, 4mov dx, a8255out dx, almov dx, c8255in al, dxand al, 0fhcmp al, 0fhje cl3jmp exitkcl3: mov al, bmov ah, alshl ah, 4mov dx, a8255out dx, almov dx, c8255in al, dxand al, 0fhcmp al, 0fhje cl4jmp exitkcl4: mov al, bmov ah, alshl ah, 4mov dx, a8255out dx, almov dx, c8255in al, dxand al, 0fhcmp al, 0fhexitk:add ah, al ;得到键盘识别码retfindkeyboard endpdispnum proc near ;显示数字子程序cmp ah,0b7hjnz ll2mov cl,remov ch,0mov si,offset listadd si,cxmov al,[si]mov dx,06c2hout dx,almov num1,14jmp ll3ll2: mov cx, 16mov si, offset keycodemov di, offset listmov num1, 0numl1: cmp [si], ahje exitinc siadd num1, 1loop numl1exit: add di, num1 ;显示相应数字mov al, [di]mov dx, 06c2hout dx, alll3: retdispnum endpCUNSHU PROC NEAR ;存放数据PUSH AXCMP X, 0FFHJNE Y1MOV AL, BYTE PTR NUM1MOV X, ALJMP EX1Y1: CMP Y, 0FFHJNE Z1MOV AL, BYTE PTR NUM1MOV Y, ALJMP EX1Z1:MOV AL, BYTE PTR NUM1MOV Z, ALEX1: POP AXRETCUNSHU ENDPJISUAN PROC NEAR ;计算子程序PUSH SILEA SI, KEYCODEMOV AX, 0ADD AL, XADD AL, ZADD SI, AXMOV AH, [SI]MOV RE, ALPOP SIRETJISUAN ENDPcode endsend start四、心得体会课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Jsq implements ActionListener { private JFrame frame;
private JButton[] bus;
private JTextField jtx;
private JButton bu;
private char[] strs;
private String d_one = "";
private String operator;
public static void main(String[] args) {
new Jsq();
}
/* 利用构造进行实例化*/
public Jsq() {
frame = new JFrame("计算器");
jtx = new JTextField(14);
bus = new JButton[16];
strs = "789/456*123-0.+=".toCharArray();
for (int i = 0; i < 16; i++) {
bus[i] = new JButton(strs[i] + "");
bus[i].addActionListener(this);
}
bu = new JButton("C");
bu.addActionListener(this);
init();
}
/* GUI 初始化*/
public void init() {
JPanel jp1 = new JPanel();
jp1.add(jtx);
jp1.add(bu);
frame.add(jp1, BorderLayout.NORTH);
JPanel jp2 = new JPanel();
jp2.setLayout(new GridLayout(4, 4)); for (int i = 0; i < 16; i++) {
jp2.add(bus[i]);
}
frame.add(jp2, BorderLayout.CENTER);
frame.pack();
frame.setLocation(300, 400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EX IT_ON_CLOSE);
}
/* 事件的处理*/
public void actionPerformed(ActionEvent arg0) {
/*获取输入字符*/
String conn = arg0.getActionCommand();
/*清除计算器内容*/
if ("C".equals(conn)) {
d_one = "";
operator = "";
jtx.setText("");
return;
}
/*暂未实现该功能*/
if(".".equals(conn)){
return;
}
/*记录运算符,保存运算数字*/
if (("+-*/".indexOf(conn)) != -1) {
if("".equals(d_one) && "".equals(jtx.getText())) return;
d_one = jtx.getText();
operator = conn;
jtx.setText("");
return;
}
/*计算结果*/
if ("=".equals(conn)) {
if("".equals(d_one) && "".equals(jtx.getText())) return;
double db = 0;
if ("+".equals(operator)) {
db = Double.parseDouble(d_one)
+
Double.parseDouble(jtx.getText());
jtx.setText(db + "");
}
if ("-".equals(operator)) {
db = Double.parseDouble(d_one)
-
Double.parseDouble(jtx.getText());
jtx.setText(db + "");
}
if ("*".equals(operator)) {
db = Double.parseDouble(d_one)
*
Double.parseDouble(jtx.getText());
jtx.setText(db + "");
}
if ("/".equals(operator)) {
db = Double.parseDouble(d_one)
/
Double.parseDouble(jtx.getText());
jtx.setText(db + "");
}
d_one = db + "";
return;
}
//界面显示
jtx.setText(jtx.getText() + conn);
} }。