用C程序实现对二元关系性质的判定

更新时间:2023-07-22 21:24:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

用C程序实现对二元关系性质的判定

IT技术

数字技术与应用

用C程序实现对二元关系性质的判定

岳晓红

(陇东学院信息工程学院  甘肃庆阳  745000)

摘 要:本文利用C语言程序实现了对离散数学中二元关系的5种性质的判断。在计算机相关专业的教学中可以培养学生的理论和计算机操作相结合的学习能力。

关键词:C语言  离散数学  二元关系中图分类号:O141.12文献标识码:A文章编号:1007-9416(2011)02-0071-02

To Judge the Property of Binary Realtions by C program

Yue Xiaohong

(School of Information Engineering  Qingyang gansu  745000)

Abstract:The paper presents some ways to judge the 5 properties of binary relations in the discrete mathematics, and they can be applied to cultivate the students’abilities by integrating theory with practice.

Key words:C language  discrete mathematics  binary relations;

对于计算机专业的学生,《离散数学》是专业基础课,《C语言程序设计》也是专业课,两门课开设的时间大都在一年级第一或第二学期。在学习这两门课时,可以互相借鉴,离散数学中的有些问题可以利用C语言编程在计算机上实现,反之,对C语言相关知识的学习,也可以以离散数学的问题算法为例,这样的学习过程,既可以加深对两门课程相关知识的理解和掌握,也能培养学生的理论和实践相结合的学习能力。

2、二元关系的性质与关系矩阵(如下图)

性质 

自反性 反自反性 对称性 反对称性 传递性 

关系矩阵 

主对角线元素全为1 主对角线元素全为0 对称矩阵 

如r=1且i≠j,则r=0 

i,j

j,i

M2中1所在的位置,M中相应位置都是11、离散数学中二元关系、关系矩阵及其性质的定义

定义1:设A,B为集合,A×B的任何子集所定义的二元关系叫做从A到B的二元关系,特别当A=B时则叫做A上的二元关系。

定义2:设A={a1,a2Lan},R是A上的关系。

(i,j=1,2Ln)令ri,j=

0,(ai,aj) R

1,(ai,aj)∈R

3、用C程序实现对5种性质的判定

#define M 10#include<stdio.h>void main()

{ void zfx(int a[][], int n);/*函数声明*/void dcx(int a[][], int n);void cdx1(int a[][], int n);void cdx2 (int a[M][M],int n);int a[M][M], i,j,n;

printf("请输入关系矩阵的维数n(n<=M):\n");scanf("%d",&n);

printf("请输入关系矩阵的元素值(0,1):\n");for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%d",&a[i][j]);zfx(a,n);/*调用函数*/dcx(a,n);cdx1(a,n);cdx2(a,n);

r11

r(ri,j)= 21

M 则

rn1

r12Lr1n r22Lr2n

是R上的关系矩阵,记作MR。M

rn2Lrnn

定义3:设R为A上的关系,

(1)若 x(x∈A→(x,x)∈R),则称R在A上是自反的。(2)若 x(x∈A→(x,x) R),则称R在A上是反自反的。(3)若 x y(x,y∈A∧(x,y)∈R→(y,x)∈R),则称R为A上的对称关系。

(4)若 x y(x,y∈A∧(x,y)∈R∧(y,x)∈R→x=y),则称R为A上的反对称关系。

(5)若传递关系。

x y z(x,y,z∈A∧(y,z)∈R→(x,z)∈R)

,则称R为A上的getch();}

Digital  technology  and  application    数字技术与应用

71

用C程序实现对二元关系性质的判定

数字技术与应用

 

void zfx(int a[M][M], int n)  

{ int i=0,vale1=1,vale2=1;/*vale1确定关系的自反性,vale2判断关系的反自反性*/

while(i<n)  

{ if (a[i][i]==1) vale2=0;else vale1=0;i++;} 

if (vale1==1) printf("zfx\n");if (vale2==1) printf("fzfx\n");

if (!(vale1)&&!(vale2)) printf("wzfxywfzfx\n");}

void dcx(int a[M][M], int n)

{ int i,j, vale3=1,vale4=1;/*vale3确定关系的对称性,vale4判断关系的反对称性*/

for(i=0;i<n;i++)for(j=0; j<i;j++)if(a[i][j]==a[j][i])vale4=0;else vale3=0;

if (vale3==1) printf("dcx\n");if (vale4==1) printf("fdcx\n");

if (!(vale3)&&!(vale4)) printf("wdcx wfdcx\n");}

void cdx1 (int a[M][M],int n)/*用M2 M算法来判断传递性*/

{ int b[M][M],i,j,k,vale=1;for(i=0;i<n;i++)for(j=0;j<n; j++){b[i][j]=0;

for(k=0; k<n; k++)

b[i][j]+=a[i][k]*a[k][j];/*计算 M2*/}

for(i=0;i<n;i++)for(j=0;j<n;j++)if(b[i][j]!=0)b[i][j]=1;for(i=0;i<n;i++)for(j=0;j<n;j++)if(b[i][j]==1)

if(a[i][j]!=b[i][j])vale=0;if(vale)printf("ycdx\n");else    printf("wcdx\n");}

IT技术

void cdx2 (int a[M][M],int n)/*用warshall算法来求传递闭包数组b */

{ int b[M][M],i,j,k,vale=1;for(i=0;i<n; i++)for(j=0;j<n;j++)b[i][j]=a[i][j];{

for(k=0; k<n; k++)(a[i][j]&&(a[i][k]||a[j][k]))if{b[i][k]=1;}}

for(i=0;i<n;i++)     /* 判断数组a和b相等 */for(j=0;j<n;j++)(a[i][j]!=b[i][j])if

{ vale=0; break;}

if (vale==1) printf("cdx\n");else printf("wcdx\n");}

 

注释

[1]对于传递性质的判定,可以利用关系矩阵的特点定义函数,但使

用warshallsuan 算法写出的函数更简洁。

[2] 以上程序在wintc环境下编译运行成功。在turboc2.0中汉字用拼音替换后运行也正常。 

参考文献

[1]谭浩强.C程序设计[M].北京:清华大学出版社,2001.[2]耿素云.离散数学[M].北京:高等教育出版社,2003.

[3]郭键.二元关系传递闭包的几种求取方法分析[J].网络安全技术

与应用,2008.

72数字技术与应用    Digital  technology  and  application

本文来源:https://www.bwwdw.com/article/m5zm.html

Top