任务4

 

任务04——对四则运算小程一个序的进一步改进,并学习 Git 中 Branch 的用法

要求:在任务02基础上对四则运算程序增加以下功能

  1. 生成的算式中的运算数必须为自然数(0、1、2……)或真分数(1/2、4/5 等分子比分母小的分数)。
  2. 乘号用 × 表示;除号用 ÷ 表示,代替 / 号。
  3. 算式中,运算符与运算数之间必须加空格,但若是分数形式,则不需要,如:3 + 1/2 。
  4. 能随机生成 2~3 个运算符的算式,如:2 + 3 * 4 ,注意此算式的答案也必须按照运算优先级进行计算。
  5. 能生成带括号的算式,如 (2 + 3) * 4 和 3 / (4 + 2)。括号的运算优先级要高于加减乘除。
  6. 在用户输入答案后,除显示对错之外,还需要显示此题的正确答案。

通过Git中的创建一个(Branch)分支,并为其命新名字,最后实现上述功能后合并(Merge)到 master 分支中,作为原程序的0.2版。

任务02的四则运算程序中,我的思路是将数字封装起来,自定义了number类,其中将所有的数字看作分数(整数是分母为1的特殊分数,只不过在输出是不显示分母的)。我代码中算式的生成和运算是同时进行的,也就是说在生成算式的同时也已经考虑了运算的优先级。

在刘老师布置的任务4时,给予有关运算问题上的算法(调度场算法)和逆波兰表达式等参考知识点,我在这个任务的背景下去了解了相关知识,并计划用逆波兰表达式实现我的答案计算功能。在了解过程中,我发现逆波兰表达式和我上学期在数据结构中学习的中缀表达式的思路很像,都是运用了栈单口进出的特点,不过逆波兰表达式需要维护两个栈,一个用来存最后的逆波兰表达式,另一个用来暂时存放运算符(在最后逆波兰表达式生成后会被清空)。可是在实际操作过程中我发现,逆波兰表达式更适用于对已经生成好的完整算式的计算,才能较好的体现该算法的高效性。至于调度场算法是一种用于解析中缀表达式的算法,是将运算符和数字用中序遍历规定好的层次编号后,再按照层次编号进行运算(用二叉树能较直观的表现运算过程的层次关系)。

但为了我原代码的统一性和简洁性我并没有将逆波兰表达式加入我完善后的第3版四则运算的程序中。

学习路径:

1.逆波兰表达式:http://blog.csdn.net/geniusluzh/article/details/8192780

2.Java中Stack类的使用:http://docs.oracle.com/javase/7/docs/api/java/util/Stack.html

3.调度场算法:http://hczhcz.github.io/2014/02/27/shunting-yard-algorithm.html

以及上学期的中缀表达式和度娘上其他各路大神的指导

 

posted on 2017-03-20 13:26  Lexyguo  阅读(144)  评论(2编辑  收藏  举报

导航