当前位置:首页 » 编程语言 » 集合的交并差c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

集合的交并差c语言

发布时间: 2023-04-03 21:53:16

A. 用c语言编写一个集合的交,并和差运算的程序怎么写啊

/*第一,你的题意不明,我只能输入两个集合了【互异性由输入保证】*/
#include<stdio.h>
#include<string.h>
void main()
{
char temp[60]="",str1[30]="",str2[30]="",i,j,l1,l2,ch;
printf("STR1:");
gets(str1);
printf("STR2:");
gets(str2);
l1=strlen(str1);
l2=strlen(str2);
//交集
printf(" 交集: {");
for(i=0;i<l1;i++)
for(j=0;j<l2;j++)
if(str1[i]==str2[j]) printf("%c,",str1[i]);
printf("} ");

//并集 偷懒的算法: 合并->排序->删除相同
printf(" 并集: {");

/*合并*/sprintf(temp,"%s%s",str1,str2);
/*排序*/
for(i=0;i<l1+l2-1;i++)
for(j=i+1;j<l1+l2;j++)
if(temp[i]>temp[j])
{
char ch;
ch=temp[i];
temp[i]=temp[j];
temp[j]=ch;
}
/*删除相同字符*/
for(i=j=1;i<l1+l2;i++)
if(temp[i]!=temp[j-1]) temp[j++]=temp[i];
temp[j]=''
for(i=0;i<j;i++)
printf("%c,",temp[i]);
printf("} ");
//CuA
printf(" CuA: {");
for(ch='a'ch<='z'ch++)
{
for(i=0;i<l1;i++)
if(ch==str1[i]) goto NOT;
printf("%c,",ch);
NOT:if(0);
}
printf("} ");
//CuB
printf(" CuB: {");
for(ch='a'ch<='z'ch++)
{
for(i=0;i<l2;i++)
if(ch==str2[i]) goto NOT2;
printf("%c,",ch);
NOT2:if(0);
}
printf("} ");
}

B. 集合的并,交,差以及它们的混合运算的算法(c语言)

/*diff.c:差运算*/
#include<stdio.h>
#include<stdlib.h>
intset_a[5]={1,3,5,9,7};//非0元素构成的集合
intset_b[5]={1,5,2,8,4};
intset_c[10]={0};
intisin(inta_or_b,intelem)
{
int*set_tmp;
intcnt;
switch(a_or_b)
{
case1:
set_tmp=set_b;
break;
case2:
set_tmp=set_a;
break;
default:
printf("parametererror! ");
}
for(cnt=0;cnt<5;cnt++)
{
if(set_tmp[cnt]==elem)
{
return1;
}
}
return0;
}
intmain(intargc,char*argv[])
{
intcnt,cnt2=0;
for(cnt=0;cnt<5;cnt++)
{
if(isin(1,set_a[cnt])==1)//如果集合a中的元素在集合b中
{
set_c[cnt2++]=set_a[cnt];
}
}
printf("Theresultofdiff: ");
for(cnt=0;set_c[cnt]!=0;cnt++)//输出非0元素
{
printf("%d ",set_c[cnt]);
}
putchar(' ');
return0;
}

亲是要这样做差运算吗?

C. 关于C语言数据结构线性表之集合的并交差

#include<stdio.h>
#include<stdlib.h>

#define N 1024

void sort(char *pt);
void bingji();
void jiaoji();
void chaji();

char str1[N],str2[N];
int main()
{
printf("请输入两个全由漏高仿小写字母构成的字念册符串,每行一个:\n");
gets(str1);
gets(str2);
bingji();
jiaoji();
chaji();
system("PAUSE");
return EXIT_SUCCESS;
}
void sort(char *pt)
{
int i,j;
char c;

for(i=0;i<strlen(pt)-1;i++)
{
for(j=strlen(pt)-1;j>i;j--)
{
if(pt[j]<pt[j-1])
{
c=pt[j-1];
pt[j-1]=pt[j];
pt[j]=c;
}
}
}
}
int iscontain(char a[],int len,char c)
{
int i;

for(i=0;i<len;i++)
{
if(c==a[i])
{
return 1;
}
}
return 0;
}
void bingji()
{
int i,j,len,len1=strlen(str1),len2=strlen(str2);
char* buf=(char*)calloc(len1+len2+1,sizeof(char));

for(i=0,j=0,len=0;i<len1||j<len2;)
{
if(i<len1)
{
if(!iscontain(buf,len,str1[i]))
{
buf[len++]=str1[i];
}
i++;
}
if(j<len2)
{
if(!iscontain(buf,len,str2[j]))
{
buf[len++]=str2[j];
}
j++;
}
}
buf[len]='\0';
sort(buf);
printf("%s\返纤n",buf);
free(buf);
}
void jiaoji()
{
int i,len,len1=strlen(str1),len2=strlen(str2);
char buf[N];

for(i=0,len=0;i<strlen(str1);i++)
{
if(!iscontain(buf,len,str1[i]) && iscontain(str2,len2,str1[i]))
{
buf[len++]=str1[i];
}
}
buf[len]='\0';
sort(buf);
printf("%s\n",buf);
}
void chaji()
{
int i,len,len1=strlen(str1),len2=strlen(str2);
char buf[N];

for(i=0,len=0;i<len1;i++)
{
if(!iscontain(buf,len,str1[i]) && !iscontain(str2,len2,str1[i]))
{
buf[len++]=str1[i];
}
}
buf[len]='\0';
sort(buf);
printf("%s\n",buf);
}

