为什么?我想为你为什么不知道原因,这是很简单的逻辑推算题,一看就知道你的调用的函数返回值就是你的输入值,我猜你是想要的结果是1,1*2,1*2*3,1*2*3*4,1*2*3*4*5是吧?调用函数的形参只是在你用的时候形成,当调用完毕就会释放,j的运算结果不会保留在内存当中,因此你想要那种结果的话,办法可以好像dingpwen所说那样把j声明为静态变量,关键字为static,不过最好是把
for(i=1;i<=5;i++)
printf("%d",f(i));
printf("\n");
改成
for(i=1;i<=5;i++)
{printf("%d",f(i));
printf("\n");}
加上括号,运行结果不会一连串,一行显示循环一次的结果比较好判断
或者不改变调用函数,改变主函数
main()
{
int i,k=1;
for(i=1;i<=5;i++)
{ k*=f(i);//这里根本不用f函数,就是k*=i就行
printf("%d",k);
printf("\n");}
} 同样可以得到结果
for循环是i从1到5。循环共5次。函数f(int n)里的j始终为1,n=i所以从1到5。所以最终打印出的结果为1,2,3,4,5。
你的疑惑是由j引起的,程序中定义的j为int型,所以说每次调用时j的值都赋值=1,即j的值总是为1。
如果把int型改为static型,那么每次调用后j就会保存上一次的值啦!
//加个static
main()
{
int i;
for(i=1;i<=5;i++)
printf("%d",f(i));
printf("\n");
}
f(int n)
{
static int j=1; //here...
j=j*n;
return(j);
}
你想要什么结果 我给你改
后面的调用函数好像没用