C语言编程题 计算Cmn

如题所述

Cmn是一个数学上的公式,其中m是其的下角标,n是其的上角标。计算方法是

m×(m-1)×(m-2)×……共有n项的乘积,然后除以n的阶乘

用C语言做这个计算的编程,步骤如下:

1、首先需要读取m和n的值,然后在读取的同时进行判断是否满足m>0、n>0、m>=n的条件,如果不满足要求重新输入。

2、然后可以构建两个函数fun1和fun2,其中fun1的参数有两个m和n,利用循环控制求出m×(m-1)×(m-2)×······;fun2的参数只有一个,用来求n的阶乘。

3、返回值,有两种方法:(1)fun1和fun2返回整型值到主函数,强制转换成float型;(2)直接在fun1和fun2函数中将返回值强制转换成float型,然后返回到主函数进行计算。

4、在主函数中计算两个返回值的差,最后输出。

具体代码如下:(精度不够请把 int 换成 long long)

#include<stdio.h>
 
int fun1(int m, int n){
    int i, result;
    for(result = m, i = 1; i < n; i++){
        result *= --m;
    }
    return result;
}
 
int fun2(int n){
    int result;
    for(result = n; n > 2; ){
        result *= --n;
    }
    return result;
}
 
int main(){
    int m, n, result, x, y;
    printf("请输入大于零的整数m:");
    while( 1 ){
        scanf( "%d", &m );
        if(m > 0)
            break;
        printf("\n输入有误,请重新输入大于零的整数m:");
    }
     
    printf("\n请输入大于零且小于等于%d的整数n:", m);
    while(1){
        scanf( "%d", &n );
        if(n > 0 && n <= m )
            break;
        printf("\n输入有误,请重新输入大于零且小于等于%d的整数n:", m);
    }
     
    x = fun1( m, n );
    y = fun2( n );
    result = x / y;
     
    printf("\n结果是:%d\n", result);
    return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-13
#include <stdio.h>
int main()
{int m,n,i,c=1;
 scanf("%d%d",&m,&n);
 printf("C(%d,%d)=",m,n);
 if(n>m-n)n=m-n;
 for(i=1;i<=n;i++)
   c=c*(m+1-i)/i;
 printf("%d\n",c);
 return 0;
}

本回答被网友采纳
第2个回答  2014-04-05
#include <stdio.h>
long Cmn(int m, int n)
{
if(m < n || n < 0) return 0;
if(m == n || n == 0) return 1;
return (Cmn(m-1, n-1) + Cmn(m-1, n));
}

void main( )
{
int m, n;
scanf("%d%d", &m, &n);
printf("%ld\n", Cmn(m, n));
}

c语言中的cmn是什么意思?
C42=(4*3)\/(2*1)=6公式:CMN=m*(m-1)***(m-n+1)\/n(n-1)(n-2)***1

C语言编程题 计算Cmn
以下是具体的C语言代码实现:在C语言中,计算Cmn的步骤如下:1. 从用户处获取整数m和n,确保它们都大于0且m>=n。如果条件不满足,提示用户重新输入。2. 定义函数fun1,接收m和n,通过循环计算m的阶乘部分。3. 定义函数fun2,计算n的阶乘。4. 可以有两种返回值处理方式:一是fun1和fun2返回整数...

C语言阶乘怎么算
概率论,一个C上下个一个数字的算法:Cmn=m!\/[n!*(m-n)!] m在下,n在上n!代表n的阶乘=1*2*3*……*n。

C语言编程:用函数求Cmn=m!\/(n!(m-n)!)
int main(){int n,m,Cmn;cin>>n>>m;Cmn=jiecheng(m)\/(jiecheng(n)*jiecheng(m-n));cout<<Cmn;return 0;} 注意输入时n 和m之间有空格啊。

C语言编程题?
Cmn是一个数学上的公式,其中m是其的下角标,n是其的上角标。计算方法是 m×(m-1)×(m-2)×……共有n项的乘积,然后除以n的阶乘用C语言做这个计算的编程,步骤如下:1、首先需要读取m和n的值,然后在读取的同时进行判断是否满足m>0、n>0、m>=n的条件,如果不满足要求重新输入。2、然后...

C语言编程:按所给的公式计算组合数并输出结果:Cmn(m在上n在下)=n!\/...
我理解是这样的输入输出,如果是这样的输入输出的话,代码如下:include<stdio.h> define N 34 main(){ int i,j,a[N][N],n;for(i=0;i<N;i++)a[i][0]=a[i][i]=1;for(i=2;i<N;i++){ for(j=1;j<i;j++)a[i][j]=a[i-1][j]+a[i-1][j-1];} for(i=0;i<...

求解C语言利用函数计算Cmn=(m!-n!)\/(n!)
for (int j = 0; j < factors1[i]; j++)res *= prime[i];}printf("%d\\n", res);}}基本思路是因式分解,避免大数溢出 也可以把main函数改为这个,方便理解 因为 C(m,n)=m!\/((m-n)!*n!),可以先将分母部分的n!约掉。void main(){int m, n;int res;while (~scanf("%d ...

数学里的Cnm用C语言怎么表示
记入j for(j=n-1;j>i && p[j]<p[i-1];j--);\/\/交换p[i-1]和p[j]temp=p[i-1];p[i-1]=p[j];p[j]=temp;\/\/倒置p[i]到p[n-1]for(i=i,j=n-1;i<j;i++,j--){\/\/交换p[c]和p[d]temp=p[i];p[i]=p[j];p[j]=temp;} } free(p);return true;...

请问一下大佬们,这道C语言编程题我为什么错,还有这些监测点的划分依据是...
解释:C语言中一般int为32位,最大只能表示12的阶乘,超过12就会产生溢出,而题目中明确说明了数据会在double范围内,就是有可能超过int所表示范围。需要改为double类型。监测点划分依据:Cmn表示从n中选m个有多少情况,通过数学分析我们知道,当m=n\/2时取得最大值。因为我们有公式只要m1+m2=n那Cm1n...

...选择的n选m怎么编写程序?我写的怎么不对了?(C语言入门)
没读懂你这句“不会打是排列选择的n选m怎么编写程序”,但是你这个程序是对的,有个小问题就是你把 else{ a=fun(m);b=fun(e);c=fun(m);d=b*c;里面的fun(n)改过来就对了

相似回答