流程图题过编译

#include<stdio.h>
#include<stdlib.h>

// 函数原型
int getLowestTerms(int, int, int *, int *); // 分数简化
int getGCD(int, int); // 计算最大公约数
void Output(int, int, int);

// 测试
int main()
{
    int m, n, Num, Denom;
    int status;

    scanf("%d%d", &m, &n);

    status = getLowestTerms(m, n, &Num, &Denom);
    Output(status, Num, Denom);

    return 0;
}

// 分数化简
// 原分子分母通过参数输入
// 化简后的分子分母写入指针形参指向的变量
int getLowestTerms(int m, int n, int *pNum, int *pDenom)
{
    int gcd;
    int msign = 1;
    int nsign = 1;
    int numsign = 1;

    if(m == 0)
    {
        return 0;
    }
    else if(m == n)
    {
        return 1;
    }
    else if(n == 0)
    {
        return -1;
    }
    else
    {
        // 结果符号判断
        if(m < 0)
        {
            msign = -1;
        }
        if(n < 0)
        {
            nsign = -1;
        }
        // 结果分子符号
        numsign = msign * nsign;

        m = abs(m);
        n = abs(n);
        *pNum = m;
        *pDenom = n;
        gcd = getGCD(m, n);
        *pNum /= gcd;
        *pNum *= numsign;
        *pDenom /= gcd;

        return 2;
    }
}

// 计算最大公约数
int getGCD(int m, int n)
{
    int rem = n;

    while (rem != 0)
    {
        rem = m % n;
        m = n;
        n = rem;
    }

    return m;
}

void Output(int status, int nNum, int nDenom)
{
    if(status == 0)
    {
        printf("%d
", status);
    }
    else if(status == 1)
    {
        printf("%d
", status);
    }
    else if (status == 2)
    {
        if(nDenom == 1) // 分母为1
        {
            printf("%d
", nNum);
        }
        else
        {
            printf("%d/%d
", nNum, nDenom);
        }
    }
    else
    {
        printf("Error!
");
    }
}
Aim: Buaa
原文地址:https://www.cnblogs.com/calm-blogme/p/12096750.html