zoukankan      html  css  js  c++  java
  • 软件工程作业1——四则运算

    coding 地址:http://git.oschina.net/lsrd

    1、需求分析

    设计一个小学生四则运算,符合加减乘除四则运算,不仅符合整事运算,还要能够进行真分数运算。整体都需求有:题数的统计,正确率的统计。

    2、功能设计

    主要功能设计的难点在于真分数的运算,随机生成分数进行转换成真分数,对于分数答案转换成真分数。运用一个循环体来控制生成题数及统计正确率。

    3.设计实现

    对于整数的四则运算设计比较简单,所以主要设计了真分数的四则运算。如果随机生成一个数为整数将其转化成真分数进行计算,如生成56,将其转换成56/1进行计算。

    真分数的随机生成:随机生成两个整数让其相除形成一个分数,然后通过setNumeratorAndDenominator(int a, int b)算出分子分母的最大公因数,进行化简成真分数。答案生成的分数也用此方法进行化简成真分数,如出现67/1形式,直接以整数67形式输出。

    真分数间的四则运算:加法将分子分母交叉相乘做分子,分母相乘做分母得出分数形式的答案在通过setNumeratorAndDenominator(int a, int b)化简为真分数输出。减法、乘法及除非也是类似的。
    4.代码说明

    代码方面分为两方面一个是主函数一个是算法的具体实现。主函数主要是一些输出格式形式的设计以及算法的引用。用switch随机选择产生整数或分数,如选择生成分数则产生两个随机数构成分数传入算法函数:

    switch(x){
    case 0: a=(int)(1+Math.random()*100);a1=a+"/"+1;a2=a+"";break; 
    case 1: a1=(int)(1+Math.random()*100)+"/"+(int)(1+Math.random()*100); 
    a2=a1;break; 
    } 
    int y=(int)(Math.random()*2); 
    switch(y){ 
    case 0: c=(int)(1+Math.random()*100);c1=c+"/"+1;c2=c+"";break; 
    case 1 : c1=(int)(1+Math.random()*100)+"/"+(int)(1+Math.random()*100); 
    c2=c1;break; 
    } 
    String chars = "+-*/"; 
    char b=(chars.charAt((int)(Math.random() * 4))); 
    5、算法实现:
    1、计算公因数化简分数为真分数
    void setNumeratorAndDenominator(int a, int b){  // 设置分子和分母
      int c = f(Math.abs(a),Math.abs(b));         // 计算最大公约数
      numerator = a / c;
      denominator = b / c;
      if(numerator<0 && denominator<0){
       numerator = - numerator;
       denominator = - denominator;
      }
     }
     int getNumerator(){
      return numerator;
     }
     int getDenominator(){
      return denominator;
     }
     
     int f(int a,int b){  // 求a和b的最大公约数
      if(a < b){
       int c = a;
       a = b;
       b = c;
      }
      int r = a % b;
      while(r != 0){
       a = b;
       b = r;;
       r = a % b;
      }
      return b;
     }
    2、四则运算算法实现:
    Calculator add(Calculator r){  // 加法运算
      int a = r.getNumerator();
      int b = r.getDenominator();
      int newNumerator = numerator * b + denominator * a;
      int newDenominator = denominator * b;
      Calculator result = new Calculator(newNumerator,newDenominator);
      return result;
     }
     
     Calculator sub(Calculator r){  // 减法运算
      int a = r.getNumerator();
      int b = r.getDenominator();
      int newNumerator = numerator * b - denominator * a;
      int newDenominator = denominator * b;
      Calculator result = new Calculator(newNumerator,newDenominator);
      return result;
     } 
     
     Calculator muti(Calculator r){ // 乘法运算
      int a = r.getNumerator();
      int b = r.getDenominator();
      int newNumerator = numerator * a;
      int newDenominator = denominator * b;
      Calculator result = new Calculator(newNumerator,newDenominator);
      return result;
     }
     
     Calculator div(Calculator r){  // 除法运算
      int a = r.getNumerator();
      int b = r.getDenominator();
      int newNumerator = numerator * b;
      int newDenominator = denominator * a;
      Calculator result = new Calculator(newNumerator,newDenominator);
      return result;
     }


    6.测试运行

    7

    PSP2.1

    Personal Software Process Stages Time (%) Senior Student Time (%)
    Planning 计划 1 1
    · Estimate 估计这个任务需要多少时间 3 2
    Development 开发 4 5
    · Analysis 需求分析 (包括学习新技术)                 1 2
    · Design Spec 生成设计文档 1 1
    · Design Review 设计复审 1 1
    · Coding Standard 代码规范 1 1
    · Design 具体设计 3 1
    · Coding 具体编码 4 4
    · Code Review 代码复审 1 2
    · Test 测试(自我测试,修改代码,提交修改) 2 3
    Reporting 报告 1 1
    · 测试报告 1 1
    · 计算工作量 2 2
    · 并提出过程改进计划 3 2

    8、小结

    这次作业是第一次以这种形式提交,很新颖。对于实验内容,四则运算的整数算法还算简单,主要是真分数的处理。随机真分数的产生、运算比较复杂。出现的问题是参数的传导比较乱,错了好久才解决,还是要多理解代码原理才行。

     
  • 相关阅读:
    C#listbox使用方法
    poj 3894 System Engineer (二分图最大匹配--匈牙利算法)
    Java实现 蓝桥杯VIP 算法训练 连接字符串
    Java实现 蓝桥杯VIP 算法训练 连接字符串
    Java实现 蓝桥杯VIP 算法训练 比较字符串
    Java实现 蓝桥杯VIP 算法训练 比较字符串
    Java实现 蓝桥杯VIP 算法训练 比较字符串
    Java实现 蓝桥杯VIP 算法训练 比较字符串
    Java实现 蓝桥杯VIP 算法训练 比较字符串
    Java实现 蓝桥杯VIP 算法训练 黑白无常
  • 原文地址:https://www.cnblogs.com/lsrd/p/6507116.html
Copyright © 2011-2022 走看看