【离散数学】集合上二元关系性质判定的实现(c语言实现)

news2025/1/9 16:39:10

实验要求

在这里插入图片描述

关系矩阵的初始化和打印

我们将关系矩阵存入一个二维数组中,因为集合元素个数不会超过5个所以就用一个5行5列二维数组来表示。
在我们得到了集合元素个数之后我们就可以对数组进行0,1随机赋值

//初始关系矩阵
void init_matrix(int array[][5], int n)
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			array[i][j] = rand() % 2;
		}
	}
}

//打印矩阵
void print_matrix(int array[][5], int n)
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			printf("%d ", array[i][j]);
		}
		printf("\n");
	}
}

验证自反性

自反性的验证就是主对角线上元素是不是全为1。

//验证自反性
void judge_introspect(int array[][5], int n)
{
	n--;
	while (n >= 0)
	{
		if (array[n][n] != 1)
		{
			printf("不满足自反性,因为第%d行第%d列应该为1\n", n+1, n+1);
			return;
		}	
		n--;
	}
	printf("满足自反性\n");
}

验证反自反性

反自反性的验证就是主对角线上元素只要有一个不是1那就满足反自反性。

//验证反自反性
void judge_irreflexive(int array[][5], int n)
{
	n--;
	while (n >= 0)
	{
		if (array[n][n] != 0)
		{
			printf("不满足反自反性,因为第%d行第%d列应该为0\n", n+1, n+1);
			return;
		}
		n--;
	}
	printf("满足反自反性\n");
}

验证对称性

对称性就是关于主对角线对称相等。

//验证对称性
void judge_symmetry(int array[][5], int n)
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (array[i][j] != array[j][i])
			{
				printf("不满足对称性,因为第%d行第%d列和第%d行第%d列不同时为%d\n", i+1, j+1, j+1, i+1, array[i][j]);
				return;
			}
		}
	}
	printf("满足对称性\n");
}

验证反对称性

反对称性就是如果两个元素相等,那么它一定是行列相等的元素。

//验证反对称性
void judge_antisymmetry(int array[][5], int n)
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (array[i][j] == array[j][i] && i != j)
			{
				printf("不满足反对称性,因为第%d行第%d列和第%d行第%d列同时为%d\n", i+1, j+1, j+1, i+1, array[i][j]);
				return;
			}
		}
	}
	printf("满足反对称性\n");
}

验证传递性

就是arr[a][b] == 1并且arr[a][c] == 1并且arr[c][b] == 1。我在这用了三个循环来判断,是最笨的方法,如果有好办法请给在评论区分享一下。

//验证传递性
void judge_transfer(int array[][5], int n)
{
	int flag = 0;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (array[i][j] == 1 && i !=j)
			{
				for(int m = 0; m < n; m++)
				{
					if (array[i][m] == 1 && array[m][j] == 1 && m != i && m != j)
					{
						printf("满足传递性因为第%d行第%d列为1,第%d行第%d列为1,第%d行第%d列也为1\n", i + 1, m + 1, m + 1, j + 1, i + 1, j + 1);
						flag++;
						break;
					}
				}
			}
		}
	}
	if (flag == 0)
	{
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < n; j++)
			{
				if (array[i][j] == 1 && i != j)
				{
					int m = 0;
					while (1)
					{
						m = rand() % n;
						if (m != i && m != j)
						{
							break;
						}
					}
					printf("不满足传递性因为第%d行第%d列为%d,第%d行第%d列为%d,第%d行第%d列也为%d\n",
						i + 1, m + 1,array[i][m], m + 1, j + 1,array[m][j], i + 1, j + 1,array[i][j]);
				}
			}
		}
	}
}

源码

# define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>
#include<stdlib.h>

//初始关系矩阵
void init_matrix(int array[][5], int n)
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			array[i][j] = rand() % 2;
		}
	}
}

