码迷,mamicode.com
首页 > 其他好文 > 详细

四则运算【校园宿舍】

时间:2019-03-20 17:21:25      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:包含   时间   比较   之间   小数   service   区别   color   符号   

匿名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(毕竟刚好在学这个还一直再用)。
20300)道题即是while循环。

四则运算即是abcd四个数,大小用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

四则运算【校园宿舍】

标签:包含   时间   比较   之间   小数   service   区别   color   符号   

原文地址:https://www.cnblogs.com/von-wunder-er/p/10565915.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!