1.需求分析
1)自动生成10道100以内的2个操作数的四则运算算式(+ - * /),要求运算结果也在100以内
//使用随机函数产生随机数和运算符,使用if将结果控制在100以内
2)剔除重复算式。 2 + 3 = 和 2 + 3 = 是重复算式 2 + 3 = 和 3 + 2 = 不属于重复算式
//将随机产生的数存在在数组中,if判断是否重复
3)题目数量可定制
//用户输入题目数量,利用for循环给出相应的题目数量
4)相关参数可控制
是否包含乘法和除法
操作数数值范围可控(如操作数 在100以内 还是1000以内)
操作数是否含负数
//用户选择
5)生成的运算题存储到外部文件result.txt中
//利用fopen
2. 功能设计
★ 基本功能
✓ 题目数量可定制 用户可输入需要的题目数量
✓ 用户选择是否包含乘法和除法
✓ 用户选择操作数数值范围(如操作数 在100以内 还是1000以内)
✓ 用户选择是否包含负数
✓ 无重复题目
✓ 运算结果均在100以内
★ 扩展功能
✓ 用户最后选择是否查看答案
3. 设计实现
使用C语言设计实现在main函数中完成程序
4. 测试运行
//基本功能运行截图
//扩展功能及存储到外部文件txt运行截图
5.代码片段
//判断随机数是否重复
suiji[k]=num1; suiji2[k]=num2; //将随机产生的数存放在数组里 for(s=0;s<k;s++) //判断随机数是否重复; { if(suiji[s]==suiji[k]&&suiji2[s]==suiji2[k]) { flag++; break; } } if(flag==1) { k--; flag--; continue; //如果两个随机数与之前重复则返回循环 重新产出随机数 }
// 解决了除法答案不保留小数点后的问题 由于产生的随机数都是int型整数,所在在做除法时自动去除了小数点后面的数,在我们实际数学运算中是错误的
if(num1/num2<100) //运算结果在100以内 { printf("%d/%d= ",num1,num2); fuhao[k]='/'; daan2[k]=(float)num1/num2; //强制转换为float型运算 k++; break; } *********************************************************** //将除法答案单独输出 for(m=0;m<k;m++) { if(fuhao[m]=='/') //如果是除法时保留小数点 printf("%.2f ",daan2[m]); else printf("%d ",daan[m]); }
6. 总结
1.通过需求分析逐步实现所需的功能。
2.测试每个小功能是否正确。
3.编写的代码不够优化,有很多不足,后续会继续改进。
7.PSP
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
Planning | 计划 | 6 | 8 |
· Estimate | · 估计这个任务需要多少时间,并规划大致工作步骤 | 6 | 8 |
Development | 开发 | 315 | 428 |
· Analysis | · 需求分析 (包括学习新技术) | 20 | 30 |
· Design Spec | · 生成设计文档 | 10 | 10 |
· Design Review | · 设计复审 (和同事审核设计文档) | 10 | 10 |
· CodingStandard | · 代码规范 (为目前的开发制定合适的规范) | 5 | 8 |
· Design | · 具体设计 | 20 | 15 |
· Coding | · 具体编码 | 200 | 300 |
· Code Review | · 代码复审 | 20 | 20 |
· Test | · 测试(自我测试,修改代码,提交修改) | 30 | 35 |
Reporting | 报告 | 35 | 30 |
· Test Report | · 测试报告 | 20 | 15 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结 ,并提出过程改进计划 | 5 | 5 |