阅读代码时候易犯的小错误和调试方法的成果实践

阅读代码时候易犯的小错误和调试方法的成果实践_第1张图片

前面将数逐个输入的部分已经完成了。这里是为了使数字从大到小排布。我想起来了谭浩强在书上写的交换数组数的程序但是我写错了,而且找不到问题在哪里,我就用了老师教的printf函数的检验方法,经过几次调整printf函数输出的位置,我终于发现了合适的检测输出结果的检测位置:

阅读代码时候易犯的小错误和调试方法的成果实践_第2张图片

由于听了网上说的谭浩强的书有问题就开始怀疑书上代码的正确性了,然而我去看那著名的——谭浩强第四册错误不完全收集(第五册大多继承了第四册)找到了源代码,却发现没有问题。我不信,又拿教材配套源码进行测试,结果发现没有问题。我不甘心,然后死磕,搞得脑子疼,但是我再仔细阅读我的代码之后就发现是因为:阅读代码时候易犯的小错误和调试方法的成果实践_第3张图片

它直接把我排序好了后又因k!=i所以又交换了一次,把原本对的给交换成错误的了,这里刚好交换一次错的之后交换条件就再也没有满足过了。

阅读代码时候易犯的小错误和调试方法的成果实践_第4张图片

把if(i!=k)去掉然后在if(x[j]>x[k])后面加个大括号把原来的if(i!=k)后面的交换语句进行“接管”就行了(把i赋予k后k==i,if(x[j]>x[k])与if(i!=k)等价),x[i]==x[j]则完全不用考虑也没有关系。

阅读代码时候易犯的小错误和调试方法的成果实践_第5张图片

成功了。

阅读代码时候易犯的小错误和调试方法的成果实践_第6张图片

与已经成功的我的进行比较,这与原来的错误的带啊知识因为for(j)的大括号的范围不同,其他程序语句一摸一样,但是就是因为这一个小问题,这段代码(谭浩强真正的源码)的意思就从先把数组里的最大数提取到第一位然后再分别按大小提取,变成了数跟着for循环转移(如果条件满足的话),一个个去比较相邻的数。

你可能感兴趣的:(算法)