用C语言输入一个包含n个元素的集合A,要求随机产生3个定义在集合A上的不同的关系R1,R2,R3,其中,R1和R2是自反且对称的,R3是反对称的,并显示R1,R2,R3的关系矩阵表示。
时间: 2023-05-25 09:05:37 浏览: 176
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_N 100
int A[MAX_N];
int R1[MAX_N][MAX_N] = {0}, R2[MAX_N][MAX_N] = {0}, R3[MAX_N][MAX_N] = {0};
void print_relation(int R[][MAX_N], int n);
int main()
{
int n, i, j, k;
srand((unsigned)time(NULL));
printf("请输入集合A的元素个数 n:");
scanf("%d", &n);
printf("请输入集合A的元素:");
for(i = 0; i < n; i++)
{
scanf("%d", &A[i]);
}
// 产生 R1,R2,R3
for(k = 1; k <= 3; k++)
{
i = rand() % n;
j = rand() % n;
while(i == j)
{
j = rand() % n;
}
switch(k)
{
case 1:
// R1 自反且对称
for(i = 0; i < n; i++)
{
R1[i][i] = 1;
for(j = i+1; j < n; j++)
{
int tmp = rand() % 2;
R1[i][j] = tmp;
R1[j][i] = tmp;
}
}
break;
case 2:
// R2 自反且对称
for(i = 0; i < n; i++)
{
R2[i][i] = 1;
for(j = i+1; j < n; j++)
{
int tmp = rand() % 2;
R2[i][j] = tmp;
R2[j][i] = tmp;
}
}
break;
case 3:
// R3 反对称
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
if(i == j)
{
R3[i][j] = 0;
}
else
{
int tmp = rand() % 2;
R3[i][j] = tmp;
R3[j][i] = -tmp;
}
}
}
break;
}
}
printf("R1:\n");
print_relation(R1, n);
printf("R2:\n");
print_relation(R2, n);
printf("R3:\n");
print_relation(R3, n);
return 0;
}
void print_relation(int R[][MAX_N], int n)
{
int i, j;
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
printf("%d ", R[i][j]);
}
printf("\n");
}
printf("\n");
}
```
阅读全文