C语言的菜鸟问题

int fac(int n)
{static int f=1;
f=f*n;
return(f);
}
main()
{int i;
for(i=1;i<=5;i++)
printf("%d!=%d\n",i,fac(i));
getch();
}
我要计算0到5的阶乘,
为什么i的初值改为0 就出错啦?而下面这个就可以???
int fac(int n)
{register int i,f=1;
for(i=1;i<=n;i++)
f=f*i
return(f);
}
main()
{int i;
for(i=0;i<=5;i++)
printf("%d!=%d\n",i,fac(i));
}

第1个回答  2010-06-13
你用static定义了静态变量
所以f=1这个赋值操作只会在第一次调用函数的时候进行一次赋值操作。。。
i=0后则f之后恒等于0了
你可以去掉static试试(当然,结果还是不对,呵呵)本回答被提问者采纳
第2个回答  2010-06-13
1:当i=0时,函数fac中f的值一直是0(没加当n=0时的判断);
2:fac循环中已经让f不为0了;
第3个回答  2010-06-13
上面一个i=0是,fac(0)时return就是0了
后面一个fac(0)时i=1直接return(f)就是1
相似回答
大家正在搜