实验计算器程序

合集下载

实验报告 计算器程序

实验报告 计算器程序

实验报告学生姓名:学号:专业班级:网络工程实验类型:□验证□综合■设计□创新实验日期:10.4.5 实验成绩:实验2:栈和队列一、实验目的深入了解栈和队列的特性,学会在实际问题下灵活运用它们。

二、问题描述表达式求值运算是实现程序设计语言的基本问题之一,也是栈应用的一个典型例子。

设计并演示用算符优先级对算术表达式的求解过程。

三、实验要求1、算法优先级别如下:'+', '-', '*', '/', '(', ')', '#''+' '>', '>', '<', '<', '<', '>', '>','-' '>', '>', '<', '<', '<', '>', '>','*' '>', '>', '>', '>', '<', '>', '>','/' '>', '>', '>', '>', '<', '>', '>','(' '<', '<', '<', '<', '<', '=', ' ',')' '>', '>', '>', '>', ' ', '>', '>','#' '<', '<', '<', '<', '<', ' ', '='2、以字符序列的形式从终端输入语法正确、不含变量的算术表达式,利用给出的算符优先级关系,实现对算术四则混合运算的求解过程。

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

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

课程设计说明书题目: 简单计算器院系:专业班级:学号:学生姓名:指导教师: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设计目的汇编语言是计算机能够提供给用户使用的最快而又最有效的语言。

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

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

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

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

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

程序设计实践 计算器程序实验报告

程序设计实践 计算器程序实验报告

程序设计实践设计报告课题名称:简易计算器设计与实现学生姓名:班级:班内序号:学号:日期: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);//更新编辑框的数字显示}此模块是本实验的核心内容,它控制着整个程序的逻辑功能,它所实现的主要是逻辑运算以及数据交换。

c语言实验报告计算器

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!(二)结果分析从测试结果来看,程序能够正确计算基本的四则运算表达式,包括有括号的情况。

计算器实验报告

计算器实验报告

题目:界面计算器学生姓名:专业:学号:指导老师:1.实验目的:设计一个简单的计算器程序,实现简单的计算功能。

2.实验内容:(1)体系设计:程序是一个简单的计算器,能正确输入数据,能实现加、减、乘、除等算术运算,运算结果能正确显示。

(2)设计思路:1)先在Visual C++ 6.0中建立一个MFC工程文件,名为calculator;2)在对话框中添加适当的编辑框、按钮、静态文件、复选框和单选框;3)设计按钮,并修改其相应的ID与Caption;4)选择和设置各控件的单击鼠标事件;5)为编辑框添加double类型的关联变量m_edit1;6)在calculatorDlg.h中添加math.h头文件,然后添加public成员;7)打开calculatorDlg.cpp文件,在构造函数中,进行成员初始化和完善各控件的响应函数代码.3.程序调试4.附录添加的public成员:double tempvalue; //存储中间变量double result; //存储显示结果的值int sort; //判断后面是何种运算:1.加法2.减法 3.乘法 4.除法int append; //判断后面是否添加数字成员初始化:CCalculatorDlg::CCalculatorDlg(CWnd* pParent/*=NULL*/): CDialog(CCalculatorDlg::IDD, pParent){//{{AFX_DATA_INIT(CCalculatorDlg)m_edit1 = 0.0;//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);tempvalue=0;result=0;sort=0;append=0;}各控件响应函数代码:void CCalculatorDlg::OnButton1() //按钮“1”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+1;m_edit1=result;append=0;UpdateData(FALSE);void CCalculatorDlg::OnButton2() //按钮“2”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+2;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton3() //按钮“3”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+3;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton4() //按钮“4”// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+4;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton5() //按钮“5”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+5;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton6() //按钮“6”{// TODO: Add your control notification handler codehereif(append==1)result=0;result=result*10+6;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton7() //按钮“7”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+7;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton8() //按钮“8”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+8;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnButton9() //按钮“9”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+9;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnBUTTONzero() //按钮“0”{// TODO: Add your control notification handler code hereif(append==1)result=0;result=result*10+0;m_edit1=result;append=0;UpdateData(FALSE);}void CCalculatorDlg::OnBUTTONequal() //按钮“=”{// TODO: Add your control notification handler code hereswitch(sort){case 1:result=result+tempvalue;break;case 2:result=tempvalue-result;break;case 3:result=result*tempvalue;break;case 4:result=tempvalue/result;break;}m_edit1=result;sort=0;append=1;UpdateData(FALSE);}void CCalculatorDlg::OnBUTTONclean() //按钮“C”{// TODO: Add your control notification handler code heretempvalue=0;result=0;m_edit1=0.0;UpdateData(FALSE);}void CCalculatorDlg::OnBUTTONplus() //按钮“+”{// TODO: Add your control notification handler code heresort=1;tempvalue=result;m_edit1=0;append=1;}void CCalculatorDlg::OnBUTTONminus() //按钮“-”{// TODO: Add your control notification handler code heresort=2;tempvalue=result;m_edit1=0;append=1;}void CCalculatorDlg::OnBUTTONmulti() //按钮“*”{// TODO: Add your control notification handler code heresort=3;tempvalue=result;m_edit1=0;append=1;}void CCalculatorDlg::OnBUTTONdiv() //按钮“/”{// TODO: Add your control notification handler code heresort=4;tempvalue=result;m_edit1=0;append=1;}10。

计算器-MFC程序实验报告

计算器-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窗体控件。

2.主要使用JButton以及JLaber空间。

3.使用监听器4.会设置各种控件参数5.学会处理各种数据之间的转换6.软件微小问题的调试与优化二、实验内容使用窗体控件来制作一个简易计算器,要能够正确的实现加减乘除等相关功能,并且能优化字符串与整型,浮点型之间的关系,使之输出整数结果末尾不带有零,并且进行一些其他优化,如无限小数,以及二进制与十进制转换而导致的误差,需要进行相关优化。

