c语言编写的判断程序,用C语言编写一个判断关系矩阵的程序。(离散数学额有关问题)...

当前位置:我的异常网» C语言 » 用C语言编写一个判断关系矩阵的程序。(离散数学额

用C语言编写一个判断关系矩阵的程序。(离散数学额有关问题)

www.myexceptions.net  网友分享于:2013-02-09  浏览:76次

用C语言编写一个判断关系矩阵的程序。(离散数学额问题)

我遇到了一个小问题,希望有人可以帮帮我。

这个程序是很简单的,可是,我们老师要求我们用int main(int argc, char *argv[])

我不懂,希望大家帮我下。

下面是我的程序。

int main(int argc, char *argv[])

{

FILE *fp;

fp = ("argv[1]", "r");

}

是这样写的吗??

#include

#include

#include

void Reflexive(int a[100][100], int n)

{

int i;

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

if(a[i][i] == 0)

{

printf("not reflexive, ");/*主对角线有一个为0即输出不是自反,跳出循环*/

break;

}

if(i == n)

printf("reflexive, ");/*如果循环全作一遍,则为自反*/

}

/*判断自反*/

void Reflexiveness(int a[100][100], int n)

{

int i;

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

if(a[i][i] == 1)

{

printf("not reflexiveness, ");/*主对角线有一个为q即输出不是反自反,跳出循环*/

break;

}

if(i == n)

printf("reflexiveness, ");/*如果循环全作一遍,则为反自反*/

}

/*判断反自反*/

void Symmetry(int a[100][100], int n)

{

int i, j;

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

{

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

{

if(a[i][j] == a[j][i])/*如果关于主对角线对称的元素相等,则跳过下面的语句,继续循环*/

continue;

printf("not symmetry, ");/*上面的条件不符,即关于主对角线对称的元素不等,则输出不是对称,跳出循环*/

break;

}

if(j != n)

break;/*不是对称,跳出循环*/

else if(i == n-1 && j == n)

printf("symmetry, ");/*所有的元素都遍历了,没有不合对称条件的,输出对称*/

}

}

/*判断是否对称*/

void Antisymmetry(int a[100][100], int n)

{

int i, j, s = 1;/*用s作为不合条件时的标记*/

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

{

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

{

if((a[i][j] == 1 && a[j][i] == 1) && (i != j))

{

s = 0;/*s = 0 时,不是反对称,跳出循环*/

break;

}

}

if(s == 0)

{

printf("not antisymmetry, ");/*判断s的值,为0,则输出不是反对称*/

break;

}

}

if(s == 1)/*s = 1时,输出反对称*/

printf("antisymmetry, ");

}

/*判断是否反对称*/

void Transitive(int a[100][100], int n)

{

int i, j, k;

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

{

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

if(a[i][j] == 0)/*对所有元素一一遍历,等于0时作下面的工作*/

{

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

if(a[i][k] == 1 && a[k][j] == 1)/*不是传递的判断,输出不是传递,推出整个程序*/

{

printf("not transitive.\n");

exit(0);

}

}

}

printf("transitive.\n");/*否则,输出传递*/

}

/*判断是否传递*/

void main()

{

FILE *fp;

int i = 0, j, n, k, s = 0;

int b[10000], a[100][100];

fp = fopen("a.txt", "r");

if(!fp)

{

printf("Can not open !");

exit(0);

}

while(!feof(fp))

{

b[i] = fscanf(fp, "%d", &k);

i = i + 1;

}

n = (int)sqrt(i);

fclose(fp);

fp = fopen("a.txt", "r");

while(!feof(fp))

{

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

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

fscanf(fp, "%d", &a[i][j]);

}

printf("The relation is:\n");

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

{

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

printf("%-3d", a[i][j]);

printf("\n");

}

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

{

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

if(a[i][j] == 1)

{

s = 1;

break;

}

if(j != n)

break;

}

if(!s)

printf("reflexive, ");

else

Reflexive(a, n);

Reflexiveness(a, n);

Symmetry(a, n);

Antisymmetry(a, n);

Transitive(a, n);

}

其中a.txt为一个矩阵

例如:

1 0 1

0 1 0

0 0 0

输出:

not reflexive, not reflexiveness, not symmentry, antisymmetry, transitive.

文章评论

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值