个人作业1——四则运算题目生成程序(基于控制台)
一、需求分析
(1)除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24;
(2)运算符为 +, −, ×, ÷;
(3)并且要求能处理用户的输入,并判断对错,打分统计正确率;
(4)要求能处理用户输入的真分数, 如 1/2, 5/12 等。
二、功能设计
(1)基本功能:
需求分析的基础需求的全部
(2)扩展功能:
对于错误答案的四则算式,输出正确答案
三、设计实现
(1)能够实现生成整数和分数的式子并实现计算;
(2)能够控制生成式子的个数;
(3)能够实现判断对错并计算正确率。
四、代码说明
(1)求最大公约数
int getNumerator(){ return numerator; } int getDenominator(){ return denominator; } int f(int a,int b){ if(a < b){ int c = a; a = b; b = c; } int r = a % b; while(r != 0){ a = b; b = r; r = a % b; } return b; }
(2)加减乘数四则运算
Calculate add(Calculate r){ int a = r.getNumerator(); int b = r.getDenominator(); int newNumerator = numerator * b + denominator * a; int newDenominator = denominator * b; Calculate result = new Calculate(newNumerator,newDenominator); return result; } Calculate sub(Calculate r){ int a = r.getNumerator(); int b = r.getDenominator(); int newNumerator = numerator * b - denominator * a; int newDenominator = denominator * b; Calculate result = new Calculate(newNumerator,newDenominator); return result; } Calculate muti(Calculate r){ int a = r.getNumerator(); int b = r.getDenominator(); int newNumerator = numerator * a; int newDenominator = denominator * b; Calculate result = new Calculate(newNumerator,newDenominator); return result; } Calculate div(Calculate r){ int a = r.getNumerator(); int b = r.getDenominator(); int newNumerator = numerator * b; int newDenominator = denominator * a; Calculate result = new Calculate(newNumerator,newDenominator); return result; }
(3)主函数随机生成运算题,由答题者输入计算答案,系统判定对错,若为错则给出正确答案
public class Test { public static void main(String[] args) { int x,i; System.out.println("请输入题目的数量"); Scanner scan=new Scanner(System.in); x=scan.nextInt(); String shu[]=new String [x]; int z1,z2,P,m1,m2; System.out.println("请输入分母的大小范围"); P=scan.nextInt(); for(i=0;i<x;i++){ m1=1+(int)(Math.random()*P);//随机生成一个小于B的分母 z1=1+(int)(Math.random()*m1);//生成一个比分母小的分子,实现真分数 m2=1+(int)(Math.random()*P);//随机生成一个小于B的分母 z2=1+(int)(Math.random()*m2);//生成一个比分母小的分子,实现真分数 int c=(int)(Math.random()*3);//生成运算符 Calculate r1=new Calculate(z1,m1); Calculate r2=new Calculate(z2,m2); Calculate result=new Calculate(); if(c == 0){ int a,b; System.out.println(z1+"/"+m1+"+"+z2+"/"+m2+"="); result=r1.add(r2); a = result.getNumerator(); b = result.getDenominator(); Scanner sc0 = new Scanner(System.in); String c1 = sc0.nextLine(); String c2=(a+"/"+b); if(c1.equals(c2)) System.out.println("回答正确"+"\n"); else System.out.println("回答错误"+"\n"+"运算结果为:"+a+"/"+b); } if(c == 1){ int a,b; System.out.println(z1+"/"+m1+"-"+z2+"/"+m2+"="); result=r1.sub(r2); a = result.getNumerator(); b = result.getDenominator(); Scanner sc1 = new Scanner(System.in); String c1 = sc1.nextLine(); String c2=(a+"/"+b); if(c1.equals(c2)) System.out.println("回答正确"+"\n"); else System.out.println("回答错误"+"\n"+"运算结果为:"+a+"/"+b); } if(c == 2){ int a,b; System.out.println(z1+"/"+m1+"x"+z2+"/"+m2+"="); result=r1.muti(r2); a = result.getNumerator(); b = result.getDenominator(); Scanner sc2 = new Scanner(System.in); String c1 = sc2.nextLine(); String c2=(a+"/"+b); if(c1.equals(c2)) System.out.println("回答正确"+"\n"); else System.out.println("回答错误"+"\n"+"运算结果为:"+a+"/"+b); } if(c == 3){ int a,b; System.out.println(z1+"/"+m1+"÷"+z2+"/"+m2+"="); result=r1.div(r2); a = result.getNumerator(); b = result.getDenominator(); Scanner sc3 = new Scanner(System.in); String c1 = sc3.nextLine(); String c2=(a+"/"+b); if(c1.equals(c2)) System.out.println("回答正确"+"\n"); else System.out.println("回答错误"+"\n"+"运算结果为:"+a+"/"+b); } } } }
(5)结果展示
(6)总结
这次代码是软件工程的第一个作业,也是我大学以来真正自己绞尽脑汁写的代码,感受真的不太一样,虽然没有按时提交作业,但是助教的理解和鼓励给了我很多支持,还有舍友的不断帮忙,一起完成了这份代码,感谢!因为有了自己的思考而完成的代码,虽然在很多优秀的同学看来不过是很简单普通的代码,但是对于自己的意义却是完全不一样的,这份代码让我开始敢于迈出自我编程的第一步。加油!