目录
一、 需求分析
二、 功能设计
三、 设计实现
四、 算法详解
五、 测试运行
六、 代码展示
七、 总结
八、 展示PSP
一、 需求分析
1、 程序可接收一个输入参数n,然后随机产生n道加减乘除(分别使用符号+-*÷来表示)练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间。
2、 为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3÷5+2=2.6,2-5+10=7等算式。
3、 将学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中
4、 支持有括号的运算式,包括出题与求解正确答案。注意,算式中存在的括号必须大于2个,且不得超过运算符的个数。
5、 扩展程序功能支持真分数的出题与运算(只需要涵盖加减法即可)
二、 功能设计
基本功能
1、实现三到五个字符的四则运算
2、数字大小在0至100之间
3、没有负数和非整数
拓展功能
1、支持有括号的运算
2、支持真分数的出题与运算
三、 设计实现
1、使用main类:接受用户给的参数
2、使用calculater类:生成练习题并计算答案
使用random产生随机数,使用calculate计算答案
四、 算法详解
1、产生随机数
int number = 0;
Random num =
new Random();
number =
num.nextInt(max + 1);
return number
2、使用逆波兰表达式
五、 测试运行
六、 代码展示
#include <iostream>#include<stdio.h>
#include<math.h>using namespace std; //http://noi.openjudge.cn/ch0202/1696/char a[100];
double f(){ cin>>a;
switch(a[0]){ case '+':return f()+f();
case '-':return f()-f();
case '*':return f()*f();
case '/':return f()/f();
default:return atof(a);
}}int main(int argc, char *argv[]) { double ans=0.0; ans=f();
printf("%f ",ans); return 0;}
七、 总结
个人认为这次作业难度较大,个人水平不足,花了许多时间,但是也掌握了一定的知识,还是非常值得和满足的,以后也会继续努力学习,争取能敲更多的代码。
八、 展示PSP
PSP2.1 |
任务内容 |
计划共完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
10 |
30 |
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
10 |
30 |
Development |
开发 |
204 |
406 |
· Analysis |
· 需求分析 (包括学习新技术) |
5 |
8 |
· Design Spec |
· 生成设计文档 |
5 |
6 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
4 |
6 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
5 |
9 |
· Design |
· 具体设计 |
15 |
22 |
· Coding |
· 具体编码 |
120 |
300 |
· Code Review |
· 代码复审 |
20 |
15 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
30 |
40 |
Reporting |
报告 |
11 |
18 |
· Test Report |
· 测试报告 |
5 |
7 |
· Size Measurement |
· 计算工作量 |
3 |
6 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
3 |
5 |