交叉点设置在C中

时间:2016-02-26 18:33:12

标签: c

新手新程序员在这里。目前正在尝试一个C问题,我必须从用户输入两组并在它们之间打印相似的元素,即联合集。我确实得到了答案但由于某种原因我不能将类似的元素存储在第三个数组中。我确实在网上获得了代码,但想知道为什么这不起作用。看看代码以便更好地理解: -

#include<stdio.h>
#include<conio.h>
void main ()
{
    system("cls");
    int i, j, temp=0, a[10], b[10], r[10]; //a and b=input sets r=resultant set
    printf("Enter first set :-\n");
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]); 
    }
    printf("Enter second set :-\n");
    for(i=0;i<10;i++)
    {
        scanf("%d",&b[i]);
    }
    for(i=0;i<10;i++)
    {
        for(j=0;j<10;j++);
        {
            if(a[i]==b[j])
            {
                r[temp]=a[i]; /* If i make a printf here and print the elements directly here and here then it works but storing it in a third array gives me a garbage value when printed */
                temp++;
                break;
            }
        }
    }
    printf("Resultant array is ");
    for(i=0;i<=temp;i++)
    {
        printf("%d ",r[i]); //Always only 2 garbage values would be printed
    }
}

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

1-您需要在此行中将==运算符更改为=运算符

r[temp]==a[i]

==是比较运算符,=是赋值运算符。

2-你的代码计算两组[1]的交集(即两组之间的共同元素),而不是联合。

3-您可以使用r来计算两组的并集。请记住,两个集合的并集是两个集合中所有元素的集合,常见的集合只重复一次。

4-您的最终结果应该存储在一个数组中,其大小是输入集大小的总和(在您的情况下为20),或者是动态分配的数组。

[1]我假设输入数组是集合,即没有冗余元素,即使你从不检查是否是这种情况。

答案 1 :(得分:0)

您的代码中的问题位于以下行;

for(j=0;j<10;j++);

此处您在最后添加了semicolon,这使循环无需转到下一行并在代码中生成j = 10

删除semicolon并执行此操作

for(j=0;j<10;j++)

同样在最后for loop修改如下;

for(i=0;i<temp;i++) // remove i <= temp, otherwise it will print garbage value for last entry
{
   printf("%d ",r[i]); //Always only 2 garbage values would be printed
}

希望这有帮助。