您的位置:首页 > 其它

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

2017-11-16 18:06 537 查看

在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++)
{

a224
if (a[i] == b[j])
{
flag = 1;
printf("有相同元素\n");
break;
}
}
if(flag)
break;
}
if (! flag)
printf("没有相同元素\n");
printf("%d", flag);
getchar();
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: