博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
个人作业1——四则运算题目生成程序(基于控制台)
阅读量:7080 次
发布时间:2019-06-28

本文共 2751 字,大约阅读时间需要 9 分钟。

1.分析与设计

a.题目要求:

写一个能自动生成小学四则运算题目的命令行 “软件”,满足以下需求:

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

运算符为 +, −, ×, ÷
并且要求能处理用户的输入,并判断对错,打分统计正确率。
要求能处理用户输入的真分数, 如 1/2, 5/12 等
使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
Myapp.exe -n 10
b.需求分析:

能够自动生成小学生加减乘除四则运算题目,包括整数和真分数的运算。其需求包括:(1)能够控制生成题目的个数。(2)判断对错并统计正确率

c.功能设计:

1.基本功能:实现基本的加减乘除四则运算。

2.扩展功能:能够处理真分数的四则运算。

3.高级功能:判断对错并统计正确率。

d.设计实现:

1.本实验采用java语言。

2.程序包含三个类:(1)Fraction:包括mole、deno两个属性,分别是构成分数的分子和分母。

(2)Calculate:包括FraAdd、FraSub、FraMul、FraDiv 四个方法,实现加、减、乘、除四则运算;

以及FraSim和Gcd两个方法,实现分数的化简及最大公约数的计算

(3)Test:主函数。可以根据输入的n,生成相应的题数;

获取用户的answer,通过与正确答案的比较,判断对错,用right记录。

e.代码说明:

求最大公约数:

public int Gcd(int a, int b) {        int temp, r;        if (a < b) {            temp = a;            a = b;            b = temp;        }        while (b != 0) {            r = a % b;            a = b;            b = r;        }        return a;    }}

分数化简:

public Fraction FraSim(Fraction f) {    int gcd = Gcd(f.deno, f.mole);    f.deno /= gcd;    f.mole /= gcd;    return f;}

整数运算:

sign = ran.nextInt(4);a = ran.nextInt(100);b = ran.nextInt(100);System.out.print(a);switch (sign) {case 0:    IntRes = a + b;    System.out.print("+");    break;case 1:    IntRes = a - b;    System.out.print("-");    break;case 2:    IntRes = a * b;    System.out.print("*");    break;case 3:    IntRes = a / b;    System.out.print("/");    break;}System.out.print(b + "=");answer = sc.nextInt();if (answer == IntRes) {    right++;}

分数运算:

sign = ran.nextInt(4);f1.deno = ran.nextInt(50) + 1;f1.mole = ran.nextInt(50);f2.deno = ran.nextInt(50) + 1;f2.mole = ran.nextInt(50);System.out.print(f1.mole + "/" + f1.deno);switch (sign) {case 0:    FraRes = cal.FraAdd(f1, f2);    System.out.print("+");    break;case 1:    FraRes = cal.FraSub(f1, f2);    System.out.print("-");    break;case 2:    FraRes = cal.FraMul(f1, f2);    System.out.print("*");    break;case 3:    FraRes = cal.FraDiv(f1, f2);    System.out.print("/");    break;}System.out.print(f2.mole + "/" + f2.deno + "=");FraAns = sc.next();fras = FraAns.split("/");FraM = Integer.parseInt(fras[0]);FraD = Integer.parseInt(fras[1]);if (FraM == FraRes.mole && FraD == FraRes.deno) {    right++;}

f.测试运行

2.展示psp 

PSP2.1 Personal Software Process Stages Time (h) Senior Student Time (h)
Planning 计划 1 1.5
Estimate 估计这个任务需要多少时间 10 13
Analysis 需求分析 (包括学习新技术) 0.5 1

Coding

Standard

代码规范 2 1.5
Design 具体设计 2 3
Coding 具体编码 5 6
Test 测试(自我测试,修改代码,提交修改) 1 2
Reporting 报告 1 1.5

 

 

3.小结

a.在实验过程中,由于java知识的遗忘,导致时常需要查阅资料,用时过长,需多加巩固练习。 

b.在实验主要遇到的问题是随机数的生成,后采用Random类的nextInt()方法获取。

c.在生成题目时,将整数和分数分成两种类型运算,导致无法进行整数与分数的计算。

d.在用户输入中,没有进行异常的处理,还需加强完善。

e.通过本次实验,进一步提升了我在编程中分析问题,解决问题的能力,希望有今后的实验中有更多的进步。

 

4.具体代码

https://git.coding.net/PerryJennings/pro1.git

 

转载于:https://www.cnblogs.com/zp2018/p/8683997.html

你可能感兴趣的文章
cxf构建webservice的两种方式
查看>>
mysql远程链接 方法和flush-hosts
查看>>
vc++基础班[28]---动态数组及动态链表的讲解
查看>>
在Windows Server 2008 R2中使用web方式修改域用户账户密码
查看>>
ibatis 开发中的经验 (一)ibatis 和hibernate 在开发中的理解
查看>>
基础总结篇之中的一个:Activity生命周期
查看>>
django signal
查看>>
铁打的营盘,流水的兵
查看>>
c# 利用结构体获取json数据
查看>>
转 RMI、RPC、SOAP通信技术介绍及比对
查看>>
个人博客之路
查看>>
欢迎访问github地址,并指出项目中的缺陷和BUG
查看>>
Linux操作系统下三种配置环境变量的方法
查看>>
iOS Crash 分析(文二)-崩溃日志组成
查看>>
24个 HTML5 & CSS3 下拉菜单效果及制作教程
查看>>
EasyUI 鼠标经过 显示气泡一例
查看>>
quick -- 添加按钮
查看>>
Android PackageInstaller 安装和卸载
查看>>
java中浮点数的比较(double, float)(转)
查看>>
Tomcat:基于HTTP协议的Connector配置
查看>>