D. 怎样用C语言实现集合的并交呢

#include<stdio.h>
#include<stdlib.h>

typedef struct pointer{
char dat;
struct pointer *link;
} pointer;

void readdata(pointer *head)
{ //读集合
pointer *p;
char tmp;
printf("input data ('0' for end):");
scanf("%c",&tmp);
while(tmp!='0')
{
if((tmp<'a')||(tmp>'z'))
{
printf("输入错误!必须为小写字母!\n");
return;
}
p=(pointer *)malloc(sizeof(struct pointer));
p->dat=tmp;
p->link=head->link;
head->link=p;
scanf("%c",&tmp);
}
}

void disp(pointer *head)
{ //显示集合数据
pointer *p;
p=head->link;
while(p!=NULL)
{
printf("%c ",p->dat);
p=p->link;
}
printf("\n");
}

void bing(pointer *head1,pointer *head2, pointer *head3)
{ //计算集合1与集合2的并
pointer *p1,*p2,*p3;
p1=head1->link;
while(p1!=NULL)
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->dat=p1->dat;
p3->link=head3->link;
head3->link=p3;
p1=p1->link;
}
p2=head2->link;
while(p2!=NULL)
{
p1=head1->link;
while((p1!=NULL)&&(p1->dat!=p2->dat))
p1=p1->link;
if(p1==NULL)
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->dat=p2->dat;
p3->link=head3->link;
head3->link=p3;
}
p2=p2->link;
}
}

void jiao(pointer *head1,pointer *head2, pointer *head3)
{ //计算集合1与集合2的交
pointer *p1,*p2,*p3;
p1=head1->link;
while(p1!=NULL)
{
p2=head2->link;
while((p2!=NULL)&&(p2->dat!=p1->dat))
p2=p2->link;
if((p2!=NULL)&&(p2->dat=p1->dat))
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->dat=p1->dat;
p3->link=head3->link;
head3->link=p3;
}
p1=p1->link;
}
}

main()
{
pointer *head1,*head2,*head3;
head1=(pointer *)malloc(sizeof(struct pointer));
head1->link=NULL;
head2=(pointer *)malloc(sizeof(struct pointer));
head2->link=NULL;
head3=(pointer *)malloc(sizeof(struct pointer));
head3->link=NULL;
printf("输入集合1:\n");
readdata(head1);
getchar();
printf("输入集合2:\n");
readdata(head2);
printf("集合1为:\n");
disp(head1);
printf("集合2为:\n");
disp(head2);
printf("集合1与集合2的并为:\n");
bing(head1,head2,head3);
disp(head3);
head3->link=NULL;
printf("集合1与集合2的交为:\n");
jiao(head1,head2,head3);
disp(head3);
}

E. C语言求集合运算

可以用线性表模拟集合,把两个线性表中一样的数提取出来就是交集,所有元素组成的就是并集,还可以用C++重载运算符实现+就求并集之类的。

F. 实验、集合的交、并差 用c语言

#include"stdio.h"

intinput(intd[],intn)
{
inti;
//n=0;
do
{
scanf("%d",d+n);
n+=1;
}while(d[n-1]>=0);
d[n-1]='';
returnn-1;
}
voidsort(intd[],int*n)
{
inti,j,t,k;
for(i=0;i<*n-1;i++)
{
for(j=*n-1;j>i;j--)
{ if(d[j]==d[j-1])
{
*n-=1;
for(k=j;k<*n;k++)
d[k]=d[k+1];
}
if(d[j]<d[j-1])
{
t=d[j];d[j]=d[j-1];d[j-1]=t;
}

}
}
}
intfn(intd1[],intnum1,intd2[],intnum2)
{
inti,j,m;

for(i=0;i<num1;i++)
{
m=0;
for(j=0;j<num2;j++)
{
if(d1[i]==d2[j])
{
m=1;
break;
}
}
if(m==0)
printf("%d,",d1[i]);
}
}
intmain()
{
intA[100],B[100],C[200];
intnuma,numb,n;
inti,j;
//输入
printf("inputsortA:");
numa=input(A,0);
sort(A,&numa);
printf("inputsortB:");
numb=input(B,0);
sort(B,&numb);
//交集
printf("集合交集A∩B={");
for(i=0;i<numa;i++)
{
for(j=0;j<numb;j++)
{
if(A[i]==B[j])
{
printf("%d,",A[i]);
}

}
}
printf("} ");
//并集
n=numa+numb;
printf("集合并集A∪B={");
for(i=0;i<numa;i++)
{
C[i]=A[i];
}
for(i=numa;i<n;i++)
{
C[i]=B[i-numa];
}
sort(C,&n);
for(i=0;i<n;i++)
printf("%d,",C[i]);
printf("} ");
//集合差
printf("A-B={");
fn(A,numa,B,numb);
printf("} ");
}

