zoukankan      html  css  js  c++  java
  • 软件工程概论作业-02

    作业题目:

    可怜的二柱子同学,老师又对他的自动出题系统提出了新的要求:
    可以控制下列参数:
    1.是否有乘除法;
    2.是否有括号(最多可以支持十个数参与计算);
    3.数值范围;
    4.加减有无负数;
    5.除法有无余数!    

    设计思想:1.输入需要出题的数量,选择是分数运算还是整数运算;分数运算时输入数值的范围,运行即可;整数运算时,先输入数值的范围,然后选择是否需要括号;进入有括号后,随机产生题目;进入无括号后,需要选择是否需要乘除法,除法中是否需要余数,加减法是否需要负数;
    2.分数运算生成随机数,分别做分母和分子,分母不能为0,化简分数,分母不为0输出结果,分母为0直接输出分子为结果。     
    3.在加减法中控制有无负数,使用随机数控制,0产生正数,1产生负数;
    4.有括号,括号正在调试中,有点缺陷。有括号的运算优先级比较困难。
    5.选择除法是否有余数,先随机产生除数,若需要产生余数,则被除数=除数*n+k(k为大于0小于除数的正整数);若不需要,则被除数=除数*n;

    源程序代码

    package demo;
    import java.util.Scanner;
    import java.util.ArrayList;
    public class Test {
        public static void main(String[] args){
            int N,i,N1,N2;
            String hh;    
            Scanner in=new Scanner(System.in);    
            System.out.println("请输入需要打印的运算题的数目:");
            N=in.nextInt();
            System.out.println("请选择是否需要分数运算(Y/N):");
            hh=in.next();
            if(hh.equals("Y"))//分数运算
            {
                for(i=0;i<N;i++)
                {
                    int a,b,c,d,r1,r2;
                    a=(int) (Math.random()*100);
                    b=(int) (Math.random()*99+1);
                    //分母不等于0
                    c=(int) (Math.random()*100);
                    d=(int) (Math.random()*99+1);
                    int h=(int)(Math.random()*4);
                    int aa=0,bb=0,cc=0,dd=0;
                    //为了产生分数,分子也不可为零
                    if(a==0)
                        a=(int) (Math.random()*99+1);
                    if(c==0)
                        c=(int) (Math.random()*99+1);
                    if(a>b)
                        r1=b;
                    else
                        r1=a;
                    //化简分数
                    for(int j=1;j<=r1;j++)
                    {
                        if(a%j==0&&b%j==0)
                        {
                            aa=a/j;
                            bb=b/j;
                        }
                    }
                    if(c>d)
                        r2=d;
                    else
                        r2=c;
                    //化简分数
                    for(int j=1;j<=r2;j++)
                    {
                        if(c%j==0&&d%j==0)
                        {
                            cc=c/j;
                            dd=d/j;
                        }
                    }
                    if(h==0)
                    {
                        //化简后,分母等于1时,直接输出分子
                        if(bb!=1&&dd!=1)
                            System.out.println(aa+"/"+bb+" + "+cc+"/"+dd+"=");
                        else if(bb==1&&dd!=1)
                            System.out.println(aa+" + "+cc+"/"+dd+"=");
                        else if(bb!=1&&dd==1)
                            System.out.println(aa+"/"+bb+" + "+cc+"=");
                        else
                            System.out.println(aa+"+"+cc+"=");
                    }
                    else if(h==1)
                    {
                        //不能产生负数
                        int t1,t2;
                        if((a/b-c/d)<0)
                        {
                            t1=aa;
                            aa=cc;
                            cc=t1;
                            t2=bb;
                            bb=dd;
                            dd=t2;
                        }
                        //化简后,分母等于1时,直接输出分子    
                        if(bb!=1&&dd!=1)
                            System.out.println(aa+"/"+bb+" - "+cc+"/"+dd+"=");
                        else if(bb==1&&dd!=1)
                            System.out.println(aa+" - "+cc+"/"+dd+"=");
                        else if(bb!=1&&dd==1)
                            System.out.println(aa+"/"+bb+" - "+cc+"=");
                        else
                            System.out.println(aa+"-"+cc+"=");
                    }
                    else if(h==2)
                    {//化简后,分母等于1时,直接输出分子
                        if(bb!=1&&dd!=1)
                            System.out.println(aa+"/"+bb+" * "+cc+"/"+dd+"=");
                        else if(bb==1&&dd!=1)
                            System.out.println(aa+" * "+cc+"/"+dd+"=");
                        else if(bb!=1&&dd==1)
                            System.out.println(aa+"/"+bb+" * "+cc+"=");
                        else
                            System.out.println(aa+"*"+cc+"=");
                    }
                    else
                    {//化简后,分母等于1时,直接输出分子
                        if(bb!=1&&dd!=1)
                            System.out.println(aa+"/"+bb+" / "+cc+"/"+dd+"=");
                        else if(bb==1&&dd!=1)
                            System.out.println(aa+" / "+cc+"/"+dd+"=");
                        else if(bb!=1&&dd==1)
                            System.out.println(aa+"/"+bb+" / "+cc+"=");
                        else
                            System.out.println(aa+"/"+cc+"=");
                    }
                }
            }
            else if(hh.equals("N"))//整数运算
            {
                System.out.println("请选择是否需要产生括号的运算题(Y/N):");
                String str,str1,str2,str3;
                str=in.next();
                
                if(str.equals("Y"))
                {
                    System.out.println("请输入数值范围:");
                    N1=in.nextInt();
                    for(i=0;i<N;i++)
                    {
               
                    }
                }
                
                else if(str.equals("N"))//不需要产生括号
                {
                    System.out.println("请输入数值范围:");
                    N2=in.nextInt();
                    System.out.println("请选择是否有无乘除法的运算题(Y/N):");
                    str1=in.next();
                    if(str1.equals("Y"))//有乘除法
                    {                
                        System.out.println("请选择是否有无余数的运算题(Y/N):");
                        str2=in.next();                
                        if(str2.equals("Y"))//需要有余数
                        {
                            System.out.println("请选择是否有负数(Y/N):");
                            str3=in.next();
                            for(i=0;i<N;i++)
                            {
                                int a,b,c,c1,h,h2;
                                a=(int) (Math.random()*N2);
                                b=(int) (Math.random()*N2);
                                h=(int) (Math.random()*4);//控制加减运算符
                                c=(int) (Math.random()*(N2-1)+1);
                                c1=(int) (Math.random()*10+1);
                                
                                if(str3.equals("Y"))//有负数
                                {
                                    if(h==0)//加法
                                    {
                                        h2=(int) (Math.random()*2);//控制有无负数
                                        if(h2==0)
                                            System.out.println(a+"+"+b+"=");
                                        else if(h2==1)
                                            System.out.println("-"+a+"+"+b+"=");
                                    }
                                    if(h==1)//减法
                                    {
                                        h2=(int) (Math.random()*2); //控制有无负数
                                        if(h2==0)
                                            System.out.println(a+"-"+b+"=");
                                        else if(h2==1)
                                            System.out.println("-"+a+"-"+b+"=");
                                    }
                                }
                                else if(str3.equals("N"))//无负数
                                {
                                    if(h==0)
                                    {
                                        System.out.println(a+"+"+b+"=");
                                    }
                                    if(h==1)
                                    {
                                        System.out.println(a+"-"+b+"=");
                                    }
                                }
                                if(h==2)
                                {
                                    System.out.println(a+"*"+b+"=");
                                }
                                if(h==3)
                                {
                                    int d,k;
                                    k=(int) (Math.random()*(c-1)+1);//必须产生余数
                                    d=c*c1+k;
                                    System.out.println(d+"/"+c+"=");
                                }
                            }
                        }
                        else if(str2.equals("N"))//不需要产生余数
                        {
                            System.out.println("请选择是否有负数(Y/N):");
                            str3=in.next();
                            for(i=0;i<N;i++)
                            {
                                int a,b,c,c1,h,h2;
                                a=(int) (Math.random()*N2);
                                b=(int) (Math.random()*N2);
                                h=(int) (Math.random()*4);//控制加减运算符
                                c=(int) (Math.random()*(N2-1)+1);
                                c1=(int) (Math.random()*10+1);//控制倍数
                                
                                if(str3.equals("Y"))//有负数
                                {
                                    if(h==0)//加法
                                    {
                                        h2=(int) (Math.random()*2);
                                        //控制有无负数
                                        if(h2==0)
                                            System.out.println(a+"+"+b+"=");
                                        else if(h2==1)
                                            System.out.println("-"+a+"+"+b+"=");
                                    }
                                    if(h==1)//减法
                                    {
                                        h2=(int) (Math.random()*2);//控制有无负数
                                        if(h2==0)
                                            System.out.println(a+"-"+b+"=");
                                        else if(h2==1)
                                            System.out.println("-"+a+"-"+b+"=");
                                    }
                                }
                                else if(str3.equals("N"))//无负数
                                {
                                    if(h==0)
                                    {
                                        System.out.println(a+"+"+b+"=");
                                    }
                                    if(h==1)
                                    {
                                        System.out.println(a+"-"+b+"=");
                                    }
                                }
                                if(h==2)//乘法
                                {
                                    System.out.println(a+"*"+b+"=");
                                }
                                if(h==3)//除法,不产生余数
                                {
                                    int d;//不能产生余数
                                    d=c*c1;
                                    System.out.println(d+"/"+c+"=");
                                }
                            }
                        }
                    }
                            
                    else if(str1.equals("N"))//没有乘除法
                    {
                        int a,b,h,h2;                        
                        System.out.println("请选择是否有负数(Y/N):");
                        str3=in.next();
                        for(i=0;i<N;i++)
                        {
                            a=(int) (Math.random()*N2);
                            b=(int) (Math.random()*N2);
                            h=(int) (Math.random()*2);//控制运算符
                            
                            if(str3.equals("Y"))//有负数
                            {
                                if(h==0)//加法
                                {
                                    h2=(int) (Math.random()*2);//控制有无负数
                                    if(h2==0)
                                        System.out.println(a+"+"+b+"=");
                                    else if(h2==1)
                                        System.out.println("-"+a+"+"+b+"=");
                                }
                                if(h==1)//减法
                                {
                                    h2=(int) (Math.random()*2);//控制有无负数
                                    if(h2==0)
                                        System.out.println(a+"-"+b+"=");
                                    else if(h2==1)
                                        System.out.println("-"+a+"-"+b+"=");
                                }
                            }
                            else if(str3.equals("N"))//无负数
                            {
                                if(h==0)
                                {
                                    System.out.println(a+"+"+b+"=");
                                }
                                if(h==1)
                                {
                                    System.out.println(a+"-"+b+"=");
                                }
                            }
                        }
                    }
                }
            }
            in.close();
        }
    }

    运行结果截图:

    项目计划总结:

         任务

    日期

    听课

    编写程序

    阅读书籍

    3.06

    2小时课程

    30分钟思考思路

    3.07

    实现数值范围和加法有无负数

    3.08

    实现除法有无余数编写运算是否有括号

     

    3.09

     

    3.10

    阅读《梦断代码》

     

    时间记录日志

    日期

    开始时间

    结束时间

    中断时间

    活动

    备注

    3.6

    14:00

    15:50

    10min

    上课

    3.7

    14:00

    15:30

    编程

    3.7

    19:00

    20:30

    编程

    3.8

    15:00

    17:00

    30min      

    编程

    3.9

    3.10

    19:00

    写博客

     

    缺陷记录日志

    日期

    编号

    类型

    引入阶段

    排除阶段

    修复时间

    修复缺陷

    描述

    3.7

    1

    思维逻辑

    设计

    设计

    4min

    用位置来控制负数的位置

    在减法时候负数位置容易混乱

    3.8

    1

    思维

    设计

    设计

    7min

    用余数是否为零判断

    3.10

    1

    思维

    括号的运算优先级程序编写思路不明确

     
  • 相关阅读:
    hdu-2084 数塔
    hdu-2151 Worm
    hdu-1234开门人和关门人
    hdu-1715大菲波数
    linux应用之vsftp服务的安装及配置(centos)
    linux应用之tomcat的安装及配置(centos)
    linux应用之nginx的安装及配置(centos)
    linux启动过程详解
    linux应用之Mongodb的安装及配置(centos)
    linux应用之apache服务的安装及配置(centos)
  • 原文地址:https://www.cnblogs.com/kangy123/p/6532537.html
Copyright © 2011-2022 走看看