【离散数学】集合上二元关系性质判定的实现(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;
}

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

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

相关文章

python使用f-string时如何保留原始的{}

如果想在 f-string 中使用 {} 符号&#xff0c;但又不想让它被解释成 f-string 的占位符&#xff0c;可以使用两个连续的 {} 来表示一个单独的 {} 符号&#xff0c;从而使其保留原始的形式。 例如&#xff1a; name "John" age 30 text f"{{Hello {name}, …

力扣:1005. K 次取反后最大化的数组和

1005. K 次取反后最大化的数组和 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数组&#xff1a; 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后&#xff0c;返回数组 可能…

多核DSP并行计算跨平台通信解决方案

并行计算的核心是计算节点以及节点间的通信与协调机制。OpenMP虽然给开发者提供了极易上手的增量式开发方式&#xff0c;但是OpenMP在与复杂架构的MCSDK结合后&#xff0c;工具与代码产生了大量不可调试的黑盒子&#xff0c;更是决定了它不能用于关键任务领域&#xff0c;如军工…

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

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

MongoDB聚合运算符:$toObjectId

MongoDB聚合运算符&#xff1a;$toObjectId 文章目录 MongoDB聚合运算符&#xff1a;$toObjectId语法使用举例 $toObjectId聚合运算符将指定的值转换为ObjectId。如果值无法被转换为ObjectId&#xff0c;则报错。 语法 {$toObjectId: <expression> }$toObjectId接受任何…

基于模糊控制的AMT自动变速汽车换档智能控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于模糊控制的AMT自动变速汽车换档智能控制系统simulink建模与仿真。 2.系统仿真结果 输入的V&#xff0c;Ac&#xff0c;a 输出的档位&#xff1a; 3.核心程序与模型 版…

【算法题】机试指南篇

每日更新&#xff0c;建议关注收藏&#xff01; 目录 须知评判结果考试规则提前了解语言与IDE选择 精选分类可暴力求解的题目基础&#xff1a;排序查找基础&#xff1a;字符串STL向量vector队列queue栈stack 贪心简单贪心区间贪心 递归与分治搜索深搜广搜 数据结构进阶二叉树二…

【C语言】static关键字用法

目录 一、static修饰局部变量 二、static修饰全局变量 三、static修饰函数 一、static修饰局部变量 首先我们来看两段代码: 代码1&#xff08;不加static&#xff09; #include <stdio.h> void test() {int i 0;i;printf("%d ", i); } int main() {int i…

【力扣】1137. 第n个泰波那契数

原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 泰波那契序列 Tn 定义如下&#xff1a; T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2 给你整数 n&#xff0c;请返回第 n 个…

新的Linux系统如何安装ssh

安装SSH 如果你发现你的系统没有安装SSH&#xff0c;你可以通过以下命令来安装它&#xff1a; sudo apt-get update sudo apt-get install ssh这个命令将会更新软件包列表并安装SSH客户端和服务端12。 启动SSH服务 安装完成后&#xff0c;你需要启动SSH服务。你可以使用以下…

VMvare如何更改虚拟机内共享文件夹的挂载点

更改虚拟机内共享文件夹的路径 进入目录 /etc/init.d ,并找到vmware-tools文件 里面有配置项 vmhgfs_mnt"/mnt/hgfs" 将引号内的内容更改为你需要挂载的路径,重启即可 注意挂载的路径不能是 “/”&#xff0c;必须根目录下的某个文件夹&#xff0c;或者其子文件夹 …

使用Docker安装Yapi接口管理工具

简介&#xff1a; YAPI 是由去哪儿网移动架构组开发的一款可视化接口管理工具。它具有可视化管理、高效易用、功能强大等特点。它提供了便捷的接口创建、发布和维护方式&#xff0c;开发人员可以通过简单的操作实现接口管理。 YAPI 还支持类似 postman 的接口调试&#xff0c;对…

GPU通用计算介绍

谈到 GPU &#xff08;Graphics Processing Unit&#xff0c;图形显示卡&#xff09;大多数人想到的是游戏、图形渲染等这些词汇&#xff0c;图形处理确实是 GPU 的一大应用场景。然而人们也早已关注到它在通用计算上的巨大潜力&#xff0c;并提出了 GPGPU (General-purpose co…

Android进阶之路 - 静态会员进度条

年后这个新版本加入了VIP模块&#xff0c;有幸正好由我来负责&#xff0c;可以再积累一下这方面的知识。 那段时间看了一本书&#xff0c;书中说到初级码农的特性之一就是完全集中于某些功能&#xff0c;忽略了了很多成长机会&#xff0c;所以重复性劳作带来的成长值有限&#…

ETL工具中JSON格式的转换方式

JSON的用处 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;其设计初衷是为了提升网络应用中数据的传输效率及简化数据结构的解析过程。自其诞生以来&#xff0c;JSON 已成为Web开发乃至众多软件开发领域中不可或缺的一部分&a…

WPF DataGrid绑定后端 在AutoGeneratingColumn事件中改变列名

public void OnAutoGeneratingColumn(DataGridAutoGeneratingColumnEventArgs e){var propertyDescriptor (PropertyDescriptor)e.PropertyDescriptor;if (propertyDescriptor.IsBrowsable){e.Column.Header propertyDescriptor.DisplayName;}else{e.Cancel true;}}实体类中…

神经网络案例实战

&#x1f50e;我们通过一个案例详细使用PyTorch实战 &#xff0c;案例背景&#xff1a;你创办了一家手机公司&#xff0c;不知道如何估算手机产品的价格。为了解决这个问题&#xff0c;收集了多家公司的手机销售数据&#xff1a;这些数据维度可以包括RAM、存储容量、屏幕尺寸、…

# 光标变为下划线怎么办?

光标变为下划线怎么办&#xff1f; 光标变为下划线通常表示您处于覆盖模式。在这种模式下&#xff0c;您键入的任何内容都将覆盖光标位置处的文本。如果想要恢复光标为正常显示&#xff0c;您可以尝试以下方法&#xff1a; 1、在桌面或文档编辑界面&#xff0c;按键盘上的 【I…

Object类

Object类 概念&#xff1a;Object类是所有类的父类&#xff0c;也就是说任何一个类在定义时候如果没有明确的指定继承一个父类的话&#xff0c;那么它就都默认继承Object类&#xff0c;因此Object类被称为所有类的父类&#xff0c;也叫做基类/超类。 常用方法 方法类型描述eq…

每日OJ题_记忆化搜索①_力扣509. 斐波那契数(四种解法)

目录 记忆化搜索概念和使用场景 力扣509. 斐波那契数 解析代码1_循环 解析代码2_暴搜递归 解析代码3_记忆化搜索 解析代码4_动态规划 记忆化搜索概念和使用场景 记忆化搜索是一种典型的空间换时间的思想&#xff0c;可以看成带备忘录的爆搜递归。 搜索的低效在于没有能够…