搜档网
当前位置:搜档网 › 简易计算器(栈)

简易计算器(栈)

简易计算器(栈)
简易计算器(栈)

实验二

——简易计算器(栈)

05111341班李凌豪 1120131263

1.需求分析

1.1.问题重述

(1)问题描述

通过模拟一个简单的计算器来进行+、-、*、/、%、^(乘方)等运算,从键盘上输入一算术表达式(一般为中缀表达式),计算出表达式的值。

(2)基本要求

编写程序,要求可对一实数算术表达式进行简单的数学运算。

可以识别带加减乘除等运算符及括号的中缀表达式。

a. 按照四则运算规则,求表达式的值。一般规则如下:

1)先括号内,再括号外。

2)先乘方,再乘除,后加减。

b. 同级运算从左到右顺序执行。

c.如表达式有误,应给出相应的提示信息。

(3)数据结构与算法分析

解决表达式求值问题的方法之一是:第一步将中缀表达式转换为后缀表达式,第二步按后缀表达式求值。解题时可以结合字符串的相关知识。

1.2.问题分析

本实验要求我们编写一个程序,实现简易计算器的功能。具体包括+、-、*、/、%、^(乘方)等运算,而且要考虑括号对运算顺序的影响。而且,题目要求用栈的知识来实现程序功能,因此需要有两个栈,分别为算符栈和算数栈。可以考虑使用算符优先算法来实现运算。

2.概要设计

2.1.抽象数据类型的定义

考虑到,算符为字符型变量,算数为单精度浮点型变量,则需要定义两种数据类型分别存储。所以定义了如下两种链栈。

typedef struct StackChar{

char c;

struct StackChar *next;

}SC;

typedef struct StackFloat{

float f;

struct StackFloat *next;

}SF;

2.2.主程序流程

主函数只包含了输入输出部分。流程为:首先输入算式,然后调用算符优先算法函数EvaluateExpression(s)进行计算,结果输出;然后循环下去,直到输入EOF指令,退出程序。

具体操作由各子函数实现。

2.3.程序模块之间的调用关系

主函数作为用户界面与用户交互,主函数调用EvaluateExpression函数,再由EvaluateExpression函数调用其他函数实现具体的运算。

具体的程序模块之间的调用关系如下图所示:

3.详细设计

3.1.主函数的具体实现

用一个字符数组来存储输入的算式,用scanf函数进行输入,用printf函数进行输出,用goto语句实现循环。具体实现后的程序语句如下:

int main()//主函数,用来输入输出和调用子函数

{

char s[128];

printf("输入EOF退出程序,本程序不支持输入负数\n");

k:printf("请输入算式:\n");

if(scanf("%s",s)!=EOF)

{printf("%s\b=%g\n",s,EvaluateExpression(s)); //调用算符优先算法函数

goto k;}

}

3.2.子函数的具体实现

(1)算符优先算法的主干函数float EvaluateExpression(char* e) 实现算符优先算法主干的函数。首先判断是算符还是算数,如果是算符,与算符栈栈顶元素进行优先级比较,如果该算符优先级比原栈顶元素优先级高,则进栈,否则进行运算;如果是算数,则入算数栈。

(2)进栈出栈函数

SC* Push(SC *s,char c);//使算符c进入算符栈

SF* Push(SF *s,float f);//使数值f进入数值栈

SC* Pop(SC *s);//使算符栈的栈顶元素出栈

SF* Pop(SF *s);//使数值栈的栈顶元素出栈

分别实现算符和数值的进栈和出栈操作,由EvaluateExpression函数直接调

用。

(3)运算函数float Operate(float a,unsigned char t, float b);

进行运算,a,b为数,t为运算符,进行加减乘除或乘方运算,返回值为运算的结果。

(4)类型判断函数 Status In(char Test,char* TestOp);

判断是不是运算符,返回是或不是。

(5)优先级判断函数 char precede(char Aop, char Bop);

判断两个算符的优先级,返回'>'或'<'或'='。

(6)运算符识别函数int ReturnOpOrd(char op,char *TestOp);

判断是哪个运算符。

4.调试分析

4.1.难点以及遇到的困难

本次实验的难点主要有两个方面。一方面是栈的使用,因为之前没有用过栈,所以栈对我们来说还比较陌生,需要较长时间熟悉。另一方面是算法设计,本次使用的算符优先算法非常巧妙,老师在课堂上也讲解过,结合教材上的内容,还是可以实现的。

4.2.经验及体会

由这个实验,我深刻地体会到了算法设计的重要性。看似很难实现的问题,如果有一个好的算法作为支撑,便可以迎刃而解。就像这次用到的算符优先算法,将算符优先级编制成表,很好的解决了运算顺序的问题。

5.测试结果

我们首先分别分开验证加减乘除运算,乘方运算,取余运算。之后验证包括括号在内的混合运算。

左上为程序中执行的结果,右上为EXCEL运算的结果。可见程序在分别进行加减乘除乘方运算时,运算结果完全正确。

左上图为取余运算在本程序中的运算结果,右上图为相同的算式在EXCEL 中的运算结果。可见,本程序的取余运算在后一项为整数的前提下是完全正确的。

以上两图分别为在程序中的混合运算和在EXCEL中的混合运算,观察可知,程序运行输出的结果完全正确。

6. 附录

#include

#include

#include

#include

#define true 1

#define false 0

#define OPSETSIZE 9

typedef int Status; //将int定义为自定义数据类型

typedef struct StackChar{

char c;

struct StackChar *next;

}SC; //存放算符的栈

typedef struct StackFloat{

float f;

struct StackFloat *next;

}SF; //存放数值的栈

