C编程练习004

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

运行结果

ZPCC0P.png


VcSFJJ.md.png


  目录