三、实验步骤import java.awt.EventQueue;import javax.swing.JFrame;import javax.swing.JTextField;import javax.swing.JButton;import java.awt.event.ActionListener;import java.awt.font.TextMeasurer;import java.awt.event.ActionEvent;import javax.swing.SwingConstants;import java.awt.Font;public class Calculate {String oldString;int operate;private JFrame frame;private JTextField textField;/*** Launch the application.*/public static void main(String[] args) {EventQueue.invokeLater(new Runnable() {public void run() {try {Calculate window = new Calculate();window.frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}/*** Create the application.*/public Calculate() {initialize();}/*** Initialize the contents of the frame.*/private void initialize() {frame = new JFrame();frame.setTitle("\u8BA1\u7B97\u5668");frame.setBounds(750, 300, 339, 352);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().setLayout(null);textField = new JTextField();textField.setEditable(false);textField.setFont(new Font("宋体", Font.PLAIN, 30));textField.setHorizontalAlignment(SwingConstants.RIGHT);textField.setText("0");textField.setBounds(14, 13, 285, 66);frame.getContentPane().add(textField);textField.setColumns(10);JButton btnNewButton = new JButton("4");btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {String s=textField.getText();if(s.equals("0"))textField.setText("4");elsetextField.setText(s+"4");}});btnNewButton.setBounds(24, 169, 59, 27);frame.getContentPane().add(btnNewButton);JButton button = new JButton("7");button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {String s=textField.getText();if(s.equals("0"))textField.setText("7");elsetextField.setText(s+"7");}});button.setBounds(24, 127, 59, 27);frame.getContentPane().add(button);JButton button_1 = new JButton("1");button_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String s=textField.getText();if(s.equals("0"))textField.setText("1");elsetextField.setText(s+"1");}});button_1.setBounds(24, 209, 59, 27);frame.getContentPane().add(button_1);JButton button_2 = new JButton("2");button_2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String s=textField.getText();if(s.equals("0"))textField.setText("2");elsetextField.setText(s+"2");}});button_2.setBounds(98, 209, 59, 27);frame.getContentPane().add(button_2);JButton button_3 = new JButton("3");button_3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String s=textField.getText();if(s.equals("0"))textField.setText("3");elsetextField.setText(s+"3");}});button_3.setBounds(171, 209, 59, 27);frame.getContentPane().add(button_3);JButton button_4 = new JButton("5");button_4.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String s=textField.getText();if(s.equals("0"))textField.setText("5");elsetextField.setText(s+"5");}});button_4.setBounds(98, 169, 59, 27);frame.getContentPane().add(button_4);JButton button_5 = new JButton("6");button_5.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String s=textField.getText();if(s.equals("0"))textField.setText("6");elsetextField.setText(s+"6");}});button_5.setBounds(171, 169, 59, 27);frame.getContentPane().add(button_5);JButton button_6 = new JButton("8");button_6.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String s=textField.getText();if(s.equals("0"))textField.setText("8");elsetextField.setText(s+"8");}});button_6.setBounds(97, 127, 59, 27);frame.getContentPane().add(button_6);JButton button_7 = new JButton("9");button_7.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String s=textField.getText();if(s.equals("0"))textField.setText("9");elsetextField.setText(s+"9");}});button_7.setBounds(171, 127, 59, 27);frame.getContentPane().add(button_7);JButton button_8 = new JButton("0");button_8.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String s=textField.getText();if(s.equals("0"))textField.setText("0");elsetextField.setText(s+"0");}});button_8.setBounds(24, 248, 59, 27);frame.getContentPane().add(button_8);JButton button_9 = new JButton(".");button_9.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String s=textField.getText();if(!s.contains("."))textField.setText(s+".");}});button_9.setBounds(98, 249, 59, 27);frame.getContentPane().add(button_9);JButton button_10 = new JButton("\u00B1");button_10.setBounds(171, 249, 59, 27);frame.getContentPane().add(button_10);JButton button_11 = new JButton("+");button_11.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { oldString=textField.getText();textField.setText("0");operate=1;}});button_11.setBounds(240, 87, 59, 27);frame.getContentPane().add(button_11);JButton button_12 = new JButton("-");button_12.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {oldString=textField.getText();textField.setText("0");operate=2;}});button_12.setBounds(240, 127, 59, 27);frame.getContentPane().add(button_12);JButton button_13 = new JButton("*");button_13.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {oldString=textField.getText();textField.setText("0");operate=3;}});button_13.setBounds(240, 169, 59, 27);frame.getContentPane().add(button_13);JButton button_14 = new JButton("/");button_14.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {oldString=textField.getText();textField.setText("0");operate=4;}});button_14.setBounds(240, 209, 59, 27);frame.getContentPane().add(button_14);JButton btnNewButton_1 = new JButton("C"); btnNewButton_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {textField.setText("0");oldString="0";}});btnNewButton_1.setBounds(24, 87, 59, 27);frame.getContentPane().add(btnNewButton_1);JButton btnCe = new JButton("CE");btnCe.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {}});btnCe.setBounds(98, 87, 59, 27);frame.getContentPane().add(btnCe);JButton button_16 = new JButton("<-");button_16.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {String ss=textField.getText();if(ss.length()==1)textField.setText("0");elsetextField.setText(ss.substring(0, ss.length()-1));}});button_16.setBounds(171, 87, 59, 27);frame.getContentPane().add(button_16);JButton button_15 = new JButton("=");button_15.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {double a=Double.parseDouble(oldString);double b=Double.parseDouble(textField.getText());double c=0;if(operate==1) c=a+b;if(operate==2) c=a-b;if(operate==3) c=a*b;if(operate==4) c=a/b;String cc=String.valueOf(c);char ccc=cc.charAt(cc.length()-1);if(ccc=='0'){textField.setText(cc.substring(0,cc.length()));}elsetextField.setText(String.valueOf(c));}});button_15.setBounds(240, 248, 59, 27);frame.getContentPane().add(button_15);}}四、实验结果解决了输出结果为整数,却带小数的结果并且上面会显示式子退格功能,清空功能也已经实现。

简易计算器实验详细过程

简易计算器实验详细过程

简易计算器实验详细过程硬件环境:软件环境:WinXP+VC++6.0一、实验目的:构造一个类似Windows自带的计算器一样的简易计算器,能够连续进行加、减、乘、除四则整数运算,并能随时清除计算结果进行下一次计算。