char OPSET[OPSETSIZE]={'+' , '-' , '*' , '/' ,'(' , ')' , '#','^','%'};

unsigned char Prior[9][9] = { // 算符间的优先级表,用于算符优先算法的判断//'+' '-' '*' '/' '(' ')' '#' '^' '%'

/*'+'*/'>','>','<','<','<','>','>','<','<',

/*'-'*/'>','>','<','<','<','>','>','<','<',

/*'*'*/'>','>','>','>','<','>','>','<','>',

/*'/'*/'>','>','>','>','<','>','>','<','>',

/*'('*/'<','<','<','<','<','=',' ','<','<',

/*')'*/'>','>','>','>',' ','>','>','>','>',

/*'#'*/'<','<','<','<','<',' ','=','<','<',

/*'^'*/'>','>','>','>','<','>','>','>','>',

/*'%'*/'>','>','>','>','<','>','>','<','>'

};

//函数的声明

float EvaluateExpression(char* e);//实现算符优先算法的函数

SC* Push(SC *s,char c);//使算符c进入算符栈

SF* Push(SF *s,float f);//使数值f进入数值栈

SC* Pop(SC *s);//使算符栈的栈顶元素出栈

SF* Pop(SF *s);//使数值栈的栈顶元素出栈

float Operate(float a,unsigned char t, float b); //进行运算,a,b为数,t为运算符Status In(char Test,char* TestOp);//判断是不是运算符,返回是或不是

char precede(char Aop, char Bop);//判断优先级,返回'>'或'<'或'='

int ReturnOpOrd(char op,char *TestOp);//判断是哪个运算符

int main()//主函数,用来输入输出和调用子函数

{

char s[128];

printf("输入EOF退出程序,本程序不支持输入负数\n");

k:printf("请输入算式:\n");

if(scanf("%s",s)!=EOF)

{printf("%s\b=%g\n",s,EvaluateExpression(s)); //调用算符优先算法函数

goto k;}

}

float EvaluateExpression(char* e)

{// 算术表达式求值的算符优先算法。设OPTR和OPND分别为运算符栈和运算数栈,OP为运算符集合。

SC *OPTR=NULL; // 算符栈,字符元素

SF *OPND=NULL; // 数值栈,实数元素

char TempData[20];

float Data,a,b;

char theta,*c,x,Dr[]={'#','\0'};

OPTR=Push(OPTR,'#');

c=strcat(e,Dr);

strcpy(TempData,"\0");

while (*c!= '#' || OPTR->c!='#') {

if (!In(*c, OPSET)) { // 不是运算符则进栈

Dr[0]=*c;

strcat(TempData,Dr);//字符串连接函数

c++;

if (In(*c, OPSET)) {

Data=atof(TempData);//字符串转换函数(double)

OPND=Push(OPND, Data);

strcpy(TempData,"\0");

}

}

else {

switch (precede(OPTR->c, *c)) {

case '<': // 栈顶元素优先权低

OPTR=Push(OPTR, *c);c++;break;

case '=': // 脱括号并接收下一字符

OPTR=Pop(OPTR);c++; break;

case '>': // 退栈并将运算结果入栈

theta=OPTR->c;OPTR=Pop(OPTR);

b=OPND->f;OPND=Pop(OPND);

a=OPND->f;OPND=Pop(OPND);

OPND=Push(OPND, Operate(a, theta, b));

break;

}

}

}

return OPND->f;

}

SC* Push(SC *s,char c)//使算符c进入算符栈

{

SC *p=(SC*)malloc(sizeof(SC));

p->c=c;

p->next=s;

return p;

}

SF* Push(SF *s,float f)//使数值f进入数值栈

{

SF *p=(SF*)malloc(sizeof(SF));

p->f=f;

p->next=s;

return p;

}

SC* Pop(SC *s)//使算符栈的栈顶元素出栈

{

SC *q=s;

s=s->next;

free(q);

return s;

}

SF* Pop(SF *s)//使数值栈的栈顶元素出栈

{

SF *q=s;

s=s->next;

free(q);

return s;

}

float Operate(float a,unsigned char t, float b)//进行运算,a,b为数,t为运算符{

switch(t) {

case '+': return a+b;

case '-': return a-b;

case '*': return a*b;

case '/': return a/b;

case '^': return pow(a,b);

case '%': {int c,d;c=b/1;d=a/1;return d%c;}

default : return 0;

}

}

Status In(char Test,char* TestOp)//判断是不是运算符,返回是或不是

{

int Find=false;

for (int i=0; i

{

if (Test == TestOp[i]) Find= true;

}

return Find;

}

char precede(char Aop, char Bop)//判断优先级,返回'>'或'<'或'='

{

return Prior[ReturnOpOrd(Aop,OPSET)][ReturnOpOrd(Bop,OPSET)]; }

int ReturnOpOrd(char op,char *TestOp)//判断是哪个运算符

{

for(int i=0; i< OPSETSIZE; i++)

if (op == TestOp[i]) return i;

}

C++ 科学计算器-课程设计报告

DONGFANG COLLEGE,FUJIAN AGRICULTURE AND FORESTRY UNIVERSITY 课程名称:堆栈计算器 系别:计算机 年级专业:11级计算机科学与技术 学号:1150303040 姓名:蔡新云 任课教师:林励成绩: 2013 年 6 月13 日

引言 堆栈计算器 简介: 计算带括号的数学算式,可以判断优先级,错误判断等功能。友好的操作界面,美观的视觉效果。 截图 界面: 计算演示: 结果:

错误判断: 数据结构:应用了栈,做数值缓存,应用了递归处理括号内算式。其他知识:mfc界面设计;c++类的封装(.h与.cpp分离)。 编译环境:使用了vs2012,通过修改vs2010也可以打开。

程序简单流程图: (注:eval 的代码在下面。。。) 功能实现原理与代码: //栈的实现 //初始化 stack::stack(int len) { lengh=len; date=new double[len]; date[0]=0; top=0; } stack::stack() { date=new double[100]; MFC 文本框 按钮事件 = 事件 Cal.eval() 调用函数eval(),返回结果到文本框 当 =事件 发生 从文本框取出表达式到eval ()函数

date[0]=0; top=0; } //判断为空 bool stack::is_empty() { if(top==0) { return true; } return false; } //进栈 void stack::push(double number) { date[top++]=number; } //出栈 double stack::pop() { if(!is_empty()) return date[--top]; } //calculator类(核心代码) 初始化 calculator::calculator() { error="null"; } 是否为数字 bool calculator::is_num(char num) { if(num<='9' && num>='0'||num=='.') { return true; }

