2016011996小学生四则运算练习软件项目报告
代码未提交,所以没有地址
一.需求分析
1.程序可以接收一个参数n,随机生成n道四则运算题,+-*÷分别用+-*/来表示
2.每个数字都必须在0和100之间
3.每个运算式必须包括3~5个运算符并且至少有两种运算符
4.运算式在运算过程中不能出现负数以及小数
5.将学号以及输出的n道运算题以及答案一起输出到result.txt文件中,不输出其他信息,文件目录与程序目录一致
二.功能设计
能够根据用户输入的参数n随机产生n道符合要求的四则混合运算练习题,判断优先级,自动算出答案,并将等式以及答案以文档的形式呈现(即自己的学号还有生成的n道练习题以及对应的正确答案存于“result.txt”中)
三.设计实现
主函数实现数据的输入打印,
四.算法详解
查了资料以后知道了要解决算法优先级问题,大多数人用的都是逆波兰算法,但是我看不懂,java学的差,无法用代码实现,就只写一下大概的算法构想:
中缀表达式转换为后缀表达式(逆波兰表达式),即调度场算法(shunting yard algorithm)
1.建立运算符栈用于运算符的存储,此运算符遵循越往栈顶优先级越高的原则。
2.预处理表达式,正、负号前加0(如果一个加号(减号)出现在最前面或左括号后面,则该加号(减号) 为正负号)。
3.顺序扫描表达式,如果当前字符是数字(优先级为0的符号),则直接输出该数字;如果当前字符为运算符或者括号(优先级不为0的符号),则判断第四点。
4.若当前运算符为'(',直接入栈;若为')',出栈并顺序输出运算符直到遇到第一个'(',遇到的第一个'('出栈但不输出; 若为其它,比较运算符栈栈顶元素与当前元素的优先级:
如果栈顶元素是'(',当前元素直接入栈;
如果栈顶元素优先级>=当前元素优先级,出栈并顺序输出运算符直到栈顶元素优先级<当前元素优先级,然后当前元素入栈;
如果栈顶元素优先级<当前元素优先级,当前元素直接入栈。
5.重复第三点直到表达式扫描完毕。
6.顺序出栈并输出运算符直到栈元素为空。
7.最后解析后缀表达式,对逆波兰表达式求值,得到运算结果。
五.测试运行
六.代码展示
七.PSP展示
PSP2.1 |
任务内容 |
计划共完成需要的时间/h |
实际完成需要的时间/h |
Planning |
计划 |
2 |
2 |
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
33.5 |
41.5 |
Development |
开发 |
2 |
2 |
· Analysis |
· 需求分析 (包括学习新技术) |
1 |
1 |
· Design Spec |
· 生成设计文档 |
0.5 |
0.5 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
1 |
1 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
1 |
3 |
· Design |
· 具体设计 |
1 |
1 |
· Coding |
· 具体编码 |
12 |
18 |
· Code Review |
· 代码复审 |
6 |
6 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
1 |
1 |
Reporting |
报告 |
1 |
1 |
· Test Report |
· 测试报告 |
2 |
2 |
· Size Measurement |
· 计算工作量 |
1 |
1 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
2 |
2 |
八.总结反思
编程的时间对我很漫长难熬,毫无头绪,而且很多不会,又回头去看java基础书,查了也还是不会,实现不了程序的功能,代码写的很差,java学的也差,本来想这次作业应该是交不了的,后来想了想写博客也占了一定的分数,所以还是写一写博客,至少有点分数。心里挺难受的,交不上作业,这段时间必须得去好好地补补java知识了。