个人作业1——四则运算题目生成程序

时间:2022-05-09 21:57:16

Coding地址:

https://git.coding.net/lianlian/96.1.git

题目:能自动生成小学四则运算题目的命令行 “软件”

第一部分:

a.需求分析:

  1. 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
  2. 运算符为 +, −, ×, ÷
  3. 并且要求能处理用户的输入,并判断对错,打分统计正确率。
  4. 要求能处理用户输入的真分数, 如 1/2, 5/12 等
  5. 使用 -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测试运行:

 个人作业1——四则运算题目生成程序

 

 

第二部分:

展示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

 

第三部分:

小结:在百度加同学的帮助之下终于完成了这次的作业,程序主要实现基本的四则运算,不能支持多个运算符,代码真的需要不断地练习与尝试。