简易计算器

生产(毕业)实习报告 院(系)信息科学与工程 专业班计算机应用技术1201 学生姓名卢潇 指导教师溪利亚 (实习时间:2014年11月24日~2014年12月5日) 华中科技大学武昌分校

实习报告撰写内容、格式与成绩评定 一. 实习报告内容与格式 目录 1.实习单位简介; 2.实习的主要内容; 3.专题内容分析; 4.实习收获与体会; 5.对改进实习工作的建议。 二.实习报告书写要求: 1.字数要求:理、工科专业不少于4000字;经、管、文、法类专业不少于5000字;艺术类专业不少于3000字; 2.图表清晰并应符合国家标准和规范; 3.若用笔书写应做到字迹工整。 三.实习成绩评定 成绩综合评定等级:指导教师(签名): 20 年月日

目录 1 实习单位简介 (1) 2 实习主要内容 (2) 2.1 开发软件 (2) 2.2 实习目的 (2) 2.3实习内容 (2) 2.3.1SQL简单语句 (2) 2.3.2数据库设计 (2) 2.3.3 Java体系 (3) 2.3.4 JSP与Tomcat服务器 (3) 2.3.5项目开发周期介绍 (3) 2.3.6计算器设计 (3) 2.3.6项目测试 (3) 3专题分析 (3) 3.1对SQL加入信息 (3) 3.2SQL用户创建以及数据库建立 (4) 3.2.1数据库建立 (4) 3.2.2用户创建以及密码创建 (4) 3.3运行SQL语句结果 (6) 3.4表格的设计 (6) 3.4.1表格相关代码 (6) 3.5在myelipse软件中进行操作 (7) 3.5.1导入包 (7) 3.5.2导入驱动包 (8) 3.5.3数据库连接代码 (9) 3.5.4询数据库 (10) 3.5.5码修改数据库 (10) 3.5.6最后运行结果 (11) 4 实习总结 (11)

单片机简单计算器报告(自己精心整理)

基 于 单 片 机 的 简 易 计 算 器 设 计 自动化控制一班 摘要: 近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。 本任务是个简易的两位数的四则运算,程序都是根据教材内和网络中的程序参考编写而成,在功能上还并不完善,限制也较多。本任务重在设计构思与团队合作,使得我们用专业知识、专业技能分析和解决问题全面系统的锻炼。 关键词: 单片机计算器范围加减乘除 1 引言 1.1 计算器的历史 说起计算器,值得我们骄傲的是,最早的计算工具诞生在中国。中国古代最早采用的一种计算工具叫筹策,又被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的。约二百七十枚一束,放在布袋里可随身携带。直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的"纳皮尔算筹",英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加减乘除、乘方、开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。 1.2 电子计算器的特殊键 在使用电子计算器进行四则运算的时候,一般要用到数字键,四则运算键和清除数据键。除了这些按键,还有一些特殊键,可以使计算更加简便迅速。 2 单片机概述 单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。

简易加减计算器小程序

