实验报告---计算器
实验报告 计算器程序

实验报告学生姓名:学号:专业班级:网络工程实验类型:□验证□综合■设计□创新实验日期:10.4.5 实验成绩:实验2:栈和队列一、实验目的深入了解栈和队列的特性,学会在实际问题下灵活运用它们。
二、问题描述表达式求值运算是实现程序设计语言的基本问题之一,也是栈应用的一个典型例子。
设计并演示用算符优先级对算术表达式的求解过程。
三、实验要求1、算法优先级别如下:'+', '-', '*', '/', '(', ')', '#''+' '>', '>', '<', '<', '<', '>', '>','-' '>', '>', '<', '<', '<', '>', '>','*' '>', '>', '>', '>', '<', '>', '>','/' '>', '>', '>', '>', '<', '>', '>','(' '<', '<', '<', '<', '<', '=', ' ',')' '>', '>', '>', '>', ' ', '>', '>','#' '<', '<', '<', '<', '<', ' ', '='2、以字符序列的形式从终端输入语法正确、不含变量的算术表达式,利用给出的算符优先级关系,实现对算术四则混合运算的求解过程。
运算器实验报告

运算器实验报告实验背景运算器是计算机中一种重要的基本逻辑电路,用于进行算术和逻辑运算。
本次实验旨在设计一个基于逻辑门的4位二进制加法器,以实现两个4位二进制数的加法运算。
实验设备与材料1. 逻辑门:AND门、OR门、XOR门、NOT门2. 电路连接线3. 电压源4. 实验板5. 4个开关、8个LED灯实验原理在二进制数的加法中,我们需要对每一位进行逐个相加,并考虑进位的情况。
对于两个4位二进制数的加法,我们可以将其划分为4个单独的位加法运算,再结合进位的情况进行计算。
实验步骤1. 连接电路:根据逻辑门的真值表和逻辑方程,使用电路连接线将逻辑门按照设计要求连接在一起。
2. 设计输入:使用4个开关分别表示两个4位二进制数的每一位输入。
3. 设计输出:使用8个LED灯分别表示两个4位二进制数的每一位输出和进位。
4. 进行实验:按照设计的输入情况,观察LED灯的亮灭情况,验证加法器的正确性。
5. 记录结果:将实验结果记录在实验报告中。
实验结果与分析实验中,我们设计的4位二进制加法器成功实现了两个4位二进制数的加法运算。
通过观察LED灯的亮灭情况,我们可以判断出加法器的计算是否正确。
在实验过程中,我们发现在某些情况下,LED灯的亮灭可能存在短暂的闪烁现象,这是因为逻辑门的切换速度限制导致的,不会影响加法器的正常运算结果。
实验总结通过本次实验,我们深入理解了运算器的工作原理,并成功设计并实现了一个基于逻辑门的4位二进制加法器。
在实验中,我们熟悉了逻辑门的连接方法,并通过观察LED灯的亮灭情况验证了加法器的正确性。
此外,在实验中我们也发现了逻辑门的切换速度限制会导致LED 灯的闪烁现象。
在实际应用中,我们需要根据逻辑门的性能要求选择适当的门延迟时间,以保证运算器的稳定工作。
总体而言,本次实验对于我们理解运算器的工作原理,掌握逻辑门的应用具有重要意义。
我们相信通过进一步的学习和实践,我们能够设计出更加复杂和高效的运算器,为计算机的发展做出更大的贡献。
电工实验报告 加法计算器

姓名班级 1 学号
实验日期节次教师签字成绩
加法计算器
1.实验目的
熟悉掌握有关时序逻辑电路的组成原理;
通过设计一个简单的计算器,掌握组合逻辑电路、时序逻辑电路的分析和设计方法;
了解及掌握中规模集成电路,了解各个芯片的管脚图及结构图。
能够掌握全加器、计数器等的功能及实现方法;
锻炼自己的动手实践能力,并自己设计电路,培养自己的兴趣。
2.总体设计方案或技术路线
设计一个多功能计算器,它能实现简单的加法运算,只能显示结果为0—16的和数,并能够在数码管上显示,加法运算的实现要求:用四个开关代表四位二进制数,操纵开关,输入二进制数码,则在对应的数码管1上会显示出相应的十进制数,即代表被加数;用同样的方法在另外的四个开关上输入二进制数,则在对应的数码管2上还会出现相应的十进制数,即代表加数;当加数与被加数都输入后,在数码管3和数码管4上出现两数的和,两个数码管可以显示到和的十位。
3.实验电路图
4.仪器设备名称、型号和技术指标
直流稳压电源、试验箱、万用表;
2个74LS00D、1个74LS283D、1个74LS04D、2个74LS08D、1个74LS20D;
单刀双掷开关9个、导线若干。
大学计实验报告算机

