| 
一、实验目的:二、实验内容: 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; 
} 七、其他收获和体会: 
 |