• 软件工程作业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、小结

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

     
  • 相关阅读:
    Python初学者第十天 集合、十六进制
    Python初学者第九天 字符串、列表、字典练习
    Python初学者第八天 元组和字典
    Python初学者第七天 字符串及简单操作
    Python初学者第六天 列表操作练习
    Python初学者第五天 列表及简单操作
    Python初学者第四天 二进制运转换
    Python初学者第三天 运算符、while循环
    Python初学者第二天 用户输入和注释
    Python初学者第一天 Python安装及第一个Python程序
  • 原文地址:https://www.cnblogs.com/lsrd/p/6507116.html
Copyright © 2020-2023  润新知