1.Github项目地址:https://github.com/inimble/calculate.git
2.估算耗费的时间(如右表)
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
10 |
5 |
· Estimate |
· 估计这个任务需要多少时间 |
600 | |
Development |
开发 |
20 |
20 |
· Analysis |
· 需求分析 (包括学习新技术) |
60 |
70 |
· Design Spec |
· 生成设计文档 |
10 |
15 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
10 |
15 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
5 |
5 |
· Design |
· 具体设计 |
10 |
10 |
· Coding |
· 具体编码 |
500 |
550 |
· Code Review |
· 代码复审 |
30 |
20 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
100 |
120 |
Reporting |
报告 |
30 |
25 |
· Test Report |
· 测试报告 |
10 |
20 |
· Size Measurement |
· 计算工作量 |
10 |
10 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
15 |
20 |
合计 |
840 |
935 |
3.解题思路
运用随机数来生成一个四则运算的算式,然后将算式改为后缀表达式,并利用栈完成四则运算的计算,考虑到结果需要用真分数的形式表示,所以专门定义了一个结构体用于存储结果。最后再对结果进行约分。
4.设计实现过程
首先设计一个函数进行随机函数的生成,这里面用到了函数rand()进行随机数的生成,然后先将生成的结果分为数字和运算符分别存入了两个数组中,接着进行了对生成的算式进行分析是否符合题目的要求,如计算结果是否为负数,如果是则改变其中的运算符。用另一个函数进行计算,然后把结果放到存储答案的结构体中。最后再设计一个用于约分结果的函数。
5.代码说明
用于存放结果的结构体,分别是带分数的整数部分以及分数部分的分子和分母。
此函数用于约分最终结果。
这个循环利用随机数生成随机的算式并且存放到两个数组中,生成符号的部分也是用生成随机数字,并使用switch()语句来转化为字符串。
该循环判断了生成的式子是否正确,如减号前面的数如果小于后面的数,则减号前后两个数对调。这部分更主要用于把随机生成的四则运算算式用fprintf()打开并写入到对应的文件中。
这部分用于计算,方法比较低级,因为考虑到结果必须存放在result结构体中,所以计算的时候只能采用逐个判断的方法。遇到不同符号需要不同的处理方式,并且同一符号中也有一些细节的处理,如除号除完后若能与上面的数整除则删除分数部分增加整数部分。
6.测试运行
(1)正确运行的结果:
计算部分:
对答案部分:
(2)输入指令错误
7.实际耗费的时间(如上表)
8.项目小结
本次结对项目属于双方的第一次结对,感觉有点陌生,同时又有点新奇。我们主要采用一人编译同时讲解,然后换另一人编译和讲解的方式来完成本次的结对项目。在进行结对项目的过程中,双方都有所学习,有所收获,最主要的是体现在一些常用函数方面的学习,如and()等。当然也会出现两个人同时不会的情况,这时候就借用到了百度等工具进行学习和了解。本次的结对项目完成过程比较顺利,一些不会的点在询问对方或网上学习后都能有所突破。但是还是存在一些不足之处,比如程序的完整性仍然不够,可能还存在一些未被我们发现的bug,这主要来源于我们对于做项目的经验不足,对项目的分析能力还有待提升。总体来说,结对项目确实会比个人项目更加轻松,如果双方使用的语言和编译器相同那会更加方便。同时结对项目也能让我们学习到一个人工作时学习不到的知识。