一、问题描述和基本要求
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 *之间的转化,双栈的操作等等。
“成功没有快车道”,所有的成功,都来自不倦地努力和奔跑”,只有平时扎实学习,才能真正收获知识,感受学习的乐趣。