程序设计实践 计算器程序实验报告
实验报告 计算器程序
实验报告学生姓名:学号:专业班级:网络工程实验类型:□验证□综合■设计□创新实验日期:10.4.5 实验成绩:实验2:栈和队列一、实验目的深入了解栈和队列的特性,学会在实际问题下灵活运用它们。
二、问题描述表达式求值运算是实现程序设计语言的基本问题之一,也是栈应用的一个典型例子。
设计并演示用算符优先级对算术表达式的求解过程。
三、实验要求1、算法优先级别如下:'+', '-', '*', '/', '(', ')', '#''+' '>', '>', '<', '<', '<', '>', '>','-' '>', '>', '<', '<', '<', '>', '>','*' '>', '>', '>', '>', '<', '>', '>','/' '>', '>', '>', '>', '<', '>', '>','(' '<', '<', '<', '<', '<', '=', ' ',')' '>', '>', '>', '>', ' ', '>', '>','#' '<', '<', '<', '<', '<', ' ', '='2、以字符序列的形式从终端输入语法正确、不含变量的算术表达式,利用给出的算符优先级关系,实现对算术四则混合运算的求解过程。
大学计实验报告算机
大学计实验报告算机一、引言计算机实验是大学计算机专业主要的实践环节之一,旨在培养学生动手能力和解决实际问题的能力。
本实验报告将介绍我在大学计算机实验课程中进行的一项实验项目,以及实验过程中的设计思路、实验方法和实验结果等。
二、实验目的本次实验的目的是设计一个简单的计算器程序,实现基本的四则运算功能。
通过这个实验,我们将学习和掌握编程语言中的基本语法、算法设计和软件开发流程等知识。
三、实验环境和工具本次实验的环境是使用C++编程语言,在Windows操作系统下进行开发。
我们使用了Visual Studio代码编辑器和编译器。
四、实验内容我们的计算器程序需要满足以下要求:1.可以进行两个整数之间的加、减、乘、除运算;2.能够处理异常输入,例如除数为0;3.对用户的输入进行合法性检查,确保输入的是数字或者合法的运算符;4.提供友好的用户界面,即使是非技术人员也能够使用;5.可以进行多次计算,直到用户主动选择退出。
五、实验设计为了实现上述要求,我们按照以下步骤进行实验设计:1.设计程序的整体架构,确定分为输入、处理和输出三个模块;2.编写输入模块的代码,读取用户的输入并进行合法性检查;3.编写处理模块的代码,根据用户输入的运算符进行相应的运算;4.编写输出模块的代码,将计算结果显示在用户界面上;5.测试程序是否能够正确处理各种输入情况,并进行错误输入的异常处理。
六、实验步骤1.创建一个新的C++项目,并设置好相关的编译选项;2.编写程序的主要逻辑,包括输入、处理和输出模块;3.编写输入模块的代码,根据用户的输入进行合法性检查;4.编写处理模块的代码,根据运算符进行相应的运算;5.编写输出模块的代码,打印出计算结果;6.进行功能测试和异常输入测试,确保程序的正确性和鲁棒性;7.对程序进行性能测试,评估程序的性能。
七、实验结果经过多次测试和调试,我们的计算器程序能够正确处理各种输入情况,并能够返回正确的计算结果。
程序设计实践 计算器程序实验报告
程序设计实践设计报告课题名称:简易计算器设计与实现学生姓名:班级:班内序号:学号:日期:1.课题概述1.1课题目标和主要内容本案例以编写基于MFC的简易计算器软件为例,通过学习MFC事件驱动机制、MFC界面设计、MFC控件使用,并掌握MFC应用程序的设计方法,独立完成一个MFC的一个MFC的应用程序。
本案例的重点是学习如何使用MFC基本控件和事件驱动机制完成一个Windows下交互式应用软件。
本次实验所用的开发平台为Visual Studio 2008。
1.2系统的主要功能基本功能单击数字键,显示当前数值单击“+”、“-”、“*”、“/”建进行运算单击“=”,显示运算结果单击“C”,清楚已有结果进行连续四则运算扩展功能进行浮点运算进行平方、绝对值、倒数运算进行三角函数运算2. 系统设计2.1 系统总体框架2.2 系统详细设计[1] 模块划分图及描述(1)对话框:此模块实现的是与用户的交互,本案例使用了两类控件:编辑框和按钮。
(2)事件驱动函数:例如:void CdckcalculatorDlg::OnBnClickedBtn1(){// TODO: 在此添加控件通知处理程序代码ClickNum("1");}此模块处理的是程序如何响应鼠标的单击,主要由消息映射和消息处理函数两部组成。
(3)运算函数:例如:void CdckCalculatorDlg::onButtonN(int n){if( m_coff == 1.0)m_second = m_second*10 + n;//作为整数输入数字时骸else{ m_second = m_second + n*m_coff; //作为小数输入数字m_coff *= 0.1; }UpdateDisplay(m_second);//更新编辑框的数字显示}此模块是本实验的核心内容,它控制着整个程序的逻辑功能,它所实现的主要是逻辑运算以及数据交换。
计算器设计实验报告
计算器设计实验报告指导老师:张永安组长:潘文帅成员:宋王庆郭肖男常跃计算器设计实验报告一、实验目的1、通过实验了解计算器的程序代码。
2、能看懂计算器的电路原理图。
3、锻炼学生的动手实践能力。
二、实验内容设计一个简易的计算器,完成0~9999整数的一次加减乘除运算,减法运算结果可以实现计算结果的负数显示,除法运算结果为0~999并保留两位小数。
三、实验设备四、实验说明1.计算器电板图2.计算器引脚原理图3.程序代码/*************************************************程序名称:计算器设计功能:完成0~9999整数的一次加减乘除运算,减法运算结果可以实现计算结果的负数显示,除法运算结果为0~999并保留两位小数,按键音,设有清零键,首位零不显示,其它的显示"E"**************************************************/#include<AT89X51.H>unsigned char code XIANSHI[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40}; unsigned char code XIANSHIXIAOSHUDIAN[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};//带小数点//unsigned char code XIANSHIWRONG[]={0x00,0x00,0x00,0x00,0x79};//错误时的显示// unsigned char code SAOMIAO[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//共阴极扫描码表格//unsigned char DANYUAN[8]={0,0,0,0,0,0,0,0};unsigned long CUNZHI;unsigned long SHU[2]={0,0};unsigned char k,key,m,n;/*************************************************SIGN 存运算符(+、-、*、/)FLAG 用第几个数组,(出现非运算符前为0,出现运算符后为1)WRONG 输入多于4个时错误标志位(0对、1错)COUNT 输入0~9数字的个数SIZE 减数大于被减数时为1SIGNCOUNT 输入运算符的个数XIAOSHU 存一位小数的值DIVKEY 运算除法时置为1**************************************************/unsigned char SIGN,FLAG,WRONG,COUNT,SIZE,SIGNCOUNT,XIAOSHU[2],DIVKEY;/*************************************************程序名称:显示程序入口参数:无功能:实现将CUNZHI中的值进行动态数码显示局部变量:i,j,q全局变量:CUNZHI,DANYUAN[0],DANYUAN[1],DANYUAN[2],DANYUAN[3] 所用端口功能:P1口送显示码P2口公共端扫描返回值:无**************************************************/void disp(void){ unsigned char i,j,p,q;/**************错误时的显示*************/if(WRONG==1){ for(i=0;i<5;i++){ P1=XIANSHIWRONG[i];P2=SAOMIAO[i];for(j=6;j>0;j--) //动态显示延时程序//for(q=248;q>0;q--);}}else{ if(DIVKEY==1){ DANYUAN[0]=XIAOSHU[1];DANYUAN[1]=XIAOSHU[0];DANYUAN[2]=CUNZHI%10;DANYUAN[3]=CUNZHI/10%10;DANYUAN[4]=CUNZHI/100%10;DANYUAN[5]=CUNZHI/1000%10;for(p=5;p>2;p--){ if(DANYUAN[p]==0)DANYUAN[p]=16;else break;}for(i=0;i<5;i++){ if(i==2) //倒数第三位为小数位//{ P1=XIANSHIXIAOSHUDIAN[DANYUAN[i]];}else{P1=XIANSHI[DANYUAN[i]];}P2=SAOMIAO[i];for(j=6;j>0;j--) //动态显示延时程序//for(q=248;q>0;q--);}}else{DANYUAN[0]=CUNZHI%10;DANYUAN[1]=CUNZHI/10%10;DANYUAN[2]=CUNZHI/100%10;DANYUAN[3]=CUNZHI/1000%10;/*******************首位为零不显示*************/for(p=3;p>0;p--) //首位为零不显示//{ if(DANYUAN[p]==0)DANYUAN[p]=16;else break;}/**************为负数时的显示*****************/if(SIZE==1) //为负数第五位数码管显示"-"//{ DANYUAN[4]=17;}else //第五位数码管不显示//{ DANYUAN[4]=16;}for(i=0;i<5;i++){ P1=XIANSHI[DANYUAN[i]];P2=SAOMIAO[i];for(j=6;j>0;j--) //动态显示延时程序//for(q=248;q>0;q--);}}}}/**************************************************程序名称:处理程序入口参数:key功能:实现加减乘除运算全局变量:key、CUNZHI、SHU[0]、SHU[1]、FLAG、SIGN返回值:无**************************************************/void CHULI(key){unsigned char i,j;/*****************声音“嘀”*****************/TR0=1;for(i=200;i>0;i--) //延时100ms//for(j=248;j>0;j--);TR0=0;/*****************************************/if(key==15) //按键为清除键//{ CUNZHI=0;SHU[0]=0;SHU[1]=0;COUNT=0;WRONG=0;SIZE=0;SIGNCOUNT=0;XIAOSHU[0]=0;XIAOSHU[1]=0;DIVKEY=0;}else if((key>=0)&&(key<=9)) //按键为数字键// { COUNT++; //按下的数字键的次数///*****************加权运算*****************/SHU[FLAG]=SHU[FLAG]*10+key; //加权运算//CUNZHI=SHU[FLAG];}else if((key>=10)&&(key<=13)) //按键为运算键//{ SIGNCOUNT++;SIGN=key;FLAG++;COUNT=0;}else if(key==14) //按键为等于键//{ switch(SIGN){ case 10:CUNZHI=SHU[0]+SHU[1];break;case 11:{ if(SHU[0]>SHU[1]){ CUNZHI=SHU[0]-SHU[1];}else{ SIZE=1;CUNZHI=SHU[1]-SHU[0];}}break;case 12:CUNZHI=SHU[0]*SHU[1];break;case 13:DIVKEY=1;CUNZHI=SHU[0]*100/SHU[1];XIAOSHU[1]=CUNZHI%10;XIAOSHU[0]=CUNZHI/10%10;CUNZHI/=100;if(CUNZHI>999){ WRONG=1;}break;}}if((COUNT==5)||(SIGNCOUNT>1)||(CUNZHI>9999)) //输入数字键大于5时将WRONG置1//{ WRONG=1;}}/**************************************************程序名称:键盘扫描入口参数:无功能:进行键盘扫描全局变量:k局部变量:i,j调用函数:CHULI(key)返回值:无**************************************************/void JIANPAN(void){ unsigned char i,j;P3=0xff;P3_4=0; //扫描P3.4这条线上的四个按键//k=P3;k=k&0x0f;if(k!=0x0f) //看P3.4这条线上是否真的有按键按下//{ for(i=20;i>0;i--) //延时一段时间//for(j=248;j>0;j--);k=P3; //再判断一次//k=k&0x0f;if(k!=0x0f){ switch(k) //通过可能发生的四种可能比较看是哪个按键按下//{ case 0x0e:key=0;break;case 0x0d:key=4;break;case 0x0b:key=8;break;case 0x07:key=12;break;}k=P3;k=k&0x0f;while(k!=0x0f){ k=P3;k=k&0x0f;}CHULI(key);}}P3=0xff;P3_5=0; //扫描P3.5这条线上的四个按键// k=P3;k=k&0x0f;if(k!=0x0f) //看P3.5这条线上是否有按键按下// { for(i=20;i>0;i--) //延时等待//for(j=248;j>0;j--);k=P3; //再看一次//k=k&0x0f;if(k!=0x0f){ switch(k) //通过比较看是P3.5这条线上的哪一个按键按下// { c ase 0x0e:key=1;break;case 0x0d:key=5;break;case 0x0b:key=9;break;case 0x07:key=13;break;}k=P3;k=k&0x0f;while(k!=0x0f){ k=P3;k=k&0x0f;}CHULI(key);}}P3=0xff; //扫描P3.6这条线上的四个按键是否按下//P3_6=0;k=P3;k=k&0x0f;if(k!=0x0f){ for(i=20;i>0;i--)for(j=248;j>0;j--);k=P3;k=k&0x0f;if(k!=0x0f){ switch(k){ case 0x0e:key=2;break;case 0x0d:key=6;break;case 0x0b:key=10;break;case 0x07:key=14;break;}k=P3;k=k&0x0f;while(k!=0x0f){ k=P3;k=k&0x0f;}CHULI(key);}}P3=0xff; //扫描P3.7这条线上的四个按键是否按下//P3_7=0;k=P3;k=k&0x0f;if(k!=0x0f){ for(i=20;i>0;i--)for(j=248;j>0;j--);k=P3;k=k&0x0f;if(k!=0x0f){ switch(k){ case 0x0e:key=3;break;case 0x0d:key=7;break;case 0x0b:key=11;break;case 0x07:key=15;break;}k=P3;k=k&0x0f;while(k!=0x0f){ k=P3;k=k&0x0f;}CHULI(key);}}}/**************************************************程序名称:主程序功能:实现计算器加减乘除运算并显示全局变量:CUNZHI、FLAG、SIGN调用函数:disp()、JIANPAN()返回值:无***************************************************/void main(void){ TMOD=0X02;ET0=1;EA=1;TR0=0;TH0=(256-200)%256;TL0=(256-200)/256;CUNZHI=0;FLAG=0;SIGN=0;WRONG=0;SIZE=0;XIAOSHU[0]=0;while(1){ d isp();JIANPAN();}}/**************************************************定时中断***************************************************/void t0(void) interrupt 1 using 1{ P0_0=~P0_0;}五、实验结果首先按复位键,输入想要计算的数,进行四则运算(+ - * /)操作完成0~9999整数的一次加减乘除运算,减法运算结果可以实现计算结果的负数显示,除法运算结果为0~999并保留两位小数,按键音,设有清零键,首位零不显示,其它的显示“E”运算错误或计算延迟则有警报声提示。
c语言实验报告计算器
c语言实验报告计算器C 语言实验报告计算器一、实验目的本次 C 语言实验的主要目的是通过编写程序实现一个简单的计算器功能,加深对 C 语言基本语法、数据类型、控制结构和函数的理解和运用,提高编程能力和解决实际问题的能力。
二、实验要求1、实现基本的四则运算(加、减、乘、除)功能。
2、能够处理用户输入的合法表达式,并输出计算结果。
3、具备错误处理能力,如除数为 0 、输入不合法等情况。
三、实验环境本次实验使用的编程环境是 Visual Studio Code,编译器为 GCC。
四、算法设计与思路(一)整体思路首先,需要从用户那里获取输入的表达式。
然后,对表达式进行解析和计算。
在计算过程中,需要根据运算符的优先级进行相应的运算。
为了实现这个过程,可以使用栈来存储运算符和操作数。
(二)具体算法1、定义一个栈来存储运算符,另一个栈来存储操作数。
2、逐字符读取输入的表达式。
如果是数字字符,则将其转换为数字并压入操作数栈。
如果是运算符,则根据运算符的优先级进行处理。
如果当前运算符的优先级高于栈顶运算符的优先级,则将其压入运算符栈。
否则,从操作数栈中弹出两个操作数,从运算符栈中弹出一个运算符,进行相应的运算,并将结果压入操作数栈。
3、当表达式读取完毕后,依次从运算符栈和操作数栈中弹出元素进行计算,直到运算符栈为空,此时操作数栈中的唯一元素即为表达式的计算结果。
五、代码实现```cinclude <stdioh>include <stdlibh>include <ctypeh>//定义栈的最大容量define MAX_SIZE 100//定义操作符栈typedef struct {char itemsMAX_SIZE;int top;} OperatorStack;//定义操作数栈typedef struct {double itemsMAX_SIZE;int top;} OperandStack;//初始化操作符栈void initOperatorStack(OperatorStack stack) {stack>top =-1;}//初始化操作数栈void initOperandStack(OperandStack stack) {stack>top =-1;}//判断操作符栈是否为空int isOperatorStackEmpty(OperatorStack stack) {return stack>top ==-1;}//判断操作数栈是否为空int isOperandStackEmpty(OperandStack stack) {return stack>top ==-1;}//操作符入栈void pushOperator(OperatorStack stack, char op) {if (stack>top < MAX_SIZE 1) {stack>items++stack>top = op;} else {printf("Operator stack overflow!\n");exit(1);}}//操作数入栈void pushOperand(OperandStack stack, double num) {if (stack>top < MAX_SIZE 1) {stack>items++stack>top = num;} else {printf("Operand stack overflow!\n");exit(1);}}//操作符出栈char popOperator(OperatorStack stack) {if (!isOperatorStackEmpty(stack)){return stack>itemsstack>top;} else {printf("Operator stack underflow!\n");exit(1);}}//操作数出栈double popOperand(OperandStack stack) {if (!isOperandStackEmpty(stack)){return stack>itemsstack>top;} else {printf("Operand stack underflow!\n");exit(1);}}//获取操作符的优先级int getPriority(char op) {switch (op) {case '+':case '':return 1;case '':case '/':return 2;default:return -1;}}//计算表达式double calculate(char expression) {OperatorStack opStack;OperandStack numStack; initOperatorStack(&opStack);initOperandStack(&numStack);int i = 0;while (expressioni!='\0'){if (isdigit(expressioni)){double num = 0;while (isdigit(expressioni)){num = num 10 +(expressioni '0');i++;}if (expressioni ==''){double fraction = 01;i++;while (isdigit(expressioni)){num +=(expressioni '0') fraction; fraction /= 10;i++;}}pushOperand(&numStack, num);} else if (expressioni =='('){pushOperator(&opStack, expressioni);i++;} else if (expressioni ==')'){while (opStackitemsopStacktop!='('){double num2 = popOperand(&numStack);double num1 = popOperand(&numStack);char op = popOperator(&opStack);if (op =='+'){pushOperand(&numStack, num1 + num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op =='/'){if (num2 == 0) {printf("Division by zero!\n");exit(1);}pushOperand(&numStack, num1 / num2);}}popOperator(&opStack);i++;} else {while (!isOperatorStackEmpty(&opStack) &&getPriority(opStackitemsopStacktop) >= getPriority(expressioni)){double num2 = popOperand(&numStack);double num1 = popOperand(&numStack);char op = popOperator(&opStack);if (op =='+'){pushOperand(&numStack, num1 + num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op =='/'){if (num2 == 0) {printf("Division by zero!\n");exit(1);}pushOperand(&numStack, num1 / num2);}}pushOperator(&opStack, expressioni);i++;}}while (!isOperatorStackEmpty(&opStack)){double num2 = popOperand(&numStack);double num1 = popOperand(&numStack);char op = popOperator(&opStack);if (op =='+'){pushOperand(&numStack, num1 + num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op ==''){pushOperand(&numStack, num1 num2);} else if (op =='/'){if (num2 == 0) {printf("Division by zero!\n");exit(1);}pushOperand(&numStack, num1 / num2);}}return popOperand(&numStack);}int main(){char expression100;printf("Enter an expression: ");scanf("%s", expression);double result = calculate(expression);printf("Result: %f\n", result);return 0;}```六、实验结果与分析(一)测试用例及结果以下是一些测试用例及其对应的结果:1、输入:"2 + 3",输出:50000002、输入:"5 2",输出:30000003、输入:"3 4",输出:120000004、输入:"6 / 2",输出:30000005、输入:"2 + 3 4",输出:140000006、输入:"(2 + 3) 4",输出:200000007、输入:"5 / 0",输出:Division by zero!(二)结果分析从测试结果来看,程序能够正确计算基本的四则运算表达式,包括有括号的情况。
java计算器实验报告
广东海洋大学学生实验报告书(学生用表)实验名称JAVA计算器程序设计课程名称JAVA程序设计课程号学院(系)专业班级学生姓名学号实验地点完成日期GDOU-B-11-112实验JAVA计算器程序设计1) 实验总结:刚做之前,勉强还能做些小程序,但在进行了计算器程序设计的时候,才发现很多语句还不能联系运用,大部分还是通过百度和书籍才勉勉强强完成,看来实践才是硬道理2) 实验目的通过计算器程序设计,能够更加深入的了解JAVA,熟悉图形用户的设计原理和程序结构等4)实验内容和步骤实验内容应用JAVA软件设计一个简易的计算器,实现基本的四则运算及括号设计流程1. 分析该计算器需要完成的功能。
用户能够完成添加括号和负号的四则混合运算,并且计算器能够自动识别运算符的优先级,根据用户输入的运算表达式,自动计算出相应的结果。
同时还完成了计算器中C按钮清屏功能和Backspace退格键。
2. 考虑异常处理。
(1)当输入的表达式中出现除零的操作,显示框将显示“Infinity(无穷大)”。
(2)当输入的表达式错误时,将弹出提示框显示“表达式错误请重新输入”(3)当计算器的显示文本框里为没有输入内容时直接点击等号按钮,将弹出提示框显示“对不起,您没有任何输入,请重新输入:”。
(4)当第一次输入乘号键,除号键,右括号,小数点,求余键,等号键,ce键,Backspace键时提示错误。
4. 考虑数据的处理目标计算表达式通过点击计算器界面上的按钮进行输入,当按下等号之后,计算器通过调用JAVA中script这个包中的相关类和方法来实现数据的处理。
5. 编码实现计算器的功能。
(1)新建相关的文件。
(2)引入JAVA中相关的包。
(3)新建类Jsq,并继承了类Frame,而且实现了接口ActionListener (4)定义相关的变量,创建相关组件,并对组件的属性进行设置。
(5)对所创建的组件进行布局,完成界面的实现。
(6)为各个组件添加事件监听器。
计算器程序设计实验报告
课程设计报告Windows程序设计基础计算器程序设计实验报告院(系):计算机与信息工程学院专业:计算机科学与技术班级:13计科班学号:20131104765姓名:娄心玲指导教师:朝力萌完成日期:2014/12/20目录第1章概要设计 (2)1.1题目的容与要求 (2)1.2总体结构 (2)第2章详细设计 (3)2.1主模块 (3)第3章调试分析 (5)第4章使用说明与执行结果 (6)第1章概要设计1.1题目的容与要求容:本试验是基于microsoft visual c++ 2010的MFC平台设计并制作简易计算器。
本设计涉及绘制简易简易计算器图形,设置按钮单机事件,相应鼠标单击响应事件。
要求:了解visual 2010 C++的应用程序,系统的学习面向对象程序思想,了解MFC结构,逐步的了解逐步熟悉可视化编程环境Visual C++。
1.2总体结构第2章详细设计2.1主模块等于号的函数类的编写://"="UpdateData(true);if(i==1){temp=_ttof(m_str)+temp;m_str.Format(L"%lf",temp);}if(i==2){temp=temp-_ttof(m_str);m_str.Format(L"%lf",temp);}if(i==3){temp=_ttof(m_str)*temp;m_str.Format(L"%lf",temp);}if(i==4){if(_ttof(m_str)==0){m_str=L"除数不能为零";UpdateData(false);}else{temp=temp/_ttof(m_str);m_str.Format(L"%lf",temp);}}UpdateData(false);z=0;}第3章调试分析测试12/0得到的结果测试:第4章使用说明与执行结果运行操作及结果:二.课程设计小结在实验中发现——分析——总结的问题有:在整个计算器的设计过程中,由于不能熟练的运用函数,导致程序过分复杂,不够简洁。
计算器-MFC程序实验报告
题目:计算器编程实验一、目的:编写一个程序实现+、-、*、/、sqrt、x^n基本运算,同时有清除和归零的功能。
二、程序说明:(1)符号说明:SR[20]:是用来存储输入字符串的变量;SR1[20]:为第一个字符为’0’,其余都为’’的字符串变量,当按清零健时赋给SR[20]变量,实现SR[20]“清零”;NUM1:是存储输入的数值变量;NUM2:是用来存储第一个输入的数值变量,因为每一步计算都是两个数,在第一个输入结束后NUM1的只赋给NUM2,而NUM1继续储存新输入的数值;STNUM:是没有小数点的数值变量,于是实际进行计算的值只需将这个数除以10的小数点位数次方即可;FUHAO:是表示符号的数值变量,1、2、3、4、5、6分别表示+、—、*、/、x^n、sqrt;WEICOUNT:是表示输入的字符串的位数;DIANCOUNT:表示输入的“.”次数;FUCOUNT:表示输入符号(即+、-、*等)的次数;AFDIAN:表示输入的数字在小数点后的第几位,即相当于计算小树位数;m_S:表示计算结果的变量,勇于输出结果;(2)程序运行过程:①点击数字时,SR[WEICOUNT++]=”输入数字的字符”并输出;STNUM=10*STNUM+所输数字的大小;如果DIANCOUNT=1,则NUM1=STNUM/pow(10,AFDIAN++);否则就NUM1=STNUM;这样就能将有无小数点的情况进行判断而且计算出来;②点击符号(+、-、*、/、x^n、sqrt),SR[WEICOUNT++]=”输入符号的字符”并输出;NUM2=NUM1,NUM1=0,这样就相当于将第一个值付给了NUM2,同时STNUM=0,所以在输入数的时候又可以重新给NUM1赋值,减少了变量的数量。
同时将符号所对应的数赋给FUHAO以并在“=”时用;并且DIANCOUNT=0;这样新输入的书又可以继续输入小数点了;③点击“.”时,SR[WEICOUNT++]=”.”并输出;DIANCOUNT=1;这样后面如果再输入数就可以检测出是小数所以通过①就可以得到正确的结果;④点击“=”时,根据FUHAO的值来判定符号并进行运算赋给m_S并输出,其中NUM2是第一个输入的数的值,NUM1是第二个输入的数的值;之后并STNUM=0,NUM1=1;这样就相当于把上一步计算的结果当做了下一步计算的第一个值,实现了多步连续计算;于此同时将DIANCOUNT=0,AFDIAN=1,以致在后面的计算中仍能继续正常输出;⑤点击“清零”时,m_S=0;使输出结果的编辑框显示0;strcpy(SR,SR1),并输出SR,实现了输入编辑框显示0;WEICOUNT=0,DIANCOUNT=0;用于后面的继续输出;⑥点击“清除”时,SR[--WEICOUNT]=' ';输出字符串SR;STNUM=(int) STNUM/10;这样就实现了将之前的数去掉最后一个数字的作用,再用 DIANCOUNT=1?来判断,如果是就NUM1=STNUM/pow(10,AFDIAN),否则NUM1=STNUML来实现对小数点的清除。
java实验报告计算器
java实验报告计算器Java实验报告:计算器引言:计算器是我们日常生活中常用的工具之一,它能够帮助我们进行各种数学运算,提高计算的效率。
本实验旨在使用Java编程语言设计和实现一个简单的计算器,通过实践来加深对Java语言和面向对象编程的理解。
一、需求分析在设计计算器之前,我们首先需要明确计算器的功能需求。
一个基本的计算器应该包括加、减、乘、除四种基本运算,同时还应该具备清零、取反、百分比等附加功能。
在本实验中,我们将实现这些基本功能,并尝试添加一些额外的功能,如开根号、求平方等。
二、设计思路1. 用户界面设计我们可以使用Java的图形用户界面(GUI)库来设计计算器的界面。
可以使用按钮来表示数字和运算符,使用文本框来显示计算结果。
2. 数据结构设计为了实现计算器的功能,我们需要设计一个合适的数据结构来存储用户输入的数字和运算符。
可以使用栈(Stack)数据结构来实现这个功能。
当用户按下数字按钮时,将数字入栈;当用户按下运算符按钮时,将运算符入栈。
当用户按下等号按钮时,从栈中取出数字和运算符进行计算,并将结果显示在文本框中。
3. 运算逻辑设计计算器的运算逻辑可以使用逆波兰表达式来实现。
逆波兰表达式是一种不需要括号的数学表达式表示方法,通过后缀表达式的形式来表示运算符的优先级。
在计算器中,我们可以使用栈来实现逆波兰表达式的计算。
三、实验步骤1. 创建一个Java项目,并导入GUI库。
2. 设计计算器的用户界面,包括按钮和文本框。
3. 实现按钮的点击事件,根据用户输入的数字和运算符来更新栈的状态。
4. 实现等号按钮的点击事件,从栈中取出数字和运算符进行计算,并将结果显示在文本框中。
5. 实现清零、取反、百分比等附加功能的按钮点击事件。
6. 运行程序,测试计算器的各项功能是否正常。
四、实验结果与分析经过测试,我们的计算器能够正常地进行加、减、乘、除等基本运算,并且附加功能也能正常使用。
通过这个实验,我们不仅学习了Java语言的基本语法和面向对象编程的思想,还加深了对数据结构和逆波兰表达式的理解。
实验报告计算器
实验报告||实验名称计算器课程名称面向对象程序设计(JAVA)||一、实验目的综合应用所学的知识分析问题、解决问题,提高实际编程能力及程序调试能力。
二、实验内容及要求用图形界面GUI编程,编写一个能够实现加减乘除的简单的计算器,要求使用监听类,还要能够连续加减,有清除功能,能够准确的计算出正确结果。
三、实验仪器与设备计算机,JDK,我用的是eclipse。
四、问题分析与系统设计问题分析:首先需要把图形界面设计出来,给组件注册监听器,转换事件信息,实现对数据的加、减、乘、除等计算器的基本的功能设计思想与设计结果:在主类Caculater中使用监听内部类 MyMonitor 对各个组件进行监听,在MyMonitor中对按键信息进行分类处理(数字,算术符号,功能键)。
数据成员主要有各个按钮以及计算器的各个状态(如初始状态等)。
成员函数有:1、对退格键的处理:backSpace() 2、对算是符号的处理:operater() 3、将数字字符串转换成数字:getDate()五、实验结果相反数、平方根等功能,能够将图形界面设计出来给注册监听器,实现界面与基本实现了简单的的加、减、乘、除以及倒数和取内部代码结合。
六、总结与体会1·我以前不清楚界面与内部代码是怎么连接的,现在知道了。
还学会简单的GUI编程,能够实现对界面进行布局2·跟c++有很大的不同,java多了许多的包,类呀,这样是编译快捷而且安全正确,学会使用了内部类,懂得了事件的响应以及如何处理事件。
3·锻炼了编程的逻辑思维,能够对数据进行逻辑的处理以及对整个程序的逻辑部署4·还知道了要想吧java学好是很难的,里面有许许多多的包,类。
要想好好运用java 就必须运用好java类包,java的简单编程只是基础,掌握系统提供的package和class 才是成为java厉害者的必经之路。
附件:源程序清单import java.awt.BorderLayout;import java.awt.Button;import java.awt.Color;import java.awt.Frame;import java.awt.GridLayout;import java.awt.Panel;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.ArrayList;import java.util.List;public class Caculator extends Frame {List<String> list = new ArrayList<String>();public static int step = 0; // 处理刚开始第一次计算的时候dataResult为零的问题private String command[] = { "BackSpace", "CE", "C" };private String normal[] = { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" };private String special[] = { "", "MC", "MR", "MS", "M+" };private boolean firstInput = true;private boolean legal = true;private double dataResult = 0;private String s = null;private TextField tf = new TextField();private Button bn[] = new Button[normal.length]; private Button bc[] = new Button[command.length]; private Button bs[] = new Button[special.length]; private Mymonitor mn = new Mymonitor();public static void main(String[] args) {CouterClient cc = new CouterClient();unchFrame();}public void launchFrame() {this.setLocation(200, 250);this.setBackground(Color.blue);this.setTitle("计算器");this.setSize(300, 400);this.setResizable(false);this.setLayout(new BorderLayout(2, 2));this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);}});Panel pn = new Panel(new GridLayout(4, 5, 2, 2));for (int i = 0; i < normal.length; i++) {bn[i] = new Button(normal[i]);bn[i].addActionListener(mn);pn.add(bn[i]);}Panel pc = new Panel(new GridLayout(1, 3, 2, 2));for (int i = 0; i < command.length; i++) {bc[i] = new Button(command[i]);bc[i].addActionListener(mn);pc.add(bc[i]);}Panel ps = new Panel(new GridLayout(5, 1, 2, 2));for (int i = 0; i < special.length; i++) {bs[i] = new Button(special[i]);bs[i].addActionListener(mn);ps.add(bs[i]);}Panel p = new Panel(new BorderLayout(2, 2));p.add(BorderLayout.NORTH, pc);p.add(BorderLayout.CENTER, pn);tf.setEditable(false);tf.setBackground(Color.white);this.add(BorderLayout.CENTER, p);this.add(BorderLayout.WEST, ps);this.add(BorderLayout.NORTH, tf);tf.setText("0");this.setVisible(true);this.pack();}private class Mymonitor implements ActionListener {public void actionPerformed(ActionEvent e) {s = e.getActionCommand();if (s.equals(command[2])) { // 按下了 C 键时归零计算器回到最初的状态tf.setText("0");firstInput = true;legal = true;dataResult = 0;step = 0;} else if (s.equals(command[1])) { // 按下 CE 键时,显示零tf.setText("0");firstInput = true;} else if (s.equals(command[0])) { // 按下退格键时backSpace();} else if ("0123456789.".indexOf(s) >= 0) {if (firstInput) {tf.setText(s);}if (firstInput && s.equals(".")) {tf.setText("0.");firstInput = false;} else if (!firstInput) {if (s.equals(".")) {if (tf.getText().indexOf(".") <= 0) {tf.setText(tf.getText() + s);} else {String str = (tf.getText() + s).substring(0, tf.getText().length());tf.setText(str);}} else {tf.setText(tf.getText() + s);}} else if (firstInput && !s.equals(".")) {firstInput = false;}} else {operator(s);}}}public void operator(String key) {if (key != "=")list.add(key);if (key.equals("+")) {this.dataResult += getData();} else if (key.equals("-")) {if (step == 0) {this.dataResult = getData();step++;} else {this.dataResult -= getData();}} else if (key.equals("*")) {if (step == 0) {this.dataResult = getData();step++;} else {this.dataResult *= getData();}} else if (key.equals("/")) {if (step == 0) {this.dataResult = getData();step++;} else {if (getData() == 0) {tf.setText("除数不能是0!请按C键重新开始输入");this.legal = false;} else {this.dataResult /= getData();}}} else if (key.equals("+/-")) {this.dataResult = -1 * getData();} else if (key.equals("sqrt")) {if ((this.dataResult = getData()) > 0) {this.dataResult = Math.sqrt(this.dataResult);} else {tf.setText("负数没有平方根");}} else if (key.equals("1/x")) {this.dataResult = getData();if (this.dataResult == 0) {tf.setText("0没有倒数");} else {this.dataResult = 1 / this.dataResult;}} else if (key.equals("=") && this.legal) {this.operator(list.get(list.size() - 1));this.firstInput = true;step = 0;}if (legal) {long l = (long) this.dataResult;double d;d = this.dataResult - l;if (d == 0) {tf.setText("" + l);} else {tf.setText("" + this.dataResult);}this.firstInput = true;if (key == "=")this.dataResult = 0;}}public void backSpace() {if (firstInput) {tf.setText("0");firstInput = true;} else {if (tf.getText().length() >= 1) {String temp = tf.getText().substring(0,tf.getText().length() - 1);tf.setText(temp);if (tf.getText().length() == 0) {tf.setText("0");this.firstInput = true;}}}}public double getData() {double result = 0;try {result = Double.valueOf(tf.getText()).doubleValue();} catch (NumberFormatException e) {tf.setText("0");firstInput = true;legal = true;dataResult = 0;}return result;}}。
Java程序设计计算器实验报告
长江大学工程技术学院实验报告
通信 61302 胡炯
} else if (operator.equals("-")) { // 减法运算 resultNum -= getNumberFromText(); } else if (operator.equals("*")) { // 乘法运算 resultNum *= getNumberFromText(); } else if (operator.equals("sqrt")) { // 平方根运算 resultNum = Math.sqrt(resultNum); } else if (operator.equals("%")) { // 百分号运算,除以 100 resultNum = resultNum / 100; } else if (operator.equals("+/-")) { // 正数负数运算 resultNum = resultNum * (-1); } else if (operator.equals("=")) { // 赋值运算 resultNum = getNumberFromText(); } if (operateValidFlag) { // 双精度浮点数的运算 long t1; double t2; t1 = (long) resultNum; t2 = resultNum - t1; if (t2 == 0) { resultText.setText(String.valueOf(t1)); } else { resultText.setText(String.valueOf(resultNum)); } } (2)主要功能过程说明 1 构造函数 2 初始化计算器 3 处理事件 4 处理 Backspace 键被按下的事件 5 处理数字键被按下的事件 6 处理 C 键被按下的事件 7 处理运算符键被按下的事件 8 从结果文本框中获取数字 (3)功能流程图
程序设计_实验报告
一、实验目的1. 熟悉程序设计的基本概念和流程。
2. 掌握基本的编程语言语法和编程技巧。
3. 培养逻辑思维能力和问题解决能力。
4. 提高编程实践能力,为以后的学习和工作打下基础。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.83. 开发工具:PyCharm三、实验内容1. 编写一个简单的计算器程序,实现加、减、乘、除四种基本运算。
2. 编写一个学生信息管理系统,实现学生信息的增删改查功能。
3. 编写一个简单的图书管理系统,实现图书信息的增删改查功能。
四、实验步骤1. 计算器程序(1)设计计算器界面,使用文本输入和输出。
(2)编写加、减、乘、除四种运算的函数。
(3)编写主函数,根据用户输入选择运算类型,调用相应的运算函数,并输出结果。
2. 学生信息管理系统(1)定义学生信息类,包含姓名、年龄、性别、成绩等属性。
(2)设计学生信息管理系统界面,使用文本输入和输出。
(3)编写增删改查功能的函数,实现对学生信息的操作。
(4)编写主函数,根据用户输入选择操作类型,调用相应的函数。
3. 图书管理系统(1)定义图书信息类,包含书名、作者、出版社、出版日期等属性。
(2)设计图书管理系统界面,使用文本输入和输出。
(3)编写增删改查功能的函数,实现对图书信息的操作。
(4)编写主函数,根据用户输入选择操作类型,调用相应的函数。
五、实验结果与分析1. 计算器程序(1)界面设计:使用文本输入和输出,实现简单的交互。
(2)功能实现:成功实现加、减、乘、除四种基本运算。
(3)测试结果:对多个测试用例进行测试,程序运行正常,输出结果正确。
2. 学生信息管理系统(1)界面设计:使用文本输入和输出,实现简单的交互。
(2)功能实现:成功实现学生信息的增删改查功能。
(3)测试结果:对多个测试用例进行测试,程序运行正常,功能完整。
3. 图书管理系统(1)界面设计:使用文本输入和输出,实现简单的交互。
(2)功能实现:成功实现图书信息的增删改查功能。
电脑编程实验报告
实验名称:基于Python的简单计算器设计实验日期:2021年10月15日实验地点:计算机实验室一、实验目的1. 掌握Python编程语言的基本语法和常用数据类型。
2. 熟悉Python编程中的控制流和函数定义。
3. 提高编程实践能力,培养问题解决能力。
二、实验内容本次实验旨在设计一个简单的计算器程序,实现以下功能:1. 输入两个数字和一个运算符(加、减、乘、除)。
2. 根据输入的运算符,进行相应的计算。
3. 输出计算结果。
三、实验步骤1. 创建一个新的Python文件,命名为calculator.py。
2. 在calculator.py文件中,定义一个名为calculate的函数,用于实现计算功能。
3. 在calculate函数中,定义一个变量result用于存储计算结果。
4. 根据输入的运算符,使用if-elif-else结构判断并执行相应的计算。
5. 在主函数中,提示用户输入两个数字和一个运算符。
6. 调用calculate函数,传入用户输入的数字和运算符。
7. 打印计算结果。
8. 运行程序,测试功能。
四、实验代码```pythondef calculate(num1, num2, operator):result = 0if operator == '+':result = num1 + num2elif operator == '-':result = num1 - num2elif operator == '':result = num1 num2elif operator == '/':if num2 != 0:result = num1 / num2else:print("除数不能为0")return resultdef main():num1 = float(input("请输入第一个数字:"))num2 = float(input("请输入第二个数字:"))operator = input("请输入运算符(+、-、、/):") result = calculate(num1, num2, operator)print("计算结果为:", result)if __name__ == '__main__':main()```五、实验结果与分析1. 运行程序,按照提示输入数字和运算符,程序能够正确计算出结果。
计算器_实验报告
一、实验目的1. 熟悉计算器的基本原理和设计方法。
2. 掌握计算器程序的设计与实现。
3. 提高编程能力和软件工程实践能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:Java3. 开发工具:Eclipse三、实验内容1. 计算器界面设计2. 计算器功能实现3. 计算器测试与优化四、实验步骤1. 计算器界面设计(1)创建一个Java项目,命名为“Calculator”。
(2)在项目中创建一个名为“CalculatorFrame”的类,继承自JFrame。
(3)在“CalculatorFrame”类中,创建一个JPanel作为计算器的面板,命名为“calculatorPanel”。
(4)在calculatorPanel中,添加一个JTextField作为显示输入和计算结果的文本框,命名为“resultField”。
(5)添加一个JButton数组,作为计算器的按钮,包括数字按钮、运算符按钮和功能按钮。
(6)为每个按钮设置事件监听器,实现按钮点击事件。
2. 计算器功能实现(1)在“CalculatorFrame”类中,定义一个私有成员变量,用于存储当前输入的字符串。
(2)为每个按钮的事件监听器添加逻辑,实现以下功能:- 数字按钮:将按钮对应的数字字符串添加到当前输入字符串中。
- 运算符按钮:将当前输入字符串、运算符和下一个输入字符串组合成一个表达式,并计算结果。
- 功能按钮:实现计算器的其他功能,如清除、求倒数、开平方等。
(3)计算结果存储在resultField中。
3. 计算器测试与优化(1)对计算器进行测试,确保所有功能正常运行。
(2)优化计算器的性能,提高计算速度。
(3)美化计算器界面,提高用户体验。
五、实验结果与分析1. 实验结果成功设计并实现了一个具有基本功能的计算器,界面简洁、操作方便。
2. 实验分析(1)通过学习计算器的基本原理和设计方法,掌握了计算器程序的设计与实现。
C#程序设计计算器实验报告
年级 2013级学号姓名成绩
专业软件工程实验地点主楼402 指导教师实验项目简单计算器设计实验日期 2015.9.21 实验报告要求:
一、实验目的
设计一个简单计算器,使其能够进行加、减、乘、除、求余、求幂等运算。
二、实验原理
通过添加控件,事件和方法(函数)来实现基本功能。
三、实验要求
设计一个简单计算器,在功能上功能尽量模拟windows操作系统中的计算器,系统界面不做强制要求,应具有一般计算功能,能进行基本的加减乘除运算。
四、实验结果(程序)及分析
1.程序源代码
using System;
using System.Collections.Generic;
using ponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace jsq
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)。
c 计算器实验报告
c 计算器实验报告c 计算器实验报告一、引言计算器是一种广泛应用于各个领域的工具,它能够进行各种数学运算,简化了人们的计算工作。
在本次实验中,我们将使用C语言编写一个简单的计算器程序,通过实践来加深对C语言的理解,并且掌握计算器的基本原理和实现方法。
二、实验目的1. 掌握C语言的基本语法和编程技巧;2. 理解计算器的基本原理和实现方法;3. 实现基本的四则运算功能;4. 实现一些常用的数学函数。
三、实验步骤1. 设计计算器界面在这一步骤中,我们需要设计一个简洁明了的计算器界面,包括数字键、运算符键和等号键等。
我们可以使用C语言的图形库或者控制台窗口来实现界面的设计。
2. 实现基本的四则运算功能在这一步骤中,我们需要编写C语言代码,实现计算器的基本四则运算功能。
我们可以使用C语言提供的算术运算符来进行加减乘除的计算,并且通过用户输入来获取操作数和运算符。
3. 实现常用的数学函数在这一步骤中,我们可以使用C语言提供的数学库函数来实现一些常用的数学函数,比如求平方根、求幂等。
通过调用这些函数,我们可以使计算器具备更多的功能。
4. 进行测试和调试在这一步骤中,我们需要对编写的计算器程序进行测试和调试,确保其能够正常运行,并且能够正确地进行各种运算和计算。
四、实验结果经过测试和调试,我们的计算器程序能够正常运行,并且能够正确地进行各种运算和计算。
它具备基本的四则运算功能,并且支持一些常用的数学函数。
我们可以通过输入数字和运算符来进行计算,并且可以得到正确的结果。
五、实验总结通过这次实验,我们深入理解了C语言的基本语法和编程技巧,并且掌握了计算器的基本原理和实现方法。
我们通过编写代码实现了一个简单的计算器程序,并且通过测试和调试确保其能够正常运行。
这次实验不仅加深了我们对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数据类型,导致之后的函数调用数据类型不匹配,无法识别。
Java程序设计计算器实验报告
长江大学工程技术学院实验报告
通信 61302 胡炯
(4)详细源代码 import java.awt.BorderLayout; import java.awt.Color; 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; /**
长江大学工程技术学院实验报告
通信 61302 胡炯
} else if (operator.equals("-")) { // 减法运算 resultNum -= getNumberFromText(); } else if (operator.equals("*")) { // 乘法运算 resultNum *= getNumberFromText(); } else if (operator.equals("sqrt")) { // 平方根运算 resultNum = Math.sqrt(resultNum); } else if (operator.equals("%")) { // 百分号运算,除以 100 resultNum = resultNum / 100; } else if (operator.equals("+/-")) { // 正数负数运算 resultNum = resultNum * (-1); } else if (operator.equals("=")) { // 赋值运算 resultNum = getNumberFromText(); } if (operateValidFlag) { // 双精度浮点数的运算 long t1; double t2; t1 = (long) resultNum; t2 = resultNum - t1; if (t2 == 0) { resultText.setText(String.valueOf(t1)); } else { resultText.setText(String.valueOf(resultNum)); } } (2)主要功能过程说明 1 构造函数 2 初始化计算器 3 处理事件 4 处理 Backspace 键被按下的事件 5 处理数字键被按下的事件 6 处理 C 键被按下的事件 7 处理运算符键被按下的事件 8 从结果文本框中获取数字 (3)功能流程图
汇编计算器程序实验报告
汇编计算器程序实验报告《汇编语⾔程序设计》综合程序设计实验报告题⽬:计算器⼀、项⽬简介在我们⽣活中⽆时不刻不⽤到计算,虽说计算并不是很⿇烦,但有的时候复杂的运算仍需要花费我们⼤量的时间去解决。
所以要有这样⼀个程序解决这个问题。
基于这个⽬的,⽽且在这个学期中,我们⼜接触到了汇编语⾔,运⽤汇编语⾔编写了计算器,来解决这个实际并且经常遇到的问题。
改程序主要针对加减乘除运算,可以进⾏相对复杂的问题,包含括号的相关运算。
该问题主要注意四则运算的优先级问题:惩处运算⽐加减运算优先级⾼,统计运算按从左到右的顺序计算,含有括号是应该先计算括号⾥⾯的内容。
⼆、⼩组成员具体分⼯徐其仲:调试汇编语⾔环境,设计汇编程序功能李秦:实现程序功能,撰写实验报告三、需求分析与设计问题:利⽤汇编语⾔编写计算器内容:从键盘输⼊⼀个四则运算表达式,按=号输出计算结果,并当结束时询问:是否继续?如果按q或Q,则退出,按其余任意键则继续。
计算器主要包括以下⼏个模块:(1)主程序模块主程序模块⾸先实现调⽤⼦程序clear清屏,初始化数据段,调⽤显⽰宏show显⽰界⾯,将寄存器ax,bx,cx,dx初始化赋初值为0,调⽤回车换⾏宏,输⼊字符或数字并判断调⽤⼦程序dyfq调⽤赋权宏fq为符号赋权,从⽽判断优先级,调⽤加减乘除⼦程序match对判断出的相应运算符进⾏运算,输出运算结果,判断是否继续,继续则返回输⼊,不则退出程序。
(2)赋权宏模块通过定义宏fq,定义了变元a,b进⾏参数传递,并使⽤替换运算符&使变元a与标号s对应,接着给对应的符号赋予权值,将其权值存⼊ch中。
(3)加减乘除运算⼦程序模块运算模块实现了将ax⼊栈保存,然后将ax,bx赋值为0,判断cl中的符号是否为乘号,若为乘号,则将number中的数字与其下⼀位的数字相乘,并把结果存⼊该位置。
类似的若不为乘号则接着判断。
(4)调⽤赋权宏⼦程序模块该模块实现了赋权宏fq为(,),*,、,+,-,=等符号分别赋权值为5,1,4,4,3,3,0.从⽽可以通过设定的权值来判断优先级(5)清屏⼦程序模块本模块先将即将⽤到的ax,bx,cx,dx寄存器⼊栈保存,通过ah=06h屏幕上卷功能,⽤bh=07h将屏幕设置为⿊底⽩字,给dh,dl赋值将其清屏位置设定在30⾏80列范围,从⽽实现了清屏功能,然后再讲ax,bx,cx,dx寄存器出栈(6)回车换⾏宏模块通过2号功能的输出功能,将0dh赋予dl输出,再调⽤2号功能,将0ah 赋予dl输出,从⽽实现回车换⾏功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序设计实践设计报告课题名称:简易计算器设计与实现学生姓名:班级:班内序号:学号:日期:1.课题概述1.1课题目标和主要内容本案例以编写基于MFC的简易计算器软件为例,通过学习MFC事件驱动机制、MFC界面设计、MFC控件使用,并掌握MFC应用程序的设计方法,独立完成一个MFC的一个MFC的应用程序。
本案例的重点是学习如何使用MFC基本控件和事件驱动机制完成一个Windows下交互式应用软件。
本次实验所用的开发平台为Visual Studio 2008。
1.2系统的主要功能基本功能单击数字键,显示当前数值单击“+”、“-”、“*”、“/”建进行运算单击“=”,显示运算结果单击“C”,清楚已有结果进行连续四则运算扩展功能进行浮点运算进行平方、绝对值、倒数运算进行三角函数运算2. 系统设计2.1 系统总体框架2.2 系统详细设计[1] 模块划分图及描述(1)对话框:此模块实现的是与用户的交互,本案例使用了两类控件:编辑框和按钮。
(2)事件驱动函数:例如:void CdckcalculatorDlg::OnBnClickedBtn1(){// TODO: 在此添加控件通知处理程序代码ClickNum("1");}此模块处理的是程序如何响应鼠标的单击,主要由消息映射和消息处理函数两部组成。
(3)运算函数:例如:void CdckCalculatorDlg::onButtonN(int n){if( m_coff == 1.0)m_second = m_second*10 + n;//作为整数输入数字时骸else{ m_second = m_second + n*m_coff; //作为小数输入数字m_coff *= 0.1; }UpdateDisplay(m_second);//更新编辑框的数字显示}此模块是本实验的核心内容,它控制着整个程序的逻辑功能,它所实现的主要是逻辑运算以及数据交换。
[2] 类关系图及描述在calculatorDlg.h中设置CcalculatorDlg类,如下所示:// dckCalculatorDlg.h : 头文件//#pragma once// CdckCalculatorDlg 对话框class CdckCalculatorDlg : public CDialog{// 构造public:CdckCalculatorDlg(CWnd* pParent = NULL); // 标准构造函数// 对话框数据enum { IDD = IDD_DCKCALCULATOR_DIALOG };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现protected:HICON m_hIcon;// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:double m_first;public:double m_second;public:CString m_operator;public:double m_coff;public:CString m_display;public:void UpdateDisplay(double dck);public:void Calculate(void);public:afx_msg void OnBnClickedButton0();public:afx_msg void OnBnClickedButton1();public:afx_msg void OnBnClickedButton2();public:afx_msg void OnBnClickedButton3();public:afx_msg void OnBnClickedButton4();public:afx_msg void OnBnClickedButton5();public:afx_msg void OnBnClickedButton6();public:afx_msg void OnBnClickedButton7();public:afx_msg void OnBnClickedButton8();public:afx_msg void OnBnClickedButton9();public:afx_msg void OnBnClickedButtonSign();public:afx_msg void OnBnClickedButtonPoint(); public:afx_msg void OnBnClickedButtonAdd(); public:void onButtonN(int n);public:afx_msg void OnBnClickedButtonMinus(); public:afx_msg void OnBnClickedButtonMutiply(); public:afx_msg void OnBnClickedButtonDiv(); public:afx_msg void OnBnClickedButtonClear(); public:afx_msg void OnBnClickedButtonSqrt(); public:afx_msg void OnBnClickedButtonReci(); public:afx_msg void OnBnClickedButtonEqual(); public:afx_msg void OnBnClickedExp();public:afx_msg void OnBnClickedCos();public:afx_msg void OnBnClickedSin();public:afx_msg void OnBnClickedLn();public:afx_msg void OnBnClickedLog();public:afx_msg void OnBnClickedTan();public:double m_PI;public:double temp;};[3] 程序流程图及描述2.3 关键算法分析算法1:ClickNum[1] 算法功能实现单击数字输入的功能。
[2] 算法基本思想通过单击数字,改变与编辑框关联的变量m_strResult,以实现操作数的输入。
[3] 算法空间、时间复杂度分析时间复杂度为O(1)。
[4] 代码逻辑void CdckCalculatorDlg::onButtonN(int n){if( m_coff == 1.0)m_second = m_second*10 + n;//作为整数输入数字时else{ m_second = m_second + n*m_coff; //作为小数输入数字m_coff *= 0.1; }UpdateDisplay(m_second);//更新编辑框的数字显示}算法2:Compute[1] 算法功能实现四则运算。
[2] 算法基本思想单击运算符按钮,系统从编辑框读取操作数,根据运算符作相应的运算,再将结果信息传递给编辑框显示。
[3] 算法空间、时间复杂度分析时间复杂度为O(1)。
[4] 代码逻辑void CdckCalculatorDlg::Calculate(void){ switch(m_operator.GetAt(0)){ case'+': m_first+=m_second;break;case'-': m_first-=m_second;break;case'*': m_first*=m_second;break;case'/':if(fabs(m_second)<=0.000001){m_display="除数不能为0";UpdateData(false);return; }m_first/=m_second;break;}m_second=0.0;m_coff=1.0;m_operator=_T("+");UpdateDisplay(m_first);//更新编辑框显示内容}3.程序运行结果分析通过按钮实现数字输入和运算,编辑框显示结果。
4.总结4.1课题的难点和关键点该课题的难点主要是浮点计算的实现和单双目运算的区分。
开始时将类中的操作数都设置为整型,可以实现最基本的整数四则运算,但是在之后实现扩展功能时发现整数无法很好得实现所要求的功能,于是便要求计算器能够实现浮点输入和运算。
最简单的方法便是将操作数设置为float类型。
但值得注意的是,当改变了操作数的类型后,相应的一些语句也需要做修改。
比如,从编辑框读取的函数atoi要改为atof,类似的,m_strResult.Format("%d",m_nTemp2);中的”%d”要改为”%f”。
最后,由于取余运算无法处理float类型的变量,所以在编写这一部分的程序时,需要将操作数转化为整型,再强制转化为float类型。
4.2本课题的评价此课题主要由按钮和编辑框组成,是一个最基本的MFC程序。
此课题的实践让我们在之前面向过程的编程基础上进一步接触了面向对象的程序设计。
而在此次课题的设计中,我的代码也有一些需要改进的地方。
比如,在实现如平方,三角等单目运算的时候,我采用了另写函数的方法,然而,这些运算完全可以用之前定义的compute函数完成,只需要在其中的switch逻辑中加入相应的运算即可。
这样可以减少程序运行所需的内存空间。
4.3心得体会在实践中,面向对象的程序设计远比面向过程的程序设计实用得多,而C++语言平台已经为我们提供了很多实用的框架,让我们的设计更聚焦与功能的优化和创新。
当然,回归到语言上,语法,结构,逻辑都是相同的,所以,坚实的语言基础是十分必要的。
另外,在程序设计的过程中,我们还需要有排错能力和创新的意识。
5.参考文献[1]C++高级语言程序设计案例与实践辅导/徐惠民主编——北京:人民邮电出版社,2012.3源代码:// dckCalculatorDlg.cpp : 实害?现?文?件t//#include"stdafx.h"#include"dckCalculator.h"#include"dckCalculatorDlg.h"#include"math.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// 用?于?应畖用?程ì序ò“°关?于?”±菜?单蹋?项?的? CAboutDlg 对?话°框òclass CAboutDlg : public CDialog{public:CAboutDlg();// 对?话°框ò数簓据Yenum { IDD = IDD_ABOUTBOX };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支§持?// 实害?现?protected:DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()// CdckCalculatorDlg 对?话°框ò// CdckCalculatorDlg 对?话°框ò的?构1造ì函ˉ数簓CdckCalculatorDlg::CdckCalculatorDlg(CWnd* pParent /*=NULL*/): CDialog(CdckCalculatorDlg::IDD, pParent), m_first(0.0), m_second(0.0), m_operator(_T("+")), m_coff(1.0), m_display(_T("0.0")), m_PI(3.14159265358979323846), temp(0){m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CdckCalculatorDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);DDX_Text(pDX, IDC_DISPLAY, m_display);}BEGIN_MESSAGE_MAP(CdckCalculatorDlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON0, &CdckCalculatorDlg::OnBnClickedButton0)ON_BN_CLICKED(IDC_BUTTON1, &CdckCalculatorDlg::OnBnClickedButton1)ON_BN_CLICKED(IDC_BUTTON2, &CdckCalculatorDlg::OnBnClickedButton2)ON_BN_CLICKED(IDC_BUTTON3, &CdckCalculatorDlg::OnBnClickedButton3)ON_BN_CLICKED(IDC_BUTTON4, &CdckCalculatorDlg::OnBnClickedButton4)ON_BN_CLICKED(IDC_BUTTON5, &CdckCalculatorDlg::OnBnClickedButton5)ON_BN_CLICKED(IDC_BUTTON6, &CdckCalculatorDlg::OnBnClickedButton6)ON_BN_CLICKED(IDC_BUTTON7, &CdckCalculatorDlg::OnBnClickedButton7)ON_BN_CLICKED(IDC_BUTTON8, &CdckCalculatorDlg::OnBnClickedButton8)ON_BN_CLICKED(IDC_BUTTON9, &CdckCalculatorDlg::OnBnClickedButton9)ON_BN_CLICKED(IDC_BUTTON_SIGN, &CdckCalculatorDlg::OnBnClickedButtonSign)ON_BN_CLICKED(IDC_BUTTON_POINT, &CdckCalculatorDlg::OnBnClickedButtonPoint)ON_BN_CLICKED(IDC_BUTTON_ADD, &CdckCalculatorDlg::OnBnClickedButtonAdd)ON_BN_CLICKED(IDC_BUTTON_MINUS, &CdckCalculatorDlg::OnBnClickedButtonMinus)ON_BN_CLICKED(IDC_BUTTON_MUTIPLY, &CdckCalculatorDlg::OnBnClickedButtonMutiply) ON_BN_CLICKED(IDC_BUTTON_DIV, &CdckCalculatorDlg::OnBnClickedButtonDiv)ON_BN_CLICKED(IDC_BUTTON_CLEAR, &CdckCalculatorDlg::OnBnClickedButtonClear)ON_BN_CLICKED(IDC_BUTTON_SQRT, &CdckCalculatorDlg::OnBnClickedButtonSqrt)ON_BN_CLICKED(IDC_BUTTON_RECI, &CdckCalculatorDlg::OnBnClickedButtonReci)ON_BN_CLICKED(IDC_BUTTON_EQUAL, &CdckCalculatorDlg::OnBnClickedButtonEqual)ON_BN_CLICKED(IDC_EXP, &CdckCalculatorDlg::OnBnClickedExp)ON_BN_CLICKED(IDC_COS, &CdckCalculatorDlg::OnBnClickedCos)ON_BN_CLICKED(IDC_SIN, &CdckCalculatorDlg::OnBnClickedSin)ON_BN_CLICKED(IDC_LN, &CdckCalculatorDlg::OnBnClickedLn)ON_BN_CLICKED(IDC_LOG, &CdckCalculatorDlg::OnBnClickedLog)ON_BN_CLICKED(IDC_TAN, &CdckCalculatorDlg::OnBnClickedTan)END_MESSAGE_MAP()// CdckCalculatorDlg 消?息¢处鋦理え?程ì序òBOOL CdckCalculatorDlg::OnInitDialog(){CDialog::OnInitDialog();// 将?“°关?于?..”±菜?单蹋?项?添?加ó到?系μ统?菜?单蹋?中D。