c语言编程问题

编写一个计算组合数的函数combinNum(int m,int n)。计算结果由函数返回。
计算组合数的公式是:
c(m,n)=m!/(n!*(m-n)!)
要求:
(1)从主函数输入m和n的值。对m>n、m<n和m=n 的情况作分别处理后调用函数combinNum(m,n),在主函数内输出结果值。
(2)对m>n、m<n和m=n 的情况各取一组数据进行测试,检查程序的正确性。
(3)修改程序,把两个函数分别放在两个程序文件中,作为两个文件进行编译、链接和运行。

这是我编写的:
#include "stdio.h"
void main()
{
long m,n;
scanf("%ld,%ld",&m,&n);
if(m<n){m=m+n;n=m-n;m=m-n;};
printf("%ld",combinNum(m,n));
getch();
}
combinNum(long m,long n)
{
long a=m-n;
long s;
long i,m1=m,n1=n,a1=a;
for(i=1;i<=m1-1;i++)
{
m*=i;
}
for(i=1;i<=n1-1;i++)
{
n*=i;
}
for(i=1;i<=a1-1;i++)
{
a*=i;
}
s=m/(a*n);
return(s);
}

为什么返回值s总是很大??????????

第1个回答  推荐于2016-05-07
改成如下就可:错在函数调用前没有声明,也没有设定返回值。
#include "stdio.h"
void main()
{
long combinNum(long m,long n); ///这地方先声明
long m,n;
scanf("%ld,%ld",&m,&n);
if(m<n){m=m+n;n=m-n;m=m-n;};
printf("%ld",combinNum(m,n));
getch();
}
long combinNum(long m,long n) ///前加long返回值类型
{
long a=m-n;
long s;
long i,m1=m,n1=n,a1=a;
for(i=1;i<=m1-1;i++)
{
m*=i;
}
for(i=1;i<=n1-1;i++)
{
n*=i;
}
for(i=1;i<=a1-1;i++)
{
a*=i;
}
s=m/(a*n);
return(s);
}本回答被提问者采纳
第2个回答  2008-04-11
函数定义声明部分同3楼
计算部分可简化为:
x=1;
for(i=0;i<n;i++)
x*=(m-i)/(i+1)
第3个回答  2008-04-11
res = 1;
for(int i = 1; i <= n; ++ i)
res = res / i * (m - i + 1);
return res;
相似回答