我只在主函数里有一个scanf是输入k,r的但是每次执行程序我都得输入三个数据,而且算的也不对,是哪里不对
#include<stdio.h>
long int fact(int n)
{
int i; int p;
for(i=1;i<=n;i++)
p=p*i;
return p;
}
int main()
{
int k,r;
printf("输入k,r:");
scanf("%d%d\n",&k,&r);
printf("r=%d,k=%d",k,r);
double s;
s=fact(k)/(fact(r)*fact(k-r));
printf("\nC(%d,%d)=%lf\n",k,r,s);
}
首先你的p没有初始值1,且是int型,所以返回的并不是long型,scanf里面不能加\n
#include<stdio.h>long fact(int n)
{
int i; long p=1;
if(n>0) //这里添加判断以免出现小于1的现象
for(i=1;i<=n;i++)
p=p*i;
else printf("程序出错!k必须大于r!");
return p;
}
int main()
{
int k,r;
printf("输入k,r:\n");
scanf("%d%d",&k,&r);
printf("r=%d,k=%d",k,r);
double s;
s=fact(k)/(fact(r)*fact(k-r));//若k-r<1,会出错
printf("\nC(%d,%d)=%lf\n",k,r,s);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 2018-06-06
p没有赋初值1 所以p=p*i 右边的p是没有值的,会出现语法错误
要输入3个数据是因为你把\n也加进scanf里了
不如把\n提出来在下一行printf("\n");
要输入3个数据是因为你把\n也加进scanf里了
不如把\n提出来在下一行printf("\n");