C语言中使用不同方法(指针、函数定义等)计算两个整数的最大公约数。可以更深入地理解C语言中指针的使用以及函数的传参方式,并掌握求解最大公约数的经典算法。

1、欧几里德算法(迭代)

#include <stdio.h>

// 使用欧几里德算法(迭代)计算最大公约数的函数
int gcd_iterative(int a, int b) {
    int temp;
    while (b != 0) {
        temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

int main() {
    int num1, num2;
    printf("输入两个整数:");
    scanf("%d %d", &num1, &num2);
    
    int result = gcd_iterative(num1, num2);
    printf("使用迭代欧几里德算法计算 %d 和 %d 的最大公约数:%d\n", num1, num2, result);
    
    return 0;
}

2、欧几里德算法(递归)

#include <stdio.h>

// 使用欧几里德算法(递归)计算最大公约数的函数
int gcd_recursive(int a, int b) {
    if (b == 0)
        return a;
    return gcd_recursive(b, a % b);
}

int main() {
    int num1, num2;
    printf("输入两个整数:");
    scanf("%d %d", &num1, &num2);
    
    int result = gcd_recursive(num1, num2);
    printf("使用递归欧几里德算法计算 %d 和 %d 的最大公约数:%d\n", num1, num2, result);
    
    return 0;
}

3、在函数中使用指针

#include <stdio.h>

// 使用指针计算最大公约数的函数(欧几里德算法)
void gcd_pointers(int a, int b, int *result) {
    int temp;
    while (b != 0) {
        temp = b;
        b = a % b;
        a = temp;
    }
    *result = a;
}

int main() {
    int num1, num2, result;
    printf("输入两个整数:");
    scanf("%d %d", &num1, &num2);
    
    gcd_pointers(num1, num2, &result);
    printf("在函数中使用指针计算 %d 和 %d 的最大公约数:%d\n", num1, num2, result);
    
    return 0;
}

4、使用函数指针

#include <stdio.h>

// 使用欧几里德算法(迭代)计算最大公约数的函数
int gcd_iterative(int a, int b) {
    int temp;
    while (b != 0) {
        temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

int main() {
    int num1, num2, result;
    int (*gcd_ptr)(int, int) = &gcd_iterative;
    
    printf("输入两个整数:");
    scanf("%d %d", &num1, &num2);
    
    result = gcd_ptr(num1, num2);
    printf("使用函数指针计算 %d 和 %d 的最大公约数:%d\n", num1, num2, result);
    
    return 0;
}

5、使用宏函数

#include <stdio.h>

// 使用宏函数计算最大公约数的宏定义
#define GCD_MACRO(a, b) ({ \
    int temp; \
    while (b != 0) { \
        temp = b; \
        b = a % b; \
        a = temp; \
    } \
    a; \
})

int main() {
    int num1, num2;
    printf("输入两个整数:");
    scanf("%d %d", &num1, &num2);
    
    int result = GCD_MACRO(num1, num2);
    printf("使用宏函数计算 %d 和 %d 的最大公约数:%d\n", num1, num2, result);
    
    return 0;
}

推荐文档