一、问题描述和基本要求
【问题描述】
设计一个简单的算术表达式计算器。
【基本要求】
实现标准整数类型的四则运算表达式的求值(包含括号,可多层嵌入).
【测试数据】
(30+2*70)/3-12*3
5+(9*(62-37)+15)*6
要求自行设计非法表达式,进行程序测试,以保证程序的稳定运行。
【实现提示】
可以设计以下辅助函数
static isNumber(char ReadInChar); //视ReadInchar 是否是数字而返回 TRUE 或 FALSE 。
int TurnToInteger(char IntChar); // 将字符’0’.’9’ 转换为整数 9
二、问题分析和任务定义
问题的分析:
本次实验的核心问题就是在于计算顺序的问题,如何让我们的程序去按照正确的顺序来计算一个简单的算术表达式。
1.运算顺序思想:首先我们知道符号运算顺序,即括号优先,其次乘除,再者加减,同级从左到右;
2.从左到右阅读运算:举个例子【2*3+4-2*(5+6)/4】从向右读取,分别读到“2”,“*”,“3”,这时已经已经有一个算术表达式了,即【2*3】,这时我们要根据之后的符号要判断我们是否要计算这个表达式,并且进行其他的操作;
3.符号运算顺序规则:
(1)读取到括号时将括号内内容优先计算出来,然后取代原括号运算式的位置;
(2)读取到运算符时比较其与紧接的前后两个运算符的优先级,若均优先,进行计算,否则进行搁置;
(3)读取到‘#’时若其紧接的前面的算术运算符为‘#’则表示结束,否则对前接符号进行出栈运算;
(4)读取到‘+’,‘-’,若其前接运算符为‘#’则搁置入栈,否则将其前接符号弹出运算;
(5)读取到’x’,’/’,若其前接运算符为‘x’或’/'则将其前接符号进行出栈运算,否则搁置入栈;
(6)读取到‘(’进行直接进行搁置入栈;
(7)读取到‘)’,若其前接符号为‘(’则将两个符号都销毁。否则将其前接符号出栈运算。
三、逻辑设计
1.变量的类型说明
Main类 | 进行算术表达式的计算和交互页面的设计 |
stack栈堆类 | 存储数字或者字符 |
2.函数说明
math(char a,int b,int c) | 基础计算函数 |
preemption(char a,char b) | 优先权比较函数 |
isNumber(char ReadInChar) | 检查字符是否为数字 |
main(String[] args) | 主函数用于界面设计和各种函数调用 |
四、物理设计
int math(char a, int b, int c){}
int preemption(char a, char b){}
boolean isNumber(char ReadInChar){}
main(String[] args){} class Stack(堆栈类 构造方法(类型,大小)类型通过D与C来决定是double型还是char}