矩阵的对称性,自反性和反对称性的判断

用C语言实现离散数学中对矩阵的简单操作及对矩阵的判断

判断是否输入的矩阵是否为方阵,在是方阵的基础上判断是否具有对称性,反对称性和自反性。

对称矩阵:一个方形矩阵,其转置矩阵和自身相等。
对称矩阵是指以主对角线为对称轴,各元素对应相等的矩阵。用线性代数书上的解释是:对称矩阵是一个方形矩阵,其转置矩阵和自身相等。
在这里插入图片描述

反对称矩阵:反对称矩阵,它的主对角线上的元素全为零,而位于主对角线两侧对称的元素反号。线性代数书上解释为:
在这里插入图片描述

自反性:关系矩阵的主对角线上元素值全部为1
反自反性:关系矩阵的主对角线上元素全部为0

C语言代码实现如下:

#include<stdio.h>
#define MAXSIZE 100

void Interrupt(void)//创建一个中断函数 
{
	while(1)//用于检测换行符,使函数脱离scanf的连续输出 
		if(getchar()=='\n')
			break;
} 


int CreateMatrix(int &m,int &n,int a[MAXSIZE][MAXSIZE])
{
	int i,j;
	printf("请输入矩阵的行数");
	scanf("%d",&m);
	Interrupt();
	printf("请输入矩阵的列数");
	scanf("%d",&n);
	Interrupt();
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
		{
			printf("请输入矩阵关系中第%d行第%d列的数字:",i,j);
			scanf("%d",&a[i][j]);
			Interrupt();
		}
	}
	printf("关系矩阵M为:\n");
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
			printf("%d ",a[i][j]);
		printf("\n");
	}
	if(m != n)
	{
		printf("不是方阵,不能进行操作!\n");
		return 0;
	} 
	return 1;
}

void Symmetry(int m,int n,int a[MAXSIZE][MAXSIZE])
{
	int i,j,c,b,d;
	c=0;
	d=0;
	b=0;
	d=1;
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
		{
			if(a[i][j]!=a[j][i])
			{
				c=1;
				break;
			}
		}
	}
	if( c == 0 ) 
		printf("该矩阵是对称性的\n");
	else
		printf("该矩阵不是对称性的\n");
}
void AntiSymmetric(int m,int n,int a[MAXSIZE][MAXSIZE])
{
	int i,j,c,b,d;
	c=0;
	d=0;
	b=0;
	d=1;
	for(i=0;i<n;i++)
	{
		if(a[i][i]!=0)
		{
			c=1;
			break;
		}
	}
	if(c == 0) 
		for(i=0;i<n;i++)
		{
			for(j=0;j<m;j++)
			{
				if(i == j)
					continue;
				if(a[i][j] != -a[j][i])
				{
					c=2;
					break;
				}
			}
		}
	if( c == 0 ) 
		printf("该矩阵是反对称性的\n");
	else
		printf("该矩阵不是反对称性的\n");
}
void Reflexivity(int m,int n,int a[MAXSIZE][MAXSIZE])
{
	int i,j,c;
	c=0;
	for(i=0;i<n;i++)
	{
		if(a[i][i]!=0)
		{
			c=1;
			break;
		}
	}
	if(c==0) 
		printf("该矩阵是自反性的\n");
	else 
	{
		for(i=0;i<n;i++)
		{
			if(a[i][i]!=1)
			{
				c=2;
				break;
			}
		}
		if(c==1) 
			printf("该矩阵是反自反性的\n");
		else
			printf("该矩阵既不是自反性的也不是反自反性的\n");
	}	
}

int main()
{
	int a[MAXSIZE][MAXSIZE];
	int m, //行数 
		n,//列数 
		d;//循环条件 
	printf("欢迎使用关系性质的判断系统\n\n 1. 对称关系的判断  2. 反对称关系的判断  3. 自反关系的判断\n\n请输入选项:");
	d = CreateMatrix(m,n,a);
	while(d)
	{
		printf("请选择: ") ;
		scanf("%d",&d);
		Interrupt();
		switch(d)
		{
			case 1: Symmetry(m,n,a);break;
			case 2: AntiSymmetric(m,n,a);break;
			case 3: Reflexivity(m,n,a);break;
			case 0: break;
		}
	printf("\n");
	printf("是否还继续?   是请输入1,否请输入0:");
	scanf("%d",&d);
	Interrupt();
	printf("\n\n");
	}
}

(完)

  • 10
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值