简单计算器实验报告

合集下载

汇编语言简单计算器程序实验报告

汇编语言简单计算器程序实验报告

课程设计说明书题目: 简单计算器院系:专业班级:学号:学生姓名:指导教师:2010年12月31日安徽理工大学课程设计(论文)任务书计算机科学与工程学院硬件教研室2010年12月17 日安徽理工大学课程设计(论文)成绩评定表摘要本次课程设计的题目是用汇编语言实现一个简单的计算器,要求:编写一个程序,每运行一次可执行程序,可以实现加减乘除四则运算。

计算器是最简单的计算工具,简单计算器具有加、减、乘、除四项运算功能。

想要用汇编语言实现简单的计算器,就必须通过对数据存储,寄存器的使用,加减乘除相关指令以及模块的调用等汇编语言知识进行运用,以实现一个基本功能完善,界面友好,操作简便易行的计算器。

用汇编语言实现简单计算器还涉及到输入输出模块的设计,加减乘除运算的判断以及退出程序的判断的设计。

通过对各种指令的合理使用,设计各个功能模块。

当实现各个程序模块后,通过程序的调用最终实现一个简单的计算器。

关键词:计算器,汇编语言,四则运算,功能模块,调用目录1设计目的 (1)2概要设计 (2)2.1 系统总体分析 (2)2.2 程序流程图及说明 (3)3详细设计 (5)3.1 主模块及子模块说明 (5)3.2 各模块详细设计 (7)4程序调试 (11)4.1 运行界面分析 (11)4.2 调试过程及分析 (11)5心得体会 (13)5.1 设计体会 (13)5.2 系统改进 (13)参考文献 (15)1设计目的汇编语言是计算机能够提供给用户使用的最快而又最有效的语言。

同时,汇编语言也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。

因而,对程序的空间和时间要求很高的场合,汇编语言的应用是必不可少的。

至于很多需要直接控制硬件的应用场合,则更是非用汇编语言不可。

由于汇编语言如此地接近计算机硬件,因此,它可以最大限度地发挥计算机硬件的性能。

用汇编语言编写的程序速度通常要比高级语言快几倍、几十倍、甚至成百上千倍,解释语言其程序速度更无法与汇编语言程序同日而语。

计算器实验报告

计算器实验报告

计算器实验报告一实验目的学习使用AT89S52单片机实现简易计算器。

二实验要求1:可以通过键盘输入,并能显示输入相对应的数字.2:能够进行加,减,乘,除准确的基本运算.3:能够进行3位或3位的以上的乘,除运算.4:自由发挥其他功能.三实验基本原理本设计利用AT89S52单片机来控制液晶显示器和矩阵式键盘,实现了简易的计算器功能。

通过键盘输入需要计算的计算式子,该式子会显示在液晶的第一行,当键入等于号后,计算结果会显示在液晶的第二行。

本设计中液晶选用1602字符型液晶显示器,显示参与运算的数字以及最终的运算结果,键盘采用 4*4 矩阵式键盘。

四实验要求实现1.硬件设计如下图:2.软件设计程序流程图:程序:#include<reg52.h>char code V[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x80,0x48,0x70,0x40,0x5c,0x0c}; // 17. 18= 19+ 20- 21x 22/char code D[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};int temp,num,keyp,n1,n2,n3,n4,n5,n6,n7,n8,f;long tn,store;void delay(unsigned int x0); //延迟x0*2毫秒void display(long);void showError();void enter();void key();void main(){x: P0=0x00;tn=0;f=16;store=0;while(1){enter();if(num<23&&num>17){if(store>9999999||store<-999999)while(1){showError();key();if(keyp==1)goto x;}else display(store);}else display(tn);}}void delay(unsigned int x0){int x1,x2;for(x1=0;x1<x0;x1++)for(x2=0;x2<113;x2++);}void display(long disnum){if(disnum>=0){n1=disnum%10;if(disnum>9)n2=disnum/10%10;else n2=16;if(disnum>99)n3=disnum/100%10;else n3=16;if(disnum>999)n4=disnum/1000%10;else n4=16;if(disnum>9999)n5=disnum/10000%10;else n5=16;if(disnum>99999)n6=disnum/100000%10;else n6=16;if(disnum>999999)n7=disnum/1000000%10;else n7=16;}if(disnum<0){disnum=disnum*(-1);n1=disnum%10;if(disnum>9)n2=disnum/10%10;else n2=16;if(disnum>99)n3=disnum/100%10;else n3=16;if(disnum>999)n4=disnum/1000%10;else n4=16;if(disnum>9999)n5=disnum/10000%10;else n5=16;if(disnum>99999)n6=disnum/100000%10;else n6=16;n7=20;}n8=f;P0=V[n1];P2=D[0];delay(1);P2=D[8];P0=V[n2];P2=D[1];delay(1);P2=D[8];P0=V[n3];P2=D[2];delay(1);P2=D[8];P0=V[n4];P2=D[3];delay(1);P2=D[8];P0=V[n5];P2=D[4];delay(1);P2=D[8];P0=V[n6];P2=D[5];delay(1);P2=D[8];P0=V[n7];P2=D[6];delay(1);P2=D[8];P0=V[n8];P2=D[7];delay(1);P2=D[8]; }void showError(){P0=V[14];P2=D[5];delay(1);P2=D[8];P0=0x50;P2=D[4];delay(1);P2=D[8];P0=0x50;P2=D[3];delay(1);P2=D[8];P0=0x5c;P2=D[2];delay(1);P2=D[8];P0=0x50;P2=D[1];delay(1);P2=D[8];f=16;store=0;}void enter(){x1: key();if(keyp==1&&num<16&&num>=0){if(f==18){f=16;store=0;}if(tn<=999999)tn=tn*10+num;keyp=0;}if(keyp==1&&num<23&&num>17){if(f==19||f<=16)store=store+tn;if(f==20)store=store-tn;if(f==21){store=store*tn;}if(f==22){if(tn==0){while(1){showError();keyp=0;key();if(keyp==1)goto x1;}}else store=store/tn;}f=num;tn=0;keyp=0;}}void key(){P3=0xf7;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(10);while(temp!=0xf0){temp=P3;keyp=1;switch(temp){case 0xe7: num=1;break;case 0xd7: num=2;break;case 0xb7: num=3;break;case 0x77: num=19;break; //+}while(temp!=0xf0) //松开跳出{temp=P3;temp=temp&0xf0;}}}P3=0xfb;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(10);while(temp!=0xf0){keyp=1;temp=P3;//num++;if(num==10)num=0;switch(temp){case 0xeb: num=4;break;case 0xdb: num=5;break;case 0xbb: num=6;break;case 0x7b: num=20;break; //- }while(temp!=0xf0) //松开跳出{temp=P3;temp=temp&0xf0;}}}P3=0xfd;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(10);while(temp!=0xf0){keyp=1;temp=P3;//num++;if(num==10)num=0;switch(temp){case 0xed: num=7;break;case 0xdd: num=8;break;case 0xbd: num=9;break;case 0x7d: num=21;break; //* }while(temp!=0xf0) //松开跳出{temp=P3;temp=temp&0xf0;}}}P3=0xfe;temp=P3;temp=temp&0xf0;while(temp!=0xf0){delay(10);while(temp!=0xf0){keyp=1;temp=P3;//num++;if(num==10)num=0;switch(temp){case 0xee: num=0;break;case 0xde: num=17;break; //.case 0xbe: num=18;break; //=case 0x7e: num=22;break; ///}while(temp!=0xf0) //松开跳出{temp=P3;temp=temp&0xf0;}}}}五设计总结对于我们这些实践中的新手来说,设计一个简易计算器,这是一次考验。