大学计实验报告算机一、引言计算机实验是大学计算机专业主要的实践环节之一,旨在培养学生动手能力和解决实际问题的能力。
本实验报告将介绍我在大学计算机实验课程中进行的一项实验项目,以及实验过程中的设计思路、实验方法和实验结果等。
二、实验目的本次实验的目的是设计一个简单的计算器程序,实现基本的四则运算功能。
通过这个实验,我们将学习和掌握编程语言中的基本语法、算法设计和软件开发流程等知识。
三、实验环境和工具本次实验的环境是使用C++编程语言,在Windows操作系统下进行开发。
我们使用了Visual Studio代码编辑器和编译器。
四、实验内容我们的计算器程序需要满足以下要求:1.可以进行两个整数之间的加、减、乘、除运算;2.能够处理异常输入,例如除数为0;3.对用户的输入进行合法性检查,确保输入的是数字或者合法的运算符;4.提供友好的用户界面,即使是非技术人员也能够使用;5.可以进行多次计算,直到用户主动选择退出。
五、实验设计为了实现上述要求,我们按照以下步骤进行实验设计:1.设计程序的整体架构,确定分为输入、处理和输出三个模块;2.编写输入模块的代码,读取用户的输入并进行合法性检查;3.编写处理模块的代码,根据用户输入的运算符进行相应的运算;4.编写输出模块的代码,将计算结果显示在用户界面上;5.测试程序是否能够正确处理各种输入情况,并进行错误输入的异常处理。
六、实验步骤1.创建一个新的C++项目,并设置好相关的编译选项;2.编写程序的主要逻辑,包括输入、处理和输出模块;3.编写输入模块的代码,根据用户的输入进行合法性检查;4.编写处理模块的代码,根据运算符进行相应的运算;5.编写输出模块的代码,打印出计算结果;6.进行功能测试和异常输入测试,确保程序的正确性和鲁棒性;7.对程序进行性能测试,评估程序的性能。
七、实验结果经过多次测试和调试,我们的计算器程序能够正确处理各种输入情况,并能够返回正确的计算结果。
东南大学虚拟仪器实验报告-(计算n!,计算器)

