编程中调试的作用

所谓编程中的调试,大致就如下面所展示的:

#include<stdio.h>

#include<math.h>


//调试,debug,bug
//1、将运行光标定位到Max函数内部
//2、查看a,b变量的值
//printf("%d\n",Max(10,20));
int Max(int a,int b)
{
if(a >  b)
{
return a;
}
else
{
return b;
}
}


//在长度为len的arr数组中,查找数据key
//成功返回下标,失败返回-1
int BinSearch(int *arr,int len,int key)
{
int low = 0;
int high = len-1;
int mid;
while(low <high)
{
mid = (low+high)>>1;//mid = (low+high)/2;
if(arr[mid] == key)
{
return mid;
}
else if(arr[mid] >= key)
{
high = mid;
}
else
{
low = mid;
}
}
 return -1;

}


int main()
{
int arr[10] = {1,3,5,7,9,10,11,12,13,15};
for(int i=0;i<10;i++)
{
printf("%d\n",BinSearch(arr,10,0));
}


printf("%d\n",BinSearch(arr,10,0));
printf("%d\n",BinSearch(arr,10,8));
printf("%d\n",BinSearch(arr,10,100));


如果按照以上方式输入代码,那么将输出以下内容:




我们可以清晰的发现,在应该出现数字 9 的地方数字却消失不见了!!那么数字 9 到底去哪里了呢???!!!

在这个时候 如果我们进行调试的话,我们就可以很直观的看出问题出在哪里了。


因为已经知道了是在数字 9 出现的地方出现错误,所以我们可以直接令i等于9,然后进入该函数。


然后依次点击逐语句,并观察监视1中各个数据的变化及其规律。

当其运算到这一步时:


!!!!突然间,我们会发现,如果high=mid,或者low=mid,这样的运算是没有意义的,应该将表达式修改为high=mid+1,将low=mid,修改为low=mid-1,只有这样,运算才能拥有它的意义。

修改之后我们可以看到。。。。。。!!!!!!似乎出现的并不是我们想要的结果。

但我们一定不能灰心,毕竟真理就是在不断失败后所得出的嘛!!!!

我们重新观察一下这个新的错误,可以发现这一次在第一个数的位置就已经出现错误了,所以我们重新对它进行调试,在i=0的时候就进入函数内部,得到该图:


然后依次进行逐语句,观察其数据的变化,可以很清楚的找到规律。

不禁可以发现,如果按照一开始定义的 while(low<high),那将会少了一步运算,所以我们会马上想到应该将以前定义的表达式改为while(low<=high),然后运行程序,你会发现。。。。。。你成功了!!!!1



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值