zoukankan      html  css  js  c++  java
  • 课堂练习之四则运算加强版

    一、程序设计题目要求和设计思想

    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、如果大于则返回该数,否则就通过循环产生另一个随机数,重复判断。

    二、程序源代码

      1 /*
      2 需求:每天出30道四则运算题目给小学生做
      3 */
      4 import java.util.*;
      5 class Rand
      6 {
      7     public static void sop(Object obj)
      8     {
      9         System.out.print(obj);
     10     }
     11     public static int random_1(int n)//随机产生一个0--n之间的数
     12     {
     13         return new Random().nextInt(n);
     14     }
     15 
     16     public static int random_2(int n1,int n2)//产生n1--n2随机数的方法
     17     {        
     18         int temp = 0,b = 0;
     19         while((temp=new Random().nextInt(n2))>=n1)//如果产生的随机数大于n1,就将其返回,否则就继续
     20         {
     21             b = temp;            
     22         }    
     23         if(b==0)
     24             b = b + 2*n1;
     25         return b;
     26     }
     27 
     28     public static void main(String[] args) 
     29     {
     30         sop("<---小学生二年级课后作业,每天30道四则运算练习--->");
     31 
     32         System.out.print("
    1、请输入今日想完成的题目数量:");
     33         
     34         Scanner sc = new Scanner(System.in);
     35         int num = sc.nextInt();
     36 
     37         System.out.print("
    2、请选择是否有乘除运算:(有/否:1/0):");
     38 
     39         Scanner sc1 = new Scanner(System.in);
     40         int num1 = sc1.nextInt();
     41 
     42         System.out.print("
    3、请选择是否需要真分数运算:(有/否:1/0):");
     43 
     44         Scanner sc2 = new Scanner(System.in);
     45         int num2 = sc2.nextInt();
     46 
     47         System.out.print("
    4、请输入每行打印的个数:");
     48 
     49         Scanner sc4 = new Scanner(System.in);
     50         int num4 = sc4.nextInt();
     51 
     52         System.out.print("
    5、请选择需要几位数的运算:(请输入大于1的位数,
    如不需要定制,输入1,随机产生不大于1000的运算):");
     53 
     54         Scanner sc3 = new Scanner(System.in);
     55         int num3 = sc3.nextInt() - 1;
     56         
     57         int count = 0,d1,d2,k1,k2,k3,k4;//计数器
     58 
     59         for (int i=0;i<num ;i++ )
     60         {    
     61             if(num3==0)//如果输入为1,就将随机产生不大于1000的数
     62             {
     63                 d1 = random_1(1000);
     64                 d2 = random_1(1000);
     65                 k1 = random_1(1000);
     66                 k2 = random_1(1000);
     67                 k3 = random_1(1000);
     68                 k4 = random_1(1000);
     69             }
     70             else
     71             {
     72                 d1 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1);//自定义的产生随机数
     73                 d2 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1);
     74                 k1 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1);
     75                 k2 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1);
     76                 k3 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1);
     77                 k4 = random_2((int)Math.pow(10,num3),(int)Math.pow(10,num3+1)-1);
     78             }
     79             
     80             
     81             int k = 0,r = 0;//声明两个变量
     82             if(num1==0 && num2==0)//都没有
     83             {
     84                 r = random_1(4);
     85                 if(r%2!=0)//将产生的奇数随机数取出
     86                     k=r;
     87                 if(k==0)//即使已经将k判断为奇数了,但还是会等于0,所以就再判断一次,如果为0,就将其+1;
     88                     ++k;
     89             }
     90 
     91             else if(num1==0 && num2==1)//没乘除,有分数
     92                 k = random_1(4);
     93             else if(num1==1 && num2==0)//有乘除,没分数
     94             {
     95                 r = random_1(8);
     96                 if(r%2!=0)
     97                     k=r;
     98                 if(k==0)
     99                     ++k;
    100             }
    101             else//都有
    102                 k = random_1(8);
    103                 
    104             switch(k)//前两个是加法,2,3是减法,4,5是乘法,6,7是除法
    105             {
    106                 case 0:
    107                     sop(zhenfenshu(k1,k2)+" + "+zhenfenshu(k3,k4)+" = 	");
    108                 break;
    109                 case 1:
    110                     sop(d1+" + "+d2+" = 	");
    111                 break;
    112                 case 2:
    113                     sop(zhenfenshu(k1,k2)+" - "+zhenfenshu(k3,k4)+" = 	");
    114                 break;
    115                 case 3:
    116                     jianfa(d1,d2);
    117                 break;
    118                 case 4:
    119                     sop(zhenfenshu(k1,k2)+" * "+zhenfenshu(k3,k4)+" = 	");
    120                 break;
    121                 case 5:
    122                     sop(d1+" * "+d2+" = 	");
    123                 break;
    124                 case 6:
    125                     sop(zhenfenshu(k1,k2)+" ÷ "+zhenfenshu(k3,k4)+" = 	");
    126                 break;
    127                 case 7:
    128                     chufa(d1,d2);
    129                 break;
    130                 
    131             
    132                 default:
    133                     sop("duang,duang,daung");
    134                 break;
    135             }
    136             count++;
    137             if(count%num4==0)
    138                 System.out.println();
    139         }
    140         
    141         sop("以上共有:"+count+"道题。");
    142         
    143     }
    144     public static void jianfa(int a,int b)//因为小学二年级没有学负数,所以相减不能为负数
    145     {
    146         if(a>=b)
    147             sop(a+" - "+b+" = 	");
    148         else
    149         {
    150             sop(b+" - "+a+" = 	");
    151         }
    152             
    153     }
    154     
    155     public static void chufa(int a,int b)//为了使除法有意义,除数不能为零,
    156     {
    157         if(b>0)        
    158             sop(a+" ÷ "+b+" = 	");
    159         //如果除数为零,就将其加上10,再进行运算
    160         else
    161         {
    162             b = b + 10;
    163             sop(a+" ÷ "+b+" = 	");
    164         }
    165             
    166     }
    167     public static String zhenfenshu(int a,int b)//产生真分数的方法
    168     {
    169         if(a<=b)
    170             return a+"/"+b;
    171         else
    172             return b+"/"+a;
    173     }
    174 }

    三、运算结果截图

    (只有加减法,没有分数,所有的数都是四位的)

    (有乘除,没分数,两位数运算)

    (有乘除,也有分数,两位数)

    (在自定义数的位数,输入1,就是产生小于1000的随机数)

    四、总结

      在对该程序进行修改的过程中,只实现了一部分的功能,虽然可以做一些简单的定制功能,
    还存在不少的缺陷和bug,比如没有实现小数的运算,但是我感觉比较好的就是,
    可以自定义两个数,产生这两个数之间的随机数,希望在下面可以继续将本程序
    再加改进,功能更加完善。

    时间安排:

    一、项目计划总结:

    周活动总结表

    姓名:                                          日期:

    日期       任务

    听课

    编写程序

    阅读课本

    准备考试

    日总计

    周日

    周一

    周二

     100

     30

     30

     160

    周三

     150

     30

     180

    周四

     120

     40

     160

    周五

     100

     120

     40

     160

    周六

     180

     40

     220

    周总结

     200

     600

     180

     980

    阶段时间和效率                                            周数(上一次周活动表的周数+1):

    不包括上一周在内的累计时间                                                                         

    总计

     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

     在今天晚上,我继续想昨天的这个没有解决的问题,经过将近一个小时的思考和调试,最终我给设了一个中间变量,将该数给返回出来,

  • 相关阅读:
    ubuntu20.04安装python pip
    linux tar包追加问题
    [Linux]主机无法ping通虚拟机,但虚拟机却可以ping通主机
    安装pygraphviz/graphviz报错
    elasticsearch Delete (根据条件删除)
    python2 vs python3的区别汇总
    python实现elasticsearch的update操作,不改变原数据,增加字段,或者查询更新
    python bulk批量保存elasticsearch数据
    python rpc 简单实现自带包xmlrpc
    Python获取当前运行函数的名称、类方法名称
  • 原文地址:https://www.cnblogs.com/KevinBin/p/4339680.html
Copyright © 2011-2022 走看看