用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");
}
}
(完)