软件工程作业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 StagesTime (%) Senior StudentTime (%)
Planning计划11
· Estimate估计这个任务需要多少时间32
Development开发45
· Analysis需求分析 (包括学习新技术)                12
· Design Spec生成设计文档11
· Design Review设计复审11
· Coding Standard代码规范11
· Design具体设计31
· Coding具体编码44
· Code Review代码复审12
· Test测试(自我测试,修改代码,提交修改)23
Reporting报告11
·测试报告11
·计算工作量22
·并提出过程改进计划32

8、小结

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

 

转载于:https://www.cnblogs.com/lsrd/p/6507116.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值