简易计算器报告

简易计算器报告

tong datain[35..0]
dataout[27..0]
inst9
XOR inst19
模块说明: 当乘法符号的上升沿的时候读入反馈的结果 (包括数据及正负号) 并输出到
data1 、data1_pn; 当乘法符号的下降沿的时候读入数据 (包括数据及正负号) 并输出到 data2 、
data2_pn 。并进行计算,结果的数据由乘法器计算得到;结果的正负号即为两个 相乘数据的正负号取异或。
data1_pn:outstd_logic; data2_pn:outstd_logic
); end entity mul; architecturebehaveof mul is signal temp1:std_logic; signal temp2:std_logic; begin process(reset,clk) begin if(reset='0')then
data2_pn 。并进行计算,结果的数据由除法器计算得到;结果的正负号即为两个 相除数据的正负号取异或。
数据为保留两位小数,输出的当成被除数的数乘上 100。
3.乘或除数据选择输出模块:
7
tt
reset pn1 pn2 res1[27..0] res2[27..0] clk1 clk2
inst6
6.加减运算模块:
add
clk reset data[27..0] data_pn
dout[27..0] dout_pn
inst11
模块说明:
由于上一级已考虑加减情况,此模块只需实现加法运算。 A+B 有四种情况:
1、A>0,B>0 输出数据 A+B,正负号为正

嵌入式实验报告-简易计算器

嵌入式实验报告-简易计算器

一目的及要求1实验目的根据计算器的原理设计一个具有加减乘除功能的简易计算器。

2实验要求(1)数字和结果用数码管显示。

(2)数字、+-*/、=、C用4X4键盘实现。

(3)计算结果正确,有出错提示。

二实验原理框图基本工作原理:本设计利用数码管和4*4矩阵式键盘实现了简易计算器的功能。

接通电源,数码管显示全0。

计算时,通过键盘输入需要计算的数字,该数字显示在数码管上,当键入等号时,计算结果显示在数码管上。

进行第二次运算时,按C键清除键盘结果。

当计算出现错误时,LED灯亮报警。

当计算结果超出数码管显示出现溢出时,报警电路也会报警。

报警输出为--。

四系统软件设计1.数据输入模块原理:通过4*4矩阵模块输入数字,在数码管上显示出来。

2.运算模块原理:四种运算同步运行,通过按键加、减、乘、除选择输出对应的计算结果,当按键等号时,将所得结果反馈给运算模块输入端。

3.输出模块原理:通过按键等号来控制显示运算对象还是运算结果,当等号按下时,输出计算结果,否则显示当前输入的数据。

当输出结果溢出是LED亮四次,同时数码管显示都为--。

五实验调试首先按清零键清零。

然后进行调试。

输入数据2,再按乘法键,输入第二个数字6,按等号键,数码管显示12;再按除法键,输入第二个数据3,按等号键,数码管显示4;再按加法键,输入第三个数据7,依次按等号键,数码管显示11;按减法键,输入第四个数据99,依次按等号键,数码管显示-88。

若输入超出显示管的最大值或者超出数码管的位数,结果溢出,LED亮报警,同时数码管显示都为--。

如输入999999加上2 ,结果就溢出,LED灯亮四次报警。

