以下是求最大公约数和最小公倍数的C语言代码:

#include <stdio.h>

int gcd(int m, int n);  // 函数原型声明

int main() {
    int m, n;

    printf("请输入两个正整数:\n");
    scanf("%d%d", &m, &n);

    int g = gcd(m, n);
    int l = m * n / g;

    printf("最大公约数为:%d\n", g);
    printf("最小公倍数为:%d\n", l);

    return 0;
}

// 求最大公约数
int gcd(int m, int n) {
    if (m % n == 0)
        return n;
    else
        return gcd(n, m % n);
}

该程序中,首先从用户处输入两个正整数m和n。然后使用递归算法求它们的最大公约数。最后根据最大公约数计算最小公倍数并输出结果。

注意:此程序假设用户输入的是两个正整数。如果用户可能输入非正整数,则需要添加验证。

更详细的回复

编写一个名为gcd.c的程序,可以让用户输入两个正整数m和n(m,n>0),并计算它们的最大公约数和最小公倍数。

实现方式如下:

  1. 使用while循环确保用户输入的是正整数:
int m, n;
printf("请输入两个正整数m和n:");
while (scanf("%d %d", &m, &n) != 2 || m <= 0 || n <= 0) {
    printf("输入无效,请重新输入:\n");
    while (getchar() != '\n'); // 清除输入缓冲区
}
  1. 使用辗转相减法求最大公约数:
int gcd(int a, int b) {
    if (a == b) return a;
    if (a < b) return gcd(b, a);
    return gcd(a - b, b);
}
int ans_gcd = gcd(m, n);
  1. 使用最大公约数求最小公倍数:
int lcm = m * n / ans_gcd;

完整代码如下:

#include<stdio.h>

// 辗转相减法求最大公约数
int gcd(int a, int b) {
    if (a == b) return a;
    if (a < b) return gcd(b, a);
    return gcd(a - b, b);
}

int main() {
    int m, n;
    printf("请输入两个正整数m和n:");
    while (scanf("%d %d", &m, &n) != 2 || m <= 0 || n <= 0) {
        printf("输入无效,请重新输入:\n");
        while (getchar() != '\n'); // 清除输入缓冲区
    }
    int ans_gcd = gcd(m, n);
    int lcm = m * n / ans_gcd;
    printf("%d和%d的最大公约数是%d,最小公倍数是%d\n", m, n, ans_gcd, lcm);
    return 0;
}

示例运行:

请输入两个正整数m和n:14 21
14和21的最大公约数是7,最小公倍数是42