集合运算C语言代码及报告
离散数学集合运算代码

k++;
}
for(int j=0;j<B;j++){
for(int m=0;m<A;){
if(u.a[m]!=u.b[j])m++;
elsebreak;
if(m==A){
u.c[k]=u.b[j];
k++;
}
}
}show(u,k);
}
void jiao(jihe u,int A,int B){
int k=0;
cout<<"两集合的交集为:";
for(int i=0;i<A;i++){
for(int j=0;j<B;j++){
if(u.a[i]==u.b[j]) {
u.c[k]=u.a[i];
k++;
}
}
}show(u,k);
}
void cha(jihe u,int A,int B){
int k=0;
cout<<" 2.交运算"<<endl;
cout<<" 3.差运算"<<endl;
cout<<" 4.笛卡尔积"<<endl;
for(;;){
cout<<"请输入您要的选择:";
cin>>e;
switch(e){
case 1:bing(u,u.p,u.q);break;
case 2:jiao(u,u.p,u.q);break;
输入集合A、B和全集C,求两集合的交集、并集、补集、差集

输⼊集合A、B和全集C,求两集合的交集、并集、补集、差集//输⼊集合A、B和全集C,求两集合的交集、并集、补集、差集/*并集:以属于A或属于B的元素为元素的集合成为A与B的并(集)交集:以属于A且属于B的元素为元素的集合成为A与B的交(集)差:以属于A⽽不属于B的元素为元素的集合成为A与B的差(集)补集:A的补集C-B*//*例如:A={1,2,3} B={2,3,4} C={1,2,3,4,5}AB并集为={1,2,3,4}交集为={2,3}A补集={4,5}AB差集为={1}*/#include <iostream>#include <vector>using namespace std;int main(){vector<int> A,B,C;int temp;cout<<"input A,finished by a character"<<endl;while(cin>>temp)A.push_back(temp);cin.clear() ;//清除错误状态cin.ignore() ;//跳过⽆效数据cout<<"input B,finished by a character"<<endl;while(cin>>temp)B.push_back(temp);cin.clear() ;cin.ignore() ;cout<<"input C,finished by a character"<<endl;while(cin>>temp)C.push_back(temp);cin.clear();cin.ignore();//求交集vector<int> AND;for(int i=0;i<A.size();i++)for (int j=0;j<B.size();j++)if(A[i]==B[j])AND.push_back(B[j]);cout<<"交集为"<<endl;//显⽰交集for(i=0;i<AND.size();i++)cout<<AND[i]<<" ";cout<<endl;//求并集AND.clear();//先把A的元素依次加⼊for(i=0;i<A.size();i++)AND.push_back(A[i]);//加⼊B中有且与A的每⼀个元素都不相等的元素for(int j=0;j<B.size();j++){int k=0;for(i=0;i<A.size();i++)if(B[j]!=A[i])k++;if(k>=A.size())AND.push_back(B[j]);}//显⽰并集cout<<"并集为"<<endl; for(i=0;i<AND.size();i++) cout<<AND[i]<<" "; cout<<endl;return 0;}。
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语言程序[离散数学集合运算C或C语言实验报告范文]
![离散数学c语言程序[离散数学集合运算C或C语言实验报告范文]](https://img.taocdn.com/s3/m/77acf7cdba4cf7ec4afe04a1b0717fd5360cb2f8.png)
离散数学c语言程序[离散数学集合运算C或C语言实验报告范文]实验成绩:202212202201016学号:【实验题目】1.命题逻辑实验四【实验目的】2.掌握用计算机求集合的交、并、差和补运算的方法。
【实验内容】3.编程实现集合的交、并、差和补运算。
【实验要求】4、++语言编程实现C或C【算法描述】5.10},,,9,6,7,,C,E表示集合。
假定A={1,34,5,(1)用数组AB10},9,,8,7,4,5,6,34B={2,,3,,7,8,10},E={1,2,,输入数据时要求检查数据是否重复(集合中的E(全集),B,输入数组A 的子集。
B是集合E,要求集合数据要求不重复)A,置成空集。
以下每一个运算都要求先将集合CB}且某)二个集合的交运算:AB={某|某A(2C中的元素进行比较,将相同的元素放在数组中元素逐一与数组B把数组AB的交。
便是集合中,数组CA和集合C语言算法:for(i=0;i<m;i++)for(j=0;j<n;j++)if(a[i]==b[j])c[k++]=a[i];B}或某3)二个集合的并运算:AB={某|某A(中中的元素逐一与数组AC中。
将数组B中各个元素先保存在数组把数组AB和集合C便是集合A 的元素进行比较,把不相同的元素添加到数组C中,数组的并。
C语言算法:for(i=0;i<m;i++)c[i]=a[i];for(i=0;i<n;i++){for(j=0;j<m;j++)if(b[i]==c[j])break;if(j==m){c[m+k]=b[i];k++;}}(4)二个集合的差运算:A-B={某|某A且某B}将数组A中的元素逐一与数组B中的元素进行比较,把数组A与数组B不同的元素保存在数组C中,数组C便是集合A和集合B的差A-B。
C语言算法:for(j=0;j<m;j++){for(i=0;i<n;i++){if(A[j]==B[i]){C[k]=A[j];k++;break;}if(j==n){C[k]=A[i];k++;}}A}且~A=B-A={某|某B某)集合的补运算:(5把不相同的元素保存到中的元素进行比较,E中的元素逐一与数组A将数组关于集合中,数组数组CC便是集合AE的补集。
C语言集合的实现

C语言集合的实现C语言是一种通用的程序设计语言,提供了丰富的数据结构和算法库。
在C语言中,集合是一种存储不重复元素的数据结构,常用于需要存储、查询和操作一组不同元素的场景。
本文将介绍C语言中集合的实现方式,并详细解释其原理和应用。
1.集合的定义集合是一种不包含重复元素的容器,没有特定的顺序。
在C语言中,可以使用数组或链表等数据结构来实现集合。
集合通常有以下几个基本操作:插入元素、删除元素、判断元素是否存在、求并集、求交集、求差集等。
2.集合的实现方式2.1使用数组实现集合使用数组实现集合比较简单,只需要定义一个固定大小的数组,然后使用元素的值作为下标来标记元素是否存在。
例如,要存储范围在0-9之间的整数集合,可以定义一个大小为10的数组,数组下标代表元素值,数组元素的值用于表示元素是否存在。
下面是使用数组实现集合的示例代码:```c#define SIZE 10//初始化集合void initSet(int set[])for (int i = 0; i < SIZE; i++)set[i] = 0;}//插入元素void insertElement(int set[], int element) if (element >= 0 && element < SIZE)set[element] = 1;}//删除元素void deleteElement(int set[], int element) if (element >= 0 && element < SIZE)set[element] = 0;}//判断元素是否存在int isElementExist(int set[], int element) if (element >= 0 && element < SIZE)return set[element];} elsereturn 0;}//打印集合void printSet(int set[])for (int i = 0; i < SIZE; i++) if (set[i] == 1)printf("%d ", i);}}int maiint set[SIZE];initSet(set);insertElement(set, 1); insertElement(set, 3); insertElement(set, 5); deleteElement(set, 3);printf("集合中的元素为:"); printSet(set);return 0;```这段代码中,先定义了一个大小为10的数组作为集合的存储空间。
离散数学实验报告求集合的运算——并运算

【实验目的】通过编程实现求给定集合A和B的并集C(C=A∪B)的运算。
【实验内容】已知所给集合A和B,求A与B 的并集C(C=A∪B)。
【实验原理】因为并集的定义为:C={x|x∈A∨x∈B},所以,只要将集合A与B合在一起就得到了并集C。
但是,在一个集合中,同样的元素没必要出现两次或两次以上,所以,在将集合A送入并集C后,应将集合B中与A中相同的元素删除,再将集合B送入并集C之中。
【程序代码】#include<stdio.h>int main(){int a[101],b[101],c[201]={0};int m,n;scanf("%d%d",&m,&n);for(int i=1;i<=m;i++)scanf("%d",&a[i]);for(int i=1;i<=n;i++)scanf("%d",&b[i]);for(int i=1;i<=m;i++)c[i]=a[i];int i=m+1;int k;for(int j=1;j<=n;j++){int t=1;for(k=1;k<=m;k++){if(a[k]==b[j])t=0;}if(t==1){c[i]=b[j];i++;}}for(int i=1;i<=m+n;i++){if(c[i]!=0)printf("%d ",c[i]);}}【实验结果】【实验心得】首先想到的是数组,先将数组a[],赋值给c[],然后通过两层for循环来判断b[],是否与a[]重复,如若不重复,将b[]赋值给c[]。
在开始的时候由于for循环套错位置出错,后设置一flag来判断b[]和a[]是否有重复的元素。
集合的并交差运算c++

集合的并交差运算c++集合的并、交、差运算是集合论中常用的操作,也是编程中常见的操作。
在c++中,可以使用STL中的set容器来实现这些操作。
set是一种有序的容器,其中每个元素都是唯一的。
在set中,插入操作和查找操作的时间复杂度均为O(logN),其中N为集合中元素的个数。
1.并集运算假设有两个set容器A和B,要求它们的并集。
可以使用STL中的set_union函数来实现:set<int> A, B, C; // 定义三个set容器// 将A和B合并为Cset_union(A.begin(), A.end(), B.begin(), B.end(), inserter(C, C.begin()));set_union函数将A和B中的元素合并到C中,并保证C中的元素是有序的且唯一的。
2.交集运算假设有两个set容器A和B,要求它们的交集。
可以使用STL中的set_intersection函数来实现:set<int> A, B, C; // 定义三个set容器// 将A和B的交集放入C中set_intersection(A.begin(), A.end(), B.begin(), B.end(), inserter(C, C.begin()));set_intersection函数将A和B中的共同元素放入C中,并保证C中的元素是有序的且唯一的。
3.差集运算假设有两个set容器A和B,要求它们的差集(即A中有但B中没有的元素)。
可以使用STL中的set_difference函数来实现:set<int> A, B, C; // 定义三个set容器// 将A和B的差集放入C中set_difference(A.begin(), A.end(), B.begin(), B.end(), inserter(C, C.begin()));set_difference函数将A中有但B中没有的元素放入C中,并保证C中的元素是有序的且唯一的。
差集运算实验报告

一、实验目的1. 理解差集运算的概念和性质。
2. 掌握使用C语言实现差集运算的方法。
3. 通过实验加深对集合运算的理解,提高编程能力。
二、实验原理差集运算,也称为集合的减法运算,是指从一个集合中去除另一个集合中包含的元素,得到的结果称为差集。
假设有两个集合A和B,A-B表示从集合A中去除所有属于集合B的元素,得到的集合称为A与B的差集。
差集运算的性质如下:1. 交换律:A-B = B-A2. 结合律:(A-B)-C = A-(B∪C)3. 分配律:A-(B∪C) = (A-B)∩(A-C)三、实验环境1. 操作系统:Windows 102. 编程语言:C语言3. 开发环境:Visual Studio 2019四、实验步骤1. 定义差集运算函数:实现差集运算的核心是定义一个函数,该函数接收两个集合作为参数,返回它们的差集。
```cvoid differenceSet(int setA, int setASize, int setB, int setBSize, int result, int resultSize) {int i, j, k = 0;for (i = 0; i < setASize; i++) {int flag = 0;for (j = 0; j < setBSize; j++) {if (setA[i] == setB[j]) {flag = 1;break;}}if (flag == 0) {result[k++] = setA[i];}}resultSize = k;}```2. 创建两个集合:为了进行差集运算,我们需要创建两个集合A和B,并分别存储它们的元素。
```cint setA[] = {1, 2, 3, 4, 5};int setB[] = {4, 5, 6, 7, 8};int setASize = sizeof(setA) / sizeof(setA[0]);int setBSize = sizeof(setB) / sizeof(setB[0]);```3. 计算差集:调用差集运算函数,计算集合A与B的差集。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一,问题重述集合中的元素为小字母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,字符数组初始化。