六程序#include "LPC2468.h" /* LPC24xx definitions */ #include "type.h"#include "irq.h"#include "target.h"#include "timer.h"#include "fio.h"#include "keyboard.h"#include "SPI.h"extern BYTE seg_buf[50]; // LPC2468开发板使用此数组的0~5显示六个数码管;LPC2478板使用1~6BYTE seg_copy1[7];BYTE seg_copy2[7];unsigned long Num1 =0;/*第一个输入的数字*/unsigned long Num2 =0;/*第二个输入的数字*/unsigned long Num3 =0;/*第二个输入的数字*/extern BYTE KEY; // LPC2468开发板使用此数组的0~5显示六个数码管;LPC2478板使用1~6enum {Add =1,Dec,Mut,Div,nofuntion}funtion;/******************************************************************** *********** Main Function main()********************************************************************* *********/int main (void){unsigned char counter = 0; /*计算输入的数字的个数,超过6个则报警,运算结果超过6位数也报警*/unsigned char cal_allow = 1; /*允许输入数字标志*/unsigned char input_allow = 1;/*允许输入数字标志*/unsigned char funtion_type = 0;/*运算功能*/unsigned char Ne_num = 0;/*负数标志*/DWORD value=0,i=0;TargetResetInit();enable_timer(1);SPI_Init(8); // SPI总线速率为28.8/8 = 3.6 MHz Seg_Init(); // 数码管初始化LedsInit();for(i=0;i<7;i++){seg_copy1[i]=0;seg_copy2[i]=0;seg_buf[i]=0;}counter = 0;cal_allow = 1;input_allow = 1;funtion_type = nofuntion;while ( 1 ){value = KEY;/*输入数字*/if(value>0 && value<11){if(counter < 6&&input_allow==1){if(counter == 0) seg_buf[1] = value-1;else{for(i=0;i<counter;i++){seg_buf[counter+1-i] = seg_buf[counter-i]; }seg_buf[1] = value-1;}counter++;}if(counter == 6){input_allow = 0;LedOn(1);LedOn(2);LedOn(3);LedOn(4);}}/*如果是“C”键,则清除显示,清除计算标志*/if(value == 11){for(i=0;i<7;i++){seg_copy1[i]=0;seg_copy2[i]=0;seg_buf[i]=0;}counter = 0;Num1 = 0;Num2 = 0;Num3 = 0;cal_allow = 1;input_allow = 1;Ne_num = 0;/*负数标志*/funtion_type = nofuntion;}/*如果是“+”键,则显示结果*/if(value == 13 ){if(cal_allow == 1){for(i=0;i<7;i++){seg_copy1[i] = seg_buf[i];/*备份第一次输入的数字*/seg_buf[i]=0; /*显示清零以准备第二次输入数字*/}funtion_type = Add;counter = 0; /*计数器清零允许第二次计数*/cal_allow =1; /*再等号按下前不能再按第二次*/input_allow = 1; /*允许第二次输入数据*/}else{input_allow = 0; /*禁止按下2次功能键时候输入数据*/}/*如果是“-”键,则显示结果*/if(value == 14&& cal_allow == 1){if(cal_allow == 1){for(i=0;i<7;i++){seg_copy1[i] = seg_buf[i];/*备份第一次输入的数字*/seg_buf[i]=0; /*显示清零以准备第二次输入数字*/}funtion_type = Dec;counter = 0; /*计数器清零允许第二次计数*/cal_allow =1; /*再等号按下前不能再按第二次*/input_allow = 1; /*允许第二次输入数据*/}else{input_allow = 0; /*禁止按下2次功能键时候输入数据*/ }}/*如果是“X”键,则显示结果*/if(value == 15 && cal_allow == 1){if(cal_allow == 1){for(i=0;i<7;i++)seg_copy1[i] = seg_buf[i];/*备份第一次输入的数字*/seg_buf[i]=0; /*显示清零以准备第二次输入数字*/}funtion_type = Mut;counter = 0; /*计数器清零允许第二次计数*/cal_allow =1; /*再等号按下前不能再按第二次*/input_allow = 1; /*允许第二次输入数据*/}else{input_allow = 0; /*禁止按下2次功能键时候输入数据*/ }}/*如果是“/”键,则显示结果*/if(value == 16 && cal_allow == 1){if(cal_allow == 1){for(i=0;i<7;i++){seg_copy1[i] = seg_buf[i];/*备份第一次输入的数字*/seg_buf[i]=0; /*显示清零以准备第二次输入数字*/}funtion_type = Div;counter = 0; /*计数器清零允许第二次计数*/cal_allow =1; /*再等号按下前不能再按第二次*/input_allow = 1; /*允许第二次输入数据*/}else{input_allow = 0; /*禁止按下2次功能键时候输入数据*/ }}/*如果是“=”键,则清除显示,清除计算标志*/if(value == 12){for(i=0;i<7;i++){seg_copy2[i] = seg_buf[i];/*拷贝第二次输入的数字*/}/*把输入的数字串1合成运算数字*/Num1 = seg_copy1[6]*100000+seg_copy1[5]*10000+seg_copy1[4]*1000 +seg_copy1[3]*100+seg_copy1[2]*10 +seg_copy1[1];/*把输入的数字串2合成运算数字*/Num2 = seg_copy2[6]*100000+seg_copy2[5]*10000+seg_copy2[4]*1000 +seg_copy2[3]*100+seg_copy2[2]*10 +seg_copy2[1];switch(funtion_type){case Add:{Num1 = Num1+Num2;/*计算结果存在Num1中*/break;}case Dec:{if(Num1==Num2) Num1 = 0;else if(Num1>Num2){Num3 = Num1-Num2;/*计算结果存在Num1中*/ Num1 = Num3;}else if(Num2 > Num1){Num3 = Num2-Num1;Ne_num =1;Num1 = Num3;}break;}case Mut:{Num3 = Num1*Num2;/*计算结果存在Num1中*/ Num1 = Num3;break;}case Div:{if(Num1>=Num2&&Num2!=0){Num3 = Num1/Num2;/*计算结果存在Num1中*/}Num1 = Num3;break;}default:break;}/*显示结果*/if(Num1>999999||(Ne_num ==1&&Num1>99999)||Num2 ==0) {for(i=0;i<7;i++){seg_copy1[i]=0;seg_copy2[i]=0;seg_buf[i]=10;/*显示横杠表示计算溢出错误!*/}for(i=0;i<5;i++){LedOn(1);LedOn(2);LedOn(3);LedOn(4);delayMs(1,200);LedOff(1);LedOff(2);LedOff(3);LedOff(4);delayMs(1,200);}}else{seg_buf[1] = Num1%10;seg_buf[2] = (Num1%100)/10;seg_buf[3] = (Num1%1000)/100;seg_buf[4] = (Num1%10000)/1000;seg_buf[5] = (Num1%100000)/10000;seg_buf[6] = Num1/100000;if(Ne_num ==1){seg_buf[6] = 10;/*显示负号*/}}}delayMs(1,200);}}/******************************************************************** *********** End Of File********************************************************************* ********/七实验现象(1)运行成功以后的计算机界面如图一:图一(2)正确输入6+6=12的现象如图二和图三:图二图三(3)当进行除操作且除数为0时的现象如图四:图四七实验小结在设计计算机的过程中,我们遇到了很多问题,但是都通过查资料和请教同学得到了解决。