二、具体实验步骤:1、添加编辑框对应的变量m_Display2、添加运算符类型变量char CompuType; //用于存储运算符类型CString FirstInput; //用于保存运算符前面的输入值3、添加各种按钮的单击事件处理方法的函数控件名称列表:主对话框标识:IDD_CALC_DIALOG关于对话框标识:IDD_ABOUTBOX编辑框:IDC_EDIT运算符按钮标识:加:IDC_BUTTONADD减:IDC_BUTTONSUBTRACT乘:IDC_BUTTONMULTIPL Y除:IDC_BUTTONDIVIDE等于:IDC_BUTTONEQUER0~9数字符按钮标识:7:IDC_BUTTONSEVEN8:DC_BUTTONEIGHT9:IDC_BUTTONNINE4:IDC_BUTTONFOUR5:IDC_BUTTONFIVE6:IDC_BUTTONSIX1:C_BUTTONONE2:IDC_BUTTONTWO3:IDC_BUTTONTHREE0:IDC_BUTTONZERO清除按钮标识:IDC_BUTTONCLEAR关于按钮标识:IDC_BUTTONABOUT类的成员变量:class CCalcDlg : public CDialog{// Constructionpublic:char CompuType; //用于存储运算符类型CCalcDlg(CWnd* pParent = NULL); // standard constructor //… (省略)protected:CString FirstInput; //用于保存运算符前面的输入值//… (省略)};按钮单击的事件对应方法程序列表:void CCalcDlg::OnButtonone(){// TODO: Add your control notification handler code herem_Display = m_Display+_T("1");UpdateData(FALSE);}void CCalcDlg::OnButtontwo(){// TODO: Add your control notification handler code herem_Display = m_Display+_T("2");UpdateData(FALSE);}void CCalcDlg::OnButtonthree(){// TODO: Add your control notification handler code here m_Display = m_Display+_T("3");UpdateData(FALSE);}void CCalcDlg::OnButtonfour(){// TODO: Add your control notification handler code here m_Display = m_Display+_T("4");UpdateData(FALSE);}void CCalcDlg::OnButtonfive(){// TODO: Add your control notification handler code here m_Display = m_Display+_T("5");UpdateData(FALSE);}void CCalcDlg::OnButtonsix(){// TODO: Add your control notification handler code here m_Display = m_Display+_T("6");UpdateData(FALSE);}void CCalcDlg::OnButtonseven(){// TODO: Add your control notification handler code here m_Display = m_Display+_T("7");UpdateData(FALSE);}void CCalcDlg::OnButtoneight(){// TODO: Add your control notification handler code here m_Display = m_Display+_T("8");UpdateData(FALSE);}void CCalcDlg::OnButtonnine(){// TODO: Add your control notification handler code here m_Display = m_Display+_T("9");UpdateData(FALSE);}void CCalcDlg::OnButtonzero(){// TODO: Add your control notification handler code here m_Display = m_Display+_T("0");UpdateData(FALSE);}void CCalcDlg::OnButtonadd(){// TODO: Add your control notification handler code here FirstInput = m_Display;m_Display = _T("");UpdateData(FALSE);CompuType='+';}void CCalcDlg::OnButtonsubtract(){// TODO: Add your control notification handler code here FirstInput = m_Display;m_Display = _T("");UpdateData(FALSE);CompuType='-';}void CCalcDlg::OnButtondivide(){// TODO: Add your control notification handler code here FirstInput = m_Display;m_Display = _T("");UpdateData(FALSE);CompuType='/';}void CCalcDlg::OnButtonmultiply(){// TODO: Add your control notification handler code hereFirstInput = m_Display;m_Display = _T("");UpdateData(FALSE);CompuType='*';}void CCalcDlg::OnButtonequer(){// TODO: Add your control notification handler code hereint TempResult; //定义存储结果的临时变量int FirstInputValue,NewInputValue; //定义进行运算的临时变量FirstInputValue=atoi(FirstInput.GetBuffer(24)); //将字符串变量转换成整型值FirstInput.ReleaseBuffer(-1);NewInputValue=atoi(m_Display.GetBuffer(24)); //将字符串变量转换成整型值m_Display.ReleaseBuffer(-1);switch(CompuType) //开关语句判断运算符类型{case '+':TempResult = FirstInputValue + NewInputValue; //将加法运算结果传给出临时变量TempResultbreak;case '-':TempResult = FirstInputValue - NewInputValue; //将减法运算结果传给出临时变量TempResultbreak;case '*':TempResult = FirstInputValue * NewInputValue; //将乘法运算结果传给出临时变量TempResultbreak;case '/':TempResult = FirstInputValue / NewInputValue; //将除法运算结果传给出临时变量TempResultbreak;}sprintf(m_Display.GetBuffer(24),"%d",TempResult); //将运算结果变量值传递给出编辑控件变量m_Displaym_Display.ReleaseBuffer(-1);UpdateData(FALSE); //刷新编辑控件变量,并在编辑框中显示运算结果}void CCalcDlg::OnButtonclear(){// TODO: Add your control notification handler code herem_Display.Empty(); //清空存储在变量m_Display中的数据UpdateData(FALSE);}void CCalcDlg::OnButtonabout(){// TODO: Add your control notification handler code hereCAboutDlg DlgAbout;DlgAbout.DoModal();}。

LabVIEW实验简易计算器

LabVIEW实验简易计算器

虚拟仪器实验--简易计算器设计一、实验目的1.熟悉LabVIEW的编程环境,了解其特点。

2.学会用LabVIEW实现简单的程序设计,了解图形化编程的方法和步骤。

3.掌握数据对象类型、数组、簇的概念和其他基本函数,以及它们之间如何进行相互转化。

4.掌握LabVIEW中一些函数和结构的用法。

二、实验要求编写标准计算器,实现基本的加、减、乘、除等功能,能进行简单的计算,完成源程序的编写和功能测试。

三、实验设备安装LabVIEW的计算机。

四、实验内容4.1计算器功能介绍1.可以实现加、减、乘、除、求倒、开根、正弦等运算。

2.可以实现连续运算。

3.对错误输入可以借助Backspace键进行删除;运算完成后可以借助C键释放内存。

4.对误操作进行屏蔽,如在一个数中只可能输入一个小数点。

5.运算结果可以精确到小数点后第6位。

4.2程序变量设置及说明进入主程序,首先判断输入是数字、运算符、等号还是撤销(或清除)。

1.输入为数字。

将输入数字转换为字符并连接到原数据后显示组合后的字符串,保存该字符串。

2.输入为运算符。

判断运算符的类型,当运算符为“+”、“-”、“*”、“/”时,调用上一运算符,并保存此次输入的运算符,同时显示运算结果并保存相应的结果数据;当运算符为“/x”、“sqrt”、“sin”时,直接对此时输入的数据进行相应的倒数、开方、正弦运算。

3.输入为等号。

执行之前保存的运算符,显示运算结果,同时结束该运算,返回初始状态。

4.输入为Backspace或C键。

Backspace键可以删除前一输入数据或运算符;C键可以清除数据并释放内存。

简易计算器程序设计框图见图1。

图1程序设计框图4.2.1主要程序编写及说明:1.输入0处理显示程序模块判断Display是否是0,如果是则显示“0”,如果不是则用连接字符串函数输出显示,并相应的赋给inputl或input2。

2.小数点处理显示程序模块利用全局变量(布尔型)zeroflag作为小数点指示标志,默认为F。

编写计算器程序

编写计算器程序

实验6 编写计算器程序实验目的:1、掌握控件数组的创建方法;2、理解控件数组中控件名称组成特点;3、掌握运用控件数组编程的方法。

