这两个fun有什莫区别吗?

代码1:

#include <stdio.h>
float  fun(int m, int n)
{
    float a=1,b=1,c=m-n,d=1;
    int i;
    if(m>n)
    {
        for(c;c>0;c--)
        {
            d*=c;

        }
        for(n;n>0;n--)
        {
            b*=n;
        }
        for(m;m>0;m--)
        {
            a*=m;
        }


    }
    return a/(b*c);



}

void main()   /* 主函数 */
{  void NONO ();
   printf("P=%f\n", fun (12,8));
   NONO();
}

void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
  FILE *fp, *wf ;
  int i, m, n ;
  float s;

  fp = fopen("in.dat","r") ;
  wf = fopen("out.dat","w") ;
  for(i = 0 ; i < 10 ; i++) {
    fscanf(fp, "%d,%d", &m, &n) ;
    s = fun(m, n) ;
    fprintf(wf, "%f\n", s) ;
  }
  fclose(fp) ;
  fclose(wf) ;
}



#include <stdio.h>
float  fun(int m, int n)
{
    float a=1,b=1,d=1;
    int i;
    if(m>n)
    {
        for(i=1;i<=m;i++)
        {
            d*=i;

        }
        for(i=1;i<=n;i++)
        {
            b*=i;
        }
        for(i=1;i<=m-n;i++)
        {
            a*=i;
        }


    }
    return d/(b*a);



}

void main()   /* 主函数 */
{  void NONO ();
   printf("P=%f\n", fun (12,8));
   NONO();
}

void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
  FILE *fp, *wf ;
  int i, m, n ;
  float s;

  fp = fopen("in.dat","r") ;
  wf = fopen("out.dat","w") ;
  for(i = 0 ; i < 10 ; i++) {
    fscanf(fp, "%d,%d", &m, &n) ;
    s = fun(m, n) ;
    fprintf(wf, "%f\n", s) ;
  }
  fclose(fp) ;
  fclose(wf) ;
}



两个函数的方法不同,下面一个更好。

两个fun没有区别,都是返回 m!/(n!*(m-n)!),即计算组合数公式C(m,n)的值