个人作业1——四则运算题目生成程序(基于控制台)

一.题目描述:

1.除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24

2.运算符为 +, −, ×, ÷

3.并且要求能处理用户的输入,并判断对错,打分统计正确率。

4.要求能处理用户输入的真分数, 如 1/2, 5/12 等

5.使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目

6.Myapp.exe -n 10

二.需求分析:

1.能随机生成整数和分数的四则运算

2.能够判断用户的回答是否正确,并计算其准确率

3.能用参数控制生成题目个数

三.功能设计:

1.随机产生四则运算符

2.随机产生整数或真分数

3.根据用户需求确定出题数目

4.处理用户输入并判断正误,计算正确率

四.代码说明:

1.随机分数生成方法

public static int[] createFraction(){    
int[] n = new int[2];
    int n1 = (int)(Math.random()*10+1);
    int n2 = (int)(Math.random()*10+1);
    if(n1 != n2){
        n[0] = n2;
        n[1] = n1;
    }else
        createFraction();
    return n;
}
2.辗转相除法求最大公约数函数

int maxGYS(int a,int b){

    return a%b==0?b:maxGYS(b,a%b);

}

int minGBS(int a,int b)

{

    int min, max;

    int r;

    max=a>b?a:b;

    min=a<b?a:b;

    if(max%min==0)

        return max;

    while(max%min!=0)

    {

        r=max%min;

        max=min;

        min=r;

    }

    return a*b/min;

}

3.四则运算

int a = (int)(Math.random()*4+1);
            if(a==1){//
                Question.add("("+fn1[0]+"/"+fn1[1]+")+("+fn2[0]+"/"+fn2[1]+")=");
                int sum = gbs/fn1[1]*fn1[0] + (gbs / fn2[1]*fn2[0]);
                int gys1 = GCD(sum,gbs);
                Answer.add(sum/gys1+"/"+gbs/gys1+"");//化简结果并存储
            }
            if(a==2){//
                Question.add("("+fn1[0]+"/"+fn1[1]+")-("+fn2[0]+"/"+fn2[1]+")=");
                int cha = gbs/fn1[1]*fn1[0] - (gbs / fn2[1]*fn2[0]);
                int gys2 = GCD(cha,gbs);
                Answer.add(cha/gys2+"/"+gbs/gys2+"");
            }
            if(a==3){//
                Question.add("("+fn1[0]+"/"+fn1[1]+")×("+fn2[0]+"/"+fn2[1]+")=");
                int mult1 = fn1[0]*fn2[0]; 
                int mult2 = fn1[1]*fn2[1];
                int gys3 = GCD(mult1,mult2);
                Answer.add(mult1/gys3+"/"+mult2/gys3+"");//
            }
            if(a==4){//
                Question.add("("+fn1[0]+"/"+fn1[1]+")÷("+fn2[0]+"/"+fn2[1]+")=");
                int div1 = fn1[0]*fn2[1]; //转化为乘法
                int div2 = fn1[1]*fn2[0];
                int gys4 = GCD(div1,div2);
                Answer.add(div1/gys4+"/"+div2/gys4+"");
            }               
        }

五.测试运行

PSP展示:

 

PSP2.1 Personal Software Process Stages Time (%) Senior Student Time (%)
Planning 计划 10 8
· Estimate 估计这个任务需要多少时间 30 32
Development 开发 25 23.5
· Analysis 需求分析 (包括学习新技术) 6 10
· Design Spec 生成设计文档 5 6
· Design Review 设计复审 4 6
· Coding Standard 代码规范 3 2.5
· Design 具体设计 5 4.5
· Coding 具体编码 36 21
· Code Review 代码复审 3 2
· Test 测试(自我测试,修改代码,提交修改) 8 7
Reporting 报告 2 2.5
· 测试报告 4 6
· 计算工作量 2 1
· 并提出过程改进计划 4 3.5

 

 

总结:

看到代码实在是头痛,自己的编程能力太弱,一开始拿到题目不知道怎么入手,网上查找了很多资料,才慢慢理清思路,先构思需要的程序公共,再逐步去完成。但是代码实现得并不好,在编程的过程中,碰到许多问题,应该多找找资料,逐步去解决。学习新东西,应该要有耐心。

posted on 2017-03-08 09:48  justly  阅读(180)  评论(1编辑  收藏  举报