• 四则运算 2


    一、时间记录日志:

    日期 开始时间 结束时间 中断时间 净时间 活动 备注
    3.14 8:00 9:50 10 100 上课 课间
    3.15 16:00 18:00 10 110 编程。阅读  
    3.17 19:00 20:50   110 编程  
    3.19 14:00 18:00 20 220 编程  

    二、缺陷记录日志:

    日期 编号 引入阶段 排除阶段 修复时间 修复缺陷
    3.15 1 编码 编译 15min  
    描述:For循环里没有初始化变量
      2 编码 编码 20min  
    描述:While和If语句运用错误
               

    三、项目计划总结:

    1、设计思路和设计心得:在做这个程序之前,我首先考虑的是要将功能加到上次的程序里面。考虑到上次没有化简真分数,所以我先考虑用辗转相除法递归解决这个问题,但是因为对辗转相除法的理解不够,我还是选择了用For循环的麻烦的方法,在这里因为循环没有初始化一个变量浪费了很多时间。为了防止出现相同的式子,我和我的搭档讨论了一个FOR循环套fOR循环的方法解决了这个问题,在分数的运算里,我一开始打算一出现重复的就把分子分母相加赋值给分母,但是因为考虑到这样会超出自己定义的数值的范围,所以作废,后来我用了Whlie语句来解决,一旦相同就加1,还写了几个IF语句来控制加1后可能出现的情况。因为我的运算符的控制使用INT类型的数来决定的,所以控制有无乘除就特别简单,只需要用一个IF语句来控制是%2还是%4即可。有无负数我用了WHILE语句来控制,一旦不满足就继续重随,这里要说明的是,在我的程序里,有负数不代表没有正数的结果,但是没有负数一定只有正数。

    在编写程序的过程中,我和我的搭档会因为一个很小的BUG浪费很多时间,比如我在写程序的期间,会因为要用IF语句而用了While语句导致无法输出,会因为没有在循环开头初始化变量导致结果不正确。这些小问题都是要极力避免的。还有一个不足就是,程序用了太多的IF语句控制,可能会比较乱。

    括号问题不会做,未在规定时间完成,毫无思路,查阅了JAVA中的栈的写法发现和我的代码格格不入,时间不够也就放弃了。

    2、程序源代码:

    import java.util.Scanner;
    
    //20142984chengchongjing
    //sizeyunsuan 2
    public class Main {
        
        public static void main(String[] args) {
            // TODO 自动生成的方法存根
            Scanner in=new Scanner(System.in);
            System.out.println("请输入数据范围 1- ");
            int  F=in.nextInt();
            
            
            System.out.println("请输入要生成的整数四则运算的个数 ");
            int n1=in.nextInt();
            
            System.out.println("有无乘除法   有输入1 没有输入0");
             int Jiajian;
             Jiajian=in.nextInt(); 
             
             System.out.println("加减无有负数  有输入1 没有输入0");
             int Fu=in.nextInt();
             
             int Yv=3; 
             if(Jiajian==1)
             { 
                 System.out.println("除法有无余数 有输入1 没有输入0");
                   Yv=in.nextInt();
             } 
            
             
             int Fis[]  =new int[n1];
             int Sec[]  =new int[n1];
             int Thr[]  =new int[n1];
             int i;
             
            for(i =0;i<n1;i++)    
              {
              Sec[i]=(int)(Math.random()*(F/2));
              Fis[i]=(int)(Math.random()*F);
             
              if(Jiajian==0)
                  {
              Thr[i]=((int)(Math.random()*F))%2;
                      }
              if(Jiajian==1)
                  {
                  Thr[i]=((int)(Math.random()*F))%4;
                      }  
              if(Thr[i]==3&&Sec[i]==0){Sec[i]++;}//防止除法里分母为0 ;
              if(Yv==0&&Thr[i]==3){
                  while(Fis[i]%Sec[i]!=0)
                   { Fis[i]=Sec[i]*2;}   
               }
               if(Yv==1&&Thr[i]==3){
                   while(Fis[i]%Sec[i]==0)
                   { Fis[i]=(int)(Math.random()*F);}   
                   
                   if(Fu==0&&Thr[i]==1){
                       while (Fis[i]<Sec[i]){ Fis[i]=(int)(Math.random()*F);}
                   }
               }
                
              } 
           
           for(i=0;i<n1-1;i++)
           {   
               for(int j=i;j<n1-1;j++)
               {
                   if((Fis[i]==Fis[j])&&(Sec[i]==Sec[j])&&(Thr[i]==Thr[j]))
                   {
                       Fis[i]=Fis[i]+1;
                       }
               }
           }//比较是否重复
           
         
           for(i=0;i<n1;i++)    
                {
                if(Thr[i]==0)
                    System.out.println(Fis[i]+" + "+ Sec[i]+"=");
                 if(Thr[i]==1)
                     System.out.println(Fis[i]+" - "+ Sec[i]+"=");
                 if(Thr[i]==2)
                     System.out.println(Fis[i]+" * "+ Sec[i]+"=");
                 if(Thr[i]==3)
                     System.out.println(Fis[i]+" / "+ Sec[i]+"=");        
                }
          
           
           
           
             System.out.println("请输入要生成的分数四则运算的个数 ");
             int n2=in.nextInt();  
           int Fis1[]  =new int[n2];   
           int Sec1[]  =new int[n2];  
           int Thr1[]  =new int[n2];  
           int Four[]  =new int[n2];  
        
           
             for(int j=0;j<n2;j++)    
                   {
                     Fis1[j]=(int)(Math.random()*F);
                     Sec1[j]=(int)(Math.random()*F);
                       Thr1[j]=(int)(Math.random()*F);
                        Four[j]=(int)(Math.random()*F);
               
                        if( Fis1[j]> Sec1[j]){
                                int Chang;
                                Chang= Fis1[j]; Fis1[j]= Sec1[j]; Sec1[j]=Chang;
                            }
              
                        if(Thr1[j]>Four[j]){
                                int Chang;
                                Chang=Thr1[j];Thr1[j]=Four[j];Four[j]=Chang;
                            }//交换大小
                        
        
             int Chang2=Fis1[j];
                for(int k=2;k<=Chang2;k++){
                    if(Fis1[j]%k==0&& Sec1[j]%k==0)
                    {
                      Fis1[j]=Fis1[j]/k;
                      Sec1[j]= Sec1[j]/k;
                       k=1;
                    }
                    
                }
               int Chang3=Thr1[j];
              for(int k=2;k<=Chang3;k++){
                  if(Thr1[j]%k==0&&Four[j]%k==0)
                  {
                      Thr1[j]=Thr1[j]/k;
                      Four[j]=Four[j]/k;
                      k=1;
                  }
              }//化简真分数
              
               
               while(Fis1[j]==0)
                   { Fis1[j]=(int)(Math.random()*F);}
                while (Sec1[j]==0||Sec1[j]==Fis1[j]) 
                   { Sec1[j]=(int)(Math.random()*F);} 
                while( Thr1[j]==0)
                 {  Thr1[j]=(int)(Math.random()*F);}
              while (Four[j]==0||Four[j]== Thr1[j]) 
                 { Four[j]=(int)(Math.random()*F);} 
              
                  int x=(int)(Math.random()*F);
            
                  for( i=0;i<n2-1;i++){
                       for(int k=i;k<n2-1;k++)
                       {
                           if(Fis1[i]==Fis1[j]&&Sec1[i]==Sec1[j]&&Thr1[i]==Thr1[j]&&Four[i]==Four[j])
                           {
                               Sec1[i]=Sec1[i]+1;
                               while (Sec1[i]==Fis1[i])
                                       { Sec1[i]=Sec1[i]+1;}
                           }
                       }    
                  }
              if(x%4==0)
                  System.out.println(Fis1[j]+"/"+Sec1[j]+" + "+Thr1[j]+"/"+Four[j]+"=");
              if(x%4==1)
                  System.out.println(Fis1[j]+"/"+Sec1[j]+" - "+Thr1[j]+"/"+Four[j]+"=");
              if(x%4==2)
                  System.out.println(Fis1[j]+"/"+Sec1[j]+" * "+Thr1[j]+"/"+Four[j]+"=");
              if(x%4==3)
                  System.out.println(Fis1[j]+"/"+Sec1[j]+" / "+Thr1[j]+"/"+Four[j]+"=");
               }
          
                                                }
      
                    }

    3.运行截图:

  • 相关阅读:
    todo-list
    codeforces 794 (#414 DIV1+DIV2)
    2018bnu校赛总结
    codeforces 743D
    HDU-2196 Computer (树形DP)
    HDU- 1005 Number Sequence(矩阵快速幂)
    HDU- 4000 Fruit Ninja(树状数组)
    codeforces 505C
    codeforces 286B
    codeforces 3D
  • 原文地址:https://www.cnblogs.com/3066405538a/p/5295801.html
Copyright © 2020-2023  润新知