实验内容:1、实验要求使用控件数组设计一个简易计算器,能实现算术运算和简单函数运算,并具有清除结果和退格键的功能。

2、分析设计用一文本框显示计算过程及结果,使用以命令按钮控件为元素的控件数组,并编写控件数组的Click事件。

3、窗体属性5、源代码Dim x As Single, y As SingleDim op As StringPrivate Sub Command1_Click(Index As Integer)Select Case IndexCase 0 To 9Text1.Text = Text1 & Command1(Index).Caption Case 14If InStr(Text1, ".") = 0 ThenText1.Text = Text1 & Command1(Index).Caption ElseIf Right(Text1, 1) = "." ThenText1.Text = Text1 & ""End IfCase 10 To 13x = V al(Text1)If Index = 10 Then op = "+"If Index = 11 Then op = "-"If Index = 12 Then op = "*"If Index = 13 Then op = "/"Text1 = ""Case 15y = V al(Text1)'Text1 = ""If op = "+" Then Text1 = x + yIf op = "-" Then Text1 = x - yIf op = "*" Then Text1 = x * yIf op = "/" ThenIf y <> 0 ThenText1 = x / yElseText1 = "除数不能为零"End IfEnd IfCase 16If Len(Text1) <> 0 ThenText1 = Left(Text1, Len(Text1) - 1)End IfCase 17Text1 = ""x = 0: y = 0Case 18x = V al(Text1)If x < 0 ThenText1 = "负数的平方根无意义"ElseText1 = Sqr(x)End IfCase 19x = V al(Text1): Text1 = x * xCase 20x = V al(Text1): Text1 = Sin(x * 3.1415926 / 180)Case 21x = V al(Text1): Text1 = Cos(x * 3.1415926 / 180)Case 22x = V al(Text1): Text1 = Tan(x * 3.1415926 / 180)Case 23x = V al(Text1): Text1 = Atn(x) * 180 / 3.1415926Case 24x = V al(Text1)If x <= 0 ThenText1 = "负数或零的对数无意义"ElseText1 = Log(x)End IfEnd SelectEnd SubPrivate Sub Form_Load()Text1 = ""For i = 0 To 24Command1(i).BackColor = &HC0FFFFNext iEnd Sub实验思考:本次实验只实现了计算器的部分功能,请试着完善计算器的其它功能。

创建简单计算器程序

创建简单计算器程序

实验一创建简单计算器程序实验目标本试验介绍如何创建一个简单的计算器应用程序。

技术要点创建windows窗体应用程序的基本步骤。

实验步骤1.首先,运行visual studio2005,新建一个Windows应用程序命名为calculate2.向窗体中添加【Button】按钮控件,数字0-9,并设置控件的ForeColor 属性为Blue.布局如下:3. 向窗体添加【Button】按钮控件,运行符“+”“-”“*”“/”“.”“-/+”“C”“=”。

并设置控件的ForeColor属性为Red。

4.向窗体添加【TextBox】空间用于显示数据,并将其TextAlign属性设置为“Right”。

5.在Form1类中对下列数据进行定义和初始化:6. 在类中增加如下方法:7. 双击【Button】空间0-9,分别在每个按钮的Click事件处理程序中添加如下代码:setText("0");setText("1");setText("2");setText("3");setText("4");setText("5");setText("6");setText("7");setText("8");setText("9");8.双击“+”号按钮,添加如下事件处理代码:setOperator(1);9.双击“-”号按钮,添加如下事件处理代码:setOperator(2);10.双击“*”号按钮,添加如下事件处理代码:setOperator(3);11.双击“/”号按钮,添加如下事件处理代码:setOperator(4);12.双击“=”号按钮,添加如下事件处理代码:doEquals();13.双击“.”号按钮,添加如下事件处理代码:setDecimal();14.双击“C”号按钮,添加如下事件处理代码:isSecond = false;setText("clear");15.程序运行结果如图:实验二使用菜单实验目标本实验介绍如何在应用程序中加入菜单,并通过菜单响应用户的请求技术要点创建窗体应用程序菜单的简单步骤,时间响应方法。

数电实验简易计算器

数电实验简易计算器

北京邮电大学数电综合实验报告题目:简易计算器学院:信息与通信工程学院班级:学号:班内序号:姓名:数字电路综合实验报告简易计算器一、实验课题及任务要求设计并实现一个简易计算器。

基本要求:1.利用4X4 小键盘作为输入,包括:数字键0-9,清除键,等号键及‘+’‘-’‘*’运算符号键;2.实现输入为99 以内自然数的加、减、乘运算;3.能够实现多次连续计算(无优先级,从左到右计算结果),如:12+34×2-78=14;4.最大结果为99999(五位),溢出报警;5.用数码管显示输入的数字和结果,最左侧数码管用来表示数字的正负,其他五位数码管表示结果;结果的绝对值大于99999时,数码管显示‘Error’。

提高要求:1.实现输入为9999 以内自然数的加、减法;2.除法运算,不能除尽时小数保留1 位有效数字;3.能够区分运算优先级(先乘除,后加减),如:12+34×2-78=2 ;4.自拟其他功能。

二、系统设计2.1系统总体框图2.2逻辑流程图2.3MDS图2.4分块说明程序主要分为6个模块:分频器模块,键盘扫描模块,防抖模块,控制模块,数码管模块,报警模块。

VHDL文件devider包括分频器模块,keyboard包括键盘扫描模块,datain 包括防抖模块,控制模块,数码管模块,报警模块。

1.分频器模块系统时钟是50MHz,利用分频器得到25赫兹的时钟用于键盘扫描;100赫兹的时钟用于键盘去抖;1000赫兹的时钟用于数码管显示。

2.键盘扫描模块本模块主要完成是4×4键盘扫描,然后获取其键值,并对其进行编码,从而进行按键的识别。

键盘扫描的实现过程如下:对于4×4键盘,连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可。

为了完成这一识别过程,在时钟的上升沿输出列扫描信号其中一列输出低电平,另外三列输出高电平;在时钟的下降沿读入行值,当四行全为1时,表明无键按下;若某一列的行值为0,表示该行有键被按下。

VC版科学计算器程序实验报告

VC版科学计算器程序实验报告

西安科技大学《程序设计方法与优化》实验报告题目科学计算器院、系(部)计算机科学与技术学院专业及班级软件工程1101班姓名张XX 日期 2013/04/24一.功能需求:1.能进行加、减、乘、除运算:这时最基本的计算器功能。

2.还能进行以下的数值计算:函数名:ln在数学中ln(x)是以e为底的x的对数。