//打印矩阵
void print_matrix(int array[][5], int n)
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			printf("%d ", array[i][j]);
		}
		printf("\n");
	}
}
//验证自反性
void judge_introspect(int array[][5], int n)
{
	n--;
	while (n >= 0)
	{
		if (array[n][n] != 1)
		{
			printf("不满足自反性,因为第%d行第%d列应该为1\n", n+1, n+1);
			return;
		}	
		n--;
	}
	printf("满足自反性\n");
}
//验证反自反性
void judge_irreflexive(int array[][5], int n)
{
	n--;
	while (n >= 0)
	{
		if (array[n][n] != 0)
		{
			printf("不满足反自反性,因为第%d行第%d列应该为0\n", n+1, n+1);
			return;
		}
		n--;
	}
	printf("满足反自反性\n");
}
//验证对称性
void judge_symmetry(int array[][5], int n)
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (array[i][j] != array[j][i])
			{
				printf("不满足对称性,因为第%d行第%d列和第%d行第%d列不同时为%d\n", i+1, j+1, j+1, i+1, array[i][j]);
				return;
			}
		}
	}
	printf("满足对称性\n");
}
//验证反对称性
void judge_antisymmetry(int array[][5], int n)
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (array[i][j] == array[j][i] && i != j)
			{
				printf("不满足反对称性,因为第%d行第%d列和第%d行第%d列同时为%d\n", i+1, j+1, j+1, i+1, array[i][j]);
				return;
			}
		}
	}
	printf("满足反对称性\n");
}
//验证传递性
void judge_transfer(int array[][5], int n)
{
	int flag = 0;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (array[i][j] == 1 && i !=j)
			{
				for(int m = 0; m < n; m++)
				{
					if (array[i][m] == 1 && array[m][j] == 1 && m != i && m != j)
					{
						printf("满足传递性因为第%d行第%d列为1,第%d行第%d列为1,第%d行第%d列也为1\n", i + 1, m + 1, m + 1, j + 1, i + 1, j + 1);
						flag++;
						break;
					}
				}
			}
		}
	}
	if (flag == 0)
	{
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < n; j++)
			{
				if (array[i][j] == 1 && i != j)
				{
					int m = 0;
					while (1)
					{
						m = rand() % n;
						if (m != i && m != j)
						{
							break;
						}
					}
					printf("不满足传递性因为第%d行第%d列为%d,第%d行第%d列为%d,第%d行第%d列也为%d\n",
						i + 1, m + 1,array[i][m], m + 1, j + 1,array[m][j], i + 1, j + 1,array[i][j]);
				}
			}
		}
	}
}
int main()
{
	srand((unsigned int)time(NULL));
	//用随机数生成集合数
	int num = rand() % 5 + 1;
	int relationMatrix[5][5] = { 0 };//关系矩阵
	init_matrix(relationMatrix, num);//初始关系矩阵
	print_matrix(relationMatrix, num);//打印矩阵
	judge_introspect(relationMatrix, num);//验证自反性
	judge_irreflexive(relationMatrix, num);//验证反自反性
	judge_symmetry(relationMatrix, num);//验证对称性
	judge_antisymmetry(relationMatrix, num);//验证反对称性
	judge_transfer(relationMatrix, num);//验证传递性
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1654970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构|C语言版】栈和队列

前言1. 栈1.1 栈的概念和性质1.2 顺序栈1.3 链栈1.4 共享栈 2. 队列2.1 队列的概念和性质2.2 循环队列2.3 链式队列2.4 双端队列 3. 例题精选3.1 有效的括号3.2 用队列实现栈2.4 用栈实现队列3.4 设计循环队列3.5 参考答案 结语 #include<GUIQU.h> int main { 上期回顾: …

centos8.5 安装 redis 7.2.4 详细步骤

1 下载Index of /releases/ (redis.io) 通过xftp等方式上传到服务器&#xff0c;安装依赖包 yum install gcc gcc-c make tcl -y [rootlocalhost software]# ll total 3308 -rw-r--r--. 1 root root 3386861 May 3 21:56 redis-7.2.4.tar.gz [rootlocalhost software]# ll…

SlowFast报错:ValueError: too many values to unpack (expected 4)

SlowFast报错&#xff1a;ValueError: too many values to unpack (expected 4) 报错细节 File "/home/user/yuanjinmin/SlowFast/tools/visualization.py", line 81, in run_visualizationfor inputs, labels, _, meta in tqdm.tqdm(vis_loader): ValueError: too …

软件测试之测试用例详细解读

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、通用测试用例八要素   1、用例编号&#xff1b;    2、测试项目&#xff1b;   3、测…

CSS---复合选择器和元素显示模式(三)

一、CSS的复合选择器 1.1 什么是复合选择器 在CSS中&#xff0c;可以根据选择器的类型把选择器分为基础选择器和复合选择器&#xff0c;复合选择器是建立在基础选择器之上&#xff0c;对基本选择器进行组合形成的。 复合选择器是由两个或多个基础选择器连写组成&#xff0c;它…

算法学习Day2——单调栈习题

第一题&#xff0c;合并球 题解&#xff1a;一开始写了一次暴力双循环&#xff0c;直接O(n^2)严重超时&#xff0c;后面于是又想到了O(n)时间复杂度的链表&#xff0c;但是还是卡在 最后一个数据会TLE&#xff0c;我也是高兴的拍起来安塞腰鼓和华氏护肤水&#xff0c;后面学长给…

信息系统项目管理师0094:项目管理过程组(6项目管理概论—6.4价值驱动的项目管理知识体系—6.4.3项目管理过程组)

点击查看专栏目录 文章目录 6.4.3项目管理过程组1.适应型项目中的过程组2.适应型项目中过程组之间的关系6.4.3项目管理过程组 项目管理过程组是为了达成项目的特定目标,对项目管理过程进行的逻辑上的分组。项目管理过程组不同于项目阶段:①项目管理过程组是为了管理项目,针对…

typescript 模块化

模块的概念&#xff1a; 把一些公共的功能单独抽离成一个文件作为一个模块。 模块里面的变量、函数、类等默认是私有的&#xff0c;如果我们要在外部访问模块里面的数据&#xff08;变量、函数、类&#xff09;&#xff0c;需要通过export暴露模块里面的数据&#xff08;&#…

C++面向对象程序设计 - 多态性

多态性是面向对象程序设计的一个重要特征&#xff0c;多态的意思是一个事物的多种形态。在C程序设计中&#xff0c;多态性是指具有不同功能的函数可以用同一个函数名&#xff0c;这样就可以用一个函数名调用不同内容的函数。面向对象方法中的多态性&#xff0c;比如说向不同的对…

Colibri for Mac v2.2.0 原生无损音频播放器 激活版

Colibri支持所有流行的无损和有损音频格式的完美清晰的比特完美播放&#xff0c;仅使用微小的计算能力&#xff0c;并提供干净和直观的用户体验。 Colibri在播放音乐时使用极少的计算能力。该应用程序使用最先进的Swift 3编程语言构建&#xff0c;BASS音频引擎作为机器代码捆绑…

计算机毕业设计 | springboot+vue凌云在线阅读平台 线上读书系统(附源码)

1&#xff0c;绪论 随着社会和网络技术的发展&#xff0c;网络小说成为人们茶钱饭后的休闲方式&#xff0c;但是现在很多网络小说的网站都是收费的&#xff0c;高额的收费制度是很多人接受不了的&#xff0c;另外就是很多小说网站都会有大量的弹窗和广告&#xff0c;这极大的影…

【文献解析】3D高斯抛雪球是个什么玩意

论文地址&#xff1a;https://arxiv.org/abs/2308.04079 项目&#xff1a;3D Gaussian Splatting for Real-Time Radiance Field Rendering 代码&#xff1a;git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive 一、文章概述 1.1问题导向 辐射…

如何通过 4 种方式在 Mac 上恢复未保存的 Excel 文件

您曾在 MacBook 上花费数小时处理 Excel 工作簿&#xff0c;但现在它消失了。或者&#xff0c;当您退出 Excel 文件时&#xff0c;您无意中选择了“不保存”。这是不是说你所有的努力都白费了&#xff1f;本文系统地介绍了如何在 Mac 上恢复丢失的 Excel 文件。通过我们的 4 种…

effective python学习笔记_函数

函数返回值尽量不要超过三个 局限性&#xff1a;当返回参数过多时&#xff0c;有时会搞混哪个是哪个&#xff0c;可能返回的两个值反了 解决方法&#xff1a;如果参数过多&#xff0c;可以组装*变量返回&#xff0c;或者自定义轻量类型或namedtuple返回 有意外情况时尽量抛异…

Linux学习笔记2---Makefile

单个文件编译用gcc编译确实是挺方便的&#xff0c;但是多个文件需要编译一个个的编译就属实是麻烦了&#xff0c;而针对多文件编译也有快捷的办法&#xff0c;即Makefile脚本。要运行Makefile需要先安装make程序。 apt install make 1.什么是Makefile 一个工程中的源文件不计…

如何提高日语听力?日语学习日语培训柯桥小语种学校

每次一说起练日语听力&#xff0c;总离不开一个词&#xff0c;那就是“磨耳朵”。 可是&#xff0c;“磨耳朵”真的有用吗&#xff1f; 在讨论这个问题之前&#xff0c;我们需要先知道&#xff1a;什么是“磨耳朵”&#xff1f; 所谓的“磨耳朵”&#xff0c;其实就是让我们的耳…

【Ubuntu20.04安装java-8-openjdk】

1 下载 官网下载链接&#xff1a; https://www.oracle.com/java/technologies/downloads/#java8 下载 最后一行 jdk-8u411-linux-x64.tar.gz&#xff0c;并解压&#xff1a; tar -zxvf jdk-8u411-linux-x64.tar.gz2 环境配置 1、打开~/.bashrc文件 sudo gedit ~/.bashrc2、…

2024蓝桥杯CTF writeUP--packet

根据流量分析&#xff0c;我们可以知道129是攻击机&#xff0c;128被留了php后门&#xff0c;129通过get请求来获得数据 129请求ls Respons在这 里面有flag文件 这里请求打开flag文件&#xff0c;并以base64编码流传输回来 获得flag的base64的数据 然后解码 到手

知识点(慢慢更新..break,continue,return)

目录 一. break,continue,return用法和含义 1. break 2. continue 3. return 4. 总结 一. break,continue,return用法和含义 1. break break用于完全结束一个循环&#xff0c;跳出循环体&#xff0c;执行循环后面的语句。 使用场合主要是switch语句和循环结构。 ● 在循…

一键复制:基于vue实现的tab切换效果

需求&#xff1a;顶部栏有切换功能&#xff0c;内容区域随顶部切换而变化 目录 实现效果实现代码使用示例在线预览 实现效果 如下 实现代码 组件代码 MoTab.vue <template><div class"mo-tab"><divv-for"item in options"class"m…