[java語言與程序設計]简易加减计算器小程序 歸真我发表于:2011/8/1922:51:21标签(TAG): 简易加减计算器小程序 在上一篇《简易计算器面板小程序》中,我已对面板部分的程序作了详细的注释,并对程序的运行过程及结果作了完整的介绍,并且是上机调试过了得到的结果。但是,那只是面板,不能运算。要想让它具有运算的功能,还得在此基础上作一些修改,加进有关按钮动作响应部分的程序。为了便于理解,便于调试,便于学习,掌握其要点,我想应该遵循循序渐进的原则,所以,先从加减运算开始,看看这个功能是怎么实现的。请看下面的小程序。从程序中可以看出,它是利用内部类ButtonAct来处理按钮的动作响应的。从总体上讲是两个按钮“运算”和“重置”,但“运算”又区分为“加”和“减”。所以,用负责实现双分支的if语句来编程。 /**C2.java简易加减计算器小程序*/ import java.applet.*; import java.awt.*; import java.awt.event.*; public class C2extends Applet{ TextField t1,t2,t3; Button btn1,btn2; CheckboxGroup select; Checkbox a,s;//分别代表加、减 Label b; public void init(){ t1=new TextField(13); t2=new TextField(13); t3=new TextField(13); btn1=new Button("等于");

btn2=new Button("重置"); select=new CheckboxGroup(); a=new Checkbox("加",true,select); s=new Checkbox("减",false,select); b=new Label("简易加法/减法计算器"); add(b); add(t1); add(a); add(s); add(t2); add(btn1); add(t3); add(btn2); btn1.addActionListener(new ButtonAct());//注册给ButtonAct对象btn2.addActionListener(new ButtonAct());//注册给ButtonAct对象} class ButtonAct implements ActionListener{//内部类,按钮处理public void actionPerformed(ActionEvent e){ int op1,op2,op3; if(e.getSource()==btn1){//等于按钮 op1=Integer.parseInt(t1.getText()); op2=Integer.parseInt(t2.getText()); if(a.getState())//以下判断计算类型并实现相应的计算 op3=op1+op2; else op3=op1-op2; t3.setText(Integer.toString(op3)); } else{//重置按钮 t1.setText(""); t2.setText(""); t3.setText(""); a.setState(true); } } }//end of ButtonAct }//*~ 运行结果为:

科学计算器壳套模具设计

二、注射机的选择 塑件:科学计算器壳套 重量: 材料:ABS 材料密度:~cm3,取密度为cm3。 体积:V=M/ρ==。 ABS 注塑模工艺条件 注射机类型:螺杆式注射机。 干燥处理:吸湿性较大,成型前应干燥处理,湿度应小于%,建议干燥条件为80~85℃, 2~3小时。 熔化温度:230~300℃。 模具温度:50~80℃。 注射压力:70~100MPa 。 注射速度:中等注射速度,将摩擦热降至最低。 型腔数的选择 按生产进度算: 型腔数n= 其中 ——故障系数; ——成型周期 N ——一副模具的订货量; ——所在厂每月工作时间(h); ——订货至交货 期(月); ——模具制造时间(月)。 由于计算器壳套的体积较大,需要的注射量较大,所以模具选用一模两腔。 注射机的选择 最大注射量 根据生产经验总结,在设计模具以容量计算时 ——注射机最大注射量,cm3; 0*1.053600() c h m N t t t t ?-c t h t 0t max V 0.8V ≤塑

——塑件与浇注系统体积总和,cm3。 ——塑件成型时所需要的注射量,cm3或g ; n ——型腔个数; ——每个塑件的质量或体积,cm3或g ; ——浇注系统的质量或体积,cm3或g 。 浇注系统凝料体积初步计算,按塑件体积倍计算。 代入产品体积,浇注系统体积,型腔数为4个。 则 3345.8830.882.13(4cm cm G =+?=)塑 3max 56.1108.045.888.0cm G G =÷=÷=塑 公称注射容量 注射机多以公称注射容量来表示 c ——料筒温度下塑料的体积膨胀率的矫正系数,对于结晶形塑料,c=;对于非结晶形 塑料,c=; ——所用塑料在常温下的密度; G ——注射机的公称注射容量。 代入 3/05.1cm g =ρ, 取c=; 则 3max 96.107)05.193.0/(56.110/cm c G G =?==ρ。 锁模力 模具从分型面涨开的力必须小于注射机规定的锁模力 T ——注射机的额定锁模力; F ——塑件与浇注系统在分型面上的总投影面积; K ——安全系数,通常取~; q ——熔融塑料在模腔内的压 力,. 代入数据, 22237.15855.34cm cm F =??=π 根据《塑料成形模具设计》表4-1,取q=300 G =n *M +M 塑塑浇 max G c G ρ=1000 T K F q ≥??2/kg cm 2 /kg cm

简单计算器设计报告

简单计算器设计报告 045 一、基本功能描述 通过文本编辑框实现基本整数的加减乘除运算 二、设计思路 如下图是整个程序进行的流程图,基本方法是在ItemText文本编辑框输入字符,程序对字符进行判断,若输入不是数字则提示错误。输入正常时,通过下拉框ComboBox_InsertString 选择相应运算符。点击等号IDC_OK,即可得出运算结果。操作简便,算法简单。 三、软件设计 1、设计步骤 打开Microsoft Visual C++ 6.0,在文件中点击新建,在弹出框内选择MFC AppWizard[exe]工程,输入工程名zhoutong及其所在位置,点击确定 1

将弹出MFC AppWizard-step 1对话框,选择基本对话框,点击完成 MFC AppWizard就建立了一个基于对话窗口的程序框架

四、主要程序分析 1、字符判定函数 BOOL IsInt(TCHAR*str) { int i=atoi(str); TCHAR strtemp[256]; wsprintf(strtemp,"%i",i); if(strcmp(str,strtemp)!=0) { return FALSE; } Else { return TRUE; } } 该函数通过atoi把文本编辑框读取的字符转换为数字,再通过wsprintf把转换数字转换为字符,通过strcmp比较原字符和转换得来的字符。如相同返回true,不通则返回false. 3、运算符选择程序 BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { HWND hwndComboOP=GetDlgItem(hwnd,IDC_COMBOOP); ComboBox_InsertString(hwndComboOP,-1,TEXT("+")); ComboBox_InsertString(hwndComboOP,-1,TEXT("-")); ComboBox_InsertString(hwndComboOP,-1,TEXT("*")); ComboBox_InsertString(hwndComboOP,-1,TEXT("/")); return TRUE; } 3

计算机科学与技术专业课程设计

专业教育 ─我所认识的计算机专业 1.对专业的最初认识 1.1为什么选择计算机专业 计算机使当代社会的经济、政治、军事、科研、教育、服务等方面在概念和技术上发生了革命性的变化,对人类社会的进步已经并还将产生极为深刻的影响。目前,计算机是世界各发达国家激烈竞争的科学技术领域之一。 随着信息时代的到来,计算机逐渐成为技术及科学领域的核心。随着计算机的普及,其应用领域逐渐广泛,深刻影响着我们的学习,工作及生活。因而,计算机的学习与我们的生活息息相关。 1.2最初的认识 虽然对于这个专业刚开始的时候不了解它具体是干什么的,但是从小就对于计算机十分感兴趣,因此在高考完填报志愿时就报了这个专业。进入大学之后,看到培养计划发现这个专业应用还是挺多的,但是因此让自己更加的对以后的职业感到很迷茫,不知道究竟是该干什么了。但是既来之,则安之。相信在以后的学习过程中会慢慢地找到方向,并为之努力的。因此说对于计算机专业还是抱有很大的热情的。 2.学习的方法 2.1培养对专业的兴趣 俗话说兴趣是最好的老师,因此要想真正做好一件事情,学好自己的专业首先就要培养自己对本专业的兴趣。那么应该如何培养呢?可能阅读专业书籍对于刚刚步入大学的自己来说有点困难,也很枯燥,那么不妨先从科普书籍看起。科普书籍是了解理论、获得应用知识最好的途径。相信不少理工科的同学被量子物理和相对论搞得头昏脑胀过。究其原因,是我们的现实生活与抽象的数学模型之间存在思想意识上的鸿沟。然而要是读读斯蒂芬·霍金的《时间简史》,你就会被书中有趣的故事和例证所吸引,从而对抽象的理论有了感性的认识——即使仍然没有读懂,你也至少了解了这个学科研究的领域和目标是什么,也必然有所收获。 2.2认真学习专业课程,学好数学 大学计算机专业对数学的要求较高,其重要性不必多言。数学令不少同学头痛,除了其“繁”与“难”外,很大程度上是因为他们没有理解这些抽象理论的实际应用方向。与本科数学专业的课程设置相比,计算机专业的数

简易计算器Java实训报告

实训报告书实训名称:Java程序设计实训 系(部):信息工程系 专业班级:计算机科学与技术 学生姓名: 学号: 指导教师:张民 完成日期:2015.12.11 山东科技大学泰山科技学院

课程实训报告书

目录 1 实训目的 (3) 2 简易计算机的分析与设计 (3) 2.1 系统功能描述 (3) 2.2 系统模块设计 (3) 2.3 数据库结构设计 (4) 3 主要代码清单 (5) 4 程序运行与测试 (9) 5 实训总结 (11)

简易计算机的设计与实现 1 实训目的 通过本课程设计能够较全面的掌握面向对象程序设计的有关概念和开发方法,以便能较全面地理解、掌握和综合运用所学的知识,提高自身的编程能力。利用Java Applet图形界面首先开始设计一个计算器的界面,定义计算器所需要的按钮并赋给其按钮名称,使得使用计算器时简单明了,清晰可见,操作轻松。 给各个按钮进行算法,利用鼠标点击事件,当鼠标点击某个按钮时就开始执行那个按钮所定义的算法,生成数据并显示。 除数字的输入为直接进行输入外,其他运算例如+、-、*、/、开平方等算法要求计算时通过内部较为复杂的运算将结果显示在显示屏上。 至于其中的进制转换功能的实现则是直接调用Java中进制转换的函数,例如要将十进制转换成二进制则可直接调用函数Integer.toBinaryString(int i)来实现,充分显示了Java语言的简洁性和Java语言功能的强大性。 当然了在输入数据时还要进行异常捕捉,防止越界的现象的发生,这也是Java语言健壮性的体现! 2 简易计算机的分析与设计 2.1 系统功能描述 1)可进行“+”、“-”、“*”、“/”以及混合运算。 2)支持()改变运算的优先级 3)可进行二、十六和十进制数的相互转换 4)支持复制和粘贴操作 2.2 系统模块设计 (1)加法 两个数据进行加操作,可以为小数。 (2)减法 两个数据进行减操作,可以为负数相减。( 3)乘法

