关于静态变量、阶乘的和的问题

xdm,这次又两个问题
第一个
对于静态变量的定义与赋值
下面两种为什么第一种不行

 static int f;
    f=1;
static int f=1;

这个在用静态变量算阶乘的时候又明显的感觉

第二个

这个是用来算阶乘的和
为什么第11行不屏蔽的时候,从5!开始计算就不正常了
如果屏蔽掉的话就正常了

#include<stdio.h>
int main ()
{
 int factorial(int n);
 int n,sum;
 int i;
 sum=0;
 scanf("%d",&n);
 for(i=1;i<=n;i++)
 {
  printf("%d! = %d\n", i, factorial(i));
  sum+=factorial(i);
 }
 printf("%d\n",sum);
 return 0;
}

int factorial(int n)
{
 static int f=1;
 f=f*n;
 return f;
}

  1. 先回答你第一个问题,之所以静态变量的定义和初始化不能分开写是因为你把它定义在函数外面。
    函数外面的变量放在静态存储区里,它没有操作数栈那些函数特有的东西,所以 不能按顺序执行类似预编译语句、变量/结构体的定义之外的其他语句
  2. 再来回答你第二个问题,这里有问题因为你这里重复调用了函数 factorial,所以结果不正确,你只要在每次循环的时候调用一次就行

    img


    如果此回答有用的话,请采纳

函数调用多次结果可不就是变了么

img

 #include<stdio.h>
int main ()
{
    int factorial(int n);
    int n,sum;
    int i;
    sum=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        int temp=factorial(i);
        printf("%d! = %d\n", i, temp);
        sum+=temp;
        printf("\n");
    }
    printf("%d\n",sum);
    return 0;
}
int factorial(int n)
{
    static int f=1;
     f=f*n;
    return f;
}