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

    1.题目要求:

        

    2.设计思想:

    先将表达式求得的值放入数组,然后将用户输入的值与数组中的值进行比较,确定结果是否正确。在有多个运算符和括号的时候,可用用栈确定运算的优先级。用递归的思想计算表达式的值1.在进行不加括号的运算时,可以通过产生的表达式直接求得正确值,然后跟用户输入的值进行比较;2.有括号的运算时,我们可以通过循环求得每次循环所得值,并放入数组中;再通过判断循环后的运算符,来决定数组值之间的加减乘除,以求得最后正确值,然后跟用户输入的值进行比较。

    3.程序代码:

    package demo;
    import java.util.Scanner;
    import java.util.ArrayList;
    public class Test {
        public static void main(String[] args){
            int N,i,N1,N2;
            int sum=0;
            String str;
            String hh;    
            Scanner in=new Scanner(System.in);    
            change fra=new change();
            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;
                    int s1,s2;
                    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);
                    //化简分数
                    int j;
                    j=fra.change_(a,b);
                    aa=a/j;
                    bb=b/j;
                    //化简分数
                    int p;
                    p=fra.change_(c,d);
                    cc=c/p;
                    dd=d/p;
                    int j1;
                    int s11,s22;
                    String str1;
                    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+"=");
                        //分数加法计算
                          s1=aa*dd+bb*cc;
                          s2=bb*dd;
                          j1=fra.change_(s1,s2);
                          s11=s1/j1;
                          s22=s2/j1;
                          str1=s11+"/"+s22;
                          str=in.next();
                          if(fra.judge_FRA(str1,str)==1)
                          {
                             sum++;
                          }
                                     
                    }
                    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+"=");
                        //分数减法计算
                        s1=aa*dd-bb*cc;
                        s2=bb*dd;
                        j1=fra.change_(s1,s2);
                        s11=s1/j1;
                        s22=s2/j1;
                        str1=s11+"/"+s22;
                        str=in.next();
                        if(fra.judge_FRA(str1,str)==1)
                        {
                            sum++;
                        }
                        
                    }
                    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+"=");
                        //分数乘法计算
                        s1=aa*cc;
                        s2=bb*dd;
                        j1=fra.change_(s1,s2);
                        s11=s1/j1;
                        s22=s2/j1;
                        str1=s11+"/"+s22;
                        str=in.next();
                        if(fra.judge_FRA(str1,str)==1)
                        {
                            sum++;
                        }
                        
                    }
                    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+"=");
                        //分数除法计算
                        s1=aa*dd;
                        s2=bb*cc;
                        j1=fra.change_(s1,s2);
                        s11=s1/j1;
                        s22=s2/j1;
                        str1=s11+"/"+s22;
                        str=in.next();
                        if(fra.judge_FRA(str1,str)==1)
                        {
                            sum++;
                        }
                        
                    }
                }
            }
            else if(hh.equals("N"))//整数运算
            {
                System.out.println("请选择是否需要产生括号的运算题(Y/N):");
                String str1,str2,str3;
                double strr2;
                str=in.next();
                double strr1=0;
                double ss;
                if(str.equals("Y"))
                {
                   
                }
                
                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+"=");
                                            double s;
                                            s=a+b;
                                            strr2=in.nextDouble();
                                            if(fra.judge(s,strr2)==1)
                                            {
                                                sum++;
                                            }
                                            
                                        }
                                        else if(h2==1)
                                        {
                                            System.out.println("-"+a+"+"+b+"=");
                                            double s;
                                            s=-a+b;
                                            strr2=in.nextDouble();
                                            if(fra.judge(s,strr2)==1)
                                            {
                                                sum++;
                                            }
                                            
                                        }
                                    }
                                    if(h==1)//减法
                                    {
                                        h2=(int) (Math.random()*2);
                                        //控制有无负数
                                        if(h2==0)
                                        {
                                            System.out.println(a+"-"+b+"=");
                                            double s;
                                            s=a-b;
                                            strr2=in.nextDouble();
                                            if(fra.judge(s,strr2)==1)
                                            {
                                                sum++;
                                            }
                                        }
                                        else if(h2==1)
                                        {
                                            System.out.println("-"+a+"-"+b+"=");
                                            double s;
                                            s=-a-b;
                                            strr2=in.nextDouble();
                                            if(fra.judge(s,strr2)==1)
                                            {
                                                sum++;
                                            }
                                        }
                                    }
                                }
                                else if(str3.equals("N"))//无负数
                                {
                                    if(h==0)
                                    {
                                        System.out.println(a+"+"+b+"=");
                                        double s;
                                        s=a+b;
                                        strr2=in.nextDouble();
                                        if(fra.judge(s,strr2)==1)
                                        {
                                            sum++;
                                        }
                                        
                                    }
                                    if(h==1)
                                    {
                                        System.out.println(a+"-"+b+"=");
                                        double s;
                                        s=a-b;
                                        strr2=in.nextDouble();
                                        if(fra.judge(s,strr2)==1)
                                        {
                                            sum++;
                                        }
                                        
                                    }
                                }
                                if(h==2)
                                {
                                    System.out.println(a+"*"+b+"=");
                                    double s;
                                    s=a*b;
                                    strr2=in.nextDouble();
                                    if(fra.judge(s,strr2)==1)
                                    {
                                        sum++;
                                    }
                                    
                                }
                                if(h==3)
                                {
                                    int d,k;                    
                                    k=(int) (Math.random()*(c-1)+1);
                                    //必须产生余数
                                    d=c*c1+k;
                                    System.out.println(d+"/"+c+"=");
                                    double s;
                                    s=d/c;
                                    strr2=in.nextDouble();
                                    if(fra.judge(s,strr2)==1)
                                    {
                                        sum++;
                                    }
                                    
                                }
                            }
                        }
                        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+"=");
                                            double s;
                                            s=a+b;
                                            strr2=in.nextDouble();
                                            if(fra.judge(s,strr2)==1)
                                            {
                                                sum++;
                                            }
                                            
                                        }
                                        else if(h2==1)
                                        {
                                            System.out.println("-"+a+"+"+b+"=");
                                            double s;
                                            s=-a+b;
                                            strr2=in.nextDouble();
                                            if(fra.judge(s,strr2)==1)
                                            {
                                                sum++;
                                            }
                                            
                                        }
                                    }
                                    if(h==1)//减法
                                    {
                                        h2=(int) (Math.random()*2);
                                        //控制有无负数
                                        if(h2==0)
                                        {
                                            System.out.println(a+"-"+b+"=");
                                            double s;
                                            s=a-b;
                                            strr2=in.nextDouble();
                                            if(fra.judge(s,strr2)==1)
                                            {
                                                sum++;
                                            }
                                        }
                                        else if(h2==1)
                                        {
                                            System.out.println("-"+a+"-"+b+"=");
                                            double s;
                                            s=-a-b;
                                            strr2=in.nextDouble();
                                            if(fra.judge(s,strr2)==1)
                                            {
                                                sum++;
                                            }
                                        }
                                    }
                                }
                                else if(str3.equals("N"))//无负数
                                {
                                    if(h==0)
                                    {
                                        System.out.println(a+"+"+b+"=");
                                        double s;
                                        s=a+b;
                                        strr2=in.nextDouble();
                                        if(fra.judge(s,strr2)==1)
                                        {
                                            sum++;
                                        }
                                    }
                                    if(h==1)
                                    {
                                        System.out.println(a+"-"+b+"=");
                                        double s;
                                        s=a-b;
                                        strr2=in.nextDouble();
                                        if(fra.judge(s,strr2)==1)
                                        {
                                            sum++;
                                        }
                                    }
                                }
                                if(h==2)//乘法
                                {
                                    System.out.println(a+"*"+b+"=");
                                    double s;
                                    s=a*b;
                                    strr2=in.nextDouble();
                                    if(fra.judge(s,strr2)==1)
                                    {
                                        sum++;
                                    }
                                }
                                if(h==3)//除法,不产生余数
                                {
                                    int d;            
                                    //不能产生余数
                                    d=c*c1;
                                    System.out.println(d+"/"+c+"=");
                                    double s;
                                    s=d/c;
                                    strr2=in.nextDouble();
                                    if(fra.judge(s,strr2)==1)
                                    {
                                        sum++;
                                    }
                                    
                                }
                            }
                        }
                    }
                            
                    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+"=");
                                        double s;
                                        s=a+b;
                                        strr2=in.nextDouble();
                                        if(fra.judge(s,strr2)==1)
                                        {
                                            sum++;
                                        }
                                    }
                                    else if(h2==1)
                                    {
                                        System.out.println("-"+a+"+"+b+"=");
                                        double s;
                                        s=-a+b;
                                        strr2=in.nextDouble();
                                        if(fra.judge(s,strr2)==1)
                                        {
                                            sum++;
                                        }
                                    }
                                }
                                if(h==1)//减法
                                {
                                    h2=(int) (Math.random()*2);
                                    //控制有无负数
                                    if(h2==0)
                                    {
                                        System.out.println(a+"-"+b+"=");
                                        double s;
                                        s=a-b;
                                        strr2=in.nextDouble();
                                        if(fra.judge(s,strr2)==1)
                                        {
                                            sum++;
                                        }
                                    }
                                    else if(h2==1)
                                    {
                                        System.out.println("-"+a+"-"+b+"=");
                                        double s;
                                        s=-a-b;
                                        strr2=in.nextDouble();
                                        if(fra.judge(s,strr2)==1)
                                        {
                                            sum++;
                                        }
                                    }
                                }
                            }
                            else if(str3.equals("N"))//无负数
                            {
                                if(h==0)
                                {
                                    System.out.println(a+"+"+b+"=");
                                    double s;
                                    s=a+b;
                                    strr2=in.nextDouble();
                                    if(fra.judge(s,strr2)==1)
                                    {
                                        sum++;
                                    }
                                }
                                if(h==1)
                                {
                                    System.out.println(a+"-"+b+"=");
                                    double s;
                                    s=a-b;
                                    strr2=in.nextDouble();
                                    if(fra.judge(s,strr2)==1)
                                    {
                                        sum++;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            in.close();
        }
    }
    class change{
        Scanner in=new Scanner(System.in);
        int change_(int a,int b)//化简分数
        {
          int r1;
          if(a>b)
          {
              r1=b;
          }
          else
              r1=a;
          int k=0;
          for(int j=1;j<=r1;j++)
            {
              if(a%j==0&&b%j==0)
              {
                  k=j;
               }          
            }
            return k;
        }
      int  judge_FRA(String str1,String str)//分数运算判断对错,计算正确次数
      {
          int ju;
          if(str.equals(str1))
          {
              System.out.println("正确");
              ju=1;
          }
          else
          {
              System.out.println("错误");
              ju=0;
          }
          return ju;
      }
      int judge(double s,double ss)//整数判断对错,计算正确次数
      {
          int ju;
          if(s==ss)
          {
              System.out.println("正确");
              ju=1;
          }
          else
          {
              System.out.println("错误");
              ju=0;
          }
          return ju;
      }
    }

     4.运行结果截图:

    psp表格:

    PSP2.1

    Personal Software Process Stages

    Time

    Planning

    计划

      · Estimate

      · 估计这个任务需要多少时间

     8小时

    Development

    开发

      · Analysis

      · 需求分析 (包括学习新技术)

    栈的应用

    用过栈来确定运算的优先级

      · Design Spec

      · 生成设计文档

      · Design Review

      · 设计复审 (和同事审核设计文档)

      · Coding Standard

      · 代码规范 (为目前的开发制定合适的规范)

      · Design

      · 具体设计

      · Coding

      · 具体编码

      · Code Review

      · 代码复审

      · Test

      · 测试(自我测试,修改代码,提交修改)

    Reporting

    报告

      · Test Report

      · 测试报告

      · Size Measurement

      · 计算工作量

      · Postmortem & Process Improvement Plan

      · 事后总结, 并提出过程改进计划

     对于栈还不是很熟悉

    合计

    项目计划总结:

            任务

    日期

    上课

    编写程序

    阅读书籍

    3.13

    2小时课程

    3.14

    思考如何输入结果和连接数据库,以及如何连接数据库

    3.15

    思考如何输入结果和连接数据库,以及如何连接数据库

    3.16

    阅读《梦断代码》

    3.17

     

    时间记录日志:

    日期

    开始时间

    结束时间

    中断时间

    活动

    备注

    3.13

    14:00

    15:50

    10min

    上课

    3.14

    3.15

    19:00

    20:30

    编程

    3.16

    阅读

    3.17

    19:00

    编程

    3.18

    写博客

     

    缺陷记录日志:

    日期

    编号

    类型

    引入阶段

    排除阶段

    修复时间

    修复缺陷

    描述

    3.15

    1

    思维逻辑

    设计

    设计

    5min

    对于结果对错,先将表达式结果算出来存入数组,然后与输入的结果比较

     
  • 相关阅读:
    洛谷P1357 Solution
    洛谷P3469 Solution
    洛谷P2617 Solution
    CF818F Solution
    CF802K Solution
    CF519E Solution
    在代码中改变log的级别
    Java非对称加密解密
    mvn test 远程调试
    rsyn实现服务器源码同步
  • 原文地址:https://www.cnblogs.com/kangy123/p/6566793.html
Copyright © 2011-2022 走看看