java编写的加法计算器

/* * To change this template, choose Tools | Templates * and open the template in the editor. */ /** * * @author asus */ import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Calculator implements ActionListener { JFrame sb; String s1,s2; int T1,T2,T3; JTextField t1,t2,t3; JLabel jl1,jl2; public Calculator() { sb=new JFrame("加法计算器"); sb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); sb.setSize(260,100); Container a=sb.getContentPane(); a.setLayout(new FlowLayout()); t1=new JTextField(5); t2=new JTextField(5); t3=new JTextField(5); t1.setEditable(true); t2.setEditable(true); t3.setEditable(false); jl1=new JLabel("+"); jl2=new JLabel("="); JButton he=new JButton("求和"); he.addActionListener(this); a.add(t1); a.add(jl1); a.add(t2); a.add(jl2); a.add(t3); a.add(he);

简易计算器

单片机课程设计题目:简易计算器的设计 专业:06电子信息科学与技术 姓名:倪耀兴 学号:060303008 指导老师:蔡植善 理工学院电信系 设计日期:2009年5月 12日

简易计算器的设计 1.引言------------------------------------------------2 2. 设计任务和要求-------------------------------------2 2.1设计要求-------------------------------------------0 2.2设计方案的确定-------------------------------------2 2.3主要元器件介绍--------------------------------------------------------3 3.简易计算器的硬件设计--------------------------------4 3.1键盘电路的设计----------------------------------4 3.2显示电路的设计---------------------------------4 4.简易计算器的软件设计-------------------------------6 4.1简易计算器的软件规则--------------------------------6 4.2中断查键的按键程序设计-------------------------------7 4.3显示模块程序的设计----------------------------7 4.4主程序的设计---------------------------------------7 5.调试及性能分析--------------------------------------7 5.1硬件调试--------------------------------------------7 5.2软件调试--------------------------------------------7 5.3相关可靠性软件设计----------------------------------7 5.4完整的源程序---------------------------------------------------------8- 6.关键程序的流程图-------------------------------------17 7.设计心得------------------------------------------19 8. 参考文献-----------------------------------------19

速算,简易计算器c语言代码,可实现加减乘除

#include"stdio.h" #include"math.h" #include"stdlib.h" struct optrstyle { int top; char stack[20]; } struct opndstyle { int top; int stack[20]; } void main() { char ch; while(1) { printf("-----------------------------------------\n"); printf("|-----------欢迎来到速算24--------------|\n"); printf("|----------是否开始游戏?????------------|\n"); printf("|--------- 开始游戏请按'Y'-------------|\n"); printf("|--------- 退出游戏请按其他键-------------|\n"); printf("-----------------------------------------\n"); scanf("%c",&ch); if(ch=='Y' or ch=='y') { } else break; } } int EvaluateExpression() { // 算术表达式求值的算符优先算法。设OPTR 和OPND 分别为运算符栈和运算数栈,OP 为运算符集合。 InitStack(OPTR); Push(OPTR,'#'); InitStack(OPND); c = getchar(); while(c!='#' || GetTop(OPTR)!='#') { if(!In(c,OP))

科学计算器课程设计报告C课程设计修订稿

科学计算器课程设计报告C课程设计 集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]

