C语言中的交集

ghg1uchk  于 2022-12-03  发布在  其他
关注(0)|答案(3)|浏览(279)

新手新的程序员在这里。目前正在尝试一个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
    }
}

任何帮助都是感激不尽的。

kgsdhlau

kgsdhlau1#

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

r[temp]==a[i]

==是比较运算符,=是赋值运算符。
2-您的代码计算两个集合[1]的交集(即两个集合之间的公共元素),而不是并集。
3-你可以使用r来计算两个集合的并集。记住,两个集合的并集是两个集合中所有元素的集合,公共元素只重复一次。
4-您的最终结果应该存储在一个数组中,其大小为输入集大小之和(在您的情况下为20),或者存储在一个动态分配的数组中。
[1]我假设输入数组是集合,即没有冗余元素,即使你从来没有检查过是否是这种情况。

eqqqjvef

eqqqjvef2#

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

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
}

希望这对你有帮助。

6yoyoihd

6yoyoihd3#

在j的for循环中添加了分号,请删除分号,它将正常工作。

相关问题