编写程序,实现两个集合的交运算(用C语言)

两个题,向高手求教,不胜感激:
1、已知两个整数集合中的数据以递增次序分别存放在数组A,B中,编写程序实现两个集合的交运算(即取两个集合相同的数据元素),并把得到的交集数据存放在数组A中,在程序中不允许再定义第三个数组。
2、若有一下说明和语句:int c[4][5], (*cp)[5]; cp=c;下面对c数组元素正确的引用是()
A) cp+1 B) *(cp+3) C) *(cp+1)+3 D)*(*cp+2) (我最大的困惑是c数组是一个4行5列的数组,而cp指针应该指向一个元素为5的数组,那么cp指针赋给数组c,究竟是指向二维数组的列还是指向行)

多谢!

#include<stdio.h>
#include<string.h>
int jiaoji(int A[],int B[],int a,int b)
{
int i,j,t;
t=a;
for(i=0;i<a;i++)
for(j=0;j<b;j++)
{
if(A[i]==B[j])
{
A[t]=B[j];
t++;
}
}
for(i=0;i<t-a;i++)
{
  A[i]=A[a+i];
}
return t-a;
}
int main ()

int A[50],B[50],a,b,t;
printf("请输入A的元素个数:\n");
scanf("%d",&a);
printf("请输入A的元素:\n");
for(int i=0;i<a;i++)
scanf("%d",&A[i]);
printf("请输入B的元素个数:\n");
scanf("%d",&b);
printf("请输入B的元素:\n");
for(int i=0;i<b;i++)
scanf("%d",&B[i]);
t=jiaoji(A,B,a,b);
for(int i=0;i<t;i++)
printf("%d ",A[i]);
return 0;
}

追问

return t-a和return 0是什么意思啊?

return t-a和return 0是什么意思啊?

追答

第一个是return t-a,,获得A中并之后的元素的个数

return 0 是因为我定义的是int  main()函数,

需要个返回值,如果定义成void 就不需要

#include<stdio.h>
#include<string.h>
int jiaoji(int A[],int B[],int a,int b)
{
    int i,j,t;
    t=a;
    for(i=0;i<a;i++)
        for(j=0;j<b;j++)
        {
            if(A[i]==B[j])
            {
                A[t]=B[j];
                t++;
            }
        }
        for(i=0;i<t-a;i++)
        {
          A[i]=A[a+i];
        }
        return t-a;
}
void main ()

    int A[50],B[50],a,b,t;
    printf("请输入A的元素个数:\n");
    scanf("%d",&a);
    printf("请输入A的元素:\n");
    for(int i=0;i<a;i++)
        scanf("%d",&A[i]);
    printf("请输入B的元素个数:\n");
    scanf("%d",&b);
    printf("请输入B的元素:\n");
    for(int i=0;i<b;i++)
        scanf("%d",&B[i]);
    t=jiaoji(A,B,a,b);
    for(int i=0;i<t;i++)
        printf("%d ",A[i]);

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-01-04
第一题就一个两重循环,把A中的每个元素逐个跟B比较,如果有相同的话则保留下来,没有相同的就去掉。
第二题cp是一个指向数组的指针,cp虽然是首地址和int *p = c[0]还是有区别的,(cp+n)和(p+n)得到的结果是不同的,你可以用VC跟踪下。(CP+n)表示第n行的首地址,*(CP+n) 等价于 (int *p = c[n]),*(cp+n) + m表示第n行第m列的地址,再指一下话即(*(*(cp+n)+m))表示第n行m列的元素的值。追问

也就是说(*cp)[5]里的5和c数组有多少行没有关系是吧

追答

写这东西浪费时间。

用c语言求两个集合的交集,并集,差集
} \/* 交集 *\/\/* A与B的交集(A∩B):既属于A又属于B的元素构成的集合 *\/int setIntersection (set A, set B, set *dest) {int i = 0, j = 0, k = 0;dest->length = 0;for (i=0; i<A.length; i++) { \/* 外循环遍历A *\/for (j=0; j<B.length; j++) { \/* ...

用c语言编写两个集合的运算
print(C);clear(C);fun_sub(A,B,C);printf("集合A与集合B的差:\\n");

本人碰见一道C语言难题,寻大神帮助,利用C语言实现:求任意两个集合的交集...
以前写过一个纯C的, 用的是数组,模拟C++ STL里面的set_intersection,set_union和set_difference的实现。 稍作了修改,添加了些注释,希望能帮到你。注意:必须先对输入集合排序;输出结果和C++ STL的测试结果吻合。include <stdio.h>#include <stdlib.h>#include <string.h>int set_intersection (...

用C语言简单编写两个集合的交,并,差,对称差
对称差函数`sym`利用并集和交集的计算结果,找出两个集合的对称差。首先计算两个集合的并集,去除交集部分,得到对称差。程序通过`input`函数实现集合元素的用户输入,确保每个元素在集合中唯一。最后,`main`函数提供了交互式输入界面,用户可以选择执行不同的集合操作。程序简洁高效,适用于学习C语言集合操...

用C语言实现: 已知两个集合A,B(成员为整数),求两个集合的交集,并集...
\/\/ 专用头结点head->num = 0;printf("输入 %d 整数(空格隔开):\\n",n);for(i = 0; i < n; ++i) {p->next = (AGG *)malloc(sizeof(AGG));scanf("%d",&p->next->num);p = p->next;}p->next = head;return head;}void RiseSort(AGG *head) { \/\/ 上升排序AGG *p,...

编写程序实现两个集合的并、交,相对补,对称差的运算并判断两个集合是否...
include<stdio.h>#include<stdlib.h>int unionSets(int *A, int *B, int lenA, int lenB)\/\/并集{int i, j;int flag, index = lenB;int *buffer = (int*)malloc(sizeof(int) * (lenA + lenB));for (i = 0; i < lenB; i++) {buffer[i] = B[i];}for (i = 0; i < ...

实验、集合的交、并差 用c语言
include "stdio.h"int input(int d[],int n){int i;\/\/n=0;do{scanf("%d",d+n);n+=1;}while(d[n-1]>=0);d[n-1]='\\0';return n-1;}void sort(int d[],int *n){int i,j,t,k;for(i=0;i<*n-1;i++){for(j=*n-1;j>i;j--){if(d[j]==d[j-1]){*n...

求一个C语言程序 要求两个集合的交集 并集 笛卡尔乘积 在线等_百度...
if(A[i]==B[j]){C[k++]=A[i];再跳出j循环,回到i,反正不是break那个C存交} 同样∪用循环,首先把A中的全部放入D中,B中的元素如果C中有,不写入D中,没有写入D中,或者去看D中有没有,决定写不写!笛卡尔积用二维数组,for(i=0,k=0,i<A的长度,i++)for(j=0,j<B的长度,...

数据结构 用c语言写的 集合的并、交和差运算的程序
可以用二个一维数组,再用两个for循环来判断结果:交,并,差 在for循环中,用一个if来判断一下,是不是a[0]==b[j],只要有相等的,就令之放在c[0]这就是交集!!并集就好求吧,只要令c[i]=a[i],再来一个就是c[i+j+1]=b[j](因为我这里是考虑j=0开始的,然后自加差就是在交上改动一下...

...两个整数集合 a,b. 分别编写函数求这两个集合的并集(剔除重复元...
include<iostream>using namespace std;class MergeList{int *a;int size;public:MergeList(int size,int init){this->size=size;a=new int[size];for(int i=0;i<size;i++){a[i]=init;}}MergeList(){}MergeList(const MergeList&obj){this->size=obj.size;a=new int[size];for(int ...

相似回答