计算机科学与技术学部 C++课程设计 题目科学计算器 学部计算机科学与技术 班级计科1103 指导教师李军 姓名刘明 学号 2012年6月27日

摘要 计算器的产生和发展是建立在电子计算机基础之上的。硬件方面,自1946年第一台电子计算机诞生以来,计算机技术的发展可谓日新月异,从庞大的只能在实验室里供研究使用的计算机到如今能适应不同环境满足不同需求的各种各样的计算机;运算速度从每秒几千次到每秒几百亿次;处理器从焊有上百万个电子管的大的惊人的电子板到只有指甲大小的集成电路;现在计算机在硬件方面的发展已达到了每三个月更新换代一次的惊人速度。软件方面,也已从机器语言、汇编语言、高级语言发展到现如今的第四代语言——非结构化、面向对象、可视化的语言。 在这个计算器里面,我们实现了简单的四则运算以及更高功能的科学计算,它的外观简洁美观,使人们能快捷简单的操作。能准确的得到计算结果,大大减少了数字计算所需要的时间,为人们的生活带来便利。此系统在Windows 7环境下,使用VC++ 进行编写。 简单计算器包括双目运算和单目运算功能,双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,对数,开方,阶乘,倒数,进制转换等运算。可对其输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。并且包含清除,退格功能等。我们所做的计算器其功能较Windows 7下的计算器还是很不够多,没有其菜单的实现功能项,没有其小巧的标准计算器。 关键词:计算器;运算;VC++等

简单计算器

简单计算器 一、设计分析 1、功能描述 设计一个能实现整数0-9之间的简单加、减、乘法运算的计算器,输入和输出均要显示在数码管上。 2、实现工具 1、用VHDL 语言文本形式输入; 2、maxplusII行语言编写时序仿真和综合。 二、设计思想 采用自顶向下的设计方式,分层进行设计。设计分为五个模块进行; 计算器模块、七位二进制数转化成8421BCD码模块,四选一数据选择器模块,七段显示译码器模块、模4计数器模块、2—8译码器块。顶层设计可以完全独立于目标器件芯片物理结构的硬件描述语言。使用VHDL模型在所综合级别上对硬件设计进行说明、建模和仿真。 1、顶层原原理框图 2、具体实现 1、计算器模块 2、七位二进制数转化成8421BCD码模块

3、四选一数据选择器模块 4、七段显示译码器模块 5、模4计数器模块 6、2—8译码器块

三、设计过程 1、建立工程 建立一个Project,命名为jiandanjisuanqi。将各个模块生成的文件放在同一个文件夹下。 2、文本输入 将各个模块的VHDL代码输入,保存并综合。 3、仿真 建立各个模块的gdf图,设置输入波形并仿真。 4、顶层原理图输入 利用各个模块生成的sym文件建立顶层原理图,编译并仿真。 5、硬件实现 实验室提供的器件为FLEX10K,型号为EPF10K10LC84-4,将文件下载到器件当中,在实验箱中进行模拟。 四、整体框图

五、VHDL部分代码及说明 1、计算器模块、 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity jisuanqi is Port (a,b: in STD_LOGIC_VECTOR (3 downto 0); sel: in STD_LOGIC_VECTOR (1 downto 0); y: out STD_LOGIC_VECTOR (6 downto 0)); end jisuanqi; architecture rtl of jisuanqi is signal q1 ,q2: STD_LOGIC_VECTOR (3 downto 0); signal q3: STD_LOGIC_VECTOR (1 downto 0); signal q4: STD_LOGIC_VECTOR (6 downto 0); begin q1<=a; q2<=b; q3<=sel; process(q4,q3) begin case q3 is when "00" => q4<=q1+q2; when "01" => if(q1>q2)then q4<= q1-q2; else q4<=q2-q1; end if; when "10"=> q4<=q1*q2; when others=> q4<="0000000"; end case; y<=q4; end process; end rtl; 2、七位二进制数转化成8421BCD码模块

简易计算器

单片机十进制加法计算器设计 摘要 本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计 算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机,输入采用4×4矩阵键盘。显示采用3位7段共阴极LED动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C 语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用全球编译效率最高的KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus仿真。 引言 十进制加法计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。 单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。 关键词:单片机、计算器、AT89C51芯片、汇编语言、数码管、加减乘除

