一、实验目的:二、实验内容: 1、输入集合A和B,输出公式 file:///C:/Users/WANGTA~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif。 2、输入a和b,输出其最小公倍数和最大公约数。 3、验证:设A是有限的非空集合,|A|=n,对于A上的任意关系R, file:///C:/Users/WANGTA~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.gif=file:///C:/Users/WANGTA~1/AppData/Local/Temp/msohtmlclip1/01/clip_image006.gif 三、实验语言: 采用matlab/C/C++语言实现。 四、实验原理和实现过程(算法描述):实验原理1. 差集(A - B):
思路: 将属于集合A但不属于集合B的元素找出来。
步骤: 遍历集合A的每个元素,检查它是否也在集合B中。如果不在B中,则该元素属于A - B。
对称差(A ⊕ B):
思路: 找出只属于A或只属于B的元素。
步骤: 遍历集合A和集合B的元素,对于每个元素,检查它是否只存在于其中一个集合中。如果是,则属于对称差。
交集(A × B):
思路: 找出同时属于集合A和集合B的元素。
步骤: 遍历集合A的每个元素,检查它是否也在集合B中。如果是,则该元素属于交集。
2. 最大公约数:
思路: 利用欧几里得算法,通过反复用较小数除较大数并取余,直到余数为0,此时除数即为最大公约数。
最小公倍数:
思路: 利用最大公约数的性质,LCM(A, B) = (A * B) / GCD(A, B)。
五、实验数据及结果分析:1.2. file:///C:/Users/WANGTA~1/AppData/Local/Temp/msohtmlclip1/01/clip_image008.gif 3. file:///C:/Users/WANGTA~1/AppData/Local/Temp/msohtmlclip1/01/clip_image010.gif 4. 在有限集合A上,当i大于集合A的元素个数n时,再次进行关系的幂运算并取并集不再产生新的元素,因此对于 file:///C:/Users/WANGTA~1/AppData/Local/Temp/msohtmlclip1/01/clip_image012.gif中的关系元素,它们在 file:///C:/Users/WANGTA~1/AppData/Local/Temp/msohtmlclip1/01/clip_image014.gif中已经全部包含。因此,两者的并集是相等的。 六、源程序清单:1. #include <stdio.h>
void printSet(int set[], int size) {
for (int i = 0; i < size; ++i) {
printf("%d ", set);
}
printf("\n");
}
void calculateSets(int A[], int sizeA, int B[], int sizeB) {
// A - B (Difference)
printf("A - B: ");
for (int i = 0; i < sizeA; ++i) {
int isInB = 0;
for (int j = 0; j < sizeB; ++j) {
if (A == B[j]) {
isInB = 1;
break;
}
}
if (!isInB) {
printf("%d ", A);
}
}
printf("\n");
// A ⊕ B (Symmetric Difference)
printf("A ⊕ B: ");
for (int i = 0; i < sizeA; ++i) {
int isInB = 0;
for (int j = 0; j < sizeB; ++j) {
if (A == B[j]) {
isInB = 1;
break;
}
}
if (!isInB) {
printf("%d ", A);
}
}
for (int i = 0; i < sizeB; ++i) {
int isInA = 0;
for (int j = 0; j < sizeA; ++j) {
if (B == A[j]) {
isInA = 1;
break;
}
}
if (!isInA) {
printf("%d ", B);
}
}
printf("\n");
// A × B (Intersection)
printf("A × B: ");
for (int i = 0; i < sizeA; ++i) {
for (int j = 0; j < sizeB; ++j) {
if (A == B[j]) {
printf("%d ", A);
break;
}
}
}
printf("\n");
}
int main() {
int sizeA, sizeB;
// Input sizes of sets A and B
printf("Enter the size of set A: ");
scanf("%d", &sizeA);
int A[sizeA];
printf("Enter elements of set A:\n");
for (int i = 0; i < sizeA; ++i) {
scanf("%d", &A);
}
printf("Enter the size of set B: ");
scanf("%d", &sizeB);
int B[sizeB];
printf("Enter elements of set B:\n");
for (int i = 0; i < sizeB; ++i) {
scanf("%d", &B);
}
// Calculate and print results
calculateSets(A, sizeA, B, sizeB);
return 0;
} 2. #include <stdio.h>
// Function to calculate GCD (Euclidean algorithm)
int findGCD(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
// Function to calculate LCM
int findLCM(int a, int b) {
return (a * b) / findGCD(a, b);
}
int main() {
int num1, num2;
// Input two numbers
printf("Enter the first number: ");
scanf("%d", &num1);
printf("Enter the second number: ");
scanf("%d", &num2);
// Calculate GCD and LCM
int gcd = findGCD(num1, num2);
int lcm = findLCM(num1, num2);
// Output results
printf("GCD of %d and %d is: %d\n", num1, num2, gcd);
printf("LCM of %d and %d is: %d\n", num1, num2, lcm);
return 0;
} 七、其他收获和体会:
|