G. 数据结构 用c语言写的 集合的并、交和差运算的程序

可以用二个一维数组,
再用两个for循环来判断结果:交,并,差
在for循环中,用一个if来判断一下,是不是a[0]==b[j],只要有相等的,就令之放在c[0]
这就是交集!!

并集就好求吧,
只要令c[i]=a[i],再来一个就是c[i+j+1]=b[j](因为我这里是考虑j=0开始的,然后自加差就是在交上改动一下就可以了,只要是a[0]!=b[j],就把它放到c[]这个数组里面去~!!!!

1:并集的程序。

求集合LA和集合LB的并集

#define NULL 0

struct JD
{ int data;
struct JD *next;
};

int find(int number,struct JD *h)
{ while(h->data)
{ if(h->data!=number)
{ h=h->next;
continue;
}
else
return 0;
}
return 1;
}

struct JD * make()
{ struct JD *h=NULL,*p=NULL;
int number,tf;
h=(struct JD *)malloc(sizeof(struct JD));
scanf("%d",&h->data);
p=h;
while(p->data)
{ p->next=(struct JD *)malloc(sizeof(struct JD));
p=p->next;
p->data=0;
scanf("%d",&number);
tf=find(number,h);
if(tf)
p->data=number;
else
continue;
}
return h;
}

void print(struct JD *h)
{ while(h->data)
{ printf("%d ",h->data);
h=h->next;
}
}

struct JD * change(struct JD *la,struct JD *lb)
{ struct JD *h,*p,*s,*q;
int number,tf;
p=lb;
while(p->data)
{ number=p->data;
tf=find(number,la);
p=p->next;
if(tf)
{ s=(struct JD *)malloc(sizeof(struct JD));
s->data=number;
s->next=la;
la=s;
}
else
continue;
}
return la;
}

void del(struct JD *h)
{ struct JD *p=h->next;
while(h->data)
{ free(h);
h=p;
p=p->next;
}
free(h);
}

main()
{ struct JD *la,*lb;
printf("\n\nGive the number to LA :\n\n");
la=make();
printf("\nLA is: ");
print(la);
printf("\n\nGive the number to LB :\n\n");
lb=make();
printf("\nLB is: ");
print(lb);
la=change(la,lb);
printf("\n\n\nThe new LA=LA||LB is: ");
print(la);
del(la);
del(lb);
printf("\n\n\nPass any key to exit...!\n");
getch();
}

********** 程序运行结果 **********
Give the number to LA :
1↓
2↓
3↓
5↓
0↓

LA is: 1 2 3 5

Give the number to LB :

6↓
7↓
3↓
2↓
9↓
0↓

LB is: 6 7 3 2 9

The new LA=LA||LB is: 9 7 6 1 2 3 5

--------------------------------------------------
Pass any key to exit...!

H. 用c语言编写两个集合的运算

记得采纳哦

集合

#include "stdafx.h"

#include <stdio.h>

int fun(int a,int M[])//判断元素是否在集合里 在返回1 不在返回0

{

int i=0;

for(i=0;M[i]!=0;i++)

if(a==M[i]) return 1;

return 0;

}

void get(int M[])//输入集合元素

{

int i=0;

printf(" ");

do

{

scanf("%d",&M[i++]);

}

while(M[i-1]!=0);

}

void print(int M[])//打印集合

{

int i=0;

printf(" ");

while(M[i]!=0)

{

printf("%d ",M[i++]);

}

printf(" ");

}

void clear(int M[])

{

int i=0;

do

{

M[i++]=0;

}

while(M[i]!=0);

}

void fun_sum(int A[],int B[],int C[])//集合A和集合B的并集

{

int i,j;

for(i=0;A[i]!=0;i++)

{

C[i]=A[i];

}

for(j=0;B[j]!=0;j++)

{

if(!fun(B[j],C)) C[i++]=B[j];

}

}

void fun_sub(int A[],int B[],int C[])//集合A和集合B的差集

{

int i,j=0;

for(i=0;A[i]!=0;i++)

{

if(!fun(A[i],B)) C[j++]=A[i];

}

}

void fun_J(int A[],int B[],int C[])//集合A和集合B的交集

{

int i,j=0;

for(i=0;A[i]!=0;i++)

{

if(fun(A[i],B)) C[j++]=A[i];

}

}

int main(int argc, char* argv[])

{

int A[50]={0},B[50]={0},C[100]={0};

printf("请输入集合A以0结束 ");

get(A);

printf("请输入集合B以0结束 ");

get(B);

fun_sum(A,B,C);

printf("集合A与集合B的并: ");

print(C);

clear(C);

fun_sub(A,B,C);

printf("集合A与集合B的差: ");

print(C);

clear(C);

fun_J(A,B,C);

printf("集合A与集合B的交: ");

print(C);

return 0;

}

I. 用c语言求两个集合的交集,并集,差集

#include<stdio.h>
#include<string.h>
#include<conio.h>

#defineARR_LEN255 /*数组长度上限*/
#defineelemTypechar /*集合元素数据类型*/

/*集合数据结构*/
typedefstructset{
elemTypedata[ARR_LEN];
intlength;
}set;

/*初始化集合*/
voidinitSet(set*S){
S->length=0;
}

/*交集*/
/*A与B的交集(A∩B):既属于A又属于B的元素构成的集合*/
intsetIntersection(setA,setB,set*dest){
inti=0,j=0,k=0;
dest->length=0;
for(i=0;i<A.length;i++){/*外循环遍历A*/
for(j=0;j<B.length;j++){/*内循环遍历B*/
if(A.data[i]==B.data[j]){/*既属于A又属于B的迹培元素,存入dest*/
dest->data[k]=A.data[i];
k++;
}
}
}
dest->length=k;
if(dest->length)
return1;
else
return0;
}

/*并集*/
/*A与B的并集(A∪B):A与B所有元素构成的集合*/
intsetUnion(setA,setB,set*dest){
inti=0,j=0,k=0;
dest->length=0;
for(i=0;i<A.length;i++){/*外循环遍历A*/
for(j=0;j<B.length;j++){/*内循环遍历B*/
if(A.data[i]==B.data[j])/*既属于A又属于B的元素,跳过*/
break;
}
if(j==B.length){/*属于A但不属于B的元素,存入dest*/
dest->data[k]=A.data[i];
k++;
}
}
for(j=0;j<B.length;j++){/*B的所有元素,存入dest*/
dest->data[k]=B.data[j];
k++;
}
dest->length=k;
if(dest->length)
return1;
else
return0;
}

/*补集*/
/*B在A中的相对补集(A\B):属于A但不属于B的元素构成的集合*/
intsetComplement(setA,setB,set*dest){
inti=0,j=0,k=0;
dest->length=0;
for(i=0;i<A.length;i++){/*外循环遍历A*/
for(j=0;j<B.length;j++){/*内循环遍历B*/
if(A.data[i]==B.data[j])/*既属于A又属于B的元素,跳过*/
break;
}
if(j==B.length){/*属简禅于A但不属于B的元素,存入dest*/
dest->data[k]=A.data[i];
k++;
}
}
dest->length=k;
if(dest->length)
return1;
else
return0;
}

/*打印集合内容*/
intprintSet(setS){
inti;
if(S.length==0){
puts("Thesetisempty!");
return0;
}
for(i=0;i<S.length;i++)
printf("%c",S.data[i]);
putchar(' ');
return1;
}

intmain(void){
setA,B;
setAIB,AUB,ACB;拦州尘/*交集、并集、补集*/

initSet(&A);initSet(&B);
initSet(&AIB);initSet(&AUB);initSet(&ACB);

strcpy(A.data,"123");
A.length=strlen(A.data);
strcpy(B.data,"4532");
B.length=strlen(B.data);

printf("A: ");
printSet(A);
printf("B: ");
printSet(B);
putchar(' ');

printf("A∩B: ");
setIntersection(A,B,&AIB);
printSet(AIB);

printf("A∪B: ");
setUnion(A,B,&AUB);
printSet(AUB);

printf("A\B: ");
setComplement(A,B,&ACB);
printSet(ACB);

getch();/*屏幕暂留*/
return0;
}

J. C++在类中实现集合的交,并,差运算,怎么做呀

1,是否属于集合,就拿这个元素和集合里面的比较啊,如果想等就存在。
2,实现并,就是拿一个集合A里面的一个元素,和另外一个集合B的元素比较,如果想等就不要这个A中元素。不想等就把A中这个元素加入到B中,前提是B数组足够大。也可以再建立个C集合。
3,实现交 ,就是把集合A中元素和集合B中元素想等的取出来,放到C中。
上面主要是利用for 循环进行。