求大神帮忙!!新手不懂调试,调试失败是怎么回事?
#include<stdio.h>
long facn(int a)
{long z;
if(a==1)
z=1;
else
z=facn(a-1)*a;
return z;}
long facm(int b)
{long x;
if(b==1)
x=1;
else
x=facm(b-1)*b;
return x;}
long facd(int c)
{long v;
if(c==1)
v=1;
else
v=facd(c-1)*c;
return v;
}
main()
{int m,n,d;long q;
d=m-n;
scanf("%d %d",&m,&n);
q=facn(n)/(facm(m)*facd(d));
printf("q=%ld/n",q);
}
可以生成解决方案,但调试时一直被中断。用WIN-TC试了试编译成功但不能运行。
[解决办法]
#include<stdio.h>long facn(int a){ long z; if(a==1) { z=1; return z; //要返回 } else z=facn(a-1)*a; return z;}long facm(int b){ long x; if(b==1) { x=1; return x; } else x=facm(b-1)*b; return x;}long facd(int c){ long v; if(c==1) { v=1; return v; } else v=facd(c-1)*c; return v;}main(){ int m,n,d; long q;// d=m-n; //m,n还没赋值就做运算,应该放在后面吧 scanf("%d %d",&m,&n); d= m-n; q=facn(n)/(facm(m)*facd(d)); printf("q=%ld/n",q);}
[解决办法]
[color=#FF0000]d= m-n;q=facn(n)/(facm(m)*facd(d));[/color]q总是=0是因为分子比分母小,得出来的是0.*****这样的数,所以取整,当然就是0了。d=m-n就意味着m比n大,大的数再乘以一个数,当然就更大了,所以分子就比分母小了。在做递归的时候,其实应该是限制输入的数应该是大于0的,而在long facm(int b){ long x; if(b==1) { x=1; return x; } else x=facm(b-1)*b; return x;}只判断了输入是否等于1,这样的话,如果输入的是一个负数的话,就会有问题了,建议这样写long facm(int b){ long x=0; if(b>0) { if(b==1) { x=1; return x; } else x=facm(b-1)*b; } return x;}