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

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

 
posted @ 2017-03-05 22:40  肖习  阅读(824)  评论(1编辑  收藏  举报