e是一个常数函数名: exp功能: 指数函数exp就是以e为底的指数,exp(0)=1, exp(1)=e, exp(2)=en!代表一个数的阶乘,例如:5!就是5*4*3*2*1;sta代表统计算法;x^3代表x的3次方;x^y代表x的y次方。

sin正弦,cos余弦,tan正切,dms度分秒切换Lsh左移ln自然对数,F-E科学计数法开关,Xor异或,Int整数部分,Exp允许输入用科学计数法表示的数字1/x倒数,log常用倒数mod余数Pi是圆周率,Exp是科学计数法exp代表以e为幂指数函数例如:exp10就是e的10次方;ln是以e为底的对数函数例如:ln10就是以e为底10的对数;M+是计算结果并加上已经储存的数;M-是计算结果并用已储存的数字减去目前的结果;MR是读取储存的数据;MC是清除储存数据;AC,CE归零是有一个是清除现有数据重新输入,另一个是清除全部数据结果和运算符.数学计算度量衡换算百度计算器为用户提供常用的数学计算功能。

您可在任何地方的网页搜索栏内,输入需要计算的数学表达式(例如:3+2),点击搜索,即可获得结果。

百度计算器支持实数范围内的计算,支持的运算包括:加法(+或+),减法(-或-),乘法(*或×),除法(/),幂运算(^),阶乘(!或!)。

支持的函数包括:正弦,余弦,正切,对数。

支持上述运算的混合运算。

例:加法:3+2减法:3-2乘法:3*2除法:3/2阶乘:4! 4的阶乘电脑自带计算器开根号:1,调到科学型。

2,开方:(1)选一下INV这个。

(2)按一个数字。

基于vc++mfc的科学计算器程序实验报告

基于vc++mfc的科学计算器程序实验报告

实验报告课程名称:windows软件开发实习实验项目:科学计算器工业大学实验报告(适用计算机程序设计类)专业班级:软件1006 学号:101201622 :鑫可实验名称:附件A 工业大学实验报告(适用计算机程序设计类)专业班级:软件1006 学号:101201622 :鑫可实验步骤或程序:一、关于Visual C++:Visual C++6.0由Microsoft开发, 它不仅是一个C++ 编译器,而且是一个基于Windows 操作系统的可视化集成开发环境(integrated development environment,IDE)。

Visual C++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。

这些组件通过过一个名为Developer Studio的组件集成为和谐的开发环境。

Microsoft的主力软件产品。

Visual C++是一个功能强大的可视化软件开发工具。

自1993年Microsoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。

虽然微软公司推出了Visual C++.NET(Visual C++7.0),但它的应用的很大的局限性,只适用于Windows 2000,Windows XP和Windows NT4.0。

所以实际中,更多的是以Visual C++6.0为6平台。

Visual C++6.0以拥有“语法高亮”,自动编译功能以及高级除错功能而著称。

比如,它允许用户进行远程调试,单步执行等。

还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。

其编译及创建预编译头文件(stdafx.h)、最小重建功能及累加连结(link)著称。

这些特征明显缩短程序编辑、编译及连结的时间花费,在大型软件计划上尤其显著。

二、设计要点1、基本要求:设计的系统界面要美观大方,操作合理,有必要的提示。

Java程序设计计算器实验报告

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.实验目的(1)加深对语法及语义分析原理的理解,并实现对命令语句的灵活应用;(2)熟悉Microsoft V isual C++6.0 的运行环境。

(3)通过此次实验熟悉自己的编程能力。

2.实验要求所做出的计算器代码不仅能够实验简单的加减乘除运算,而且还必须能够实现对表达式的操作。

3.实验环境本次实验在vc6.0环境下编译通过。

