求并集和交集的C程序

求并集和交集的C程序,c,C,以下是我的代码: #include <stdio.h> void arrays() { int i,n,j; printf("Enter the size of the arrays:\n"); scanf("%d",&n); int a1[n]; int a2[n]; int intersection[2*n], unions[n]; printf("Enter elements of the first arra

以下是我的代码:

#include <stdio.h>

void arrays()
{
    int i,n,j;
    printf("Enter the size of the arrays:\n");
    scanf("%d",&n);

    int a1[n];
    int a2[n];
    int intersection[2*n], unions[n];
    printf("Enter elements of the first array:\n");

    for (i = 0; i < n; i++)
    {
        scanf("%d",&a1[i]);
    }
    printf("Enter elements of the second array:\n");
    for (j = 0; j < n; j++)
    {
        scanf("%d",&a2[j]);
    }
    int indexs = -1, indexu = -1;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            unions[++indexu] = a1[j];
        }
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            if(a1[i] == a2[j])
            {
                intersection[++indexs] = a2[j];
            }
            else
            {
                unions[++indexu] = a2[j];
            }
        }
    }

    printf("Intersection:\n");
    printf("Union:\n");
    for(i = 0; i < indexs; i++)
        printf("%d",intersection[i]);
    for (j = 0; j < indexu; j++)
        printf("%d" ,unions[j]);
}
现在,我很难找到并集和交叉点。我试图修复我的循环,但我找不到问题出在哪里 我的方法是首先比较第一个数组和第二个数组。因为union表示两个数组中的所有元素。然后第二个是找到重复的号码,将先去十字路口。或者如果联合中没有存储任何元素。它也将进入联合数组。 有人能帮忙吗?
谢谢

其中一个问题在输出部分

printf("Intersection:\n");
printf("Union:\n");
for(i = 0; i < indexs; i++)
    printf("%d",intersection[i]);
for (j = 0; j < indexu; j++)
    printf("%d" ,unions[j]);

那么,您的代码会产生什么样的输出输入数组的大小:2输入第一个数组的元素:2输入第二个数组的元素:3 4相交:联合:232334它不会显示相交为什么相交数组的大小是联合数组的两倍?首先,代码中的嵌套循环第三个循环将产生输出到联合中,远远超出其定义的限制,进入未定义行为的领域。此循环对将n*n个项目转储到联合中,一个仅n宽的数组。使已经造成的损害更为严重的是,在进入第四个循环之前没有重置indexu,这将进一步扩展到UB泥潭中。如果在调试器中运行,所有这些都很容易发现。其他问题:1您的第一个联合循环不应该是双循环,而应该是单循环,2当您计算其他联合项时,如果元素与其他任何一个元素不匹配,您将包括它们,虽然只有当它与所有其他元素不匹配时,才应该包含它,并且3您的最终打印循环应该与此更改一致,但由于其他问题,它仍然不会显示任何交点。
printf("Intersection:\n");
for(i = 0; i <= indexs; i++)
    printf("%d",intersection[i]);
printf("\n");
printf("Union:\n");
for (j = 0; j <= indexu; j++)
    printf("%d" ,unions[j]);
printf("\n");