用两种方式实现表达式自动计算
}
while(c!='\\0') /*直到字符串最后扫描结束*/ { } return 0;
else
c=integer[i++]; /*扫描下一个*/ return 1;
if(c=='.') /*只要有一个字符为小数点就不是整数*/
四、运行结果
在输入表达式没有错误的情况下,可以得到两种算法的运算结果为:
图5 表达式正确时两种算法运行结果图
如果表达式的输入有错误,运行结果分别如下:
- 16 -
用两种方式实现表达式自动计算
五、遇到的问题及解决
这次作业我主要遇到了如下两个问题,其内容与解决方法如下所列: ? 将字符表示的数字转化为浮点数
这个操作的主要目的就是数字是用一串字符表示的,在计算的过程中就要把字符串转化成对应的浮点数,要解决这个问题,首先查找C语言的库函数,其中找到一个可以将字符串转化为浮点数的函数atof()。那么就需要将数值的一串字符存入预定的数组中。
出现这种情况,首先确定后缀表达式是正确的,但在后缀表达式的计算时出现了错误,导致结果出错。检查程序,没有语法错误。逐步打印可以看到的结果,发现在利用atof后用printf函数打印时出现了错误,最后才发现是因为在每一次调用atof时都要将一串字符存入trans数组,可是,每次存储结束时,却忘记将trans数组的索引重新设为0,这就导致了数组中是多个数都存到了数组中,然后就把数组转化为浮点数,导致了浮点数不是应得的数值。只要将trans的数组索引i每次都归零就可以了。
? 在将中缀转化为后缀表达式的过程中,得不到结果
得到用户输入的中缀表达式后调用函数,目的是得到后缀表达式
由于学习C语言的时候使用的编译器是WIN TC而这次编程使用的是VC,询问过用VC的人之后才知道,如果字符串没有结束符号就会“喊烫”。检查程序后才知道,
- 17 -
用两种方式实现表达式自动计算
在将中缀转化为后缀的时候,在最后没有对字符串手动的加入'\\0'来表示结束。因此,在程序的最后加入ch[k]='\\0'; 就可以了。
六、心得体会
通过这次作业,我不仅把大一时所学的C语言复习了一遍,而且还又一遍的深刻理解了C语言,并且对运用C语言编程又有了深一步的了解。当时看书时一看就会,但一遇到编程的问题还是难住了,总感觉没有什么思路,而这次作业,给自己一个不得不动手操作的机会,在十月的这几天中,复习了以前学过的C的基本知识,然后一点一点的摸索,遇到了错误和同学一起讨论,有问题自己想办法解决,最后程序调试出来的时候,会觉得真的很高兴。
我知道,我们现在的水平还很差,要想学习好这门课,在以后就要多动手操作,书上的例题或算法,最好都自己编写程序实现,那样可以加深对算法的理解,也可以提高我们编程的水平。同时,很多的东西理解了,可是在实现的时候还是有很多的错误发生,在以后的练习和实践中,应该多动手,遇到问题多思考,即使方案不是最优的也要想办法自己解决,然后和好的方案进行比较,从中找出自己的不足在哪里。
从这一次作业中我发现了我的不足,今后我会努力改正我的不足。
- 18 -