2016012069小学四则运算练习软件项目报告
代码链接:https://git.coding.net/yueshendaren/personal_project.git
目录:
1:需求分析
2:功能设计
3:设计实现
4:算法详解
5:测试运行
6:部分代码
7:作业总结
1:需求分析:题目要求我们设计一个四则运算的程序,在输入随机数n后产生n道题涉及3到5个运算符,且不能有负数和小数。练习题生成好后,输出学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。
输出实例如下:
|
|
|
|
|
2:功能设计:设计一个四则运算程序,能将运算式和答案一起输出。运算符在3—5个之间。并附带自己的学号
3:设计实现:通过随机数函数生成运算符和运算的数字,使用调度场算法来解决运算问题
4:算法详解:使用Random函数生成随机数和随机运算符
调度场算法: 由于后缀表达式求值比较容易,一个下推栈即可,所以在编译过程中,中缀表达式会转成后缀表达式。而调场度算法就是将中缀表达式转换成后缀表达式的算法。
5:测试运行:
6:部分代码:(1)生成中缀表达式
public static String zhongxu(){ int[] shuzi = new int[7]; char[] zifu = new char[7]; String wenti = ""; shuzi[0] = (int)(Math.random()*10); wenti = wenti + shuzi[0]; for(int i=0; i<5; i++) { zifu[i] = caozuo[(int)(Math.random()*3)]; if(zifu[i]=='+') shuzi[i+1] = (int)(Math.random()*10); if(zifu[i]=='-') shuzi[i+1] = (int)(Math.random()*shuzi[i]); if(zifu[i]=='*') shuzi[i+1] = (int)(Math.random()*10); if(zifu[i]=='÷') shuzi[i+1] = yueshu(shuzi[i+1]); wenti = wenti+zifu[i]+shuzi[i]; } return wenti; }
(2)生成并计算后缀表达式
public static int youxianji(char x){ if(x=='+' || x=='-') return 1; else return 2; } public static int yunsuan(int x, int y, char z) { if(z=='+') return x+y; if(z=='-') return x-y; if(z=='*') return x*y; if(z=='÷') return x/y; return -1; } public static int houxujisuan(String wenti){ char[] zifu = new char[20]; char[] caozuo = new char[20]; int[] shuzi = new int[20]; int temp = 0, pn = -1, pc = -1; zifu = wenti.toCharArray(); for(int i=0; i<zifu.length; i++){ if(Character.isDigit(zifu[i])) { temp = temp*10 + zifu[i]-'0'; if(i == zifu.length-1){ shuzi[++pn] = temp; } } else { shuzi[++pn] = temp; temp = 0; while(pc!=-1 && youxianji(caozuo[pc]) >= youxianji(caozuo[i]) ) { int num1 = shuzi[pn--]; int num2 = shuzi[pn--]; char ch1 = caozuo[pc--]; shuzi[++pn] = yunsuan(num2, num1, ch1); } if(pc == -1) caozuo[++pc] = zifu[i]; } } while(pc != -1) { int num1 = shuzi[pn--]; int num2 = shuzi[pn--]; char ch1 = caozuo[pc--]; shuzi[++pn] = yunsuan(num2, num1, ch1); } return shuzi[0]; }
7:作业总结:说实话,从刚看到作业开始就知道自己的编程能力实在是差。甚至都不知道怎么去写这个作业,最终在同学和百度的帮助下,勉强完成了这次作业。不得不说自己用的调场度算法大量借鉴了别人的博客,因为自己的能力真的有限。可能这次作业不尽人意,但它却让我意识到自己到底有多差。这学期重新学java,并不是说说而已,毕竟自己的时间真的不多了。不想也不能再这样下去了。不管这次作业的结果如何,我都会接受,我只能说,下一次的自己一定能有进步。
PSP2.1 |
任务内容 |
计划共完成需要的时间(min) | 实际完成需要的时间(min) |
Planning | 计划 | 8 | 10 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 10 | 15 |
Development | 开发 | 10 | 10 |
· Analysis | 需求分析 (包括学习新技术) | 60 | 100 |
Design Spec | 生成设计文档 | 10 | 10 |
Design Review | 设计复审 (和同事审核设计文档) | 6 | 4 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
Design | 具体设计 | 6 | 6 |
Coding | 具体编码 | 400 | 600 |
Code Review | 代码复审 | 7 | 9 |
Test | 测试(自我测试,修改代码,提交修改) | 11 | 12 |
Reporting | 报告 | 10 | 10 |
Test Report | 测试报告 | 10 | 11 |
Size Measurement | 计算工作量 | 5 | 6 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 10 | 20 |