个人作业1——四则运算题目生成程序
Coding地址:
https://git.coding.net/lianlian/96.1.git
题目:能自动生成小学四则运算题目的命令行 “软件”
第一部分:
a.需求分析:
- 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
- 运算符为 +, −, ×, ÷
- 并且要求能处理用户的输入,并判断对错,打分统计正确率。
- 要求能处理用户输入的真分数, 如 1/2, 5/12 等
- 使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
Myapp.exe -n 10
b.功能设计:
基本功能:实现简单的四则运算出题
扩展功能:验证对错,如果错误显示正确答案并统计正确率
高级功能:能够进行记时
c.设计实现:
分数类 Fraction:
属性:numerator//分子
denominator//分母
方法:creatfraction() //创建分数
GCD(int m, int n) //计算最大公约数
Reduction(int m, int n) //约分
compare(String m, String n) //比较输入结果与答案
计算类 Calculator:
方法:add(Fraction a, Fraction b) //加法
sub(Fraction a, Fraction b) //减法
mul(Fraction a, Fraction b)//乘法
div(Fraction a, Fraction b)//除法
运行类 Test:
main函数执行
d.代码说明:
计算公约数:
public static int GCD(int m, int n) {//辗转相除法 while (m % n != 0) { int t = m % n; m = n; n = t; } return n; }
约分:
public static String Reduction(int m, int n) //约分 { String t; if (n == 1) { t = m + ""; } else { t = (m) + "" + "/" + (n) + ""; } return t; }
加法运算:
public static String add(Fraction a, Fraction b) //加法 { int m = a.getNumerator() *b.getDenominator() + a.getDenominator() * b.getNumerator(); int n = a.getDenominator() * b.getDenominator(); int t = Fraction.GCD(m,n); return Fraction.Reduction(m / t, n / t); }
减法运算:
public static String sub(Fraction a, Fraction b)//减法 { int m = a.getNumerator() * b.getDenominator() - a.getDenominator() * b.getNumerator(); int n = a.getDenominator() * b.getDenominator(); int t = Fraction.GCD(m,n); return Fraction.Reduction(m / t, n / t); }
乘法运算:
public static String mul(Fraction a, Fraction b)//乘法 { int m = a.getNumerator() * b.getNumerator(); int n = a.getDenominator() * b.getDenominator(); int t = Fraction.GCD(m,n); return Fraction.Reduction(m / t, n / t); }
除法部分 :
public static String div(Fraction a, Fraction b)//除法 { int m = a.getNumerator() * b.getDenominator(); int n = a.getDenominator() * b.getNumerator(); int t = Fraction.GCD(m,n); return Fraction.Reduction(m / t, n / t); }
验证对错,如果错误显示正确答案:
public static boolean compare(String m, String n) //比较输入结果与答案 { if (m.equals(n)) {System.out.println("恭喜你,回答正确!"); return true;} else { System.out.println("回答错误,再接再厉,正确答案是:" + n); return false; } }
统计正确率、记时:
public class Test { @SuppressWarnings("resource") public static void main(String[] args) { Fraction f1 = new Fraction(); Fraction f2 = new Fraction(); int operator; int right=0,wrong=0; String answer; Scanner s1 = new Scanner(System.in); System.out.println("请输入想要完成的题目数 :"); int i = s1.nextInt(); long begin = System.currentTimeMillis();
...
long end = System.currentTimeMillis(); long hour = (end - begin)/3600000; long minute = (end - begin-hour*36000000)/60000; long second = (end - begin-hour*36000000-minute*60000)/1000; double total = (double)right+wrong; System.out.println("\n您已完成练习!"); System.out.println("你所用的时间是:" + hour+"小时"+minute+"分钟"+ second+"秒"); System.out.println('\n'+"一共有"+i+"题"+" ,"+"做对"+right+"题"+" ,"+"做错"+wrong+"题"); System.out.printf("正确率:%f",right/total *100 ); System.out.println("%"); } }
e测试运行:
第二部分:
展示PSP:
PSP2.1 |
Personal Software Process Stages |
Time (%) Senior Student |
Time (%) |
Planning |
计划 |
2h |
2h |
· Estimate |
估计这个任务需要多少时间 |
40h |
43h |
· Analysis |
需求分析 (包括学习新技术) |
4h |
5h |
· Coding Standard |
代码规范 |
1.5h |
2h |
· Design |
具体设计 |
3h |
2h |
· Coding |
具体编码 |
27h |
30h |
· Test |
测试(自我测试,修改代码,提交修改) |
1.5h |
1h |
Reporting |
报告 |
1h |
1h |
第三部分:
小结:在百度加同学的帮助之下终于完成了这次的作业,程序主要实现基本的四则运算,不能支持多个运算符,代码真的需要不断地练习与尝试。