一、题目描述
- 使用 -n 参数控制生成题目的个数,例如
Myapp.exe -n 10 -o Exercise.txt
将生成10个题目。 - 使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围,例如
Myapp.exe -r 10
将生成10以内(不包括10)的四则运算题目。该参数可以设置为1或其他自然数。该参数必须给定,否则程序报错并给出帮助信息。 - 生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数。
- 每道题目中出现的运算符个数不超过3个。
- 程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。
生成的题目存入执行程序的当前目录下的Exercises.txt文件,格式如下:- 四则运算题目1
- 四则运算题目2
……
其中真分数在输入输出时采用如下格式,真分数五分之三表示为3/5,真分数二又八分之三表示为2’3/8。
- 在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件,格式如下:
- 答案1
- 答案2
特别的,真分数的运算如下例所示:1/6 + 1/8 = 7/24。
- 程序应能支持一万道题目的生成。
- 程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计,并会输出所有题目中重复的题目,输入参数如下:
Myapp.exe -e.txt -a .txt -o Grade.txt
二、需求分析
本程序实现的是自动生成不同难度的四则运算表达式题目的程序,支持批改正误。由用户先输入选择整数或者真分数的四则运算,其中1为整数四则运算,2为真分数四则运算。紧接着系统接受用户输入需生成的题目数量,支持大数量题目,最后输入生成数的范围(max)值。所生成的题目将写入文件保存。用户逐题写入答案,系统评判正误,如果正确则进入下一题作答直至结束,若错误则可选择重新作答或直接显示答案,程序能逐题匹配给出正误。系统还能够进行查重选择消除重复的生成题目。
三、功能设计
基本功能:用户选择不同类型的四则运算题目,选择所需生成的题目数量,由后台生成相应类型数目的题目让用户逐个作答并判断正误,用户可根据系统的提示逐步完成作答。
扩展功能:可以添加出题人和作答人的角色,出题人可选择召集多个作答人形成一个小组,并能获取他们的答题情况,出题人还可以设置不同难度的进阶题目。
四、设计实现
Calculation.java:主要生成题目、答题类
-public static String reductionofFraction(int a, int b)//分数约分
-int answer[] = new int[x + 2];//整数题目存放答案,X为题目总数
int correctCount1[] = new int[x + 2];//整数题目统计正确题目编号
int wrongCount1[] = new int[x + 2];///整数题目统计错误题目编号
int correct1 = 0;///整数题目统计正确题目总数
int wrong1 = 0;///整数题目统计错误题目总数
-File流写Question&Answer文件
-同理真分数……
-int answer1[] = new int[x + 2];//整数题目存放答案,X为题目总数
int correctCount2[] = new int[x + 2];//整数题目统计正确题目编号
int wrongCount2[] = new int[x + 2];///整数题目统计错误题目编号
int correct2 = 0;///整数题目统计正确题目总数
int wrong2 = 0;///整数题目统计错误题目总数
-File流写Question&Answer文件
test.testCalculation:测试类
test.Stack:堆栈将生成表达式由中缀转后缀
五、测试运行
1.程序开始运行(控制台)
2.系统要求用户选择不同难度的题目,1是整数四则运算,2是真分数四则运算
3.用户选择生成的题目数以及难度
4.开始逐题作答
5.回答正确
6.回答错误
7.结束
8.题目写入保存文件
六、PSP设计
七、源代码:
https://gitee.com/Miyano0227/java-20180331Calculation
八、小结
当前程序实现了的整数真分数四则运算,能让用户作答并得到正误结果,但对于真分数运算仍有不妥当之处,要求用户输入分数的答案进行正误评判。另查重这块仍然有小bug,后缀转二叉树保存的条件需要完善,使得遍历能保证题目不重复。查重原理思想是将后缀表达式转换为二叉树的形式转储,在转储期间添加条件限制,将数往下方叶节点存放,符号根据优先级的不同由高到低存放在上方根节点。查重即深度遍历二叉树进行匹配。