zoukankan      html  css  js  c++  java
  • 软件工程个人作业02

    四则运算2

    • 设计思想

    由于需要控制的种类比较多所以采用小模块构成大模块的方式

    1、是否有乘除法

        将加减从四则运算中拿出来,形成加减和四则两种运算方式

    2、数值范围

        将上次的在程序中直接规定的0-99变成由用户输入的g,然后读取,形成全局变量。

    3、加减法有无负数

        将随机到的题目进行计算判断,结果小于零则重新生成。

    4、除法有无余数

        ①能除尽

        ②不能除尽,可以将其用+,-,*进行替换,比较简便。

        ③对于分数而言,控制分母位置的数不为零;若出现两个分数相除,则继续控制被除数的分子也不为零。

    5、是否有括号(最多支持十个数的计算)

        ①用这样的函数来控制数量random.nextInt(9)+2。

        ②在符号数组中加入‘(’,形成随机数栈和运算符栈,在运算符中随机出现,若出现‘(’则在其前面添加非括运算符并记录‘(’的数量,在最后添加等量的‘)’。

    6、可订制(数量/打印方式)

        ①数量:将上次的在程序中直接规定的30变成由用户输入的h,然后读取,形成全局变量。

        ②打印方式:设置全局变量r,由用户输入每行打印的个数,在每个小的模块中加入if语句来实现。

    7、题目避免重复

        对生成的题目与前面的题目相同位置的数与运算符进行比对,若相同则重新生成。

    • 程序代码
    import java.util.*;
    
    public class Aritmetic1 {
    
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            System.out.println("请输入要生成多少道四则运算题目?");
            int h = input.nextInt();
            String [] arr1 = new String[h];
            System.out.println("请输入随机数可产生的最大值:");
            int g = input.nextInt();
            System.out.println("请输入定制要求(每行题数):");
            int r = input.nextInt();
            System.out.println("请选择要求:");
            System.out.println("1加减法运算");
            System.out.println("2四则运算");
            Random random = new Random();
            char arr[] = {'+','-','*','/','('};
            
            int a=input.nextInt();
            switch(a){
               case 1:{
                  System.out.println("请选择数字类型:");
                  System.out.println("1整数");
                  System.out.println("2分数");
                  int m = input.nextInt();
                  switch(m)
                  {
                  case 1:
                  {
                      System.out.println("有无负数?");
                      System.out.println("1没有负数");
                      System.out.println("2有负数");
                      int f = input.nextInt(); 
                      int i;
                      switch(f)
                      {
                         case 1:
                         {
                             for(i=0;i<h;i++)
                             {
                                 if(i==r||i%r==0)
                                 {
                                     System.out.println();
                                 }
                                  String str = random.nextInt(g) + " " + arr[random.nextInt(2)] + " " + random.nextInt(g) + "="+"     ";
                                  System.out.print(str);
                                 
                             }
                             break;
                         }
                         
                         case 2:
                         {
                             for(i=0;i<h;i++)
                             {
                                 if(i==r||i%r==0)
                                 {
                                     System.out.println();
                                 }
                                 String str = (-random.nextInt()%g) + " " + arr[random.nextInt(2)] + " " + (-random.nextInt()%g) + "="+"     ";
                                 System.out.print(str);
                             }
                             break;
                         }
                         
                         default:
                         {
                             System.out.println("输入错误,请输入1或2");
                         }
                         break;
                      }//switch(f)
                      break;
                  }//case1内
                  
                  case 2:
                  {
                      System.out.println("有无负数?");
                      System.out.println("1没有负数");
                      System.out.println("2有负数");
                         int f=input.nextInt();
                         switch(f)
                         {
                         case 1:
                         {
                             for(int i=0;i<h;i++)
                             {
                                 if(i==r||i%r==0)
                                 {
                                     System.out.println();
                                 }
                                System.out.print(random.nextInt(g)+"/"+random.nextInt(g)+1+" "+arr[random.nextInt(2)]+" "+random.nextInt(g)+"/"+random.nextInt(g)+1+"="+"     ");
                             }
                             break;
                         }
                         case 2:
                         {
                             for(int i=0;i<h;i++)
                             {
                                 if(i==r||i%r==0)
                                 {
                                     System.out.println();
                                 }
                                System.out.print(-random.nextInt()%g+"/"+random.nextInt(g)+1+" "+arr[random.nextInt(2)]+" "+-random.nextInt()%g+"/"+random.nextInt(g)+1+"="+"     ");
                             }
                             break;
                         }
                         default:
                             System.out.println("输入错误,请输入1或2");
                             break;
                         }
                        break;
                  }//case2内
                  }//switch(m)
                break;
               }//case1外
               
               case 2:
               {
                  System.out.println("请选择数字类型:");
                  System.out.println("1整数");
                  System.out.println("2分数");
                  int m = input.nextInt();
                  switch(m)
                  {
                  case 1:
                  {
                      System.out.println("请选择要求:");
                      System.out.println("1正整数无余数四则运算");
                      System.out.println("2可负整数无余数四则运算");
                      System.out.println("3正整数可有余数四则运算");
                      System.out.println("4可负整数可有余数四则运算");
                      System.out.println("5多数带括号运算");
                      int f =input.nextInt();
                      switch(f)
                      {
                      case 1:
                      {
                             for(int i=0;i<h;i++)
                             {
                                 
                                 int u=random.nextInt(g);
                                 int v=random.nextInt(g)+1;
                                 char w=arr[random.nextInt(4)];
                                 if(i==r||i%r==0)
                               {
                                   System.out.println();
                               }
                                 if(u%v==0 && w=='/')
                                 {
                                     System.out.print(u+" "+w+" "+v+"="+"     ");
                                 }
                                 else
                                 {
                                     System.out.print(u+" "+arr[random.nextInt(3)]+" "+v+"="+"     ");
                                 }
                             }
                             break;
                      }
                      
                      case 2:
                         {
                             for(int i=0;i<h;i++)
                             {
                                 int u=-random.nextInt()%g;
                                 int v=-random.nextInt()%g;
                                 char w=arr[random.nextInt(4)];
                                 if(i==r||i%r==0)
                                 {
                                     System.out.println();
                                 }
                                 if(v!=0 && u%v==0 && w=='/' )
                                     System.out.print(u+" "+w+" "+v+"="+"     ");
                                else
                                    System.out.print(u+" "+arr[random.nextInt(3)]+" "+v+"="+"     ");
                             }
                             break;
                         }
                      case 3:
                         {
                             for(int i=0;i<h;i++)
                             {
                                 int u=random.nextInt(g);
                                 int v=random.nextInt(g)+1;
                                 char w=arr[random.nextInt(4)];
                                 if(i==r||i%r==0)
                                 {
                                     System.out.println();
                                 }
                                 System.out.print(u+" "+w+" "+v+"="+"     ");
                             }
                             break;
                         }
                      case 4:
                         {
                             for(int i=0;i<h;i++)
                             {
                             int u=-random.nextInt()%g;
                             int v=-random.nextInt()%g;
                             char w=arr[random.nextInt(4)];
                             if(i==r||i%r==0)
                             {
                                 System.out.println();
                             }
                             System.out.print(u+" "+w+" "+v+"="+"     ");
                             }
                             break;
                         }
                      case 5:
                      {
                          for(int i=0;i<h;i++)
                          {
                              int n =random.nextInt(9)+2;
                              Stack<Integer> S1 = new Stack<Integer>();
                              Stack<Character> S2 = new Stack<Character>();
                              for(int j=0;j<n+1;j++)
                              {
                                  char w=' ';
                                  int e = random.nextInt()%g;
                                  if(w=='/'&&e==0)
                                  {
                                      e=random.nextInt(g)+1;
                                  }
                                  w=arr[random.nextInt(5)];
                                  S1.push(e);
                                  S2.push(w);
                              }
                              
                              int k=0;
                              for(int j=0;j<n;j++)
                              {
                                  char q =S2.pop();
                                  if(q=='(')
                                  {
                                      if(j>n-2)
                                      {
                                          System.out.print(S1.pop()+" "+arr[random.nextInt(4)]);
                                      }
                                      else
                                      {
                                          System.out.print(S1.pop()+" "+arr[random.nextInt(4)]+" "+q);
                                          k++;
                                      }
                                  }
                                  else
                                  {
                                      System.out.print(S1.pop()+" "+q);
                                  }
                              }
                              if(k==0)
                              {
                                  System.out.println(random.nextInt()%g+"=");
                              }
                              else if(k==1)
                              {
                                  System.out.println(random.nextInt()%g+")=");
                              }
                              else if(k==2)
                              {
                                  System.out.println(random.nextInt()%g+"))=");
                              }
                              else if(k==3)
                              {
                                  System.out.println(random.nextInt()%g+")))=");
                              }
                              else
                              {
                                  System.out.println(random.nextInt()%g+"))))=");
                              }
                          }
                          break;
                      }
                         default:
                         {
                             System.out.println("输入错误,请输入1-5");
                         }
                         break;
                      }//switch(f)
                      break;
                  }//case1内
                  
                  case 2:
                  {
                        System.out.println("请选择要求:");
                        System.out.println("1正分数四则运算!");
                        System.out.println("2可负分数四则运算!");
                        int f=input.nextInt();
                         switch(f)
                         {
                         case 1:
                         {
                             for(int i=0;i<h;i++)
                             {
                                 int u=random.nextInt(g);
                                 int v=random.nextInt(g)+1;
                                 int x=random.nextInt(g);
                                 int y=random.nextInt(g)+1;
                                 char w=arr[random.nextInt(4)];
                                 if(i==r||i%r==0)
                                 {
                                     System.out.println();
                                 }
                                System.out.print(u+"/"+v+" "+w+" "+x+"/"+y+"="+"     ");
                             }
                             break;
                         }
                         case 2:
                         {
                             for(int i=0;i<h;i++)
                             {
                                 int u=-random.nextInt()%g;
                                 int v=random.nextInt(g)+1;
                                 int x=-random.nextInt()%g;
                                 int y=random.nextInt(g)+1;
                                 char w=arr[random.nextInt(4)];
                                 if(i==r||i%r==0)
                                 {
                                     System.out.println();
                                 }
                                 if(x!=0 && w=='/' )
                                     System.out.print(u+"/"+v+" "+w+" "+x+"/"+y+"="+"     ");
                                else 
                                    System.out.print(u+"/"+v+" "+arr[random.nextInt(3)]+" "+x+"/"+y+"="+"     ");
                             }
                             break;
                         }
                         default:
                             System.out.print("输入的数有误,请输入1或2");
                         }
                         break;
                    }//case2内
                  }
                  }//switch(m)
               }//case2外
            }//switch(a)
    
        }//起始
    • 运行结果截图

    PSP0级记录表:

    • 项目计划日志

     周活动总结表

                                                                 姓名:赵东睿                                                                                                          日期:16/3/19

    日期    任务 听课 编写程序 阅读书籍     日总计
    周日            
    周一 100   30     130
    周二     30     30
    周三     60     60
    周四   200       200
    周五   60+120       180
    周六   120       120
    周总计 100 500 120     720

                                                                 阶段时间和效率                                                                                                               周数:第3周

    总计 100 500 120     720
    平均 100 500 120     720
    最大 100 500 120     720
    最小 100 500 120     720

                                                                 以前各周的累计时间

    总计 100 500 120     720
    平均 100 500 120     720
    最大 100 500 120     720
    最小 100 500 120     720

    时间记录日志

                                                                 学生:赵东睿                                                                                                               日期:16/3/19

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

    日期 开始时间 结束时间 中断时间 净时间 活动 备注
    3/14 8:00 9:50 10 100 上课 课间休息
      13:30 14:00   30 阅读书籍  
    3/15 15:00 15:30   30 阅读书籍  
    3/16 13:00 14:20 20 60 阅读书籍 休息
    3/17 16:30 21:30 100 200 编写代码 吃饭,查资料
    3/18 12:30 13:30   60 编写代码  
      16:30 18:30   120 编写代码  
    3/19 9:30 11:30   120 完善代码  
                 

    缺陷记录日志

    日期 编号 类型 引入阶段 排除阶段 修复时间 修复缺陷
    3/17 1   运行 引入输入流 1min  
    没有写import java.util.*;
    3/18 2   编译 运行 2min  
    对每行题目个数的限制if语句加在输出之前
    3/18 3   编译 运行 10min  
    在case中忘记break;导致会在运行时多弹出一次上一步。
    3/18 4   编译 运行 20min  
    解决分数四则运算u/v / x/y中v,x,y为零的错误
                 
  • 相关阅读:
    “字节跳动-文远知行杯”广东工业大学第十四届程序设计竞赛
    Codeforces Beta Round 77 (Div. 2 Only)
    Codeforces Round 263(Div. 2)
    Codeforces Round 262 (Div. 2)
    《Introduction to Algorithm》-chaper30-多项式与快速傅里叶变换
    算法专题-STL篇
    算法专题-暴力枚举篇
    初等数论及其应用——中国剩余定理
    初等数论及其应用——费马小定理
    《A First Course in Probability》-chape4-离散型随机变量-几种典型分布列
  • 原文地址:https://www.cnblogs.com/lk0823/p/5295095.html
Copyright © 2011-2022 走看看