源代码详见:https://coding.net/u/hmhhh/p/hmh_homework1/git/tree/master/
a.需求分析:
自动生成小学四则运算题目的命令行 “软件”,满足以下需求:
1. 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
2. 运算符为 +, −, ×, ÷
3. 并且要求能处理用户的输入,并判断对错,打分统计正确率。
4. 要求能处理用户输入的真分数, 如 1/2, 5/12 等
5. 使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
Myapp.exe -n 10
b.功能设计:
- 自动生成题目
- 除了整数,还要支持真分数运算
- 判断答案正确与否(可以识别真分数答案),如果错误显示正确答案,并显示正确率
- 可以控制生成题目数量
c.设计实现:
- 根据输入的n,生成相应的题目。
- 获取答案并检验对错
- 返回结果并显示正确率
d.代码说明:
使用辗转相除法,求最大公约数
int GCD(int k,int l) //求最大公约数 { int temp; /*定义整型变量*/ if(k<l) /*通过比较求出两个数中的最大值和最小值*/ { temp=k; k=l; l=temp; } /*设置中间变量进行两数交换*/ while(l!=0) /*通过循环求两数的余数,直到余数为0*/ { temp=k%l; k=l; /*变量数值交换*/ l=temp; } return k; } int LCM(int k, int l) { int temp; temp=GCD(k,l); /*调用自定义函数,求出最大公约数*/ return (k*l/temp); //最大公约数*最小公倍数=两数乘积 求最小公倍数 }
分数要求生成真分数,所以多了个判断和转换。
if(num3>num4) { num5=num3; num3=num4; num4=num5; } printf("(%d/%d)=",num3,num4);
e.测试运行:
PSP表:
PSP2.1 |
Personal Software Process Stages |
Estimated time(min) |
actual time(min) |
Planning |
计划 |
30 |
25 |
· Estimate |
估计这个任务需要多少时间 |
240 |
310 |
Development |
开发 |
120 |
160 |
· Analysis |
需求分析 (包括学习新技术) |
20 |
15 |
· Design Spec |
生成设计文档 |
20 |
24 |
· Design Review |
设计复审 |
10 |
15 |
· Coding Standard |
代码规范 |
10 |
15 |
· Design |
具体设计 |
30 |
40 |
· Coding |
具体编码 |
100 |
150 |
· Code Review |
代码复审 |
15 |
20 |
· Test |
测试(自我测试,修改代码,提交修改) |
30 |
25 |
Reporting |
报告 |
40 |
45 |
· |
测试报告 |
5 |
5 |
· |
计算工作量 |
5 |
8 |
· |
并提出过程改进计划 |
10 |
15 |
实验小结:
这个实验我是用c写的,因为用的是循环,不能一次性全部生成题目,只能做完一题后生成一题。后来查阅了资料也看了其他同学用Java写成的,用的是栈,功能实现好很多。还是自己编程语言能力不足,要继续学习。而且写到分数的四则运算,几乎是借助于资料查阅才完成。编写代码的时间非常长。同样也是长时间下才完成这次作业。总而言之是练习不够、积累不够,要勤加练习了。