https://git.oschina.net/DzXzz/operation
题目描述:
从《构建之法》第一章的 “程序” 例子出发,像阿超那样,花二十分钟写一个能自动生成小学四则运算题目的命令行 “软件”,满足以下需求:
除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
- 运算符为 +, −, ×, ÷
- 并且要求能处理用户的输入,并判断对错,打分统计正确率。
- 要求能处理用户输入的真分数, 如 1/2, 5/12 等
- 使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
Myapp.exe -n 10
分析:
程序要求:
- 自动生成题目
- 除了整数,还要支持真分数运算
- 判断答案正确与否(可以识别真分数答案),如果错误显示正确答案,并显示正确率
- 可以控制生成题目数量
实现步骤:
- 根据输入的n,生成相应的题目。
- 获取答案并检验对错
- 返回结果并显示正确率
- 生成题目方面,根据获取的n设置循环,随机加减乘除依靠生成1~4的随机数switch选择
- 整数和分数的加减乘除方法分开写。整数的很简单,不多叙述。分数在正常的运算规则下多了约分的步骤,从而需要求取最大公约数,这里搜索查阅后使用了辗转相除法。
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; }
- 生成题目方面依靠随机数,唯一需要注意的是分数要求生成真分数,所以多了个判断和转换。
1 if(num1>num2) 2 { 3 num5=num1; 4 num1=num2; 5 num2=num5; 6 } 7 printf(" (%d/%d)",num1,num2);
其他的代码就不多赘述了,比较关键的就这些。
下面是截图:
实验回顾:
这个实验刚开始做的时候感觉还是挺简单的,用c很快就写完了整数的四则运算,写到分数的时候有点卡住了,有点没想明白怎么验证结果,去网上参考了一下才完成。可能主要的时间都花在这方面了。之后的测试什么的倒是挺顺利的,不过感觉在提交代码的花费的时间感觉比我写代码的时间都长,还是没什么经验啊。
实验总结:
写完之后看了一下同学的,基本用java写的,跟他们的最大区别可能就是他们是一次性全部生成题目而我的是做完一题后生成一题,因为用的是循环,没有用栈(其实是当时没想起来栈怎么用的了),书上写的是可以打印出来,那我的确实有点不合要求。(基础还是不牢啊)之后再改进一下。
PSP2.1 | Personal Software Process Stages | Time Senior Student | Time |
Planning | 计划 | 1h | 2h |
· Estimate | 估计这个任务需要多少时间 | 10h | 10h |
Development | 开发 | 8h | 7h |
· Analysis | 需求分析 (包括学习新技术) | 30min | 30min |
· Design Spec | 生成设计文档 | 0 | 0 |
· Design Review | 设计复审 | 0 | 0 |
· Coding Standard | 代码规范 | 0 | 0 |
· Design | 具体设计 | 30min | 30min |
· Coding | 具体编码 | 6h | 5h |
· Code Review | 代码复审 | 30min | 30min |
· Test | 测试(自我测试,修改代码,提交修改) | 30min | 30min |
Reporting | 报告 | 1h | 1h |
· | 测试报告 | 0 | 0 |
· | 计算工作量 | 0 | 0 |
· | 并提出过程改进计划 | 0 |
0 |