课堂练习之四则运算加强版
2015-03-15 13:43
190 查看
一、程序设计题目要求和设计思想
1、题目
(1)、题目避免重复;
(2)、可定制(数量/打印方式);
(3)、可以控制下列参数: 是否有乘除法、是否有括号、 数值范围、加减有无负数、除法有无余数、否支持分数 (真分数, 假分数, …)、是否支持小数 (精确到多少位)、打印中每行的间隔可调整;
2、设计思想
1、题目避免重复; 2、可定制(数量/打印方式): 3、可以控制下列参数(是否有乘除法,是否有括号,数值范围,加减有无负数,除法有无余数、是否支持分数(真分数,假分数)):
设计思路:
1、(任意自定义题目个数)通过输入的数字对应for循环的次数,
2、(是否有乘除法)
3、(是否支持分数)(有/否:1/0):
这两个放在一起实现,两个组合一起可以有四种方式,00,01,10,11
分别对应case语句中的选项,在选则时,0、1是加法,2、3是减法,4、5是乘法,6、7是除法,
奇数是可以产生分数的,
当00时,选择0和2,
当01时,选择1,2,3,4;
当10时,选择0,2,4,6;
当11时,选择全部。
4、(数值的范围) 将传进来的数num3直接当作指数进行运算,产生该数位的最大和最小两个数字,
并通过random_2方法,产生两数之间的随机数。
自定义两数之间的随机数方法random_2思路:
1、先随机产生小于较大数的随机数, 2、判断该随机数是否大于较小数, 3、如果大于则返回该数,否则就通过循环产生另一个随机数,重复判断。
二、程序源代码
三、运算结果截图
(只有加减法,没有分数,所有的数都是四位的)
[b]
[/b]
(有乘除,没分数,两位数运算)
(有乘除,也有分数,两位数)
(在自定义数的位数,输入1,就是产生小于1000的随机数)
四、总结
在对该程序进行修改的过程中,只实现了一部分的功能,虽然可以做一些简单的定制功能,
还存在不少的缺陷和bug,比如没有实现小数的运算,但是我感觉比较好的就是,
可以自定义两个数,产生这两个数之间的随机数,希望在下面可以继续将本程序
再加改进,功能更加完善。
时间安排:
一、项目计划总结:
周活动总结表
姓名: 日期:
阶段时间和效率 周数(上一次周活动表的周数+1):
不包括上一周在内的累计时间
以前各周的累计时间
二、时间记录表:
学生 郭健豪 日期 2015.3.15
教师 王建民 课程 PSP
三、缺陷记录日志:
学生 郭健豪
日期 2015.3.15
教员 王建民
程序号
1、题目
(1)、题目避免重复;
(2)、可定制(数量/打印方式);
(3)、可以控制下列参数: 是否有乘除法、是否有括号、 数值范围、加减有无负数、除法有无余数、否支持分数 (真分数, 假分数, …)、是否支持小数 (精确到多少位)、打印中每行的间隔可调整;
2、设计思想
1、题目避免重复; 2、可定制(数量/打印方式): 3、可以控制下列参数(是否有乘除法,是否有括号,数值范围,加减有无负数,除法有无余数、是否支持分数(真分数,假分数)):
设计思路:
1、(任意自定义题目个数)通过输入的数字对应for循环的次数,
2、(是否有乘除法)
3、(是否支持分数)(有/否:1/0):
这两个放在一起实现,两个组合一起可以有四种方式,00,01,10,11
分别对应case语句中的选项,在选则时,0、1是加法,2、3是减法,4、5是乘法,6、7是除法,
奇数是可以产生分数的,
当00时,选择0和2,
当01时,选择1,2,3,4;
当10时,选择0,2,4,6;
当11时,选择全部。
4、(数值的范围) 将传进来的数num3直接当作指数进行运算,产生该数位的最大和最小两个数字,
并通过random_2方法,产生两数之间的随机数。
自定义两数之间的随机数方法random_2思路:
1、先随机产生小于较大数的随机数, 2、判断该随机数是否大于较小数, 3、如果大于则返回该数,否则就通过循环产生另一个随机数,重复判断。
二、程序源代码
/* 需求:每天出30道四则运算题目给小学生做 */ import java.util.*; class Rand { public static void sop(Object obj) { System.out.print(obj); } public static int random_1(int n)//随机产生一个0--n之间的数 { return new Random().nextInt(n); } public static int random_2(int n1,int n2)//产生n1--n2随机数的方法 { int temp = 0,b = 0; while((temp=new Random().nextInt(n2))>=n1)//如果产生的随机数大于n1,就将其返回,否则就继续 { b = temp; } if(b==0) b = b + 2*n1; return b; } public static void main(String[] args) { sop("<---小学生二年级课后作业,每天30道四则运算练习--->"); System.out.print("\r\n1、请输入今日想完成的题目数量:"); Scanner sc = new Scanner(System.in); int num = sc.nextInt(); System.out.print("\r\n2、请选择是否有乘除运算:(有/否:1/0):"); Scanner sc1 = new Scanner(System.in); int num1 = sc1.nextInt(); System.out.print("\r\n3、请选择是否需要真分数运算:(有/否:1/0):"); Scanner sc2 = new Scanner(System.in); int num2 = sc2.nextInt(); System.out.print("\r\n4、请输入每行打印的个数:"); Scanner sc4 = new Scanner(System.in); int num4 = sc4.nextInt(); System.out.print("\r\n5、请选择需要几位数的运算:(请输入大于1的位数,\r\n如不需要定制,输入1,随机产生不大于1000的运算):"); Scanner sc3 = new Scanner(System.in); int num3 = sc3.nextInt() - 1; int count = 0,d1,d2,k1,k2,k3,k4;//计数器 for (int i=0;i<num ;i++ ) { if(num3==0)//如果输入为1,就将随机产生不大于1000的数 { d1 = random_1(1000); d2 = random_1(1000); k1 = random_1(1000); k2 = random_1(1000); k3 = random_1(1000); k4 = random_1(1000); } else { d1 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1);//自定义的产生随机数 d2 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1); k1 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1); k2 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1); k3 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1); k4 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1); } int k = 0,r = 0;//声明两个变量 if(num1==0 && num2==0)//都没有 { r = random_1(4); if(r%2!=0)//将产生的奇数随机数取出 k=r; if(k==0)//即使已经将k判断为奇数了,但还是会等于0,所以就再判断一次,如果为0,就将其+1; ++k; } else if(num1==0 && num2==1)//没乘除,有分数 k = random_1(4); else if(num1==1 && num2==0)//有乘除,没分数 { r = random_1(8); if(r%2!=0) k=r; if(k==0) ++k; } else//都有 k = random_1(8); switch(k)//前两个是加法,2,3是减法,4,5是乘法,6,7是除法 { case 0: sop(zhenfenshu(k1,k2)+" + "+zhenfenshu(k3,k4)+" = \t"); break; case 1: sop(d1+" + "+d2+" = \t"); break; case 2: sop(zhenfenshu(k1,k2)+" - "+zhenfenshu(k3,k4)+" = \t"); break; case 3: jianfa(d1,d2); break; case 4: sop(zhenfenshu(k1,k2)+" * "+zhenfenshu(k3,k4)+" = \t"); break; case 5: sop(d1+" * "+d2+" = \t"); break; case 6: sop(zhenfenshu(k1,k2)+" ÷ "+zhenfenshu(k3,k4)+" = \t"); break; case 7: chufa(d1,d2); break; default: sop("duang,duang,daung"); break; } count++; if(count%num4==0) System.out.println(); } sop("以上共有:"+count+"道题。"); } public static void jianfa(int a,int b)//因为小学二年级没有学负数,所以相减不能为负数 { if(a>=b) sop(a+" - "+b+" = \t"); else { sop(b+" - "+a+" = \t"); } } public static void chufa(int a,int b)//为了使除法有意义,除数不能为零, { if(b>0) sop(a+" ÷ "+b+" = \t"); //如果除数为零,就将其加上10,再进行运算 else { b = b + 10; sop(a+" ÷ "+b+" = \t"); } } public static String zhenfenshu(int a,int b)//产生真分数的方法 { if(a<=b) return a+"/"+b; else return b+"/"+a; } }
三、运算结果截图
(只有加减法,没有分数,所有的数都是四位的)
[b]
[/b]
(有乘除,没分数,两位数运算)
(有乘除,也有分数,两位数)
(在自定义数的位数,输入1,就是产生小于1000的随机数)
四、总结
在对该程序进行修改的过程中,只实现了一部分的功能,虽然可以做一些简单的定制功能,
还存在不少的缺陷和bug,比如没有实现小数的运算,但是我感觉比较好的就是,
可以自定义两个数,产生这两个数之间的随机数,希望在下面可以继续将本程序
再加改进,功能更加完善。
时间安排:
一、项目计划总结:
周活动总结表
姓名: 日期:
日期 任务 | 听课 | 编写程序 | 阅读课本 | 准备考试 | 日总计 | ||
周日 | |||||||
周一 | |||||||
周二 | 100 | 30 | 30 | 160 | |||
周三 | 150 | 30 | 180 | ||||
周四 | 120 | 40 | 160 | ||||
周五 | 100 | 120 | 40 | 160 | |||
周六 | 180 | 40 | 220 | ||||
周总结 | 200 | 600 | 180 | 980 |
不包括上一周在内的累计时间
总计 | 200 | 600 | 180 | 980 | |||
平均 | 200 | 600 | 180 | 980 | |||
最大 | 200 | 600 | 180 | 980 | |||
最小 | 200 | 600 | 180 | 989 |
总计 | |||||||
平均 | |||||||
最大 | |||||||
最小 |
学生 郭健豪 日期 2015.3.15
教师 王建民 课程 PSP
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
3.10 | 19:20 | 20:00 | 10 | 30 | 编程 | |
3.11 | 15:00 | 18:20 | 50 | 150 | 编程、看书 | |
3.12 | 18:30 | 21:30 | 20 | 160 | 编程、看书 | |
3.13 | 19:00 | 21:30 | 20 | 130 | 编程、看书 | |
3.14 | 9:00 | 11:20 | 30 | 180 | 编程。看书 | |
学生 郭健豪
日期 2015.3.15
教员 王建民
程序号
日期 | 编号 | 类型 | 引入阶段 | 排除阶段 | 修复时间 | 修复缺陷 |
3.11 | ||||||
想自定义一个方法,可以随机输入两个数,产生这两个数之间的随机数,但是不能将得到的这个数返回,这个问题一直困扰着我。 | ||||||
3.12 | ||||||
在今天晚上,我继续想昨天的这个没有解决的问题,经过将近一个小时的思考和调试,最终我给设了一个中间变量,将该数给返回出来, |
相关文章推荐
- 3月10号周二课堂练习:关于自动生成四则运算题目的程序的延伸
- 课堂练习之每天出30道四则运算题目
- 3月10号周二课堂练习:四则运算二
- 3月17号周二课堂练习:四则运算三
- 软件工程课堂练习--四则运算(三)
- 课堂练习之扩展每天30道四则运算题----思路
- java小练习(实现分数的四则运算)
- 软件工程概论第一次课堂小测-------产生30个100以内的随机整数四则运算的小程序
- 3月06号周五课堂练习:随机产生30个思则运算的题目
- 软件工程课堂练习四则运算续篇
- 软件工程随堂练习——随机四则运算
- 练习5.1更新——四则运算 测试与封装
- 四则运算加强版
- java小练习(实现分数的四则运算)
- 30道四则运算题目---课堂作业--软件工程c++
- 练习5.1——四则运算 测试与封装
- 四则运算界面练习
- 练习5.1更新——四则运算 测试与封装
- 随手一写,简单的四则运算练习
- 软件工程课堂作业(二)——升级版随机产生四则运算题目设计思想