需求分析:
- 自然数:0, 1, 2, …。
- 真分数:1/2, 1/3, 2/3, 1/4, 1’1/2, …。
- 运算符:+, −, ×, ÷。
- 括号:(, )。
- 等号:=。
- 分隔符:空格(用于四则运算符和等号前后)。
- 算术表达式:
- e := n | e1 + e2 | e1 − e2 | e1 × e2 | e1 ÷ e2 | (e),
其中e, e1和e2为表达式,n为自然数或真分数。 - 四则运算题目:e = ,其中e为算术表达式。
功能设计
功能:
1.生成随机数n
2.生成随机运算符
3.组成算数表达式
4.计算题目结果并输出文档
5.比较答案并给出错误题号
主要分为以下几个类,
1.生成随机数类,因为我们知道在c#里面,生成的随机数非常不随机。
它采用系统当前的硬件信息、系统启动时间和当前精确时间这些毫秒级的东西作为填充因子,
但这些东西在微观下都一样,尤其是瞬间生成好几个随机数的时候会产生几个一模一样的
不随机的随机数
2.产生随机题目
3.记录文档类
4.生成逆波兰表达式类
5.计算类
效果是这样的
查重的功能我并没有用树来实现,一个原因是懒,一个原因是感觉没有必要,另外也对树的操作不熟悉无所适从。我是直接对逆波兰表达式开刀,因为本质上就是树的后序遍历,所以就算
建了一棵树操作上也差不多,就检测(+|*)前面两个若是数字,就比个大小,大的放前面。要不是数字就不用管了,最后比较一下加工的逆波兰表达式。
实际上程序里貌似用不上这个,因为生成两个相似的式子概率太小了。。。。
码云地址https://gitee.com/JMUCarlYin/homework_one.git