4.设计思想和原理(1)定义部分:定义常量、变量、数据结构;(2)初始化:设立LR(1)分析表、初始化变量空间(包括堆栈、结构体、数组、临时变量等);(3)控制部分:从键盘输入一个表达式符号串;(4)利用LR(1)分析算法进行表达式处理:根据LL(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示错误信息.5.程序源代码#include<stdio.h>#include<iostream.h>#include<stdlib.h>#include<string.h>#include<ctype.h>typedef float DataType;typedef struct{DataType *data;int max;int top;}Stack;void SetStack(Stack *S,int n){S->data=(DataType*)malloc(n*sizeof(DataType));if(S->data==NULL){printf("overflow");exit(1);}S->max=n;S->top=-1;}void FreeStack(Stack *S){free(S->data);}int StackEmpty(Stack *S){if(S->top==-1)return(1);return(0);}DataType Peek(Stack *S){if(S->top==S->max-1){printf("Stack is empty!\n");exit(1);}return(S->data[S->top]);}void Push(Stack *S,DataType item){if(S->top==S->max-1){printf("Stack is full!\n");exit(1);}S->top++;S->data[S->top]=item;}DataType Pop(Stack *S){if(S->top==-1){printf("Pop an empty stack!\n");exit(1);}S->top--;return(S->data[S->top+1]);}typedef struct{char op;int inputprecedence;int stackprecedence;}DataType1;typedef struct{DataType1 *data;int max;int top;}Stack1;void SetStack1(Stack1 *S,int n){S->data=(DataType1*)malloc(n*sizeof(DataType1));if(S->data==NULL){printf("overflow");exit(1);}S->max=n;S->top=-1;}void FreeStack1(Stack1 *S){free(S->data);}int StackEmpty1(Stack1 *S){if(S->top==-1)return(1);return(0);}DataType1 Peek1(Stack1 *S){if(S->top==S->max-1){printf("Stack1 is empty!\n");exit(1);}return(S->data[S->top]);}void Push1(Stack1 *S,DataType1 item) {if(S->top==S->max-1){printf("Stack is full!\n");exit(1);}S->top++;S->data[S->top]=item;}DataType1 Pop1(Stack1 *S){if(S->top==-1){printf("Pop an empty stack!\n");exit(1);}S->top--;return(S->data[S->top+1]);}DataType1 MathOptr(char ch){DataType1 optr;optr.op=ch;switch(optr.op){case'+':case'-':optr.inputprecedence=1;optr.stackprecedence=1;break;case'*':case'/':optr.inputprecedence=2;optr.stackprecedence=2;break;case'(':optr.inputprecedence=3;optr.stackprecedence=-1;break;case')':optr.inputprecedence=0;optr.stackprecedence=0;break;}return(optr);}void Evaluate(Stack *OpndStack,DataType1 optr) {DataType opnd1,opnd2;opnd1=Pop(OpndStack);opnd2=Pop(OpndStack);switch(optr.op){case'+':Push(OpndStack,opnd2+opnd1);break;case'-':Push(OpndStack,opnd2-opnd1);break;case'*':Push(OpndStack,opnd2*opnd1);break;case'/':Push(OpndStack,opnd2/opnd1);break;}}int isoptr(char ch){if(ch=='+'||ch=='-'||ch=='*'||ch=='/'||ch=='(') return(1);return(0);}void Infix(char *str){int i,k,n=strlen(str);char ch,numstr[10];DataType opnd;DataType1 optr;Stack OpndStack;Stack1 OptrStack;SetStack(&OpndStack,n);SetStack1(&OptrStack,n);k=0;ch=str[k];while(ch!='=')if(isdigit(ch)||ch=='.'){for(i=0;isdigit(ch)||ch=='.';i++){numstr[i]=ch;k++;ch=str[k];}numstr[i]='\0';opnd= atof(numstr);Push(&OpndStack,opnd);}elseif(isoptr(ch)){optr=MathOptr(ch);while(Peek1(&OptrStack).stackprecedence>=optr.inputprecedence) Evaluate(&OpndStack,Pop1(&OptrStack));Push1(&OptrStack,optr);k++;ch=str[k];}else if(ch==')'){optr=MathOptr(ch);while(Peek1(&OptrStack).stackprecedence>=optr.inputprecedence) Evaluate(&OpndStack,Pop1(&OptrStack));Pop1(&OptrStack);k++;ch=str[k];}while(!StackEmpty1(&OptrStack))Evaluate(&OpndStack,Pop1(&OptrStack));opnd=Pop(&OpndStack);cout<<"你输入表达式的计算结果为"<<endl;printf("%-6.2f\n",opnd);FreeStack(&OpndStack);FreeStack1(&OptrStack);}void main(){cout<<"请输入你要计算的表达式,并以“=”号结束。

实验01 简易计算器设计

实验01 简易计算器设计

实验1简易计算器设计一、实验目的1、掌握事件结构的编程2、掌握字符串与数字的相互转化3、掌握条件结构的编程4、生成exe文件二、实验要求利用LabVIEW的事件结构编写一个简单的计算器程序,实现加、减、乘、除等运算,并能对计算结果进行清除,前面板按钮及布局如下图所示。

图1 计算机界面要求最后创建项目,生成exe可执行文件。

三、实验设备1、计算机2、安装LabVIEW软件(版本不限,本实验指导书以2018版为例)四、实验说明1、程序流程图图2 程序流程图2、设计思路计数器界面中每个按键相当于一个布尔输入控件,共17个;计算结果的显示为一个字符串显示控件。

每次按键触发一个按键事件,利用LabVIEW的事件响应结构对每个按键进行响应,实现要求的简易计算器功能。

表1 布尔输入控件的说明前面板除了17个布尔输入控件外,还包含输入数据的输入临时值控件、输入1、输入2、存储操作运算符的运算符临时值控件、运算结果和过程显示,过程显示充当计算器的显示器。

3、算法流程图包括程序初始化、运算符判断、数据存储与运算、显示等。

图3 算法流程图五、实验过程1、前面板设计打开IabVIEW2018软件,新建一个VI,并命名为虚拟计算器。

在前面板上右击,在布尔控件中选择“确定按钮”;右击,打开显示项,去掉标签;调整按键到合适的大小;再拷贝16个按键,排列好,C键和±键还需要调整一下大小;修改各按键的布尔文本;双击各按键到后面板中修改各自的标签,例如将布尔文本为1的按键标签改为“数字1”,将布尔文本为+的按键标签改为“加”,以方便编程时识别各按键。

再设置一个字符串显示控件,用来显示运算数值、运算符号和运算结果,修改标签为“过程显示”;还需要设置5个字符串显示控件,标签分别为“输入临时值”、“输入1”、“输入2”、“运算符临时值”、“运算结果”。

得到如下图所示的计算器前面板、后面板。

图4 前面板布局图图4 后面板2、初始化将前面板中的各个显示控件初始化,如图5所示。

C++实现计算器实验报告

C++实现计算器实验报告

实验报告完成日期:2014 年10 月27 日实验题目:完整计算器需求分析:请实现一个只包含加减乘除以及括号运算的简单计算器,输入格式是正确的,不需要判断。

注意式子中可能会出现负数以及多余的空格,操作数也可能是多位数和小数。

概要设计:设计方法:1、建立一个fuhao 栈存储符号,一个num 栈存储数字,并将输入存储到一个string 类型中。

2、依次读取,每次遇到符号,则将前面缓存的string 类型数字转化成double 类型,并且判断fuhao.top()是否为乘号或者除号,若是,则和num.top()进行运算,弹出fuhao 和num 的栈顶,将运算结果压入num 栈中。

保证fuhao 栈只有加号和减号。

3、在stringtodouble()函数中添加分辨是否有小数点以及负号的语句。

4、最后在用一个循环,从后往前依次读取fuhao 和num 栈的数据进行运算,得出结果。

调试分析:a、调试中遇到的问题以及解决方案:问题:测试样例比要求的少了一个,并且每次输入测试样例数量T 时,会输出‘0’。

原因:使用了getline()函数,T 后面的回车被当做了第一组样例的输入。

解决方案:在输入第一组测试数据前,用stdio.h 里面的getchar()函数,把‘\n’读取掉,避免影响后面的输入。

b 时间复杂度:该程序有两处简单的一重循环,因此每一次计算的时间复杂度为O(n)。

用户使用说明:暂不支持括号输入计算。

支持负数、浮点数的输入计算。

测试结果:测试样例数量:5实验心得:分步思想,要分步来完成一个看起来有点复杂的程序,本例中使用了先计算乘除,再计算加减的方法,使得程序简单可读。

附录:13331365_04.cpp#include <iostream>#include <stdio.h>#include <stack>#include <string>using namespace std;//定义一个“jisuan”函数,参数是两个double类型数据和一个char计算符号,返回double 类型的计算结果double jisuan(double a, double b, char c) {if (c == '+')return a + b;else if (c == '-')return a - b;else if (c == '/')return a / b;elsereturn a*b;//定义一个”stringtodouble“函数,把string转化为double类型数据double stringtodouble(string a) {bool isfushu = false; //判断temp第一位是否为负数bool isxiaoshu = false; //判断是否遇到小数点double xiaoshu = 0.1; //当前浮点数级数int theFirstNum = 0;if (a[0] == '-') {isfushu = true;theFirstNum = 1;}double num = 0;for (int i = theFirstNum ; i < a.size() ; i++) {if (a[i] == '.')isxiaoshu = true;else if (!isxiaoshu)num = num*10 + (a[i] - '0');else if (isxiaoshu)num = num + xiaoshu*(a[i] - '0'), xiaoshu = xiaoshu*0.1;}return isfushu == true ? -num : num;int main() {int T;cout << "请输入测试用例数量:" ;cin >> T;for (int j = 0 ; j < T ; j++) {string input;stack<char>fuhao; // 存放符号的栈stack<double>num; // 存放数字的栈string temp = "";double sum = 0;//当第一次输入时,用getchar()来去掉输入T后面的那个'\n'if (j == 0)char nothing = getchar();cout << "计算:" ;getline(cin, input);for (int i = 0 ; i < input.size() ; i++) {/*当读取到符号时,将string类的temp转化成double类型,再判断fuhao.front()是否为'*'或者'/',若是,则进行计算,保证fuhao栈里只有加号和减号*/if (input[i] == '+' || input[i] == '-'|| input[i] == '/' || input[i] == '*') {//当temp为空string时,说明input[i]是作为负数的符号,因此不压入fuhao栈,而是加到temp第一位if (temp == "") {temp += input[i];} else {num.push(stringtodouble(temp));temp = "";if (!fuhao.empty() && (fuhao.top() == '*' || fuhao.top() == '/')) {double a = num.top();num.pop();double b = num.top();num.pop();double c = jisuan(b, a, fuhao.top());fuhao.pop();num.push(c);}fuhao.push(input[i]);}}//如果读取到数字,则把它放到temp中else if ((input[i] >= '0' && input[i] <= '9') || input[i] == '.') { temp += input[i];}}//单独处理最后一个数字num.push(stringtodouble(temp));if (!fuhao.empty() && (fuhao.top() == '*' || fuhao.top() == '/')) { double a = num.top();num.pop();double b = num.top();num.pop();double c = jisuan(b, a, fuhao.top());fuhao.pop();num.push(c);}sum = num.top();num.pop();//进行最后的加减计算while (!num.empty()) {sum = jisuan(num.top(), sum, fuhao.top());num.pop();fuhao.pop();}cout << "结果:" ;printf("%.3lf\n", sum);}return 0;}。

实验计算器程序

实验计算器程序
m_number=m_number*10+n; number1=m_number; UpdateData(FALSE); } else { m_number=m_number*10+n; number2=m_number; UpdateData(FALSE); } //处理除数为零的情况的代码添加在这里,如果选择除,则零按钮不显示,否则显示
else number2=m_number;
UpdateData(FALSE); break; case IDC_NUMBER_BackSpace: m_number=(int)m_number/10; if(NumberState==1)
number1=m_number; else
number2=m_number; UpdateData(FALSE);
5
OnNumberKey
IDC_NUMBER6
6
OnNumberKey
_NUMBER7
7
OnNumberKey
IDC_NUMBER8
8
OnNumberKey
IDC_NUMBER9
9
OnNumberKey
IDC_NUMBER0
0
OnNumberKey
IDC_NUMBER_PlusMinus IDC_NUMBER_BackSpace IDC_NUMBER_Divide
2 实验类型
综合型实验
3 实验内容及步骤
本实验的任务是实现一个简易计算器,该计算器具有简单的加减乘除功能。该计算器具 体实现步骤如下:
(1)启动 AppWizard,建立一个基于对话框的 MFC 应用程序 Calculator。 ( 2 ) 修 改 对 话 框 资 源 , 按 照 图 8.1 方 式 , 添 加 控 件 对 象 。 Edit 的 ID 是 IDC_EDIT_PUTOUT,风格属性是 Number 和 Read-Only,在“Extended Styles”属性中 选择“Right Aligned Text”。表 8.1 是按钮控件的 ID 标识和标题。

