调试怪现象之领悟

     调试可谓是程序员的基本功,调试一个程序不但需要耐心,还要不错的逻辑推理能力,笔者在刚开始调试时就和老师遇到一个怪事另二人绞尽脑汁。 

      起初是一题目,用c语言的自定义函数写一个海伦公式计算三角形面积的控制台程序。

乍看没什么问题,要验证程序的准确性,最简单是代一个三角形进去,但结果却是:

总所周知的勾股数 3 4 5却得出奇葩结果,而程序可以运行,就是不存在语法错误,这时候就要用调试的方法了。

       说到调试,先要在可以的地方设置断点,再一一排查,笔者对自己的水平不是很自信,说以如下设置断点:

我在输入的scanf都设置了断点,而调试 是:

到第十二行的调试结果显示输入是正确的,即问题不是输入时产生的,很有可能是自定义函数 的问题了,

不出所料,这就要到函数里看看了,我重新设置了断点在函数体里面:

       为了验证IF判断是否符合三角形的特点,我在28行设了断点,有很多人不明白我在28设点而不在24(28之前)设,这是因为,假如IF是个错误的判断三角形方式,那么3 4 5就很有可能跳过If的23~27行而不停在设的点上,为了观察判断的结果,还是设在28行,但这是一般思路,现在可知如果是判断出错,输入3 4 5时可能跳出的是“不能构成三角形”,结果又进一步验证了这说法:

可见3 4 5得出的错误结果应该与判断无关(但是不能肯定判断没错),下一步应该最为关键,在计算三角形面积公式上,

果然问题出现在29行了,29行S的值是由数学函数sqrt返回的,会不会是sqrt用法的错误?笔者查了一下其用法,还询问了一下老师,笔者和老师思考了很久,有可能是p。a。b。c数据类型不同而造成赋给sqrt的参数不对而造成的,但由上图可知,为了保险起见,我将所有数据设成了双精度浮点型数,就应该不是数据类型的问题了,致此,我们只有怀疑伟大的海伦——秦九韶公式是否有问题,如果真是由这个程序发现了公式的问题未尝不是伟大的发现,我们再翻阅了公式,发现:

 

 

      唉~~编程真**的难, 看来经验主义是不行的,太多的公式的参数都是求平均值,所以我们都以为P是求三边的平均值(好在高考没遇到这题,要不跪了),原来P是三边长除以2,我改回了之后:

     终于成功了,这是我调试的第一个程序,没想到令我明白这么深刻的道理,别以为什么公式都是用平均数。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值