【小杨带你刷好题】C语言篇~day3

在这里插入图片描述

文章目录

每篇前言

1.导语
2.习题:数组查值

      1.经典方法–直接遍历
      2.进阶方法–二分查找

3.结语

每篇前言

✅作者简介:大家好,我是小杨
📃个人主页:「小杨」的csdn博客
🔥系列专栏:小杨带你玩转C语言【初阶】
🐳希望大家多多支持🥰一起进步呀!

在这里插入图片描述

导语

   本篇博客主要向各位小伙伴们讲解C语言的经典例题<数组查值>,带领各位小伙伴们一起刷C语言,希望各位小伙伴们能够在这里收获多多!让我们一起努力!一起进步!希望大家能够通过阅读这篇博客,受益良多!


习题:数组查值

习题描述:

在一个有序数组中查找一个数值,判断该数在有序数组中是否存在,若存在,则求出该数的位置。

1.经典解法--直接遍历

方法分析:

具体来说,直接遍历就是将数组中的元素从头开始依次与需要查找的数进行一一核对,直到抵达你所期望的元素为止。

习题代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int i = 0;//定义初始位置下标为0:
	int n = 0;//初始化需查找的数为0;
	int arr[] = { 1,2,3,4,5,6,7,8,9,10};
	int sz = sizeof(arr) / sizeof(arr[0]);//求数组的长度sz
	printf("请输入你想查找的数为:");
	scanf("%d", &n);
	for (i = 0; i < sz; i++)
	{
		if (n == arr[i])
		{
			printf("%d在这个数组中,下标为%d",n ,i );
			break;
		}
	}if (n != arr[i])
	{
		printf("%d不在这个数组中", n);
	}
	return 0;
}

为了让小伙伴们能够更好的了解代码输出的正确性,特意为你们分别对数组元素在与不在这两种情况进行分析输出。

程序代码输出果如下:

查找的数值在数组中

在这里插入图片描述

查找的数值不在数组中

在这里插入图片描述


由此返回目录

2.进阶解法--二分查找

方法分析:

将子表中间位置所表示的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

程序代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int arr[] = { 3,4,5,6,7,8,9,10,11,12 };
	int sz = sizeof(arr) / sizeof(arr[0]);//求数组的长度sz
	int ret = 0;  //定义需查找的数为ret
	int left = 0; //初始位置下标为0
	int right = sz - 1; //最终位置下标为sz-1
	int mid = 0; //中间值
	printf("请输入你想查找的数为:");
	scanf("%d", &ret);
	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] < ret)
		{
			left = mid + 1;
		}
		else if (arr[mid] > ret)
		{
			right = mid - 1;
		}
		else
		{
			printf("该数找到了,下标位置是;%d", mid);
			break;
		}
	}
	if (left > right)
	{
		printf("该数在数组中未找到");
	}
	return 0;
}

为了让小伙伴们能够更好的了解代码输出的正确性,特意为你们分别对数组元素在与不在这两种情况进行分析输出。

程序代码输出结果如下:

查找的数值在数组中

在这里插入图片描述

查找的数值不在数组中

在这里插入图片描述


由此返回目录

结语

各位小伙伴们,今天的试题讲解就先到了这里!

小伙伴们,切记!这些示例代码一定要记得自己实际操作一下,这样才能加深对这些知识的理解!

最后,感谢每一位小伙伴的阅读,让我们一起努力,一起加油,一起进步!
在这里插入图片描述


  • 51
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 35
    评论
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小杨MiManchi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值