C#计算器实验报告

C#计算器实验报告

C#计算器实验报告班级:2010134学号:*********姓名:***一实验目的和要求设计一个简单计算器,具有一般计算功能,能进行基本的加减乘除运算,还具有求根号,倒数等功能。

特点是能进行不同进制的运算和不同进制间的转换。

主要的工作主要是操作数与被操作数进行简单的加、减、乘、除运算来完成基本的,而且还可以进行简单的科学运算例如计算一个数的平方、开方、正弦、余弦、log、ln等操作还可以计算面积、周长、体积和表面积等。

通过新的技术和新方法来实现计算功能显示界面为Windows From窗体。

二功能模块设计标准计算器通过Windows Form窗体中的对应按钮接受用户输入数据提交对应的方法中来完成相应的功能计算再将结果显示在显示框内。

显示界面为Windows From窗体。

下面是一个简单的计算器的基本功能:1加法两个数据进行加操作可以为小数。

2减法两个数据进行减操作可以为负数相减。

3乘法两个数相乘4除法两个数相除5 倒数可以求得一个数的倒数6开方开方后的结果可以精确到16位。

科学计算器1平方接收的数相乘结果保留一位小数。

2立方接收的数相乘两次3正弦正弦结果精确度同开方。

4余弦余弦结果精确度同上。

5 LogLog运算精确到16位。

6 Ln以e为底的对数。

7 二进制二进制数的运算8 八进制八进制数的运算9 十进制十进制数的运算11 十六进制十六进制的运算12 倒数可以求得一个数的倒数13 开方开方后的结果可以精确到16位。

