判断两数组是否有相同元素

来源:互联网 发布:js 判断手机号码 编辑:程序博客网 时间:2024/05/13 16:59

在C语言中判断两数组是否有相同元素,有相同输出有,没有输出没有。

我们首先的思路是定义两个数组,使用两个for循环语句,内循环判断两数组是否有相同元素,有就输出有,跳出两个循环,然后在循环外用一个判断语句判断,没有就输出没有,基本设计思路如下:

#include<stdio.h>int main(){    int i, j;    int a[] = { 1, 2, 3, 4 };    int b[] = { 3, 5, 6, 8, 9 };    int flag = 0;    for (i = 0; i < 4; i++)    {        for (j = 0; j < 5; j++)        {            if (a[i] == b[j])            {                flag = 1;                printf("有相同元素\n");                break;            }        }            break;    }    if (!flag)        printf("没有相同元素\n");    getchar();    return 0;}

这个程序粗一看没有什么问题吧!,但运行结果却是:没有相同元素

这是为什么?,其实错误就出在了第二个break了,当数组a中1和数组b中所有元素比较完之后,根据程序跳出内循环,此时遇到了第二个break,那好,执行break,跳出外循环。看到了没,此时程序出错,因为跳出外循环后数组a中第二个数就不能和数组b中所有元素比较了,然会它去执行if (!flag),所以输出没有相同元素。

那么正确的改进方式是:

  • 第二个break前加 if( flag) 判断语句,这样保证了程序的正确执行。
  • 循环条件改为 i < sizeof(a) / sizeof(a[0]) ,j < sizeof(b) / sizeof(b[0]),这样保证了程序的通用性。

正确程序为:

#include<stdio.h>int main(){    int i, j;    int a[] = { 1, 2, 3, 4 };    int b[] = { 3, 5, 6, 8, 9 };    int flag = 0;    for (i = 0; i < sizeof(a) / sizeof(a[0]); i++)    {        for (j = 0; j < sizeof(b) / sizeof(b[0]); j++)        {            if (a[i] == b[j])            {                flag = 1;                printf("有相同元素\n");                break;            }        }          if(flag)            break;    }    if (! flag)        printf("没有相同元素\n");    printf("%d", flag);    getchar();    return 0;}
原创粉丝点击