C语言程序练习:调用函数

C语言程序设计题:编写函数根据公式求p,计算结果作为函数值返回。m与n为两个正整数,且m>n。在main函数中验证。要求:m和n在main函数中由键盘输入。p的计算公式如下:p=(m-n)!/n!


#include <stdio.h>
int fac(int n);
int fun(int m, int n);
 void main()
{
    int m, n;
    while (1)
    {
        scanf_s("%d%d", &m, &n);
        if(m>n)
            break;
        else
        {
            printf("输入有误,请重新输入\n");
            continue;
        }
    }
    printf("%d", fun(m, n));    
}
int fac(int n)
{
    if (n == 1)
        return 1;
    else
        return fac(n - 1)*n;
}
int fun(int m, int n)
{
    int  p;
    p =fac(m - n)/fac(n);
    return p;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

#include <stdio.h>
// 计算阶乘
int factorial(int num) {
    int res = 1;
    for (int i = num; i > 1; i--) {
        res *= i;
    };
    return res;
}
// 计算公式p
double eval(int m, int n) {
    return factorial(m-n)*1.0/ factorial(n);
}
int main(void) {
    int m, n;
    // 读取整数m,n
    scanf("%d", &m);
    scanf("%d", &n);
    // 调用eval函数,得到结果
    printf("%f", eval(m, n));
    return 0;
}
#include <stdio.h>

void swap(long long *a, long long *b)
{
    long long t = *a;
    *a = *b;
    *b = t;
}

long long gcd(long long a, long long b)
{
    if (a > b)
        swap(&a, &b);
    long long r = b % a;
    if (r == 0)
        return a;
    return gcd(r, a);
}

long long f(int n)
{
    long long r = 1;
    for (int i = 2; i <= n; i++)
        r *= i;
    return r;
}

int main()
{
    int m, n;
    scanf("%d%d", &m, &n);
    if (m <= 0 || n <= 0 || m <= n)
    {
        printf("requires m > 0 && n > 0 && m > n\n");
        return 1;
    }
    long long a = f(m - n);
    long long b = f(n);
    long long d = gcd(a, b);
    a /= d;
    b /= d;
    if (b == 1)
        printf("%lld", a);
    else
        printf("%lld/%lld", a, b);
    return 0;
}
$ gcc -Wall main.c
$ ./a.out
3 1
2
$ ./a.out
3 2
1/2