您的位置:首页 > 其它

软件工程作业1——四则运算

2017-03-05 22:40 246 查看
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、小结

这次作业是第一次以这种形式提交,很新颖。对于实验内容,四则运算的整数算法还算简单,主要是真分数的处理。随机真分数的产生、运算比较复杂。出现的问题是参数的传导比较乱,错了好久才解决,还是要多理解代码原理才行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: