C++实现可视化计算器 - 综合实验报告

一、问题描述和基本要求

2.1 从键盘上输入中缀算术表达式,包括括号,计算出表达式的值;

2.2 程序能对所输入的表达式作简单的判断,如表达式有错,能给出适当的提示;

2.3 能处理单目运算符,如-(负号)

2.4 撰写实验报告;

二、工具/准备工作

3.1 该实验中涉及的数据结构知识: 栈。

3.2 使用基于c++的qt开发环境。

3.3 运算规则:

1 先乘方,再乘除,最后加减;

2 同级运算从左算到右;

3 先括号内,再括号外。

三、分析与实现

4.1分析综合实验项目的实现方法(围绕基本要求)

(1)通过按键输入表达式

(2)首先检查表达式是否存在异常,若存在则标识异常

(3)若不存在异常则循环遍历表达式,定义变量记录操作数的前置符(是否为负),如果是数字的话继续看后面的是否还是数字,直到遇到操作符,这个操作数才压入操作数栈中,同时将运算符压入操作符栈中。

当栈顶为“(”且当前操作符为“)”时,将“(”出栈。

当遍历结束且操作符栈不为空,或者当前操作符优先级小于等于栈顶,又或者当前操作符为“)”且栈顶不为“(”时,将操作符出栈,并根据不同的操作符执行相应的计算,并压入操作数栈中。

继续循环直到表达式遍历结束且操作符栈为空。

(4)若标识非异常则将结果输出在文本框,若标识异常则输出提示。

4.2 采用适当的数据结构与算法(Why、What、How)

(1)数据结构:栈(存储操作符和操作数)、

字符数组(存储表达式)

(2)算法:while循环(遍历表达式)、

if-else(判断表达式异常)、

switch(根据不同操作符执行相应操作)

四、测试与结论

界面如下图所示:

 

数据的输入如果有问题就会报错:

例如输入8+9*(-

 

提示异常:

 

输入无误后计算:

 

结果无误:

 

五、综合实验总结

算法的重点和难点主要是判断异常以及双栈的操作。通过这次的实验编程一个简易计算器,使我充分学习理解了栈的相关应用。在实现过程中也遇到了些困难,例如关于qt的使用,Qstring与double和char *之间的转化,双栈的操作等等。

“成功没有快车道”,所有的成功,都来自不倦地努力和奔跑”,只有平时扎实学习,才能真正收获知识,感受学习的乐趣。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个基于Java Swing实现的简单计算器代码: ```java import java.awt.*; import javax.swing.*; import javax.swing.border.*; public class Calculator extends JFrame { private static final long serialVersionUID = 1L; private JTextField display; private double result; private String operator; private boolean start; private JPanel panel; public Calculator() { display = new JTextField("0", 12); display.setHorizontalAlignment(JTextField.RIGHT); display.setEditable(false); display.setBorder(new LineBorder(Color.BLACK)); result = 0; operator = "="; start = true; panel = new JPanel(new GridLayout(4, 4)); String[] buttons = { "7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", "0", ".", "+/-", "/" }; for (String button : buttons) { createButton(button); } add(display, BorderLayout.NORTH); add(panel, BorderLayout.CENTER); pack(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); } private void createButton(String label) { JButton button = new JButton(label); button.addActionListener(e -> { String input = button.getText(); if (input.equals(".")) { if (display.getText().indexOf(".") == -1) { display.setText(display.getText() + "."); } } else if (input.equals("+/-")) { double value = Double.parseDouble(display.getText()); if (value != 0) { value = -value; display.setText(Double.toString(value)); } } else if (input.equals("C")) { display.setText("0"); result = 0; operator = "="; start = true; } else { if (start) { if (input.equals("-")) { display.setText(input); start = false; } else { operator = input; } } else { double x = Double.parseDouble(display.getText()); calculate(x); operator = input; start = true; } } }); panel.add(button); } private void calculate(double x) { switch (operator) { case "+": result += x; break; case "-": result -= x; break; case "*": result *= x; break; case "/": result /= x; break; case "=": result = x; break; default: break; } display.setText(Double.toString(result)); } public static void main(String[] args) { Calculator calculator = new Calculator(); calculator.setVisible(true); } } ``` 这个计算器实现了简单的加减乘除运算、小数点输入、正负号切换、清除操作等功能。通过Java Swing提供的GUI组件,实现了一个漂亮的用户界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值