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
这样的指针。