伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

易错:函数方式实现二分查找整形数组

来源:本站原创 浏览:83次 时间:2022-03-24

可能实现函数实现二分查找,我们首先想到的是接下来这种代码:

//二分查找#include <stdio.h>#include <string.h>int cz_sz(int num[],int a){int left,right,mid;left=0;right=sizeof(num)/sizeof(num[0])-1;mid=(left+right)/2;while(left<=right){if(num[mid]>a){right=mid+1;}elseif(num[mid]<a){left=mid+1;}elsereturn mid;}if(left>right)return 0;}int main(){int left,right,mid;int a,t;int num[]={1,2,3,4,5,6,7,8,9,10};printf ("请输入你要查找的值:");scanf ("%d",&a);t=cz_sz(num,a);if(0==t){printf ("没有找到\n");}else{printf ("找到了,下标为:%d\n",t);}return 0;}

然后你会尴尬的发现:
当你输入了数组当中有的数字之后,他居然给我返回一个..........话不多说上图:

????这是怎么回事呢

原来啊,数组在传参的时候仅仅只是传参了首地址过去。、,所以才会导致计算长度的时候出现错误。
我们的解决办法是,把计算数组长度放在主函数里面,在主调函数中多增加一个参数,来解决问题。
朋友们我们一定要记住:形参其实只是实参的一份临时拷贝,对形参的改变不会改变实参值,只有通过传址调用建立联系才能对值进行更改(简而言之:使用指针!!!!)

我们将函数改为如下即可:

//二分查找#include <stdio.h>#include <string.h>int cz_sz(int num[], int a, int b){int left, right, mid;left = 0;right = b - 1;while (left <= right){mid = (left + right) / 2;if (num[mid] > a){right = mid + 1;}elseif (num[mid] < a){left = mid + 1;}elsereturn mid;}return 0;}int main(){int a, t;int num[] = { 1,2,3,4,5,6,7,8,9,10 };int b = sizeof(num) / sizeof(num[0]);printf("请输入你要查找的值:");scanf_s("%d", &a);t = cz_sz(num,a,b);if (0 == t){printf("没有找到\n");}else{printf("找到了,下标为:%d\n", t);}}


现在执行就没有什么问题了,希望读者能够技术分享,有什么问题指出来,哈哈。然后,scanf_s函数是我在VS2019中程序的规范要求!!!!!











  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net