目录 摘要 (01) 引言 (01) 一、设计任务和要求............................. 1、1 设计要求 1、2 性能指标 1、3 设计方案的确定 二、单片机简要原理............................. 2、1 AT89C51的介绍 2、2 单片机最小系统 2、3 七段共阳极数码管 三、硬件设计................................... 3、1 键盘电路的设计 3、2 显示电路的设计 四、软件设计................................... 4、1 系统设计 4、2 显示电路的设计 五、调试与仿真................................. 5、1 Keil C51单片机软件开发系统 5、2 proteus的操作 六、心得体会.................................... 参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单..................................

VB程序语言设计科学计算器

VB程序语言设计 课程大作业 题目名称:科学计算器设计 班级: 12020742 姓名: 学号: 课程教师:温海骏 学期:2014-2015学年第2学期 完成时间: 2015年5月

一、实验内容 《科学计算器》设计 本科学计算器是一种能实现加、减、乘、除、倒数、乘方、正玄、余玄、正切、In、n!函数、进制、弧度转换等运算功能,并带有存储器、统计框等,基本实现了Windows自带计算器的所有功能。要实现计算器的这些功能就用到我们所学的VB知识编写程序来实现运算功能并解决问题,也是我们实训要达到的目的。 二、实验目的 1、通过本实验,进一步理解Visual Basic的编程方法。 2、提高运用Visual Basic编程的能力。 3、培养对所学知识的综合运用能力。 4、用所学的VB知识编写程序来实现运算功能并解决问题,达到实训的目的 三、实验设备 计算机、VB软件 四、实验过程 1、课题的选材过程(设计思路) 由VB程序设计的科学计算器是一种能实现加、减、乘、除、倒数、乘方、正玄、余玄、正切、In、n!函数、进制、弧度转换等运算功能,并带有存储器、统计框等,基本实现了Windows自带计算器的所有功能。 思路:为实现上述功能,我的基本思路是在窗体上建立4个控件数组,第一个控件数组是标准型,实现简单的四则运算;第二个控件数组是科学型,用来进行正弦余弦、正切余切、正割余割、反正弦反余弦、对数和n!等函数功能;第三个控件数组为程序员,实现进制转换;另外一个按钮实现单位转换。 2、设计的将要达到的目标 实现加、减、乘、除、倒数、乘方、正玄、余玄、正切、In、n!函数、进制、弧度转换等运算功能,并带有存储器、统计框等,基本实现Windows自带计算器的所有功能。 3、总体设计结构与功能 (1)总体设计结构介绍(绘制:结构流程图) 结构流程图如下:

8086简易计算器的设计 微机原理 计硬报告

计算机硬件技术实践报告 题目简易计算器的设计 姓名 专业自动化(电站方向) 班级 学号 上海电力学院自动化工程学院

实践报告内容(目录) 一. 设计题目 二. 开发目的 三. 小组成员分工及成果 四. 设计方案以及论证 五. 硬件原理图(包括芯片的选型介绍) 六. 程序流程图(包括各个子系统和子过程的程序流程) 七. 程序清单,要有适当的注释 八. 程序运行结果分析与预测 九. 结果评述或总结(对实验结果进行分析,对实验过程进行总 结,系统改进升级建议或者提出新的方案等。)

一. 设计题目: 用8086设计一个能实现0~9整数加法运算的计算器,并用2位LED数码显示. 键盘包括0-9,+ ,-,*,/,=,ON/C;共16个按键.能实现简单的清零操作,减法运算,乘法运算. 二.开发目的: 通过课程设计,熟悉和掌握微机系统的软件、硬件设计的方法、设计步骤,得到微机开发应用方面的初步训练。培养集体讨论设计题目的总体设计方案、编程、软件硬件调试、编写设计报告等问题,做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。通过本次课程设计熟练运用程序对8255控制键盘和LED显示的控制,完成计算器加减法的应用,并熟练应用8086汇编语言编写应用程序和实际设计中的硬软件调试方法和步骤,熟悉微机系统的硬软件开发工具的使用方法。 三.小组成员分工及成果: 本组的三个成员一起讨论研究简易计算器设计的主要方案。 粗略设计程序流程图以确定简易计算器设计的大概框架。 明确目的后各自查询资料了解设计原理、逐步清晰设计思路。 以下为大体分工:主要负责:1、设计主要程序,编写; 2、查找资料验证修改; 主要负责:1、选择需要用的各个芯片; 2、设计硬件原理图; 主要负责:1、各个芯片功能的资料查找; 2、设计程序流程图 四.设计方案以及论证: 利用程序不断扫描所设的按钮键盘是不是有输入,如果没有就一直扫描,如果有就调用子程序进行判断,是数值则进行存储并同时进行显示,是运算符号等就调用相应的子程序进行操作,操作后则继续利用程序不断扫描键盘是不是有输入,从而实现部分十进制数的加、减、乘、除的运算。运算完成后根据程序将运算的结果储存到锁存器中并显示到LED 显示器上。主要器件选择是采用8086CPU做主控制器,8255作为并行接口电路实现按键扫描以及数码管的显示。通过8255A的C口和A口实现键盘的接入,通过键盘的不断扫描,如果有键按下,通过查表法分别将输入的数据读到AL中并保存在第一个和第二个数里,将8255A的B端口接上共阴极LED灯,将输入的数据通过查表法,将四段码送共阴极LED 灯显示,当按下‘=’时,通过判断字符,8086来实现不同的操作,并将结果在LED灯上显示,当按下“C”时,将数据先清零,同时LED灯上显示为“00”。

数码管之简单加减法计算器--项目总结

