面向对象程序设计 第四次作业

仓库传送门click here

作业题目

本次作业是在第三次的作业上进行修改和提高。与以往作业不同之处在于,要用调用的方式,也就是在命令行中输入计算式得到结果,对于我来说还是比较新鲜的事儿。然而本次作业的核心部分是在将计算式的结果计算出来,这是一个难点。

以下为效果图:

作业中的几个问题

1、本次要求用到栈来分别储存数字和符号,栈是一个类似于队列的结构,具有“后进先出”的特点,对于这次作业中运算表达式的处理更有效;

2、对于计算式中优先级的问题,我采用了中缀表达式转后缀表达式的方法,从中又顺便get到了二叉树的遍历方法,最近又刚好有看过深度优先的遍历方法,对比了一下,发现这两种遍历在不同情况下都能发挥各自的优点,顿时感受到编程语言的博大精深和前人的智慧无穷,自己还有很多的知识要慢慢学;

3、对于计算式中负数的问题,我一开始没有思路,感觉在这次写的calculation类里怎么处理都不方便,后来转移目标,发现在第三次作业中写的scan类里改代码,能更方便判断和处理负数的问题;

4、bool类型变量的使用:想必很多菜鸟都和我一样,喜欢把变量集中写在函数的开头部分,然而作为一个逻辑变量,bool类型变量的定义在大多数情况下不能简单的归放在开头,否则会导致逻辑的先后错误,例如,在运算过程中得出了一个变量值x,然后用bool类型变量判断它是否等于一个数,若是在一开始就给bool变量定义好,那么照编译器从上往下的顺序编译,它就查不到bool类型变量中x的含义,导致无法运行。在大一上学期c语言的学习过程中,会有定义变量都在开头的习惯和要求,然而c++提供了这样的便利,即在函数的任何部分都能定义类型变量,随用随定义,这会使我们更好地运用bool类型变量;

5、在编译器的环境下运行时,一开始,我输入完表达式按回车,显示停止工作,就这个迷之bug困惑了我将近一个星期,我上网查了好多资料,请教了好多同学,还是没能改好,我将代码改写了一遍又一遍,甚至在同学的建议下眼含泪水删了所有代码重新了两遍终于在崩溃的边缘发现了问题出处,原来是忘记了对空栈情况的判断。空栈!!!想必这个玩意儿肯定难倒过无数英雄汉,如果不先对空栈进行判断就对栈中元素进行处理,就会遇到迷之bug!!!

6、变量类型的转换,还是挺简单的,用就可以很快捷的处理,需要注意的就是对于streamstring变量,每次运行完都要记得clear掉,才能避免麻烦出现,这里提供一个的文章链接click here

7、最后就是参数的问题,int argc, char* argv[]这两个,前者表示参数个数,后者表示第几个参数,应用了这俩东西后,不用在代码里添加另外的输入语句,就能运行结果出来。

总结

一开始我尝试过自己写一个处理优先级的方法,几经挫败后果断放弃了念头,采用了中缀后缀表达式的方式,说明并不是所有方法都要我们自己想出来才是厉害的,要学会借鉴前人的优秀方法;对于负数的问题,由于我及时地转移了突破口,改在scan类的代码中寻求突破,最后完美地解决;还有就是空栈问题,切记要优先判断。最后感慨,做个程序猿真不易,有时要眼睁睁地看着自己写了一个下午的代码全部删了再从头写过,无可奈何。这是一个很需要耐心和细心的专业,网上的段子真不是逗你玩的,这世界上本来没有脏话,代码敲多了,就会有的- (。・`ω´・)然而我相信,我会是站着到最后的嘿嘿嘿。

今天科比告别球场,引用科比的一句话,以此铭志:低头不是认输,是要看清自己的路;仰头不是骄傲,是要看见自己的天空。

posted @ 2016-04-14 20:23  Mr.who  阅读(405)  评论(5编辑  收藏  举报