C编程练习005

1、题目

在已知两个从小到大有序的数表中寻找都出现的第一个元素

2、代码

/*******************************************************************************************************
** 题    目: 在已知两个从小到大有序的数表中寻找都出现的第一个元素
********************************************************************************************************/
#include <stdio.h>
#include <conio.h>

int *search(int *pa,int *pb,int an,int bn)
{
    int *ca,*cb;

    /* 为ca、cb设定初值 */
    ca = pa;
    cb = pb;

    while ((ca<pa+an) && (cb<pb+bn))    /*两个数表都未考察完*/
    {
        /* 在两个数表中找下一个相等的元素 */
        if(*ca<*cb)        /*数表1的当前元素<数表2的当前元素*/
        {
            ca++;        /*调整数表1的当前元素指针*/
        }
        else if(*ca>*cb)/*数表1的当前元素>数表2的当前元素*/
        {
            cb++;        /*调整数表2的当前元素指针*/
        }
        else            /*数表1的当前元素==数表2的当前元素*/
        {
            return ca;    /*返回在这两个数表中找到相等元素*/
        }
    }
    return NULL;
}

// 主函数
int main(void)
{
    int *vp,i;
    int a[ ]={1,3,5,7,9,13,15,27,29,37};
    int b[ ]={2,4,6,8,10,13,14,27,29,37};
    puts("The elements of array a is:");
    for (i = 0; i<sizeof(a)/sizeof(a[0]); i++)
    {
        printf(" %d",a[i]);
    }
    puts("\nThe elements of array b is:");
    for (i = 0; i < sizeof(b)/sizeof(b[0]); i++)
    {
        printf(" %d",b[i]);
    }
    vp = search(a, b, sizeof(a)/sizeof(a[0]), sizeof(b)/sizeof(b[0]));
    if(vp) 
    {
        printf("\nThe first same number in both arrays is %d\n",*vp);
    }
    else 
    {
        printf("Not found!\n");
    }
    puts("\n Press any key to quit...\n");
    getch();
}

运行结果

VYJ6yR.png


VcSFJJ.md.png


 上一篇
C编程练习006 C编程练习006
1、题目 在一个有限的正整数序列中,有些数会多次重复出现在这个序列中。如序列3,1,2,1,5,1,2。其中1就出现3次,2出现2次,3出现1次,5出现1次。要求对于给定的正整数序列,从小到大依次输出序列中出现的数及出现的次数。 数据约定
2018-06-05
下一篇 
C编程练习004 C编程练习004
1、题目 寻找数组元素第一次出现的位置 假如有如下一个数组: int a[]={5,2,0,13,14,999,666, 55, 66, 88, 1, 5, 9}; 该怎么从这个数组中查找66第一次出现的位置(数组下标)呢? 2、代码/*
2018-06-01
  目录