14 颜色可以选择输入字体的颜色三设计界面标准型科学型四详细设计过程(一)打开VS2010创建项目(二)界面设计1.进入界面2.菜单设计(1)选择VS201的菜单栏中的“视图|工具箱”单击,调出工具箱(出现在VS用户区左侧。

(2)在工具箱中选择“菜单和工具栏|MenuStrip”,拖到程序界面用户区,并根据自己的喜好在“属性窗口”(可以使用“视图|属性窗口”调出,一般在用户区右下角)设置菜单栏宽度、颜色等。

计算器实验报告

计算器实验报告

计算器实验报告一,实验目的1、学习按键扫描及LED数码管显示的设计方法。

2、设计任务及要求利用实验平台上8个LED数码管,设计可以通过键盘输入,并能显示输入相对应的数字、能够进行加,减,乘,除准确的基本运算、能够进行3位或3位的以上的乘,除运算.二,实验要求基本要求:1、可以通过键盘输入,并能显示输入相对应的数字.2、能够进行加,减,乘,除准确的基本运算、3、能够进行3位或3位的以上的乘,除运算.三,实验基本原理利用单片机实现简单计算器的加减乘除,通过键盘输入数据并在数码管上显示出数据,然后按下加减乘除任意一个键,再输入第二个数并显示,再按下等于号时,执行第一次输入的数与第二个数的加减乘除函数,并显示出最终结果。

四,实验设计分析针对要实现的功能,采用AT89S52单片机进行设计,AT89S52 单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS- 51指令系统及80C51引脚结构。

这样,既能做到经济合理又能实现预期的功能。

在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。

程序可分为按键扫描、数码管显示输入数据、加减乘除函数,延时程序等。

运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。

首先,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。

这是前期准备工作。

第二部分是硬件部分:依据想要的功能分块设计设计,比如输入需要键盘扫描,输出需要显示驱动电路和数码管电路等。

第三部分是软件部分:先学习理解汇编语言的编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计。

第四部分是软件画图部分:设计好电路后进行画图,包括电路图和仿真图的绘制。

java实验报告——简单计算器的编写五篇范文

java实验报告——简单计算器的编写五篇范文

java实验报告——简单计算器的编写五篇范文第一篇:java实验报告——简单计算器的编写JAVA实验报告——简单计算器的编写班级:学号:姓名:一、实验目的1.掌握java图形用户界面(GUI)的设计原理和程序结构2.能设计复核问题要求的图形用户界面程序3.掌握常用组件的事件接口4.应用awt和swing组件进行应用程序设计二、实验条件1.计算机一台2.java软件开发环境三、实验步骤1、编写代码:mport java.awt.*;import java.awt.event.*;import javax.swing.*;public class JCalculator extends JFrame implements ActionListener {private static final long serialVersionUID =-***457Lprivate class WindowCloser extends WindowAdapter {public void windowClosing(WindowEvent we){System.exit(0);}}int i;private final String[] str = { “7”, “8”, “9”, “/”, “4”, “5”, “6”, “*”, “1”,“2”, “3”, “-”, “.”, “0”, “=”, “+” };JButton[] buttons = new JButton[str.length]; JButton reset = new JButton(“CE”); JTextField display = new JTextField(“0”);public JCalculator(){super(“Calculator”);JPanel panel1 = new JPanel(new GridLayout(4, 4)); for(i = 0;i < str.length;i++){buttons[i] = new JButton(str[i]);panel1.add(buttons[i]);}JPanel panel2 = new JPanel(new BorderLayout()); panel2.add(“Center”, display);panel2.add(“East”, reset);getContentPane().setLayout(new BorderLayout()); getContentPane().add(“North”, panel2); getContentPane().add(“Center”, panel1);for(i = 0;i < str.length;i++)buttons[i].addActionListener(this);reset.addActionListener(this);display.addActionListener(this); addWindowListener(new WindowCloser()); setSize(800, 800);setVisible(true);pack();}public void actionPerformed(ActionEvent e){ Object target = e.getSource();String label = e.getActionCommand();if(target == reset)handleReset();else if(“0123456789.”.indexOf(label)> 0)handleNumber(label);elsehandleOperator(label);}boolean isFirstDigit = true;public void handleNumber(String key){if(isFirstDigit)display.setText(key);else if((key.equals(“.”))&&(display.getText().indexOf(“.”)< 0))display.setText(display.getText()+ “.”);else if(!key.equals(“.”))display.setText(display.getText()+ key);isFirstDigit = false;}public void handleReset(){display.setText(“0”);isFirstDigit = true;operator = “=”;}double number = 0.0;String operator = “=”;public void handleOperator(String key){if(operator.equals(“+”))number += Double.valueOf(display.getText());else if(operator.equals(“-”))number-= Double.valueOf(display.getText());else if(operator.equals(“*”))number *= Double.valueOf(display.getText());else if(operator.equals(“/”))number /= Double.valueOf(display.getText());else if(operator.equals(“=”))number = Double.valueOf(display.getText());display.setText(String.valueOf(number));operator = key;isFirstDigit = true;}public static void main(String[] args){new JCalculator();} }2、运行结果,见截图计算测试:123+456=579结果正确,程序无误。

C#计算器实验报告

C#计算器实验报告

C#计算器实验报告C#计算器实验报告班级:2010134学号:201013432姓名:蔡启林一实验目的和要求设计一个简单计算器,具有一般计算功能,能进行基本的加减乘除运算,还具有求根号,倒数等功能。

特点是能进行不同进制的运算和不同进制间的转换。

主要的工作主要是操作数与被操作数进行简单的加、减、乘、除运算来完成基本的,而且还可以进行简单的科学运算例如计算一个数的平方、开方、正弦、余弦、log、ln等操作还可以计算面积、周长、体积和表面积等。

通过新的技术和新方法来实现计算功能显示界面为Windows From窗体。

二功能模块设计标准计算器通过Windows Form窗体中的对应按钮接受用户输入数据提交对应的方法中来完成相应的功能计算再将结果显示在显示框内。

显示界面为Windows From窗体。

下面是一个简单的计算器的基本功能:1加法两个数据进行加操作可以为小数。

2减法两个数据进行减操作可以为负数相减。

3乘法两个数相乘4除法两个数相除 5 倒数可以求得一个数的倒数6开方开方后的结果可以精确到16位。

科学计算器1平方接收的数相乘结果保留一位小数。

2立方接收的数相乘两次3正弦正弦结果精确度同开方。

4余弦余弦结果精确度同上。

5 Log Log运算精确到16位。

6Ln 以e为底的对数。

7 二进制二进制数的运算8 八进制八进制数的运算9 十进制十进制数的运算11 十六进制十六进制的运算12 倒数可以求得一个数的倒数13 开方开方后的结果可以精确到16位。

14 颜色可以选择输入字体的颜色三设计界面标准型科学型四详细设计过程(一) 打开VS2010创建项目界面设计 1.进入界面 2.菜单设计选择VS201的菜单栏中的“视图|工具箱”单击,调出工具箱(出现在VS用户区左侧。

(2)在工具箱中选择“菜单和工具栏|MenuStrip”,拖到程序界面用户区,并根据自己的喜好在“属性窗口”设置菜单栏宽度、颜色等。

在菜单栏中“请在此处键入”编辑第一个菜单选项及其下拉子菜单选项“编辑”“复制”“粘贴”。

实验报告(计算器)

实验报告(计算器)

南华大学计算机科学与技术学院实验报告(2013 ~2014 学年度第一学期)高级语言程序设计I 课程名称简单的计算器实验名称姓名曲永波学号20130030523专业电气信息类班级计算机类05班地点计算机实验室教师陈星1.实验目的及要求用switch语句编程,设计一个简单的计算器程序。

软件环境:windows 8 cold blocks 12.11硬件环境:电脑型号联想IdeaPad Y400 笔记本电脑2.实验步骤(1)建立新的C语言程序(2)键入代码(3)测试运行3.实验内容#include<stdio.h>#include<math.h>main(){float data1,data2;char op;char reply;do{printf("请输入算式:\n");scanf("%f %c%f",&data1,&op,&data2);switch(op){case '+':printf("%f+%f=%f\n",data1,data2,data1+data2);break;case '-':printf("%f-%f=%f\n",data1,data2,data1-data2);break;case '*':printf("%f*%f=%f\n",data1,data2,data1*data2);break;case '/':if (fabs(data2)<=1e-7){printf("被除数不可以是0!\n");}else{printf("%f/%f=%f\n",data1,data2,data1/data2);}break;default:printf("未知运算\n");}printf("你想继续吗?(Y/N or y/n)");scanf(" %c",&reply);}while(reply=='Y'||reply=='y');printf("程序结束!\n");}4.实验结果5. 实验总结分析通过这个实验中多次出错,我明白了if,else 子句中只可以有一条语句,所以需要多条语句的时候要使用复合语句。

简易计算器实验报告

简易计算器实验报告

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

二、实验原理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、结果分析对于简单的四则运算表达式,计算器能够正确计算出结果。

简单计算器—实训报告

简单计算器—实训报告

Linux应用与编程实习报告学院名称专业班级学生姓名学号指导教师山东科技大学一、实习题目: B2-简单计算器二、实习时间:19周~ 20周实习地点: J13- 128三、实习任务:实现一个简单计算器,计算器包括加、减、乘、除四种运算。

用户通过鼠标进行数据输入,输入的数据以及计算结果显示在文本框中四、小组分工说明:独立完成五、实习成绩六、指导教师对实习的评语:指导教师(签章):2015年月日目录1. 概述 -------------------------------------------------------- 42. 相关技术 -------------------------------------------------- 42.1 QT中信号和槽 -------------------------------------- 42.2 字符串输出数据组 -------- 错误!未定义书签。

3. 需求分析 -------------------------------------------------- 54. 总体设计与详细设计 ----------------------------------- 54.1 系统模块划分 --------------------------------------- 54.2 主要功能模块 --------------------------------------- 55. 编码实现 -------------------------------------------------- 6 6.测试情况说明------------------------------------------- 147. 实训中遇到的主要问题及解决方法 ---------------- 158. 实训收获与体会 ---------------------------------------- 161. 概述1.1 实训项目简介本次实训项目是应用Linux系统中的QT编译器编写一个界面简洁,操作简单的简易计算器。

简单计算器实验

简单计算器实验

简单计算器试验一、设计分析:1.本程序使用VB语言编成,只使用了一个窗体模块,完成模仿市面简单计算器的功能。

例如加减乘除,开方,求倒数,求百分比,并可连贯运算这些功能。

2.为了能在windows开始程序菜单中运行它,深入一点了解面向对象开发应用程序。

使用vb6.0的部署发布程序做了一个简单的安装包,可以在Windows Xp 下安装并运行。

(SetupFactory V8.1打包工具制作的vb软件安装包专业些。

)3.界面友好易操作。

(可以使用键盘输入数字进行运算,比较方便操作!)二、程序结构流程图:退格键显示窗口清除键重启键开方键求百分键求倒数键符号键数字键小数点键加法键等于键三、各模块功能及程序说明:1.这个程序是依照计算机处理器内ALU处理数据的原理设计,根据输入的数据,来判断怎样操作、怎样送入操作数。

例如:如果是双操作数则会将操作数A 和操作数B的运算结果送入操作数A,标志状态变量重新按情况设置。

2.比较起来虽然简单的多了,但是这种算法很经典。

3.数字键的事件过程主要是靠调用number(num)过程来实现,一个控件数组和“0”键组成。

4.加、减、乘、除运算键的事件过程主要是靠调用Calculation()过程来实现。

5.开方、求百分比等特殊运算键的事件过程主要是靠调用VB工具内相应VBA 函数来实现,例如sqr()函数。

6.关于退格键事件过程主要是用了字符串截取函数,由于当时未使用“&”来代替“+”作为连接运算符、未使用字符串匹配函数instr(),调试程序时增加了多行代码(由此可见工具内自带函数的方便之处)。

虽然很健康,但是感觉过长,时间又有限,当做经验吧,暂不改了。

7.接受键盘输入的运算操作是打开了建立了一个Form_KeyPress(KeyAscii)通用过程,根据KeyAscii的值响应相应事件。

8.在代码中针对每个过程都有简单注释;在代码的开头例如“'''operand ----------------------------操作数'''Calculation -------------------------计算”,这些都是帮助说明变量用途而写。

华师c语言简单计算器实验报告

华师c语言简单计算器实验报告
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
ON_BN_CLICKED(IDC_RADIO1_sin, OnRADIO1sin)
ON_BN_CLICKED(IDC_RADIO2_cos, OnRADIO2cos)
ON_BN_CLICKED(IDC_RADIO3_tan, OnRADIO3tan)
ON_BN_CLICKED(IDC_RADIO5_log10, OnRADIO5log10)
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides

计算器实验报告

计算器实验报告

Java课程设计课程名称:简易计算器指导教师:张峰学院:信息学院班级:软件11-2班姓名:钱明学号:201101051720一.实验题目:1. 实验要求参考Windows附件中的计算器,使用Java语言设计并实现一个简单的计算器。

(界面使用AWT或SWING)2. 实现功能本程序实现了基本的加减乘除功能及清空功能,另外还增加了sin、cos、tan等三角函数功能,以及π、sqrt、数的三次方及二次方的符号运算功能。

3. 算法设计a. 因为二进制转换问题,数的精确度存在问题,因此本程序用了大数BigDecimal来解决此问题。

BigDecimal b1 = new BigDecimal(Double.toString(result));b. 除数为零问题:系统本身显示无穷大,本程序给出提示 ("除数不能为0!") 二.系统的UML类图三.系统实现的核心代码//====================================================框架设计=====================================================@SuppressWarnings("serial")class CalculationFrame extends JFrame{public CalculationFrame(){setTitle("计算机 ");CalculationPanel panel=new CalculationPanel();add(panel);// this.setSize(350, 400);this.pack();}}// ==============================================面板设计====================public CalculationPanel();private class ShowPanel extends JPanelprivate class ButtonPanel extends JPanel用GridBagLayout 设计按钮布局GridBagLayout gridbag=new GridBagLayout();setLayout(gridbag);功能键设计button[22]=new JButton("sqrt");button[22].setBackground(Color.orange);gridy=0;gridx=6;gbc=newGridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anc hor,fill,inset,ipadx,ipady);gridbag.setConstraints(button[22], gbc);add(button[22]);button[22].addActionListener(CA);数字键设计button[0]=new JButton("0");gridy=3;gridx=0;//gridwidth=2;gbc=newGridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anc hor,fill,inset,ipadx,ipady);gridbag.setConstraints(button[0], gbc);add(button[0]);button[0].addActionListener(NA);清除键设计button[16]=new JButton("清除");button[16].setBackground(Color.lightGray);gridy=0;gridx=4;gridwidth=1;gridheight=2;gbc=newGridBagConstraints(gridx,gridy,gridwidth,gridheight,weightx,weighty,anc hor,fill,inset,ipadx,ipady);gridbag.setConstraints(button[16], gbc);add(button[16]);setBorder(BorderFactory.createEmptyBorder(0,5,5,5));button[16].addActionListener(newActionListener(){public void actionPerformed(ActionEvent e) {up.setText("");down.setText("0");start=true;equals=false;total=true;result=0; }});}//=========================处理数字键======================================private class numberAction implements ActionListener{public void actionPerformed(ActionEvent e){String input=e.getActionCommand();if(e.getActionCommand()=="."){if(down.getText().indexOf(".")==-1){//down.append("");down.setText(down.getText()+".");}// total=false;}else if(total==true){down.setText(""+input);total=false;}else down.append(""+input);}}//======================================处理运算符============================================private class commendAction implements ActionListener{public void actionPerformed(ActionEvent e) { String input=e.getActionCommand();total=true;if(start==true){if(equals==true){up.setText(up.getText()+down.getText()+input); calculate(Double.parseDouble(down.getText()));equals=false;lastCommend=input;}else{ result=Double.parseDouble(down.getText());if(result==0.0){up.setText(input);}else{up.setText(result+input);}lastCommend=input;}start=false;}else{if(lastCommend=="="){up.setText(down.getText()+input);lastCommend=input;equals=true;start=true;}else{up.setText(up.getText()+down.getText()+input);calculate(Double.parseDouble(down.getText()));lastCommend=input;}}}}// ==============================================计算方法=======================================================private void calculate(double x){ BigDecimal b1 = new BigDecimal(Double.toString(result));BigDecimal b2 = new BigDecimal(Double.toString(x));// String r=new String();if(lastCommend.equals("+"))result+=x;else if(lastCommend.equals("-"))result = b1.subtract(b2).doubleValue();// result=(result-x);}else if(lastCommend.equals("*"))result = b1.multiply(b2).doubleValue();else if(lastCommend.equals("/")){try{result= b1.divide(b2,15,BigDecimal.ROUND_HALF_UP).doubleValue();}catch(ArithmeticException e){JFrame JD;JD=new JFrame();JLabel j;j=new JLabel("除数不能为0!");JD.setBounds(200,200,150,150);// j.setFont(new Font("Serifs", 1, 15));Font font=new Font("Serief", 0, 22);j.setFont(font);j.setForeground(Color.RED);//设置标签前景色JD.add(j);JD.setVisible(true);}}else if(lastCommend.equals("sqrt"))result=Math.sqrt(x);else if(lastCommend.equals("exp"))result=Math.log(x);else if(lastCommend.equals("sin")){ result=Math.sin(x);// result= Math.rint(result*100000000)/100000000.0;}else if(lastCommend.equals("tan"))result=Math.tan(x);else if(lastCommend.equals("cos"))result=Math.cos(x);else if(lastCommend.equals("x^3"))result=x*x*x;else if(lastCommend.equals("x^2"))result=x*x;// else if(lastCommend.equals("BACK"))// r=r.substring(0, r.length()-1);//result=Double.parseDouble(r);down.setText(""+result);}}}五.实验测试减法测试 12-3:除法测试:Sin、cos、tan等功能键测试:。

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 = "负数不能开平方。

计算机c语言实训报告(精选5篇)

计算机c语言实训报告(精选5篇)

计算机c语言实训报告(精选5篇)计算机c语言实训报告篇1一、课题名称:简单计算器设计一个简单的程序来模拟计算器的功能。

二、设计目的:1、通过理论知识与实际需求相结合,编辑解决一些日常中的实际问题,培养初步的独立分析和设计能力。

2、了解应用程序设计解决实际问题的具体过程和实现方法,掌握应用C语言进行程序设计的基本规范;3、重点掌握C语言的程序编写、函数设计、算法设计和程序调试方法;4、初步掌握系统开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。

三、设计任务:1、通过结构体数组和共用体数组来存放输入的每一数字或运算符号的记录(包括1、2、3等数字,+、--、_、等运算符号),然后将其信息存入文件中。

输入一个算术计算式,就在屏幕上显示结果。

2、输入简单的加减乘除算术计算式,并在屏幕上显示计算结果;四、设计要求:1、用C语言实现程序设计并进行调试;2、画出查询模块的流程图;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机互交)。

5、完成设计(A4)。

五、代码设计:#include "stdio.h" main { float x,y;char operator;printf("x,yun suan fu ,y: "); scanf("%f%c%f",&x,&operator,&y); switch(operator){case '+': printf("%.2f+%.2f=%.2f",x,y,x+y); break; case '-':printf("%.2f-%.2f=%.2f",x,y,x-y); break; case '_':printf("%.2f_%.2f=%.2f",x,y,x_y); break; case '/': if(y==0) printf("chushushilingwuyiyi"); elseprintf("%.2f/%.2f=%.2f",x,y,x/y); break;default: printf("yunsunfuwuxiao"); } }?七、设计总结:学习C程序这门课一个学期了,这是我们学的第一门专业课,所以作为我这个计算机系的学生来说当然十分重要,老师在第一节课说过,C语言是计算机的基础,大多数软件都需要用C语言来编写,通过一个学期的学习,使我初步掌握了一些关于这门课的知识这次的课程设计是对我们一个学期来所学的知识的综合考察,里面涉及到了我们大多数所学知识。

计算器程序编程实习报告

计算器程序编程实习报告

程序实习报告一、需求分析:编写简易计算器程序,主要实现四则运算,运算符号包括“—”,“+”,“/”,“*”,“(”,“)”,按照“先乘除后加减,先算括号内后算括号外,从左到右”的原则的原则进行计算。

考虑到程序的编写困难度,暂时不予考虑多位数的四则运算,也不考虑平方、阶乘、三角函数的运算。

只进行一位数的四则运算,所需要的内存空间不会很大,也就放弃空间不足自动添加空间的情况。

输入:输入一个只含一位数的四则运算式,以#结束,运算符只包括“—”,“+”,“*”,“/”,“(”,“)”。

输出:直接输出结果“结果是:”。

测试数据:例如9—(3—2)*3—1#二、概要设计:JI三、详细设计:1、主函数 首先定义两个栈,分别取名是OPTR,OPND ,其中OPTR存放字符,OPND 存放数字。

从键盘上获取键入字符cC!=#或 Gettop!='#"否输出结果结束是否是字符否小于等于大于开始将字符压入OPTR是返回栈顶元素比 C 的优先级出栈执行operate ,压栈脱括号将字符压入栈OPTR获取栈顶元素将optr中压入#作为栈底元素,然后从键盘上获取表达式的字符如果是数字,将该字符转化为数字,压入到栈opnd中。

如果是字符,和optr的栈顶元素比较优先级1,、栈顶元素优先级<键入的元素,该调用push()函数,将字符压入到optr栈中2、如果栈顶元素的优先级等于键入元素,则得知此符号为括号,调用pop()函数,将该字符栈中的栈顶元素退出,即为脱括号。

3、如果栈顶元素的优先级高于键入元素,调用pop()函数,分别将取两次数字栈的栈顶元素,pop(opnd,b),pop(opnd,a),,同时将optr中的栈顶元素去取出,pop(optr,theta),调用operate()函数,进行计算。

将operate(a,theta,b)压入到opnd栈中,继续进行循环。

直到#结束。

模块1、定义2中栈,定义栈,区分两种数据类型typedef struct {int stack[MAXSIZE];int top;}SqStack;模块2、定义两种出栈入栈函数,以便后来调用不同数据类型的pop(*s,x),.push(*s,*x);int Push1(SqStack *s,int x){ if(s->top>=MAXSIZE)printf("ERROR,Overflow!\n");else{s->stack [s->top ]=x;s->top++;}return 1;}模块3、Operate函数定义:operate函数,利用switch()语句来operate(int a,char b,int c) 写定义3个实参,int a,b char theta;{ theta代表运算符,依次判断运算符的+—switch(b) *,/,情况,进行运算,{ case'+':a=a+c;break; 令a= a+c,a=a-c,a=a*c,a=a/c, case'-':a=a-c;break; 返回a的值case'*':a=a*c;break;case'/':a=a/c;break; }return a;}模4、优先级判断将+—*/()#的优先级做成如下的图+'>', >','>','<','<','<','>','>',—'>','>','<','<','<','>','>',* '>','>','>','>','<','>','>',/ '>','>','>','>','<','>','>',( '<','<','<','<','<','=', 0 ,) '>','>','>','>', 0,'>','>',# '<','<','<','<','<', 0 ,'=',寻找优先级即将左表中的对应坐标用程序语言找到即可,设计一个二维数组,str[7[,[7],将字符进行定位,i,j 分别代表横纵坐标,利用switch,语句进行选择,对应的str[i][j]即为优先级符号,所以将str[i][j],作为函数的返回值调试中的问题:1、最初只定义了一种数据类型的栈,出栈入栈函数也只有一种int数据类型,导致之后的函数调用数据类型不匹配,无法识别。

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

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

目录1.总体方案选择 (2)1.1 实验要求: (2)1.2方案设计 (2)2.硬件原理电路图的设计及分析 (2)2.1主控模块 (2)2.1.1 STC89C52单片机主要特性 (3)2.1.2 STC89C52单片机管脚图 (4)2.1.3 STC89C52单片机的中断系统 (4)2.1.4 STC89C52单片机的定时/计数器 (4)2.2矩阵键盘模块设计: (5)2.2.1矩阵键盘原理介绍 (5)2.2.2矩阵键盘电路设计 (5)2.3 LCD液晶显示器简介 (6)2.3.1液晶模块简介 (6)2.3.2液晶显示部分与89S52的接口 (7)3系统软件设计 (9)3.1系统软件流程图 (9)3.2系统整体原理图 (10)4.系统调试 (11)4.1硬件调试 (11)4.2软件调试 (11)4.3调试结果 (12)5. 心得体会 (13)1.总体方案选择1.1 实验要求:1)通过小键盘实现数据的输入,并在LED数码管上显示2)实现+、-、*、/3)在LED数码管上显示结果4)并有清零,退出功能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)组成。

STC89C52单片机的基本组成框图见图2-1。

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

简单计算器实验报告
《简单计算器实验报告》
实验目的:通过使用简单计算器进行数学运算,探究其在日常生活中的实际应用价值。

实验材料:简单计算器、纸笔
实验步骤:
1. 使用简单计算器进行加法、减法、乘法和除法运算,记录运算过程和结果。

2. 尝试使用计算器进行复杂运算,如求平方根、求倒数等。

3. 计算器的功能和使用方法的讨论。

实验结果:
通过实验,我们发现简单计算器在日常生活中有着非常重要的应用价值。

它可以帮助我们快速准确地进行数学运算,节省时间和精力。

同时,计算器还具有一些高级的功能,如求平方根、求倒数等,这些功能在科学计算和工程计算中也具有很大的作用。

结论:
简单计算器是我们日常生活中必不可少的工具之一,它的实际应用价值是非常高的。

通过这次实验,我们更加深入地了解了计算器的功能和使用方法,对于我们的学习和工作都有着重要的帮助。

通过这次实验,我们不仅对计算器有了更深入的了解,也增加了对数学运算的兴趣,希望我们在日常生活中能够更加灵活地运用计算器,提高我们的数学运算能力。

相关文档
最新文档