东南大学生物科学与医学工程学院虚拟仪器实验报告第二次实验实验名称:程序结构专业:生物医学工程姓名:学号:同组人员:学号:实验室: 综合楼716实验时间:10月14日评定成绩:审阅教师:一、计算n的阶乘 (3)1实验题目 (3)2实验目的 (3)3实验内容 (3)4设计方案选择、方案的优缺点。
(3)5软件设计: (3)6调试: (6)7测试结果和分析。
(6)8使用说明: (7)9结束语、总结、心得体会。
(7)二、实现加减乘除的计算器 (7)1实验题目 (7)2实验目的 (7)3实验内容 (7)4设计方案选择、方案的优缺点。
(7)5软件设计: (8)6调试: (9)7测试结果和分析 (10)8使用说明: (10)9结束语、总结、心得体会。
(10)一、计算n的阶乘1实验题目完成计算n的阶乘2实验目的①前面板数字控制器可随意输入n的值,并能显示结果(注:0!=1)。
②For循环中重复时间不少于100ms(即程序每100ms循环一次)。
3实验内容⑴学习while、For循环的使用方法。
⑵学习移位寄存器的概念,学习移位寄存器的使用。
⑶学习使用Case结构,学习添加和删除分支。
4设计方案选择、方案的优缺点。
计算n的阶乘的计算器方案选择:利用循环语句,进行数字n的阶乘运算,利用移位寄存器实现数据的传送完成数字连乘。
利用时间计时器的差值得出程序运行所用时间。
能够简洁明了的实现计算n的阶乘的功能,数据正确。
5软件设计:虚拟仪器设计步骤详细介绍。
(1)程序前面板设计:数值输入控件:名称:输入n 属性:双精度(DBL)用途:面向用户,手动输入n值数值显示控件:名称:n!的值属性:双精度(DBL)用途:显示n!运算结果名称:运行时间(ms)属性:双精度(DBL)用途:显示程序运行时间面板的布局:。
(2)框图程序设计:程序流程图:源程序:6调试:调试步骤:使用高亮执行该段程序,观察数据流的动向。
调试中问题:一开始使用整型,对于较小数值,结算结果正确,但对于较大的数值计算结果错误。
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结果正确,程序无误。
实验报告计算器
实验报告||实验名称计算器课程名称面向对象程序设计(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;}}。
计算器实验报告
实验一计算器的制作一.实验要求1.参照Windows系统提供的计算器功能,制作一个自己的计算器,至少能完成数据的加减乘除的基本功能。
2.控件的焦点以及Tab键的设置和使用3.多个控件(按钮)事件的共享4.键盘的事件的应用二.设计思路1、首先要考虑将输入的内容在textbox上显示出来。
所以整个过程采用全局变量input来记录用户输入的内容(计算器的按键输入或者键盘输入)。
然后再将input的内容显示到textbox上。
2、接下来就是怎么去将用户的输入变成数字和运算符的问题了。
本实验的计算器有“普通运算”和“科学运算”之分。
所以在计算的时候需要判断是哪一种运算,用radioButton.Checked来判断。
3、如果是普通的运算,“+”、“-”、“*”、“/”的优先级一样,所以算法比较简单,只需要将input字符串的内容分割成运算符和数字,然后再push到两个不同的栈中。
其中数字要先转换为double类型,再存入到栈中。
4、如果是科学运算,则需要按照来“+”、“-”、“*”、“/”的优先级来进行运算。
我是运用堆栈来实现的。
算法如下:每当用户点击“+”、“-”、“*”、“/”中的任何一个键时,则进行判断,如果是“*”、“/”,则将“*”、“/”之前的一个数变成double类型,然后再存入栈中。
然后设置乘号的标识符flag1为true,或者设置除号的标识符flag2为true。
如果用户点击的是“+”、“-”,则先判断flag1,flag2是否为true,如果为true,则从栈中pop一个数,然后与当前用户输入的数进行计算,然后再push到栈中,并把“+”、“-”也存入到另一个栈中;如果为false,则将“+”、“-”之前的一个数变为double,然后存入栈中,把“+”、“-”也存入到另一个栈中。
5、当用户点击“=”号的时候,则对两个栈进行运算。
由于实验还要求可以支持键盘输入。
所以需要对Input进行判断。
mfc计算器实验报告
mfc计算器实验报告MFC计算器实验报告引言MFC(Microsoft Foundation Class)是微软公司开发的一套用于开发Windows 应用程序的类库。
MFC计算器是使用MFC类库开发的一个简单的计算器应用程序,它可以进行基本的加减乘除运算。
在本实验中,我们将对MFC计算器进行实验,测试其功能和性能。
实验目的1. 测试MFC计算器的基本功能,包括加法、减法、乘法和除法运算。
2. 测试MFC计算器的界面设计和用户交互体验。
3. 测试MFC计算器在不同输入情况下的稳定性和准确性。
实验方法1. 打开MFC计算器应用程序。
2. 依次进行加法、减法、乘法和除法运算,记录运算结果。
3. 测试MFC计算器在输入不同类型的数字和符号时的反应。
4. 测试MFC计算器在输入非法字符时的反应。
5. 测试MFC计算器在进行连续多次运算时的稳定性。
实验结果1. MFC计算器的加法、减法、乘法和除法运算均能正常进行,并且结果准确。
2. MFC计算器的界面设计简洁明了,用户交互体验良好。
3. MFC计算器在输入不同类型的数字和符号时能够正确识别并进行运算。
4. MFC计算器在输入非法字符时能够给出相应的提示并不进行计算。
5. MFC计算器在进行连续多次运算时稳定性良好,没有出现崩溃或错误的情况。
结论通过本次实验,我们测试了MFC计算器的功能和性能,结果表明MFC计算器具有良好的稳定性和准确性,界面设计简洁明了,用户交互体验良好。
MFC计算器是一个功能齐全、稳定可靠的计算器应用程序,适合进行日常的简单运算操作。
在未来的开发中,可以进一步完善MFC计算器的功能,提高其性能和用户体验。
参考文献无。
简易计算器实验报告
简易计算器实验报告一、实验目的本次实验的目的是设计并实现一个简易计算器,能够进行基本的四则运算(加、减、乘、除),以及处理括号的优先级运算,提高对程序设计和逻辑思维的理解与应用能力。
二、实验原理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、结果分析对于简单的四则运算表达式,计算器能够正确计算出结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告课程名称:java程序设计题目:计算器院(系):信息与控制工程专业班级:计算机1202姓名:张金涛学号:120620226指导教师:张翔2014年12 月17 月一、实验目的1.熟悉java图形用户界面的设计原理和程序结构2.能设计复核问题要求的图形用户界面程序3.熟悉java awt和swing的组合4.掌握常用组建的事件借口5.会应用awt和swing组件进行应用程序设计二、实验环境装有jdk及eclipse的计算机一台三、实验内容使用java编写出具有基本计算功能的计算器,要求具有用户图形界面。
四、代码及注释import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.Vector;public class CalcullatorApp{String str1 = "0"; // 运算数1 初值一定为0String str2 = "0"; // 运算数2初值一定为0String fh = "+"; // 运算符String jg = "";// 结果// 状态开关重要int k1 = 1;// 开关1 用于选择输入方向将要写入str2或 str2int k2 = 1;// 开关2 符号键次数 k2>1说明进行的是2+3-9+8 这样的多符号运算int k3 = 1;// 开关3 str1 是否可以被清0 ==1时可以 !=1时不能被清0int k4 = 1;// 开关4 str2 同上int k5 = 1;// 开关5 控制小数点可否被录入 ==1时可以 !=1 输入的小数点被丢掉JButton jicunqi; // 寄存器记录是否连续按下符号键Vector vt = new Vector(20, 10);JFrame frame = new JFrame("计算器"); //创建一个新的、初始不可见的、具有指定标题的 Frame。
JTextField jg_TextField = new JTextField(jg, 20); //20列JButton clear_Button = new JButton("清除");JButton button0 = new JButton("0");JButton button1 = new JButton("1");JButton button2 = new JButton("2");JButton button3 = new JButton("3");JButton button4 = new JButton("4");JButton button5 = new JButton("5");JButton button6 = new JButton("6");JButton button7 = new JButton("7");JButton button8 = new JButton("8");JButton button9 = new JButton("9");JButton button_Dian = new JButton(".");JButton button_jia = new JButton("+");JButton button_jian = new JButton("-");JButton button_cheng = new JButton("*");JButton button_chu = new JButton("/");JButton button_dy = new JButton("=");////////////////////////////////////////////////////////////////////// public static void main(String[] args){CalcullatorApp tuo = new CalcullatorApp();}/////////////////////////////////////////////////////////////////////// CalcullatorApp(){button0.setMnemonic(KeyEvent.VK_0);// 等效键// 其它等效键略,jg_TextField.setHorizontalAlignment(JTextField.RIGHT);// 文本框右对齐JPanel pan = new JPanel();pan.setLayout(new GridLayout(4, 4, 5, 5));// 四行四列边距为5像素pan.add(button7);pan.add(button8);pan.add(button9);pan.add(button_chu);pan.add(button4);pan.add(button5);pan.add(button6);pan.add(button_cheng);pan.add(button1);pan.add(button2);pan.add(button3);pan.add(button_jian);pan.add(button0);pan.add(button_Dian);pan.add(button_dy);pan.add(button_jia);pan.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));// pan 对象的边距JPanel pan2 = new JPanel();pan2.add(jg_TextField);JPanel pan3 = new JPanel(); // 为什么要多此一句呢?因为我不会设置按钮的大小pan3.setLayout(new FlowLayout());pan3.add(clear_Button);// clear_Button.setSize(10,10);//设置清零按钮的大小吗的不好使!!frame.setLocation(300, 200); // 主窗口出现在位置frame.setResizable(false); // 不能调大小frame.getContentPane().setLayout(new BorderLayout());//面板方位frame.getContentPane().add(pan2, BorderLayout.NORTH); frame.getContentPane().add(pan, BorderLayout.CENTER); frame.getContentPane().add(pan3, BorderLayout.SOUTH);//frame.add(pan2, BorderLayout.NORTH);//frame.add(pan, BorderLayout.CENTER);//frame.add(pan3, BorderLayout.SOUTH);frame.pack();frame.setVisible(true);// 以上是控件和布局// 下面是事件处理程序// --------------- 数字键 --------------class JianTing implements ActionListener{public void actionPerformed(ActionEvent e){String ss = ((JButton) e.getSource()).getText();jicunqi = (JButton) e.getSource();vt.add(jicunqi);if (k1 == 1){if (k3 == 1){str1 = "";k5 = 1;// 还原开关k5状态}str1 = str1 + ss;// k2=1;k3 = k3 + 1;// System.out.println(str1);jg_TextField.setText(str1);// 显示}else if (k1 == 2){if (k4 == 1){str2 = "";k5 = 1; // 还原开关k5状态}str2 = str2 + ss;// k2=2;k4 = k4 + 1;// /////////////测试////////////////jg_TextField.setText(str2);}}}// --------符号-----------class JianTing_fh implements ActionListener{public void actionPerformed(ActionEvent e){String ss2 = ((JButton) e.getSource()).getText();jicunqi = (JButton) e.getSource();vt.add(jicunqi);if (k2 == 1){k1 = 2;// 开关 k1 为1时,向数1写为2时,向数2写k5 = 1;fh = ss2;k2 = k2 + 1;// 按符号键的次数}else{int a = vt.size();JButton c = (JButton) vt.get(a - 2);if (!(c.getText().equals("+"))&& !(c.getText().equals("-"))&& !(c.getText().equals("*"))&& !(c.getText().equals("/"))){yuns();str1 = jg;k1 = 2;// 开关 k1 为1时,向数1写为2时,向数2写k5 = 1;k4 = 1;fh = ss2;}k2 = k2 + 1;}}}// --------清除-------class JianTing_clear implements ActionListener{public void actionPerformed(ActionEvent e){jicunqi = (JButton) e.getSource();vt.add(jicunqi);k5 = 1;k2 = 1;k1 = 1;k3 = 1;k4 = 1;str1 = "0";str2 = "0";fh = "";jg = "";jg_TextField.setText(jg);vt.clear();}}// ----------------等于 ---------------------class JianTing_dy implements ActionListener{public void actionPerformed(ActionEvent e){jicunqi = (JButton) e.getSource();vt.add(jicunqi);yuns();k1 = 1; // 还原开关k1状态// str1=jg;k2 = 1;k3 = 1;// 还原开关k3状态k4 = 1; // 还原开关k4状态str1 = jg; // 为7+5=12 +5=17 这种计算做准备}}// ----------------小数点 ---------------------class JianTing_xiaos implements ActionListener{public void actionPerformed(ActionEvent e){jicunqi = (JButton) e.getSource();vt.add(jicunqi);if (k5 == 1) {String ss2 = ((JButton) e.getSource()).getText();if (k1 == 1) {if (k3 == 1) {str1 = "";k5 = 1; // 还原开关k5状态}str1 = str1 + ss2;// k2=1;k3 = k3 + 1;// System.out.println(str1);jg_TextField.setText(str1);// 显示} else if (k1 == 2){if (k4 == 1){str2 = "";k5 = 1; // 还原开关k5状态}str2 = str2 + ss2;// k2=2;k4 = k4 + 1;// /////////////测试////////////////jg_TextField.setText(str2);}}k5 = k5 + 1; //}}// 注册监听器JianTing_dy jt_dy = new JianTing_dy();JianTing jt = new JianTing();// 临听数字键JianTing_fh jt_fh = new JianTing_fh();// 临听符号键JianTing_clear jt_c = new JianTing_clear(); // 清除键JianTing_xiaos jt_xs = new JianTing_xiaos();// 小数点键button7.addActionListener(jt);button8.addActionListener(jt);button9.addActionListener(jt);button_chu.addActionListener(jt_fh);button4.addActionListener(jt);button5.addActionListener(jt);button6.addActionListener(jt);button_cheng.addActionListener(jt_fh);button1.addActionListener(jt);button2.addActionListener(jt);button3.addActionListener(jt);button_jian.addActionListener(jt_fh);button0.addActionListener(jt);button_Dian.addActionListener(jt_xs);button_dy.addActionListener(jt_dy);button_jia.addActionListener(jt_fh);clear_Button.addActionListener(jt_c);// 关闭事件处理程序frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}// ---------------计算------------------public void yuns(){double a2;// 运算数1double b2;// 运算数2String c = fh;// 运算符double jg2 = 0;// 结果if (c.equals("")){// System.out.println("请输入运算符");jg_TextField.setText("请输入运算符");}else{System.out.println("str1:" + str1);// 调试时使用System.out.println("str2:" + str2);// 调试时使用System.out.println("运算符:" + fh);// 调试时使用if (str1.equals(".")) //字符串"."转换成double型数据时会出错所以手工转str1 = "0.0";if (str2.equals("."))str2 = "0.0";a2 = Double.valueOf(str1).doubleValue();b2 = Double.valueOf(str2).doubleValue();System.out.println("double型的a2:" + a2); //调试时使用System.out.println("double型的b2:" + b2); //调试时使用if (c.equals("+")){jg2 = a2 + b2;}if (c.equals("-")){jg2 = a2 - b2;}if (c.equals("*")){jg2 = a2 * b2;}if (c.equals("/")){if (b2 == 0) {jg2 = 0;} else {jg2 = a2 / b2;}}System.out.println("double型a2" + fh + "b2结果:" + jg2);System.out.println();jg = ((new Double(jg2)).toString());jg_TextField.setText(jg);}}}五、运行结果六、实验总结通过对计算器窗体的编写我熟悉java图形用户界面的设计原理和程序结构熟悉java awt和swing的组合。