Github地址:https://github.com/zhangkangzh/Arithmetic
1.需求分许
(1)程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 20 之间,运算符在2个到4个之间。
(2)为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式。
(3)练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。
(4)当程序接收的参数为4时,以下为输出文件示例。
2.功能分析
(1)程序接收一个输入参数n,产生n个算数表达式。
(2)使用math函数中的random方法产生运算符(1,2,3,4代表+,-,*,/)和运算数。
(3) 将运算符和运算数组成算数表达式。
(4)将表达式存入到文件“result.txt”中。
3.设计实现
(1)接收一个参数n。
(2)产生运算符和运算数。
(3)将表达式中优先级高的降阶(乘法和除法变成加法)。
(4)计算算式结果并保存。
4.测试运行
5.核心代码
if(fu[j]==3) { shu[j+1]=shu[j]*shu[j+1]; shu[j]=1; tema++; if(j>=1&&fu[j-1]==2) { fu[j]=2; } continue; } if(fu[j]==4) { shu[j+1]=shu[j]/shu[j+1]; shu[j]=1; if(shu[j+1]!=0) { tema++; shu[j]=1; } else { shu[j]=0; } if(j>=1&&fu[j-1]==2) { fu[j]=2; } continue; }
for(;j<=n;j++) { if(j>=1) { if(fu[j-1]==2) { sum = sum-shu[j]; if(sum<0) { tt=1; break; } } else { sum=sum+shu[j]; } } else { sum=sum+shu[j]; }
6.总结
这个项目中,主要使用了random函数产生运算符和随机数。同时使用了降阶的方式,使整个表达式变成一个同阶表达式。这样就可以使用数组直接进行计算,在小数处理时使用了整除处理,但却造成除法表达式的式子偏少。
7.展示PSP
PSP | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
计划 | 15 | 20 | |
Estimate | 需求分析,函数实现 | 20 | 30 |
开发 | 30 | 30 | |
Analysis | 需求分析 | 5 | 10 |
Design Spec | 设计 | 10 | 15 |
Design Review | 设计复审 | 12 | 20 |
Design | 具体设计 | 16 | 25 |
Coding | 具体编码 | 30 | 40 |
Code Review | 代码复审,查找语法错误 | 2 | 2 |
Test | 测试 | 5 | 5 |
报告 | 10 | 20 | |
Test Report | 测试,程序编译正确,运行结果正确 | 2 | 2 |
Size Measurement | 计算工作量 | 3 | 3 |
Postmortem |
小数处理时使用了整除处理,但却造成除法表达式的式子偏少 |
2 | 2 |