代码地址:https://git.coding.net/luckydelbert/program.git
需求分析:
1.控制题目的个数
2.控制生成数的范围
3.运算符不超过三个(括号也是运算符),括号的位置随机出现
4.能够处理真假分数,并且查重
功能设计:
1.在控制台输入题目的个数及生成数的范围
2.在文本中写出答案并与标准答案进行对比
3.给出题目错对个数等详细情况
设计实现:
1.char getSignal();//随机产生运算符
2.string getNum(int);//随机产生运算数
3.string change(string);//将中缀表达式转化为逆波兰式
4.float getResult(string);//后缀表达式求值
5.string product(int);//产生四则运算式子
6.int getRand();//生成随机数
对于查重我的算法思路是根据逆波兰式将输出的字符串遍历,分别压入两个栈中,一个符号栈,一个数字栈,只有符号栈的符号相同且顺序一致,并且数字栈中数字相同且至少有一个数字的顺序相同,这时可以判定这两个逆波兰式是相同的,即该四则运算是相同的。
测试运行:
控制台:
Exercises文件:
Answers文件:
myAnswers文件:
Grade文件:
个人软件过程:
小结:
这次作业真的做的很累,我是考研的,然后这个作业要求需要1周时间来完成,但这一周前六天我都在看考研的书,做数学,看政治,练英语什么的,不是说懈怠这门课的作业,而是原本都规划好考研期间每天必须完成的硬性任务是什么,然后一周的考研任务提前在六天内做完,然后挤出一天时间来做作业,从中午一直做到了第二天早上六点,一夜没合眼,在中途出了很多麻烦,比如将中缀表达式转换成逆波兰式的算法出现了内存泄漏,我暂时无法尽快排错,于是马不停蹄立刻换了算法。在项目伊始,我先是打算用纯C编写程序的,谁知道编到一半,出现了字符串导致的程序中断,由于C没有直接给出string类型,导致字符串会出现很多关于指针方面的错误,因为时间紧迫,我又一时无法立刻找到BUG,于是我又推倒了重来,改用C++编写,最后砍掉了需求中要求对分数的处理问题,最后差不多搞到凌晨四点左右,查重的算法我没有参考什么书本,只是单纯在草稿纸上推演了下,觉得可以通过逆波兰式和栈来解决,但是实在是脑子都疼了,真的编不下去了,然后在博文中的功能设计模块写了自己算法的思路。最后四点多到早上六点多都在看git的用法以及撰写博文。
这次的项目,可以说是让我大体重新学习了C,然后还稍稍涉及了一些C++的编程,但是由于C++也是有指针的关系,出现BUG真的让人崩溃。主要是怪自己没好好听过一节java课,感觉用java更简单一些,它的很多方法都封装好了,拿出来用就好了,而且没有指针,写起来可能不需要像C++,C那么的顾虑。得补觉了,不然20多岁要掉头发了。。。。