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

实验要求

在这里插入图片描述

关系矩阵的初始化和打印

我们将关系矩阵存入一个二维数组中,因为集合元素个数不会超过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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

后端开发面经系列 -- 地平线C++一面

地平线C一面 公众号&#xff1a;阿Q技术站 来源&#xff1a;https://www.nowcoder.com/discuss/608452700895711232 1、分布式事务是否了解&#xff1f; 分布式事务是指涉及多个数据库或应用之间的事务操作&#xff0c;需要确保这些操作要么全部成功&#xff0c;要么全部失败…

Dynamic Extraction of Subdialogues for Dialogue Emotion Recognition

对话情感识别的子对话动态提取 摘要1. 介绍2 相关工作2.1 对话上下文建模2.2 常识知识 3 方法3.1 问题定义3.2 模型概述3.3 特征提取模块3.4 依赖性建模3.5 交互式子对话提取模块3.6 重要性增强的多头自注意力模块3.7 子对话框主题提取模块3.8. 分类模块 四、实验4.1 数据集4.1…

IDEA使用Maven生成普通项目没有生成iml文件解决方法

右击主目录选择&#xff1a; Open in Terminal 在生成的控制台输入&#xff1a; mvn idea:module 回车便自动生成iml文件啦&#xff01; 双击下主目录就可以看见啦

javax.net.ssl.SSLException: Received fatal alert: protocol_version已经解决

起因&#xff1a; 在帮别人讲解项目时&#xff0c;将项目的tomcat配置完&#xff0c;点击运行后&#xff0c;报错&#xff0c;信息如标题。 解决办法&#xff1a; 在csdn百度问题&#xff0c;得到的方法主要有几个&#xff1a; 1.jdk要配置在1.8以上&#xff1b; 2.数据库地…

【MySQL】ON WHERE 和 ON AND 的区别

1. 查询语句语法规则 “[ ]” 包含的内容可以省略&#xff1b; “{ }” 包含的内容必须存在&#xff1b; DISTINCT&#xff1a; 设定 **distinct** 可以去掉重复记录&#xff1b; AS&#xff1a; 表明或字段名过长时&#xff0c;可以用 **AS** 关键字起别名&#xff0c;也可…

06.配置邮件报警

配置邮件报警 我的授权码&#xff1a;HCHNVOAENURLOACG 1.定义发件人 密码是163邮箱的授权码 2.配置收件人 我就配置收件人是qq邮箱了 3.启动动作 验证邮件发送成功

Redis如何避免数据丢失?——AOF

