小学生四则运算JAVA

点我,github地址

组员:黄浩格,何坤

一、项目说明

1题目:实现一个自动生成小学四则运算题目的命令行程序。

2说明:

自然数: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为算术表达式。

3需求:

  1. 使用 -n 参数控制生成题目的个数,例如

Myapp.exe -n 10

将生成10个题目。

  1. 使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围,例如

Myapp.exe -r 10

将生成10以内(不包括10)的四则运算题目。该参数可以设置为1或其他自然数。该参数必须给定,否则程序报错并给出帮助信息。

  1. 生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1 − e2的子表达式,那么e1 ≥ e2。

  2. 生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数。

  3. 每道题目中出现的运算符个数不超过3个。

  4. 程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。例如,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,它们之间不能通过有限次交换变成同一个题目。

其中真分数在输入输出时采用如下格式,真分数五分之三表示为3/5,真分数二又八分之三表示为2’3/8。

  1. 在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件,格式如下:

  2. 答案1
  3. 答案2

特别的,真分数的运算如下例所示:1/6 + 1/8 = 7/24。

  1. 程序应能支持一万道题目的生成。

  2. 程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计

二、PSP表格

小学生四则运算JAVA

三、设计思路

1、将整数统一为分数形式,利用random随机生成数和符号,以字符串数组的方式存储(一个数组只包含一个分数或者一个符号),编写加减乘除算法。

2、在 题目 文件的控制台输入 题目数 数的上限 ,就可生成对应题目在 题目.txt,对应答案存放在 正确答案.txt 文件中,学生在 学生答案.txt中输入每题答案,对错和分数在 成绩分数.txt中呈现。

四、代码实现

小学生四则运算JAVA

小学生四则运算JAVA

小学生四则运算JAVA

小学生四则运算JAVA

小学生四则运算JAVA

小学生四则运算JAVA

小学生四则运算JAVA

小学生四则运算JAVA

小学生四则运算JAVA

小学生四则运算JAVA

小学生四则运算JAVA

小学生四则运算JAVA

五、测试结果

小学生四则运算JAVA

小学生四则运算JAVA

小学生四则运算JAVA

小学生四则运算JAVA

小学生四则运算JAVA

六、总结

1、一开始想从整数入手,后来发现很多算法不适用于分数,于是再将整数化为分数,再重写各种算法。

2、有两三个要求没有实现,比如括号和运算过程不能出现负数,而且生成题目速度较慢,以后会努力尽量改进这些。

3、写代码的时间分配不是很好,有时写两三小时,有时只有半个钟,分工不是很明确,下次会注意的。

上一篇:四则运算Java语言实验设计过程1


下一篇:算法笔记_156:算法提高 6-17复数四则运算(Java)