当前位置: 首页 > article >正文

C语言实现集合的基本运算

集合的定义

集合(Set)是数学中一个基本的概念,它指的是一个无序的不重复元素序列。在集合论中,集合的基本运算包括并集、交集、差集和对称差集。

集合基本运算类型的说明

并集(Union)

 给定两个集合A和B,它们之间的并集A ∪ B是所有属于A或属于B的元素组成的集合,即A ∪ B = {x|x ∈ A ∨ x ∈ B}。

 交集(Intersection)

给定两个集合A和B,它们之间的交集A ∩ B是所有既属于A又属于B的元素组成的集合,即A ∩ B = {x|x ∈ A ∧ x ∈ B}。

 差集(Difference)

给定两个集合A和B,A与B的差集A - B是所有属于A但不属于B的元素组成的集合,即A - B = {x|x ∈ A ∧ x ∉ B}。

 对称差集(Symmetric Difference)

给定两个集合A和B,A与B的对称差集A ⊕ B是所有属于A但不属于B或属于B但不属于A的元素组成的集合,即A ⊕ B = (A - B) ∪ (B - A)。

推广

这些基本集合运算可以推广到多个集合的情况,例如:

1. 并集:A ∪ B ∪ C = A ∪ (B ∪ C) = (A ∪ B) ∪ C。
2. 交集:A ∩ B ∩ C = A ∩ (B ∩ C) = (A ∩ B) ∩ C。
3. 差集:A - B - C = A - (B ∪ C) = (A - B) - C。
4. 对称差集:A ⊕ B ⊕ C = (A ⊕ B) ⊕ C = A ⊕ (B ⊕ C)。

注意事项

需要注意的是,这些集合运算是不满足交换律的,即一般而言,A ∪ B ≠ B ∪ A、A ∩ B ≠ B ∩ A、A - B ≠ B - A、A ⊕ B ≠ B ⊕ A。

C语言代码实现集合的基本运算

#include <stdio.h>
void jiaoyunsuan(int a[], int b[], int c[])//进行集合交运算的函数
{int i, j, k = 0;for (i = 0; i < 5; i++) {for (j = 0; j < 5; j++) {if (a[i] == b[j]) {c[k] = a[i];k++;break;}}}for (i = 0; i < k; i++) {printf("%d ", c[i]);}printf("\n");
}
void bingyunsuan(int a[], int b[], int c[])//进行集合并运算的函数
{int i, j, k = 0;for (i = 0; i < 5; i++) {c[k] = a[i];k++;}for (i = 0; i < 5; i++){int flag = 1;for (j = 0; j < 5; j++){if (b[i] == a[j]){flag = 0;break;}}if (flag) {c[k] = b[i];k++;}}for (i = 0; i < k; i++){printf("%d ", c[i]);}printf("\n");
}
void chayunsuan(int a[], int b[], int c[])//进行集合差运算的函数
{int d[5], i, j, k = 0;for (i = 0; i < 5; i++) {c[i] = a[i];}for (i = 0; i < 5; i++) {int flag = 1;for (j = 0; j < 5; j++) {if (c[i] == b[j]) {flag = 0;break;}}if (flag) {d[k] = c[i];k++;}}for (i = 0; i < k; i++) {printf("%d ", d[i]);}printf("\n");
}
void buyunsuan(int a[], int c[], int e[])//进行集合补运算的函数
{int i, k = 0, j;for (i = 0; i < 10; i++) {int flag = 1;for (j = 0; j < 5; j++) {if (e[i] == a[j]) {flag = 0;break;}}if (flag) {c[k] = e[i];k++;}}for (i = 0; i < k; i++) {printf("%d ", c[i]);}printf("\n");
}
void duidengchayunsuan(int a[], int b[], int c[])//进行集合对称差运算的函数
{int d[10], i, j, k = 0;for (i = 0; i < 5; i++) {c[i] = a[i];}for (i = 0; i < 5; i++) {int flag = 1;for (j = 0; j < 5; j++) {if (c[i] == b[j]) {flag = 0;break;}}if (flag) {d[k] = c[i];k++;}}for (i = 0; i < 5; i++) {c[i] = b[i];}for (i = 0; i < 5; i++) {int flag = 1;for (j = 0; j < 5; j++) {if (c[i] == a[j]) {flag = 0;break;}}if (flag) {d[k] = c[i];k++;}}for (i = 0; i < k; i++) {printf("%d ", d[i]);}
}int main()
{int a[5] = { 0 }, b[5] = { 0 }, c[10] = { 0 }, e[10];int i;printf("输入集合A的元素:\n");for (i = 0; i < 5; i++) {scanf("%d", &a[i]);}printf("输入集合B的元素:\n");for (i = 0; i < 5; i++) {scanf("%d", &b[i]);}printf("输入全集E的元素:\n");for (i = 0; i < 10; i++) {scanf("%d", &e[i]);}printf("集合A和集合B的交集:\n");jiaoyunsuan(a, b, c);printf("集合A和集合B的并集:\n");bingyunsuan(a, b, c);printf("集合A和集合B的差运算:\n");chayunsuan(a, b, c);printf("集合A的补运算:\n");buyunsuan(a, c, e);printf("集合B的补运算:\n");buyunsuan(b, c, e);printf("集合A和集合B的对称差运算:\n");duidengchayunsuan(a, b, c);return 0;
}

代码运行结果 

http://www.lryc.cn/news/2414651.html

相关文章:

  • 洛谷4438 [Hnoi2018]道路 【树形dp】
  • 多质量动态系统仿真(Matlab代码实现)
  • 推荐文章:领略东方Project新境界 —— thprac,你的弹幕射击游戏进阶之路
  • 以太坊的单位wei是什么?
  • Winrar通用注册码
  • cellpadding跟cesllspacing区别有什么(table篇)
  • 如何学习数据库
  • CTF比赛总结(小白必看)
  • DWR基本原理及其流程
  • 格兰杰因果分析
  • 文件的简单写入
  • kail-信息收集之DNS解析(dnsenum、dnsrecon、dnswalk)
  • free mobile sex java_Mysql-从原理到优化,深入浅出数据库索引
  • VC2010使用过程常见问题
  • java的编程思想是什么'_编程思想 是什么
  • 栅栏密码(Fence crypto)
  • 监控公司局域网电脑的软件|局域网电脑监控软件哪个好用
  • 61850通讯流程
  • python中dumps、dump、load、loads的区别
  • 安装 USB-Blaster 驱动程序
  • Fire Game (连通块+两点bfs)
  • sobel算子实现原理和c++实现sobel()检测边缘函数
  • IO流原理及流的分类FileInputStream类和FileOutputStream类基本介绍
  • 一些使用频率高的指令及库版本安装切换
  • android——Spinner下拉列表案例详解(2),程序员真的是吃青春饭吗
  • PeopleSoft集成EasyExcel
  • 高级网络安全管理员 - 网络设备和安全配置:SSH 配置
  • XAPOFX1_5.dll文件丢失导致程序无法运行问题
  • Go切片(slices)
  • QT_快速入门