【经典问题】寻找数组元素第一次出现的位置


1、题目

寻找数组元素第一次出现的位置

假如有如下一个数组:

int a[]={5,2,0,13,14,999,666, 55, 66, 88, 1, 5, 9};

该怎么从这个数组中查找66第一次出现的位置(数组下标)呢?

2、代码

/*******************************************************************************************************
** 题    目: 寻找数组元素第一次出现的位置
********************************************************************************************************/
#include <stdio.h>
#include <conio.h>

#define  Method   1  // 非0:方法一  0:方法二


#if Method
// 方法一:函数返回找到元素的下标(使用指针的方式)
int search(int *arr,// 已知数表的首元指针
		   int n,	// 数表中元素个数
		   int key)	// 要寻找的值
{
	int *p;
	for (p = arr; p < arr+n; p++)
	{
		if (*p == key)
		{
			return p - arr; // 返回找到元素的下标
		}
	}
	return -1;	// 未查找到key
}

#else
// 方法二:函数返回找到元素的下标(使用数组的方式)
int search(int *arr,// 已知数表的首元指针
		   int n,	// 数表中元素个数
		   int key)	// 要寻找的值
{
	int i;
	for (i = 0; i < n; i++)
	{
		if (arr[i] == key)
		{
			return i; // 返回找到元素的下标
		}
	}
	return -1;  // 未查找到key
}
#endif

// 定义一个全局数组
int a[]={5,2,0,13,14,999,666, 55, 66, 88, 1, 5, 9};

// 主函数
int main(void)
{
	int i, key;
	int *p;

	printf("The elements of array a is:\n");
	for (i = 0; i < sizeof(a)/sizeof(a[0]); i++)
	{
		printf(" %d",a[i]);
	}
	puts("\nPlease input the key number you want to search:");
	scanf("%d", &key);
	i = search(a,sizeof(a)/sizeof(a[0]),key);
	printf("\nThe index of the key number %d in the array is: %d.", key, i);
	getch();

	return 0;
}

小知识:平时也有看到如下写法

search(int arr[], int n, int key)

int arr[] 最终都会转换为 int *arr 这样的指针。

运行结果



文章作者: 杂烩君
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 杂烩君 !
  目录