四则运算02

小组成员:黄丽萍  杜若憧   

设计思想:

1.设四个变量用来控制随机数的生成。

2.(1)可定制:由用户输入number,利用for循环进行题目输出。打印方式不明确。

(2)是否有乘除法:用0和1控制是否有乘除法。除法调用simplify()求最大公约数函数进行化简。

(3)是否有括号(最多可以支持十个数参与计算):无括号的情况:直接由生成0~3的随机数控制运算符。有括号的情况:定义数组完成,定义字符型数组储存'+','-','*','/'。随机生成数字的个数szgs(3~7),字符个数为szgs-1,利用for循环加上括号输出。如果运算符个数为偶数,则从第二个数添加括号,否则从第一个输出括号。

(4)数值范围:用户输入,控制随机数的生成范围。

(5)加减有无负数:如果要求有负数则将第一个数*-1

(6)除法有无余数:没有余数情况:利用for循环,如果a1%b1!=0继续随机生成。

3.对于除法行化简。定义simplify(int x,int y)求最大公约数,继而化简。

4.根据题目输出题目。

源代码:

      

import java.util.Scanner;
public class test {
    static int simplify(int x,int y){/*求两数最大公约数,用于分数化简*/
        int t,xx,yy,k=1;
        if(x>y){
            t=x;x=y;y=t;
        }
        for(int i=x;i>=2;i--){
              xx=x%i;yy=y%i;
              if(xx==0&&yy==0){
                  k=i;
                  break;
              }     
            }
        return k;
    }
    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        int a1,a2,b1,b2,k;
        /*控制题目个数*/
        Scanner in=new Scanner(System.in);
        System.out.print("请输入题目个数(>0):");
        int number=in.nextInt();
         /*数值范围*/
        System.out.print("请输入数值所取得最大值(>0):");
        int max=in.nextInt();
        /*判断括号*/
        int backets;
        System.out.print("是否有括号:(0:无  1:有):");
        backets=in.nextInt();
        if(backets==0)
        {
            /*控制是否有负数*/
            System.out.print("是否有负数:(0:无  1:有):");
            int negative=in.nextInt();
            /*控制是否有乘除*/
            System.out.print("是否有乘除法(0:无   1:有):");
            int panduan;
            for(;;)
            {
                panduan=in.nextInt();
                if(panduan==0||panduan==1) break;
                else
                    panduan=in.nextInt();
            }      
           /*有无余数*/
            int remainder=0;
            if(panduan==1){
            System.out.print("是否有余数:(0:无  1:有):");
            remainder=in.nextInt();}
           /*算法的实现*/
            for(int i=0;i<number;i++)
               {
               int index=(int)(Math.random()*4); //随机产生,控制运算符
               a1=(int)(Math.random()*max);
               a2=(int)(Math.random()*(max-1)+1);
               b1=(int)(Math.random()*max);
               b2=(int)(Math.random()*(max-1)+1);
               k=(int)(Math.random()*2);        //控制是否是整数或分数,随机产生
               if(k==0)//k=1输出整数运算
                    {
                      if(index==0) //加法运算
                        {
                          if(negative==0)//没有负数
                           System.out.println(a1+"+"+b1+"=");
                          else 
                          {
                              a1=-1*a1;
                              System.out.println(a1+"+"+b1+"=");  
                          }
                        } 
                      if(index==1)//减法运算
                         {
                          if(negative==0){
                           if(a1>b1)
                            {
                               System.out.println(a1+"-"+b1+"=");
                            }
                            else
                            {
                                System.out.println(b1+"-"+a1+"=");
                            }
                           }
                          else
                              System.out.println(a1+"-"+b1+"=");
                   }
                    
               if(panduan!=0)
               {
                  if(index==2)//乘法运算
                    {
                       System.out.println(a1+"*"+b1+"=");
                    }
                  if(index==3)//除法运算
                    {
                       if(remainder==0)
                       {//没有余数
                        for(int kk=0;;){ //余数不为0.继续生成随机数                            
                        if(a1!=0){   //判断分母是否为0
                            if(b1%a1!=0){
                            a1=(int)(Math.random()*max);
                            b1=(int)(Math.random()*max);
                            }                            
                            else
                                break;
                        }
                        else
                            a1=(int)(Math.random()*max);}
                        }
                    System.out.println(b1+"/"+a1+"=");                    
                    }
                }
               else if(panduan==0){//没有乘除
                   if(index==2) //加法运算
                    {
                      if(negative==0)//没有负数
                       System.out.println(a1+"+"+b1+"=");
                      else 
                      {
                          a1=-1*a1;
                          System.out.println(a1+"+"+b1+"=");  
                      }
                    } 
                  if(index==3)//减法运算
                     {
                      if(negative==0){
                       if(a1>b1)
                        {
                           System.out.println(a1+"-"+b1+"=");
                        }
                        else
                        {
                            System.out.println(b1+"-"+a1+"=");
                        }
                       }
                      else
                          System.out.println(a1+"-"+b1+"=");
               }
               }
            }
            else//分数计算
            {  
                  int s2=simplify(a1,a2);a1=a1/s2;a2=a2/s2;
                  int s3=simplify(b1,b2);b1=b1/s3;b2=b2/s3;
                if(index==0)
                { 
                    if(negative==0) //没有负数
                    {
                    /*分母不为1,分情况输出*/
                            if(a2!=1&&b2!=1)
                               System.out.println(a1+"/"+a2+"+"+b1+"/"+b2+"=");
                            else if(a2==1){
                               System.out.println(a1+"+"+b1+"/"+b2+"=");
                             }
                            else if(b2==1){
                                System.out.println(a1+"/"+a2+"+"+b1+"=");
                             }
                       
                    }
                    else{//没有负数
                        if(a2!=1&&b2!=1)
                               System.out.println("-"+a1+"/"+a2+"+"+b1+"/"+b2+"=");
                            else if(a2==1){
                               System.out.println("-"+a1+"+"+b1+"/"+b2+"=");
                             }
                            else if(b2==1){
                                System.out.println("-"+a1+"/"+a2+"+"+b1+"=");
                             }
                    }
                }
                if(index==1)
                {
                    if(a1/a2>=b1/b2){
                    if(a2!=1&&b2!=1)
                        System.out.println(a1+"/"+a2+"-"+b1+"/"+b2+"=");
                    else if(a2==1){
                        System.out.println(a1+"-"+b1+"/"+b2+"=");
                    }
                    else if(b2==1){
                        System.out.println(a1+"/"+a2+"-"+b1+"=");
                    }
                   }
                    else{
                        if(a2!=1&&b2!=1)
                            System.out.println(b1+"/"+b2+"-"+a1+"/"+a2+"=");
                        else if(a2==1){
                            System.out.println(b1+"/"+b2+"-"+a1+"=");
                        }
                        else if(b2==1){
                            System.out.println(b1+"-"+a1+"/"+a2+"=");
                        }
                    }
                }
                if(panduan!=0){
                if(index==2)
                {
                    if(a2!=1&&b2!=1)
                        System.out.println(a1+"/"+a2+"*"+b1+"/"+b2+"=");
                    else if(a2==1){
                        System.out.println(a1+"*"+b1+"/"+b2+"=");
                    }
                    else if(b2==1){
                        System.out.println(a1+"/"+a2+"*"+b1+"=");
                    }
                }
                if(index==3)
                {
                    if(a2!=1&&b2!=1)
                        System.out.println("("+a1+"/"+a2+")"+"/"+"("+b1+"/"+b2+")"+"=");
                    else if(a2==1&&a1!=0){
                        System.out.println(a1+"/"+"("+b1+"/"+b2+")"+"=");
                    }
                    else if(b2==1&&b1!=0){
                        System.out.println("("+a1+"/"+a2+")"+"/"+b1+"=");
                    }
                }
                }
                else if(panduan==0){
                    if(index==2)
                    { 
                        if(negative==0) //没有负数
                        {
                        /*分母不为1,分情况输出*/
                                if(a2!=1&&b2!=1)
                                   System.out.println(a1+"/"+a2+"+"+b1+"/"+b2+"=");
                                else if(a2==1){
                                   System.out.println(a1+"+"+b1+"/"+b2+"=");
                                 }
                                else if(b2==1){
                                    System.out.println(a1+"/"+a2+"+"+b1+"=");
                                 }
                           
                        }
                        else{//没有负数
                            if(a2!=1&&b2!=1)
                                   System.out.println("-"+a1+"/"+a2+"+"+b1+"/"+b2+"=");
                                else if(a2==1){
                                   System.out.println("-"+a1+"+"+b1+"/"+b2+"=");
                                 }
                                else if(b2==1){
                                    System.out.println("-"+a1+"/"+a2+"+"+b1+"=");
                                 }
                        }
                    }
                    if(index==3)
                    {
                        if(a1/a2>=b1/b2){
                        if(a2!=1&&b2!=1)
                            System.out.println(a1+"/"+a2+"-"+b1+"/"+b2+"=");
                        else if(a2==1){
                            System.out.println(a1+"-"+b1+"/"+b2+"=");
                        }
                        else if(b2==1){
                            System.out.println(a1+"/"+a2+"-"+b1+"=");
                        }
                       }
                        else{
                            if(a2!=1&&b2!=1)
                                System.out.println(b1+"/"+b2+"-"+a1+"/"+a2+"=");
                            else if(a2==1){
                                System.out.println(b1+"/"+b2+"-"+a1+"=");
                            }
                            else if(b2==1){
                                System.out.println(b1+"-"+a1+"/"+a2+"=");
                            }
                        }
                    }
                }
            }
        }
            
        
    }
        else//有括号
        {
            int szgs,fhgs,x,z,y;//szgs数字个数 fhgs符号个数
            int sz[]=new int[20];//数字数组
            char fh[]=new char[10];//字符数组
            char operate[]={'+','-','*','/'};
            for(int p=0;p<number;p++){
               szgs=(int)(Math.random()*7+3);//随机生成数字个数(3~7)
               fhgs=szgs-1;//字符个数比数字少1
               for(y=0;y<szgs;y++)
                {
                    sz[y]=(int)(Math.random()*max);//随机生成数
                }
               for(y=0;y<fhgs;y++)
                {
                    x=(int)(Math.random()*3);//产生0~3的随机数  控制字符
                    fh[y]=operate[x];
                }
               fh[fhgs]='=';
               if(fhgs%2==0){
                  System.out.print(sz[0]);System.out.print(fh[0]);
                  for(y=1;y<fhgs;y++){
                    System.out.print("(");
                    System.out.print(sz[y]);
                    System.out.print(fh[y]);
                    System.out.print(sz[y+1]);
                    System.out.print(")");
                    System.out.print(fh[y+1]);
                    y=y+1;
                   }System.out.println();
               }
              else{

for(y=0;y<fhgs;y++){ System.out.print("("); System.out.print(sz[y]); System.out.print(fh[y]); System.out.print(sz[y+1]); System.out.print(")"); System.out.print(fh[y+1]); y=y+1; }System.out.println(); } } } } }

