匿名25 匿名39
【声明!】
本博客内容仅为学校要求提交的内容,所有包含着此声明的博文或多或少为“学业要求”的产品,与个人所想展现的想法无关,所有含此声明的博文将在毕业后存档删除。
若因此行为而给大家带来了不快,本人深表歉意。
以下正文
Program vs. Software/Service
一、没错这是一个作业要求
小学老师要每周给同学出300道四则运算练习题。
这个程序有很多种实现方式。
C/C++
C#/VB.net/java
Excel
Unix Shell
Emacs/Powershell/Vbscnpt
Python
两个运算符100以内的数字,不需要写答案。【估计时同t】
现在估计写这个程序需要的时间
马上把代码写出来
需要写答案,并且保证答案在0 100之间【估计时间t】
二、题目理解
300道运算题,此300实际上只是表示多并没有要求什么其他内容,为了方便显示定义为20道。
四则运算,无非就是加减乘除,复合算术或是单符号运算均可,实现符合运算可以用random.range()随即决定运算数量与符号,额外加一个除法判定可以杜绝小数运算,如果目标对象是不会负数的小学生可以对生成题目的答案进行判定,若小于零则删除重置算术。
运算符100以内,这是约束。
保证答案0-100之内,这是约束,与判定是否为小数运算或负数运算一致。
三、程序设计
设计语言选定为Java(毕竟刚好在学这个还一直再用)。
20(300)道题即是while循环。
四则运算即是a、b、c、d四个数,大小用Math.random()*y随即定义,大小随y的不同而范围不同。
符号则用0 1 2 3 决定加减乘除,同样也用Math.random()*3定义,根据情况的不同输出不同的值,并对该值进行判定,查看是否符合要求,若符合则输出题目记录答案,不符合则重置。
答案记录,选定输出,da[i] i++变量记录,手动决定输出与否。
四、时间预估
针对运算,因为全数随机,出现负值,小数运算的概率比较大,加法过百的概率也很大,所以万一运气不好出题可能会缓慢,但是总时间上不成问题。
初版开发单符号运算不出答案十分简单预期15分钟完成编辑周期。
再版开发多符号运算显示答案本质上与上述代码没有区别,也就多7+1+4行,预计20分钟完成【毕竟初代在设计时已经完成了数字&符号的随机与答案判断,所以再版与初版等于没有差异】。
五、设计代码&运行显示
import java.util.*; public class jisuan { public static String yuefen(int a,int b){ int y = 1; for(int i=a;i>=1;i--){ if(a%i==0&&b%i==0){ y = i; break; } } int z = a/y; int m = b/y; if(z==0) { return "0"; } return ""+z+"/"+m; } public static void main(String[] args) { int x,y,i,a1; int d1=0; String d = null; System.out.println("1、整数计算式,2、真分数计算式"); Scanner scan1=new Scanner(System.in); a1=scan1.nextInt(); if(a1==1){ System.out.println("请输入题目的数量"); Scanner scan2=new Scanner(System.in); x=scan2.nextInt(); int daan[]=new int [x]; System.out.println("请输入数值的范围"); y=scan2.nextInt(); for(i=0;i<x;i++){ int a=(int)(Math.random()*y); int b=(int)(Math.random()*y); int c=(int)(Math.random()*3); if(c==0) { d1=a+b; System.out.print(a+"+"+b+"= "); } if(c==1) { d1=a-b; System.out.print(a+"-"+b+"= "); } if(c==2) { d1=a*b; System.out.print(a+"*"+b+"= "); } if(c==3) { d1=a/b; System.out.print(a+"/"+b+"= "); } if((i+1)%3==0){ System.out.println(); } daan[i]=d1; } System.out.println("是否显示答案(显示请输入1)"); if(scan2.nextInt()==1){ for(i=0;i<x;i++){ System.out.print(daan[i]+" "); } } } if(a1==2){ int M,Z; System.out.println("请输入题目的数量"); Scanner scan2=new Scanner(System.in); x=scan2.nextInt(); String daan[]=new String [x]; int x1,x2,B,m1,m2; System.out.println("请输入分母数值的范围"); B=scan2.nextInt(); for(i=0;i<x;i++){ m1=1+(int)(Math.random()*B); x1=1+(int)(Math.random()*m1); m2=1+(int)(Math.random()*B); x2=1+(int)(Math.random()*m2); int c=(int)(Math.random()*3); if(c==0){ Z=x1*m2+x2*m1; M=m1*m2; d=yuefen(Z,M); System.out.print(x1+"/"+m1+"+"+x2+"/"+m2+"= "); } if(c==1){ Z=x1*m2-x2*m1; M=m1*m2; d=yuefen(Z,M); System.out.print(x1+"/"+m1+"-"+x2+"/"+m2+"= "); } if(c==2){ Z=x1*x2; M=m1*m2; d=d=yuefen(Z,M); System.out.print(x1+"/"+m1+"*"+x2+"/"+m2+"= "); } if(c==3){ Z=m1*x2; M=m2*x1; d=d=yuefen(Z,M); System.out.print(x1+"/"+m1+"/"+x2+"/"+m2+"= "); } if((i+1)%3==0){ System.out.println(); } daan[i]=d; } System.out.println("是否显示答案(显示请输入1)"); if(scan2.nextInt()==1){ for(i=0;i<x;i++){ if((i+1)%3==0) { System.out.println(); } System.out.println(daan[i]+" "); } } } } }
jisuan
六、增量开发
上述初版代码满足了以下内容:
随机值、整数运算、无小数除法、指定计算数范围、出题数量、选择显示答案。
增量开发内容【实际上是板块啦……】
多符号运算
char[] operator=new char[]{‘+‘,‘-‘,‘*‘,‘/‘}; Random random=new Random(); ArrayList<String>expression=new ArrayList<String>(); for(int i=0;i<num;i++){ int n=random.nextInt(3)+3; int[] number=new int[n+1]; String ex=new String(); for(int j=0;j<=n;j++){ number[j]=random.nextInt(100)+1; } for(int j=0;j<n;j++){ int s=random.nextInt(4); ex+=String.valueOf(number[j])+String.valueOf(operator[s]); if(s==3){number[j+1]=decide(number[j],number[j+1]); } } ex+=String.valueOf(number[n]); expression.add(ex); }
mode1
除法优化
private static int decide(int x,int y){ Random random=new Random(); if(x%y!=0){ y=random.nextInt(100)+1; return decide(x,y); } else{ return y; } }
mode2
七、参考文献
耿祥义 张跃平 Java2实用教程(第五版)[M] 清华大学出版社
以上——OVER
原文地址:https://www.cnblogs.com/von-wunder-er/p/10565915.html