用C语言求已知集合的笛卡儿乘积(离散数学)
实验要求:
通过编程实现求给定集合A和B的笛卡儿乘积C(C=A×B)D(D=A×B×A)的运算。
实验内容
已知所给集合A和B,求A与B的笛卡儿乘积C(C=A×B) D(D=A×B×A)
实验原理
笛卡儿乘积是以有序偶为元素组成的集合,它的定义为C={<x,y>|x∈A∧y∈B}。所以,欲求笛卡儿乘积。只需取尽由集合A的元素及集合B的元素,并构成序偶<ai,bj>送入C之中即可。
实验代码
#include <stdio.h>
int main()
{
int N,M,i,j,t=0,k;
char A[]={'a','r','g'};
char B[]={'2','5','9'};
N=sizeof(A)/sizeof(A[0]);//求集合A中的元素个数
M=sizeof(B)/sizeof(B[0]);//求集合B中的元素个数
char C[N*M][2];//用一个二维数组来存储笛卡儿积 每一行代表一个笛卡儿积(有顺序)
printf("A*B的结果为:\n");
printf("C={ ");//集合C是一个集合,所以要有大括号,满足集合的输出格式
for(i=0;i<N;i++){
for(j=0;j<M;j++){
C[t][0]=A[i];
C[t][1]=B[j];
printf("(%c,%c) ",C[t][0],C[t][1]);
t++;
}
}
printf("}");
printf("\n");
printf("A*B*A的结果为:\n");
printf("D={ ");
t=0;
char D[N*M*N][3];
for(i=0;i<N;i++){
for(j=0;j<M;j++){
for(k=0;k<N;k++){
D[t][0]=A[i];
D[t][1]=B[j];
D[t][2]=A[k];
printf("(%c,%c,%c) ",D[t][0],D[t][1],D[t][2]);
t++;
}
}
}
printf("}");
return 0;
}