数码管之简单加减法计算器--项目总结 总结人:徐冉1.项目使用到的硬件板载资源 1)单片机STC89C52RC作为系统的处理器 2)6位共阳极数码管作为计算器的数字显示器件 3)LCD1602液晶显示一些提示信息如计算时的符号(正/负) 4)4*4矩阵按键作为计算器的数字输入设备 5)8个贴片LED小灯,用于走马灯效果作为修饰 6)用到了单片机的内部资源定时器T0 2.项目的基本功能 通过程序的烧录,将工程中的hex文件烧录到Kingst-51开发板上。现象如下: 初始时 1)最右边的数码管上显示0,其余数码管不显示。 2)五个LED小灯像小火车一样循环跑着。 3)LCD1602液晶的左上角显示Symbol:字样,用于显示符号。 正数不显示,负数时将显示‘-’。 进行简单的加减法运算 当用户使用按键输入相应的数字时,会在数码管上显示。数字值将进行进位累加方式实现。数字键(k13 k1 ~ k3 k5 ~ k7 k9 ~ k11 0 ~ 9),k4加法功能键,k12减法功能键,k14 ESC清零键,k4和

k12是双功能键,即k4既是加法键也是计算键,k12既是减法键也是计算键。达到一键两用的效果。注意:用户在进行加法计算时可以随意计算,但在计算减法时第一步需要进行一次加法,然后才能进行减法运算。当计算结果是负数时会在数码管上显示相应的数值的绝对值,而在LCD1602液晶上显示‘-’。在计算期间LED 小灯会一直循环流动。这个计算器可以实现连加连减,计算十分方便,但没有处理小数。当计算完成时,或输入错误时可按k14进行清零操作。 3.项目的创新点 首先该项目使用了LED 的跑马灯效果进行了装饰,为了程序的简单且直观性程序使用了LCD1602进行运算时符号的显示。程序在计算上使用了一键两用的功能设计,这样设计方便快捷。 4.项目的设计流程 N Y 上电 LCD1602液晶 初始化 74HC138译码器初始化 配置定时器T0定时1ms 中断 Lcd1602初始化显示Symbol 主函数while 循环进行按键动作检测 1ms 到 按键扫描 LED 小灯&数码管扫描 结束

科学计算器设计报告(51单片机)

单片机课程设计报告 (多功能计算器) 班级: 姓名: 学号: 指导老师:

一、内容摘要 利用89c51作为主控器设计一个四则运算的计算器。 首先通过在图书馆和网上查找有关设计计算器的资料,大概了解设计计算器需要哪几个模块,熟悉Keil 和Proteus 两个软件的用法,以及它们的联调,完成计算器的程序设计和仿真,然后就是进实验室进行计算器电路板的焊接,最后就是将程序下载到单片机芯片中,系统联调,直到得出结果。 二、设计内容及要求 用单片机设计计算器,要求可以进行加、减、乘、除运算。 三、系统方案设计,画出系统框图 四、画出完整的电路图,并说明电路的工作原理 51系列单片机 4*4键盘 8位LED 显示 6264 RAM 扩展 复位电路 晶振电路等 系统原理框图

电路图说明: (1)键盘的列扫描接单片机P2口的低4位,行扫描接单片机P1口的低4位; (2)数码管的段选通过单片机的P0口接74LS244来驱动,数码管的位选接单片机的P2口; (3)发光二极管电路用来说明电路是否上电; (4)晶振电路为单片机提供时钟频率; (5)复位电路为单片机提供复位信号。 计算器的功能实现: (1)此计算器适应于不大于八位整数的四则混合运算,若单个数大于八位或者结果大于八位(溢出)则显示“Chu cuo”。 (2)如果在还没有按数字之前按了一个符号键或者等号则显示“Chu cuo”。 (3)若接连按了几个运算符键,实际上进行的运算是最后一次按的运算键。 (4)可以显示负数、小数。 (5)此计算器不可实现连乘、连加、连减、连除。 四、软件仿真,根据系统硬件图编写系统程序并调试 #include

第02讲 简易计算器的设计

第02讲计算器 2.1 计算器简介 大家都知道,计算器是日常生活中不可缺少的一个工具,在Microsoft的Windows操作系统中,附带了一个计算器程序,有标准型和科学型两种模式。Windows XP下的标准型和科学型计算器程序分别如图2-1和图2-2所示。 图2-1 Windows XP下的标准型计算器 图2-2 Windows XP下的科学型计算器 Windows操作系统下附带的计算器程序功能相当的强大,本课我们将模仿Windows的计算器,使用Visual C# 2005开发平台开发一个功能相对简单的计算器应用程序,它能完成加、减、乘、除运算。 接下来详细的介绍简易计算器的设计方法和步骤。

2.2 界面设计及属性设置 用户界面设计是软件开发中非常重要的一个部分,用户界面的好坏直接影响软件的质量,本节将介绍如何设计简易计算器的用户界面以及界面上各控件的属性设置。 2.2.1 界面设计 打开Visual Studio 2005开发工具,新建一个Windows应用程序,然后在窗体上依次放置1个TextBox和17个Button控件,如图2-1所示(设置好属性后)。 图2-1 计算器用户界面 2.2.2 属性设置 窗体和各控件的属性设置如表2-1所示。 表2-1 窗体和各控件的属性

2.3 编写代码 本程序需要用到一些公共变量,例如用来接收操作数、运算结果,判断输入的是否为小数等,因此首先在代码的通用段声明以下变量: //****************************************************************** double num1, num2, result; // 操作数及运算结果 bool decimalFlag = false; // 判断输入的是否为小数 string myOperator; // 操作类型 //******************************************************************

相关主题