C语言简单问题,请高手回答下

#include "stdio.h"
void main()
{long fac(long);
long i,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
printf("%ld!=%lf\n",i,fac(i));

}
long fac(long n)
{
long double f=1.0;
int i;
for (i=1;i<=n;i++)
(int)f=f*i;
return(f);
}
此程序的目的为输入n ,依次输出1-n的阶乘,但是这个程序输出来全是0,why?
为了增加计算量,我要用double的,可以改成double的吗?谢谢了

#include <stdio.h>

long fac(long);

int main()
{
long i,n;
while (scanf("%ld",&n) != EOF)
{
for(i=1;i<=n;i++)
printf("%ld! = %ld\n",i,fac(i));
}
}
long fac(long n)
{
long f=1, i;
for (i=1;i<=n;i++)
f=f*i;
return(f);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-08-13

为了实现你说的功能,我吧你的程序改成一下,就OK了:

#include "stdio.h"

void main()

{

    long fac(long n);

    long i,n;

    scanf("%ld",&n);

    for(i=1;i<=n;i++)

        printf("%ld!=%ld\n",i,fac(i));

/*  getch();*/

}

long fac(long n)

{

    long f=1;

    long i;

    for(i=1;i<=n;i++)

        f=f*i;

    return(f);

 }

你自己对比一下是什么问题吧

第2个回答  2009-08-13
#include "stdio.h"
int fac(int n);
void main()
{
int i,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
printf("%d!=%d\n",i,fac(i));

}
int fac(int n)
{
int f=1;
int i;
for (i=1;i<=n;i++)
f=f*i;
return(f);
}
这样是没有问题的。此文件必须是.c文件,不能是.cpp文件
你那个申明函数不应该放在main函数里面。那个long用不大来
第3个回答  2009-08-13
#include "stdio.h"
void main()
{long fac(long n);
long b;
int a;
scanf("%d",&a);
b= fac(a);
printf("%d!=%ld\n",a,b);
getch();

}
long fac(long n)
{
long f=1;
int i;
for (i=1;i<=n;i++)
f=f*i;
return(f);
}
就这个可以了
第4个回答  2009-08-13
#include "stdio.h"
void main()
{long fac(long);
long i,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
printf("%ld!=%ld\n",i,fac(i));//输出fac(i)注意去类型

}
long fac(long n)//函数 返回 的类型注意
{
long f=1;
int i;
for (i=1;i<=n;i++)
f=f*i;//不用进行强制转类型
return(f);
}
第5个回答  2009-08-13
double只是精度高,这个求阶乘用long就好了

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网