目录 AOF日志 1. 持久化——命令写入到AOF文件 写到用户缓冲区 AOF的触发入口函数——propagate 具体的实现逻辑——feedAppendOnlyFile 从用户缓冲区写入到AOF文件(磁盘&#xff09; 函数write、fsync、fdatasync Redis的线程池 AOF文件的同步策略 触发的入口函数——…

特斯拉擎天柱机器人:工厂自动化的未来

随着技术的进步&#xff0c;工业自动化已经逐步进入了一个新的纪元。特斯拉最近公布的擎天柱机器人Optimus的演示&#xff0c;不仅仅展示了一个高科技机器人的能力&#xff0c;更是向我们揭示了未来工厂的可能性。 特斯拉擎天柱机器人的功能展示 马斯克在最新的演示中向我们展…

使用Nuxt.js实现服务端渲染(SSR)

Nuxt.js 是一个基于 Vue.js 的框架&#xff0c;它提供了服务器端渲染&#xff08;SSR&#xff09;和静态站点生成&#xff08;SSG&#xff09;的能力&#xff0c;使开发者能够轻松地构建高效、优雅的前端应用。Nuxt.js 集成了许多开箱即用的功能和工具&#xff0c;帮助开发者快…

C语言—深入理解指针(2)

1.数组名的理解 不难发现&#xff0c;数组名就是数组首元素的地址。 但是有两个例外&#xff1a; 1.sizeof&#xff08;数组名&#xff09; 这里的数组名表示整个数组&#xff0c;计算的是整个数组的大小&#xff0c;单位是字节。 2.&数组名 这里的数组名也表示整个数…

MacOS miniconda安装方法

打开macos “终端” 应用 执行命令 mkdir -p ~/miniconda3curl https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-MacOSX-arm64.sh -o ~/miniconda3/miniconda.shbash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3rm -rf ~/miniconda3/mini…

CPU基本知识点

目录 1.概念 2.分类 3.运作原理 4.指令系统 1.概念 CPU&#xff1a;英文Central Processing Unit&#xff0c;即中央处理器。 解释和执行指令的功能单元&#xff0c;它是计算机的中枢神经系统&#xff08;即核心&#xff09;。 是计算机最核心的部件&#xff0c;主要是运算…

嵌入式数据库SQLite 3配置使用详细笔记教程

0、惨痛教训 随着管理开发的项目体积越来越庞大&#xff0c;产品系统涉及的数据量也越来越多&#xff0c;并且伴随着项目不久就要交付给甲方了。如果项目的数据信息没有被妥善管理&#xff0c;后期设备的运行状态、操作状况等数据流信息不能被溯源&#xff0c;当出现了一些特殊…

【35分钟掌握金融风控策略16】贷前风控策略详解-1

目录 贷前风控策略详解 贷前风控目标 精准审核申请贷款客户资质 对申请贷款客户进行合理定额 对申请贷款客户进行合理定价 推动实现利润最大化 贷前风控数据源 客户贷款时提供的数据 贷前风控策略详解 俗话说&#xff0c;良好的开端是成功的一半&#xff0c;而贷前是风…

C++新手村指南:入门基础

目录 C概念 C发展史 C关键字&#xff08;C98&#xff09; 命名空间 命名空间的定义 命名空间的使用 C中的输入&&输出 缺省参数 缺省参数的概念 缺省参数的分类 函数重载 函数重载概念 函数重载实现 引用 引用的概念 引用的特性 常引用 引用的使用场景…

基于单片机的小型自动浇灌系统设计

摘 要:以单片机为主控芯片,结合传感器和计算机,搭建了一套智能化的浇灌系统;利用LabVIEW 设计并编写了基于状态机程序架构的上位机软件,实现了友好的用户交互界面,实时测量、显示与记录等功能,并由主控芯片进行浇灌。经测试,本系统具有结构简单,研制成本低,运…

详细介绍一下PointPillars算法的网络结构

PointPillars是一种用于3D目标检测的算法&#xff0c;它主要使用了点云数据和深度学习模型。 PointPillars算法的网络结构主要可以分为三个主要阶段&#xff1a; Pillar Feature Net&#xff08;点云特征处理网络&#xff09;&#xff1a;此阶段的主要任务是将输入的点云数据转…

回答篇:测试开发高频面试题目

引用之前文章&#xff1a;《测试开发高频面试题目》 https://blog.csdn.net/qq_41214208/article/details/138193469?spm1001.2014.3001.5502 本篇文章是回答篇&#xff08;持续更新中&#xff09; 1. 什么是测试开发以及其在软件开发流程中的作用。 a. 测试开发是指测试人员或…

Java:Servlet详解

目录 一、什么是Servlet 二、Servlet原理 Servlet的生命周期 三、 Servlet注释 WebServlet 一、什么是Servlet Servlet是JavaWeb开发的一种技术&#xff0c;Servlet程序需要部署在Servlet容器&#xff08;服务端&#xff09;中才能运行&#xff0c;常见的Servlet容器有Tom…

【C++】环境搭建CentOS Clion报错Unsupported git Version 1.8.3.1

【C】环境搭建Clion-Unsupported git Version 1.8.3.1 Git升级步骤1.卸载旧版本2.安装依赖3.下载git最新版本包4.解压git文件包5.编译文件5.将git加入环境变量6.验证git版本 如上图所示&#xff0c;报错Unsupported git Version 1.8.3.1 At least 2.17.0 is required 报错意思…