集合的特征函数交并补运算c语言
C语言实现集合的交,并,差

C语言实现集合的交,并,差公司内部编号:(GOOD-TMMT-MMUT-UUPTY-UUYY-DTTI-【问题描述】编制一个能演示执行集合的并、交和差运算的程序【基本要求】(1)集合的元素限定为小写字母字符[ 'a'......'z' ](2 )演示程序以用户和计算机对话的方式执行【测试数据】【实现提示】以有序链表表示集合【代码过程】1。
先定义集合的数据类型.{ElemType data;LNode *next;}*Link, *Position;typedef struct...{Link head,tail;int len;}LinkSet;.{.{.{if(h1->data < (link->data) && h2->data > (link->data) ) .{ .{.{.{pre = h; h=h->next; j++;}if(j==0) return NULL;return pre;}Status PrintSets(LinkSet &ls)...{.{printf("%c ",h->data);h = h->next;}printf(" ] ");return OK;}Position GetHead(LinkSet &ls)...{.{.{.{.{.{.{.{.{int result = Compare(pa,pb); .{DelFirst(lsa,node);Append(lsc,node); pa =NextPos(ha); .{ .{DelFirst(lsb,node); pb = NextPos(hb);.{DelFirst(lsa,node);Append(lsc,node);}while(!Empty(lsb))...{DelFirst(lsb,node);Append(lsc,node);}return OK;}Status IntersectionSets(LinkSet &lsa,LinkSet &lsb, LinkSet &lsc)...{ .{int result = Compare(pa,pb);if( result<0) ...{DelFirst(lsa,node);pa = NextPos(ha);}else if(result>0)...{DelFirst(lsb,node); pb = NextPos(hb);}else...{DelFirst(lsb,node); Append(lsc,node);pb = NextPos(hb);DelFirst(lsa,node);pa = NextPos(ha);}}while(!Empty(lsa))...{DelFirst(lsa,node);Append(lsc,node);}return OK;}Status DifferenceSets(LinkSet &lsa,LinkSet &lsb, LinkSet &lsc)...{.{int result = Compare(pa,pb);if( result<0) ...{DelFirst(lsa,node);Append(lsc,node);pa = NextPos(ha); }else if(result>0)...{DelFirst(lsb,node); pb = NextPos(hb);}else...{DelFirst(lsa,node); pa = NextPos(ha);DelFirst(lsb,node); pb = NextPos(hb);}}return OK;}Status CopySets(LinkSet lsa, LinkSet lsb)...{.{Link node;CreateNode(node,la->data);lb=node;++;la = la->next;lb = lb->next;}= lb;return OK;}.{printf("************************************************************** ************** " );printf("*MakeSet1-1 MakeSet1-2 Union-u Intersection-i Difference-d Quit-q * " );printf("************************************************************** ************** " );}void main()...{LinkSet set1,set2,set3,seta,setb;InitSets(set1),InitSets(set2); .{Initialization();printf("集合Set1:");PrintSets(set1); .{case '1': //集合set1 赋值printf("请输入集合Set1的内容:");fflush(stdin);gets(setsContent);InitSets(set1);SetSets(set1,setsContent);break;case '2': //集合set1 赋值printf("请输入集合Set1的内容:");fflush(stdin);gets(setsContent);SetSets(set2,setsContent);break;case 'u':case 'U': //求并InitSets(set3);CopySets(set1,seta); //因为求并的算法是添加一个节点,删除set1,set2中对应的节点,CopySets(set2,setb); //所以要复制一份UnionSets(seta,setb,set3); //下同printf("set1 U set2=: ");PrintSets(set3);fflush(stdin);getchar();break;case 'i':case 'I': //求交InitSets(set3);CopySets(set1,seta);CopySets(set2,setb);IntersectionSets(seta,setb,set3);printf("set1 交 set2=: ");fflush(stdin);getchar();break;case 'd':case 'D': //求差 InitSets(set3);CopySets(set1,seta);CopySets(set2,setb);DifferenceSets(seta,setb,set3);printf("set1 - set2=: ");PrintSets(set3);fflush(stdin);getchar();break;case 'q':case 'Q':exit(0);break;}system("cls"); //清屏}} //~。
集合的特征函数交并补运算C语言

system("color 1B"); printf("请输入集合 U 元素数目:"); ;scanf("%d",&nu); getchar();
二三四子函数功能equal判断集合a和集合b是否相等main函数输入全集u元素个数和各元素输入全集a元素个数和各元素输入全集b元素个数和各元素获得a和b的特征函数值调用子函数进行交并补运算结束intersect求集合a和集合b的交集union求集合a和集合b的并集complement求集合a或集合b的补集五测试举例六程序源码作者
用集合的特征函数实现集合间的运算
一、 二、 三、
实现功能:利用集合的特征函数实现集合间的运算。 实验说明:本程序用 C 语言编写,具体实现了集合的交并补运算。 程序思路(流程图表示):
Main()函数
输入全集 U 元素个 数和各元素
输入全集 A 元素个数和 各元素
输入全集 B 元素个数和 各元素
获得 A 和 B 的特征函数 值
#include <stdio.h> #include <stdlib.h>
int Equal(int m[100],int n[100],int num){//子函数:判断集合 A 和集合 B 是否相等 int i,flag = 1; for(i=0;i<num;i++){ if(m[i] != n[i]){ flag = 0; } } if(flag == 0) printf("\n 集合 A 和集合 B 不相等\n"); if(flag == 1) printf("\n 集合 A 和集合 B 相等\n"); return 1; }
c语言程序求集合的并集,交集,差集运算

C语言是一种广泛应用的计算机程序设计语言,它具有高效、灵活、可移植等特点,因此在计算机科学领域被广泛应用。
本篇文章将探讨在C语言中如何求集合的并集、交集和差集运算。
一、集合的概念集合是数学中重要的概念,它是由元素组成的无序的集合体。
在计算机科学中,我们常常需要对集合进行各种操作,比如求并集、交集、差集等。
二、集合的表示方法在C语言中,我们可以使用数组来表示集合。
数组是一种非常基础的数据结构,它由相同类型的元素组成的有序集合。
我们可以通过定义数组来表示一个集合,并通过遍历数组来进行各种集合运算。
三、集合的并集运算集合A和集合B的并集运算是指将A和B中的所有元素放在一起组成一个新的集合。
在C语言中,我们可以通过遍历两个数组,将它们的元素放在一个新的数组中即可实现并集运算。
下面是C语言中求两个集合的并集运算的示例代码:```#include <stdio.h>int m本人n() {int setA[] = {1, 2, 3, 4, 5};int setB[] = {3, 4, 5, 6, 7};int setSize = 5;int setUnion[10];int unionSize = 0;for (int i = 0; i < setSize; i++) {setUnion[unionSize++] = setA[i]; }for (int i = 0; i < setSize; i++) {int found = 0;for (int j = 0; j < setSize; j++) {if (setB[i] == setA[j]) {found = 1;break;}}if (!found) {setUnion[unionSize++] = setB[i];}}// 输出并集for (int i = 0; i < unionSize; i++) {printf("d ", setUnion[i]);}return 0;}```以上代码中,我们定义了两个集合setA和setB,分别表示集合A和集合B,然后通过遍历这两个数组,将它们的元素放入一个新的数组setUnion中。
c语言的集合的交并补

printf("}\n");
printf("A-B={");
bianli(bu, num3);
printf("}\n");
return 0;
}
通过键盘,分别输入两个数据元素类型为正整数的集合A和B,以负数输入为结束条件,输出两个集合的交、并、差。从程序完善性上考虑,集合元素输入时,要有检查元素重复的功能。集合可以用数组也可以用链表存储。
输入: A={1,2,3,4,5} B={3,4,5,6,7}
输出 A交B={3, 4, 5}
A并B={1,2,3,4,5,6,7}
}
}
int main(){
int c;
int a[N],count1,b[N],count2;//a,b两个集合,以及数量
int jiao[N],bing[2*N],bu[N];//交并补三个集合
int num1=0,num2=0,num3=0;
printf("请输入第一个集合:\n");
for(int i=0;i<N;i++){
for(int i=0;i<=count1;i++){//用b数组遍历bing
for(int j=0;j<=count2;j++){
if(b[i]==bing[j])
break;
if(j==count2)
bing[num2++]=b[i];
}
}
//求a对b的补集
for(int i=0;i<=count1;i++){
for(int j=0;j<=count2;j++){
C语言实现集合的交,并,差

【问题描述】编制一个能演示执行集合的并、交和差运算的程序【基本要求】(1)集合的元素限定为小写字母字符[ 'a'......'z' ](2 )演示程序以用户和计算机对话的方式执行【测试数据】【实现提示】以有序链表表示集合【代码过程】1。
先定义集合的数据类型notes.htypedef struct LNode...{ElemType data;LNode *next;}*Link, *Position;typedef struct...{Link head,tail;int len;}LinkSet;//~#include<stdio.h>#include <malloc.h>#include <stdlib.h>//函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define ElemType int //存放数据的类型typedef int Status; //函数的返回值//~/**//****************** 函数定义*********************/ Status InitSets(LinkSet &ls)...{//初始化集合ls.head = (Link) malloc( sizeof(Link));ls.tail = (Link) malloc( sizeof(Link));if(!ls.head || !ls.tail) exit(OVERFLOW); //如果分配失败>next = ls.tail->next = NULL; //头、尾指针为空ls.len = 0; //长度为0return OK;}Status CreateNode(Link &link,ElemType e)...{//创建一节点,内容为elink = (Link) malloc( sizeof(Link));if(!link) exit(OVERFLOW);link->data = e; //值设定link->next = NULL; //指向空return OK;}Position PriorInsertNode(LinkSet &ls,Link &link)...{//找出节点link要插入到ls的前一个节点if(!ls.head->next) return ls.head;Link h1 = ls.head->next, h2 = h1->next; //h1:前一节点,h2:前一节点的后一节点if(link->data < h1->data) return ls.head; //如果比第一个节点小,返回头指针while(h1 && h2)...{if(h1->data < (link->data) && h2->data > (link->data) ) //如果>h1 && <h2,说明找到插入的地方了break;if(h1->data == (link->data) || h2->data ==(link->data) )return NULL; //如果重复,返回NULL else //否则,顺次往后挪一个节点h1=h2,h2=h1->next;}return h1;}Status Append(LinkSet &ls, Link &link)...{//向集合末尾追加节点if(ls.head->next == NULL) ls.head->next = link;else ls.tail->next->next = link;ls.tail->next = link;ls.len ++;return OK;}Status InsertNode(LinkSet &ls, Link &link)...{//向集合中插入节点Position p = PriorInsertNode(ls,link);if(!p) return ERROR; //如果集合中已有相应元素link->next = p->next;if(!p->next) ls.tail->next = link; //如果前一节点为尾节点,修改tail p->next = link;ls.len++;return OK;}Position PriorNode(LinkSet &ls, Link &link)...{//返回集合中该节点的前一节点,不存在返回NULLint j=0;Link pre,h = ls.head;while(h->next && j<=ls.len && h!=link)...{pre = h; h=h->next; j++;}if(j==0) return NULL;return pre;}Status PrintSets(LinkSet &ls)...{//打印集合Link h=ls.head->next;printf("[ ");while(h)...{printf("%c ",h->data);h = h->next;}printf(" ] ");return OK;}Position GetHead(LinkSet &ls)...{//获得集合的头节点return ls.head;}Position NextPos(Link &link)...{//获得当前节点的下一个节点return link?link->next:link;}Status Empty(LinkSet &ls)...{//空为真return ls.head->next==NULL;}ElemType GetCurElem(Link &link)...{//获得当前节点的数据return link->data;}int Compare(Link &la, Link &lb)...{//判断两个节点的大小return la->data - lb->data;}int Compare(ElemType e1, ElemType e2)...{//比较两个数字的大小return e1-e2;}Status DelFirst(LinkSet &ls,Link &q)...{//已知h为线性链表的头节点,删除表中的第一个节点,并以q返回Link h = ls.head;if(!h->next) return ERROR;q = h->next;h->next = h->next->next;q->next=NULL;ls.len--;return OK;}Status FreeNode(Link &l)...{//释放节点,有问题free(l);return OK;}Status UnionSets(LinkSet lsa, LinkSet &lsb, LinkSet &lsc)...{ //已知集合ls1,ls2的元素按值非递减排列//将集合ls1,ls2的并集到ls3if( !InitSets(lsc) ) return ERROR;Link node;Link ha = lsa.head, hb=lsb.head; //找到两节点的头指针Link pa = NextPos(ha), pb = NextPos(hb);while( !Empty(lsa) && !Empty(lsb) )...{int result = Compare(pa,pb); //比较两节点大小if( result<0) ...{DelFirst(lsa,node);Append(lsc,node); pa = NextPos(ha); //向lsc插入lsa 的相关节点}else if(result>0)...{ //向lsc 插入lsb的相关节点DelFirst(lsb,node);Append(lsc,node); pb = NextPos(hb);}else...{DelFirst(lsb,node); pb = NextPos(hb);//如果两节点相同,删除lsb中重复的节点,即以lsa为标准}}while(!Empty(lsa))...{DelFirst(lsa,node);Append(lsc,node);}while(!Empty(lsb))...{DelFirst(lsb,node);Append(lsc,node);}return OK;}Status IntersectionSets(LinkSet &lsa,LinkSet &lsb, LinkSet &lsc)...{//已知集合ls1,ls2的元素按值非递减排列//将集合ls1,ls2的交集到ls3if( !InitSets(lsc) ) return ERROR;Link node;Link ha = lsa.head, hb=lsb.head;Link pa = NextPos(ha), pb = NextPos(hb);while( !Empty(lsa) && !Empty(lsb) )...{int result = Compare(pa,pb);if( result<0) ...{DelFirst(lsa,node);pa = NextPos(ha);}else if(result>0)...{DelFirst(lsb,node); pb = NextPos(hb);}else...{DelFirst(lsb,node); Append(lsc,node);pb = NextPos(hb);DelFirst(lsa,node);pa = NextPos(ha);}}while(!Empty(lsa))...{DelFirst(lsa,node);Append(lsc,node);}return OK;}Status DifferenceSets(LinkSet &lsa,LinkSet &lsb, LinkSet &lsc)...{ //已知集合ls1,ls2的元素按值非递减排列//ls3 = ls1 - ls2if( !InitSets(lsc) ) return ERROR;Link node;Link ha = lsa.head, hb=lsb.head;Link pa = NextPos(ha), pb = NextPos(hb);//,pb2 = NextPos(pb1);while( !Empty(lsa) && !Empty(lsb) )...{int result = Compare(pa,pb);if( result<0) ...{DelFirst(lsa,node);Append(lsc,node);pa = NextPos(ha);}else if(result>0)...{DelFirst(lsb,node); pb = NextPos(hb);}else...{DelFirst(lsa,node); pa = NextPos(ha);DelFirst(lsb,node); pb = NextPos(hb);}}return OK;}Status CopySets(LinkSet lsa, LinkSet lsb)...{//将集合lsa拷贝到lsb中InitSets(lsb);Link la = lsa.head->next, lb = lsb.head->next;while(la)...{Link node;CreateNode(node,la->data);lb=node;lsb.len++;la = la->next;lb = lb->next;}lsb.tail = lb;return OK;}#include "constValues.h" //常量头文件#include "notes.h" //节点定义头文件#include "setsFun.h" //集合操作函数头文件/**//**************** 测试***********************************/void Initialization()...{printf("************************************************************************* *** " );printf("*MakeSet1-1 MakeSet1-2 Union-u Intersection-i Difference-d Quit-q * " );printf("************************************************************************* *** " );}void main()...{LinkSet set1,set2,set3,seta,setb;InitSets(set1),InitSets(set2); //初始化集合while(1)...{Initialization();printf("集合Set1:");PrintSets(set1); //打印集合set1printf("集合Set2:");PrintSets(set2); //打印集合set1printf("请键入操作代码:");fflush(stdin); //清空缓冲区char oper = getchar();char setsContent[200];switch(oper)...{case '1': //集合set1 赋值printf("请输入集合Set1的内容:");fflush(stdin);gets(setsContent);InitSets(set1);SetSets(set1,setsContent);break;case '2': //集合set1 赋值printf("请输入集合Set1的内容:");fflush(stdin);gets(setsContent);InitSets(set2);SetSets(set2,setsContent);break;case 'u':case 'U': //求并InitSets(set3);CopySets(set1,seta); //因为求并的算法是添加一个节点,删除set1,set2中对应的节点,CopySets(set2,setb); //所以要复制一份UnionSets(seta,setb,set3); //下同printf("set1 U set2=: ");PrintSets(set3);fflush(stdin);getchar();break;case 'i':case 'I': //求交InitSets(set3);CopySets(set1,seta);CopySets(set2,setb);IntersectionSets(seta,setb,set3);printf("set1 交set2=: ");PrintSets(set3);fflush(stdin);getchar();break;case 'd':case 'D': //求差InitSets(set3);CopySets(set1,seta);CopySets(set2,setb);DifferenceSets(seta,setb,set3);printf("set1 - set2=: ");PrintSets(set3);fflush(stdin);getchar();break;case 'q':case 'Q':exit(0);break;}system("cls"); //清屏} }//~。
集合运算C语言代码及报告

一,问题重述集合中的元素为小字母a-小写字母z,实现以下运算:实现集合表示和集合的运算(并、交、差、补)判断集合之间、元素和集合之间的关系二,源程序及注释#include <iostream.h>#include <iomanip.h>#include <conio.h>#include <stdio.h>#include <process.h>#include <string.h>#include <math.h>#include <stdlib.h>char a[100],b[100],c[100];int p,q,i,j,n;char d[26],t;void init(char *a);void display(char *a);void jiao(char *a,char *b,char *c);void bing(char *a,char *b,char *c);void cha(char *a,char *b,char *c);void bu(char *a);void jihejihe(char *a,char *b);void yuansujihe(char *a);void main(){char choice;while (1){system("cls");cout <<"\n\n\n\n";cout <<"\t\t 静态线性表操作 \n";cout <<"\t\t========================================";cout <<"\n\n";cout <<"\t\t 1:初始化 \n";cout <<"\t\t 2:显示 \n";cout <<"\t\t 3:交 \n";cout <<"\t\t 4:并 \n";cout <<"\t\t 5:差 \n";cout <<"\t\t 6:补 \n";cout <<"\t\t 7:集合与集合之间的关系 \n";cout <<"\t\t 8:集合与元素之间的关系 \n";cout <<"\n";cout <<"\t\t 0:退出 \n";cout <<"\n";cout <<"\t\t请选择:"<< flush;choice = getch();system("cls");switch(choice){case '1':init(a);break;case '2':display(a);break;case '3':jiao(a,b,c);break;case '4':bing(a,b,c);break;case '5':cha(a,b,c);break;case '6':bu(a);break;case '7':jihejihe(a,b);break;case '8':yuansujihe(a);break;case '0':exit(0);}}}void init(char *a)//创建一个集合cout<<"请输入集合中元素个数";cin>>n;cout<<"请输入集合之中的元素";for (i=1;i<=n;i++)cin>>a[i];}void display(char *a)//输出一个集合{cout<<"{ ";for(i=1;i<=n;i++)cout<<a[i]<<"";cout<<"}";}void jiao(char *a,char *b,char *c)//求集合的交{int k;k=1;cout<<"请输入第一个集合中元素个数";cin>>p;cout<<"请输入集合之中的元素";for (i=1;i<=p;i++)cin>>a[i];cout<<"请输入第二个集合中元素个数";cin>>q;cout<<"请输入集合之中的元素";for (j=1;j<=q;j++)cin>>b[j];cout<<"{ ";//求集合的交for(i=1;i<=p;i++){for (j=1;j<=q;j++)if(a[i]==b[j]){cout<<a[i]<<"";}}cout<<"}";}void bing(char *a,char *b,char *c)//求集合的并cout<<"请输入第一个集合中元素个数";cin>>p;cout<<"请输入集合之中的元素";for (i=1;i<=p;i++)cin>>a[i];cout<<"请输入第二个集合中元素个数";cin>>q;cout<<"请输入集合之中的元素";for (j=1;j<=q;j++)cin>>b[j];for(i=1;i<=p;i++){for (j=1;j<=q;j++)if(a[i]==b[j])a[i]='0';}cout<<"{ ";for(i=1;i<=p;i++)if(a[i]!='0')cout<<a[i]<<"";for(j=1;j<=q;j++)cout<<b[j]<<"";cout<<"}";}void cha(char *a,char *b,char *c)//求集合的差{cout<<"请输入第一个集合中元素个数";cin>>p;cout<<"请输入集合之中的元素";for (i=1;i<=p;i++)cin>>a[i];cout<<"请输入第二个集合中元素个数";cin>>q;cout<<"请输入集合之中的元素";for (j=1;j<=q;j++)cin>>b[j];for(i=1;i<=p;i++){for (j=1;j<=q;j++)if(a[i]==b[j])a[i]='0';}cout<<"{ ";for(i=1;i<=p;i++)if(a[i]!='0')cout<<a[i]<<"";cout<<"}";}void bu(char *a)//集合的补{cout<<"请输入集合中元素个数";cin>>n;cout<<"请输入集合之中的元素";for (i=1;i<=n;i++)cin>>a[i];for(i=0;i<26;i++)d[i]=i+97;for(i=1;i<=n;i++)for (j=0;j<26;j++){if (a[i]==d[j])d[j]='0';}cout<<"{ ";for(j=0;j<26;j++)if(d[j]!='0')cout<<d[j]<<"";cout<<"}";}void jihejihe(char *a,char *b)//两个集合之间的关系{int k;k=0;cout<<"请输入元素较少的集合A中元素个数";cin>>p;cout<<"请输入集合之中的元素";for (i=1;i<=p;i++)cin>>a[i];cout<<"请输入元素较多的集合B中元素个数";cin>>q;cout<<"请输入集合之中的元素";for (j=1;j<=q;j++)cin>>b[j];for(i=1;i<=p;i++){for (j=1;j<=q;j++)if (a[i]==b[j])k++;}if ((k==p)&&(p!=q)) cout<<"A包含于B "; else if ((k==p)&&(p==q)) cout<<"A=B";else cout<<"A与B不存在集合之间的关系";}void yuansujihe(char *a){int k;char t;k=0;cout<<"请输入集合A中元素个数";cin>>n;cout<<"请输入集合之中的元素";for (i=1;i<=n;i++)cin>>a[i];cout<<"请输入元素t";cin>>t;for(i=1;i<=n;i++)if(a[i]==t) k++;if(k==1) cout<<"t属于A";else cout<<"t不属于A";}三,运行结果显示,设第一个集合为B={a,b,c}设第二个集合为A={a,b}则运行结果依次显示为,交,并差补:设集合为{a,b,c,d,e}则补为集合关系判断元素与集合关系四,调试和运行程序过程中产生的问题及采取的措施:四,调试和运行程序过程中产生的问题及采取的措施:1,字符数组初始化。
C语言实现集合的交_并_差

return h1;
}
Status Append(LinkSet &ls, Link &link)...{ //向集合末尾追加节点 if(ls.head->next == NULL) ls.head->next = link; else ls.tail->next->next = link; ls.tail->next = link; ls.len ++; return OK;
#define ElemType
int
//存放数据的类型
typedef int Status; //~ 3。集合实现函数
setsFun.h
//函数的返回值
/**//****************** 函数定义 *********************/ Status InitSets(LinkSet &ls)...{
}
Status PrintSets(LinkSet &ls)...{ //打印集合 Link h=ls.head->next; printf("[ "); while(h)...{ printf("%c ",h->data); h = h->next; } printf(" ] "); return OK;
typedef struct LNode...{
ElemType data;
LNode
*next;
}*Link, *Position;
typedef struct...{
Link head,tail;
int
len;
}LinkSet;
c语言实现集合的交叉并运算

c语言实现集合的交叉并运算集合是数学中的一个重要概念,它指的是一组具有共同特征的元素的整体。
在数学中,我们经常需要对集合进行交叉并运算,以求得集合之间的关系。
在本文中,我们将使用C语言来实现集合的交叉并运算。
我们需要定义集合的数据结构。
在C语言中,我们可以使用数组来表示集合。
假设我们要操作的集合元素类型为整数,那么我们可以定义一个整型数组来表示集合。
例如,我们可以定义一个名为set1的数组来表示集合A,一个名为set2的数组来表示集合B。
接下来,我们需要编写函数来实现集合的交叉并运算。
首先,我们来实现交集运算。
交集运算指的是找出两个集合中共有的元素。
我们可以通过遍历集合A中的每一个元素,然后与集合B中的每一个元素进行比较,如果找到相同的元素,则将该元素添加到交集的数组中。
具体代码实现如下:```cvoid intersection(int set1[], int set2[], int len1, int len2, int result[], int *len_res) {int i, j;*len_res = 0;for (i = 0; i < len1; i++) {for (j = 0; j < len2; j++) {if (set1[i] == set2[j]) {result[*len_res] = set1[i];(*len_res)++;break;}}}}```上述代码中,我们通过两个嵌套的循环来遍历集合A和集合B,如果找到相同的元素,则将其添加到交集的数组中,并更新交集数组的长度。
接下来,我们来实现并集运算。
并集运算指的是将两个集合中的所有元素合并成一个新的集合。
我们可以通过遍历集合A和集合B,将它们的所有元素依次添加到新的集合中。
具体代码实现如下:```cvoid unionSet(int set1[], int set2[], int len1, int len2, int result[], int *len_res) {int i;*len_res = 0;for (i = 0; i < len1; i++) {result[*len_res] = set1[i];(*len_res)++;}for (i = 0; i < len2; i++) {int j;for (j = 0; j < len1; j++) {if (set2[i] == set1[j]) {break;}}if (j == len1) {result[*len_res] = set2[i];(*len_res)++;}}}```上述代码中,我们首先将集合A中的所有元素添加到新的集合中,然后遍历集合B中的每一个元素,如果该元素不在集合A中,则将其添加到新的集合中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用集合的特征函数实现集合间的运算
一、实现功能:利用集合的特征函数实现集合间的运算。
二、实验说明:本程序用C语言编写,具体实现了集合的交并补运算。
三、程序思路(流程图表示):
Main()函数
输入全集U元素个
数和各元素
输入全集A元素个数和
各元素
输入全集B元素个数和
各元素
获得A和B的特征函数
值
调用子函数进行交并补
运算
结束
四、子函数功能
Equal()判断集合A和集合B是否相等
Intersect()求集合A和集合B的交集Union()求集合A和集合B的并集Complement()求集合A或集合B的补集五、测试举例
六、程序源码
/*-------------------------------------------
-----作者:随心无羁----------------------------
-----编译环境:VC6.0-------------------------
-----时间:2013.12.3------------------------*/
#include <stdio.h>
#include <stdlib.h>
int Equal(int m[100],int n[100],int num){//子函数:判断集合A和集合B是否相等
int i,flag = 1;
for(i=0;i<num;i++){
if(m[i] != n[i]){
flag = 0;
}
}
if(flag == 0) printf("\n集合A和集合B不相等\n");
if(flag == 1) printf("\n集合A和集合B相等\n");
return 1;
}
int Intersect(char UL[100],int m[100],int n[100],int num){//子函数:求集合A和集合B的交集int i,j,flag = 0;
char count[100];
for(j=0,i=0;i<num;i++){
f(m[i] == 1 || n[i] == 1){
count[j++] = UL[i];
flag++;
}
}
printf("集合A并B为:");
for(j=0;j<flag;j++)
printf("%c\t",count[j]);
return 1;
}
int Union(char UL[100],int m[100],int n[100],int num){//子函数:求集合A和集合B的并集int i,j,flag = 0;
char count[100];
for(j=0,i=0;i<num;i++){
if(m[i] == 1 && n[i] == 1){
count[j++] = UL[i];
flag++;
}
}
printf("\n集合A交B为:");
for(j=0;j<flag;j++)
printf("%c\t",count[j]);
return 1;
}
int Complement(char UL[100],int m[100],int num,int k){//子函数:求集合A或集合B的补集int i,j,flag = 0;
char count[100];
char L;
for(j=0,i=0;i<num;i++){
if(m[i] == 0){
count[j++] = UL[i];
lag++;
}
}
f(k ==1) L='A';
if(k ==2) L='B';
printf("\n集合%c的补集:",L);
for(j=0;j<flag;j++)
printf("%c\t",count[j]);
return 1;
}
int main()
{
char A[10],B[10],U[100];
int i,j,nu,n1,n2,temp_A[100],temp_B[100];
system("color 1B");
printf("请输入集合U元素数目:");
;scanf("%d",&nu);
getchar();
for(i=0;i < nu; i++){
scanf("%c",&U[i]);
getchar();
}
printf("请输入集合A元素数目:");
scanf("%d",&n1);
getchar();
for(i=0;i < n1; i++){
scanf("%c",&A[i]);
getchar();
}
printf("请输入集合B素数目:");
scanf("%d",&n2);
getchar();
for(i=0;i < n2; i++){
scanf("%c",&B[i]);
getchar();
}
printf("A的特征函数为:\n");
for(i=0;i<nu;i++){
for(j=0,temp_A[i]=0;j<n1;j++){
if(U[i] == A[j])
{
temp_A[i] = 1;
break;
}
}
printf("X(%c)= %d\t",U[i],temp_A[i]);
}
printf("\n B的特征函数为:\n");
for(i=0;i<nu;i++){
for(temp_B[i]=0,j=0;j<n2;j++){
if(U[i] == B[j])
{
temp_B[i] = 1;
break;
}
}
printf("X(%c)= %d\t",U[i],temp_B[i]);
}
Equal(temp_A,temp_B,nu);//调用子函数:判断集合A和集合B是否相等Intersect(U,temp_A,temp_B,nu);//调用子函数:求集合A和集合B的交集
Union(U,temp_A,temp_B,nu);//调用子函数:求集合A和集合B的并集Complement(U,temp_A,nu,1);//调用子函数:求集合A的补集Complement(U,temp_B,nu,2);//调用子函数:求集合B的补集
getchar();
}。