计算器应用程序实验报告

计算器应用程序实验报告

计算器应用程序实验报告专业班级软件工程2班学号 2220133222姓名赖友旭实验日期 2014/12/16一、实验目的1.学会通过图形用户界面,用户与程序之间可以进行方便的交互,熟悉利用java库中抽象窗口工具包javax.swing,java.awt来为窗口设计组件布局等等。

2.熟悉java中将组件实例作为类的对象,类包括在java类库中,例如JButton类创建单击按钮,JTextField创建文本框等等。

3.对于用户的操作需要进行动作反应,则需要利用监视器来监视。

因此,需要将实验中的一些组件申请监视器的监控,不同组件的监视器类型不同。

例如文本框,单击按钮的监视器为ActionListener,及创建监视器的类需要实现ActionListener的接口。

4.实现监视器接口的类需要重写接口中的所有抽象方法,本试验中监视器类实现了ActionListener接口,需要重写接口中的actionPerformed方法。

5.对于计算,如果输入非数字或除数为0需要用try~catch语句来接收异常。

6.熟悉接收了用户的ActionEvent后,怎样调用文本框类的对象的方法返回输入的内容,怎样调用ActionEvent中的方法返回命令字符串等等,及熟悉有关类中的各种功能的方法。

7.需了解基本数据类型,java中也将其打包成类,需利用其中的方法,例如String类中的将字符串转换成double型数据,字符串的比较等等方法。

8.学会利用JFrame或者是JFrame的子类创建窗口,用窗口类中添加组件,在类中需要实例化监视器,将需要监视的组件添加监视器的监视。

9.在主方法中实例化窗口,设置窗口的一些性质,例如窗口名等等。

二、实验要求编写一个应用程序,设计一个标题为“计算”的窗口,设计四个按钮,分别命名为“加”、“减”、“积”、“除”,设计三个文本框,单击相应的按钮,将两个文本框的数字做运算,在第三个文本框中显示结果。

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