结果截图:

                                                                                                   周活动总结表

                                                                          姓名:杜若憧                            日期 2016/3/18

听课

编写代码

阅读课本

准备考试

日总计

周日

32

32

周一

100

40

140

周二

54

54

周三

20

20

周四

60

60

周五

65

65

周六

周总计

100

219

52

371

                                                                                               时间记录日志

                                                                           学生:杜若憧                    日期:2016/3/18

                                                                           教师:王建民                    课程:软件工程

日期

开始时间

结束时间

中断时间

净时间

活动

备注

C

U

3/14

8:00

9:50

10

100

听课

理论学时,课件

15:00

17:00

20+15

85

编程序

作业,玩手机,聊天

3/15

14:30

16:30

20+10

100

编程序

查资料,休息

3/16

16:30

17:30

60

读书

《构建之法》

19:00

19:30

30

讨论

3/17

21:00

23:30

15+20

125

编程序

作业,接电话,洗漱

3/18

16:30

18:00

15

75

编程序

休息

21:00

22:00

60

写报告

                                                                                           缺陷记录日志

                                                                                          学生:杜若憧

                                                                                          日期:2016/3/18

                                                                                          教员:王建民

                                                                                          程序号:四则运算2

日期

编号

类型

引入阶段

排除阶段

修复时间

修复缺陷

3/18

1

 20

编码

编译

15min

描述:分数化简,分母可能为1,输出a/1

2

 20

编码

编译

10min

描述:if语句太多,括号丢失

3

 20

编码

15min

描述:打算直接用函数化简分数,但出现错误。改为求最大公约数。

4

 20

执行

15min

描述:控制题目没有乘除法时,题目输出的数量少于要求的数量。

   个人总结:

        如果在第一次的四则运算程序中修改实现难度很大,所以又重新整理思路,进行重新编写。起初思路不清晰,经过讨论后明了。对于不同的问题应该分块讨论,将问题简化,然后再细化。有括号的情况利用了整形数组和字符型数组进行分情况输出括号。

 

原文地址:https://www.cnblogs.com/java-test/p/5294398.html