OperationState=4;
m_number=0;
NumberState=2;
break; case IDC_NUMBER_Clear:
number1=number2=m_number=0;
UpdateData(FALSE);
NumberState=1;
break;
case IDC_NUMBER_Sqrt:
id2:一个连续范围的命令 ID 的结束值
memberFxn:该命令被映射到的消息处理函数的名字 使用这个宏把一个连续范围的命令 ID 映射到单个命令处理函数,ID 的范围从 id1 开始, 到 id2 结束。 注意:使用该宏时,要求 id1 到 id2 的命令 ID 必须是连续的,id1 最小,id2 最大,否 则可能有些命令 ID 不能映射,ID 值的定义见 resource.h 文件。 2)计算器为什么能够将数据或运算结果显示出来? 仔细观察我们在程序创建过程中添加的代码,可以发现,凡是能够即时显示输入数据或 计算结果的消息处理函数,其中必有一行这样的语句:UpdateData(FALSE)。这行语句的作 用就是即时刷新数据并在编辑框中显示。UpdateData 定义如下: CWnd::UpdateData
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP //添加代码
ON_COMMAND_RANGE(IDC_NUMBER1,IDC_NUMBER0,
OnNumberKey)
ON_COMMAND_RANGE(IDC_NUMBER_PlusMinus,
IDC_NUMBER_Equal,OnOperationKey)
5 程序说明及进一步的功能实现
1) ON_COMMAND_RANGE 程 序 中 一 个 消 息 响 应 函 数 可 以 对 应 一 个 ID 范 围 的 命 令 映 射 , 比 如 本 例 中 的 OnNumberKey 函数对应 IDC_NUMBER1 到 IDC_NUMBER10 的命令映射。这个功能主要是 通过 ON_COMMAND_RANGE 宏实现的。ON_COMMAND_RANGE 宏格式如下: ON_COMMAND_RANGE( id1, id2, memberFxn ) 参数说明:id1:一个连续范围的命令 ID 的起始值
5
OnNumberKey
IDC_NUMBER6
6
OnNumberKey
IDC_NUMBER7
7
OnNumberKey
IDC_NUMBER8
8
OnNumberKey
IDC_NUMBER9
9
OnNumberKey
IDC_NUMBER0
0
OnNumberKey
IDC_NUMBER_PlusMinus IDC_NUMBER_BackSpace IDC_NUMBER_Divide
+/退格 /
OnOperationKey OnOperationKey OnOperationKey
IDC_NUMBER_Multiply
*
OnOperationKey
IDC_NUMBER_Add
+
OnOperationKey
IDC_NUMBER_Subtract
-
OnOperationKey
IDC_NUMBER_Clear
break;
case IDC_NUMBER_Divide:
cal(); //如果连续计算
OperationState=1;
m_number=0;
NumberState=2;
break;
case IDC_NUMBER_Multiply: cal(); //如果连续计算
OperationState=2;
BOOL UpdateData( BOOL bSaveAndValidate = TRUE ); 参数说明:bSaveAndValidate:指明是要初始化对话框(FALSE)还是获取数据(TRUE) 的标志,即参数值为真时,将控件信息转换为变量数据;反之,将变量数据转化为控件信息。 输入数据或计算结果能够及时显示的另外一个重要原因是对话框的 DDX 和 DDV 机制。 DDX 和 DDV 机制是为了帮助对话框管理数据的实现函数。DDV(Dialog Data Validation) 机制用于数据验证有效性。DDX(Dialog Data Exchange)机制用于变量与对话框中的控件 双向交换数据。把 DDV 和 DDX 机制增加到对话框中的最简单最有效的方法是使用类向导 (ClassWizard)来添加控件的成员变量,控件与对话框控件关联的成员变量自动地使用了 MFC 提供的 DDV 和 DDX 机制。其工作方式是这样的:当你用 ClassWizard 把某变量和控 件连接起来时(通过 Member Variables 选项卡),它在数据映射中创建一个入口。实际上也 就是在对话框的 DoDataExchange 函数中添加一个入口函数(DoDataExchange 函数是 Class Wizard 产 生 和 维 护 的 函 数 )。 当 你 调 用 UpdateData ( FALSE ) 时 , MFC 调 用 DoDataExchange 函数,ClassWizard 放于 DoDataExchange 中的实现代码将把来自变量的数 据拷贝到对应的控件。如果调用 UpdateData(TRUE),MFC 反过来把数据拷贝回变量(并且 可能同时进行数据验证)。 3) 如何改变计算器的背景颜色? 在 对 话 框 的 OnPaint 函 数 中 直 接 填 充 背 景 色 。 打 开 对 话 框 的 实 现 文 件 “CalculatorDlg.cpp”,找到 void CCalculatorDlg::OnPaint()函数,添加如下粗体字所示的代 码: void CCalculatorDlg::OnPaint()
END_MESSAGE_MAP() //省略后面代码
ID 标识
表 8.1 按钮控件的 ID 标识和标题
标题
处理函数
IDC_NUMBER1
1
OnNumberKey
IDC_NUMBER2
2
OnNumberKey
IDC_NUMBER3
3
OnNumberKey
IDC_NR5
m_number=0;
NumberState=2;
case IDC_NUMBER_Add:
break; cal(); //如果连续计算
OperationState=3;
m_number=0;
NumberState=2;
break;
case IDC_NUMBER_Subtract: cal(); //如果连续计算
break;
}
} (7)在对话框类中定义如下变量:
double number1,number2;
//number1 和 number1 用于存储将要进行运算的数字 int NumberState,OperationState;
//NumberState 用于标示是将数值赋给 number1 或是 number2
else number2=m_number;
UpdateData(FALSE); break; case IDC_NUMBER_BackSpace: m_number=(int)m_number/10; if(NumberState==1)
number1=m_number; else
number2=m_number; UpdateData(FALSE);
图 8.1 编辑对话框资源界面
注意:控件的添加要按表 8.1 的顺序添加。 (3)在对话框类的头文件(CalculatorDlg.h)中添加用于数学计算的头文件:
#include "math.h" (4)添加按钮消息映射,在对话框类的定义中添加如下函数声明:
afx_msg void OnNumberKey(UINT nID); //处理数字键单击事件的消息响应函数 afx_msg void OnOperationKey(UINT nID);
实验计算器程序
1 实验目的
对话框是一种用户界面,它的主要功能是输出信息和接收用户的输入。 ◆ 掌握 MFC 的 CDialog 类和其运行机制,掌握各种控件的使用。 ◆ 学习使用对话框实现人机交互功能。
2 实验类型
综合型实验
3 实验内容及步骤
本实验的任务是实现一个简易计算器,该计算器具有简单的加减乘除功能。该计算器具 体实现步骤如下:
C
OnOperationKey
IDC_NUMBER_Sqrt
Sqrt
OnOperationKey
IDC_NUMBER_Derivative
1/X
OnOperationKey
IDC_NUMBER_Equal
=
OnOperationKey
(6)在对话框的实现文件中添加 OnNumberKey(UINT nID)和 OnOperationKey(UINT
nID)的实现代码。
void CCalculatorDlg::OnNumberKey(UINT nID) //响应数字键按下
{
int n=0;
switch(nID)
{ case IDC_NUMBER1:n=1;break; case IDC_NUMBER2:n=2;break; case IDC_NUMBER3:n=3;break; case IDC_NUMBER4:n=4;break; case IDC_NUMBER5:n=5;break; case IDC_NUMBER6:n=6;break; case IDC_NUMBER7:n=7;break; case IDC_NUMBER8:n=8;break; case IDC_NUMBER9:n=9;break; case IDC_NUMBER0:n=0;break; } if(NumberState==1) {
相关文档
最新文档