50分只给一人。该如何解决

50分只给一人。以下程序中static定义的静态变量还是弄不清他是怎么起作用的,麻烦各位说的简明点。#includes

50分只给一人。
以下程序中static定义的静态变量还是弄不清他是怎么起作用的,麻烦各位说的简明点。
#include   <stdio.h>
#include   <stdlib.h>
int   n=1;
void   func()
{
          static   int   x=4;int   y=10;
          x+=2;
          n+=10;
          y+=n;
          printf   ( "FUNC   :x=%2d   y=%2d   n=%2d\n ",x,y,n);
}
int   main()
{
        static   int   x=5;
        int   y;
        y=n;
        printf   ( "MAIN   :x=%2d   y=%2d   n=%2d\n ",x,y,n);
        func();
        printf   ( "MAIN   :x=%2d   y=%2d   n=%2d\n ",x,y,n);
        func();
        system   ( "PAUSE ");
        return   0;
}


[解决办法]
1.printf ( "MAIN :x=%2d y=%2d n=%2d\n ",x,y,n);
输出5 1 1没问题吧

2,printf ( "FUNC :x=%2d y=%2d n=%2d\n ",x,y,n);
x=4+2=6,n=n+10==1+10=11,y=y+n==10+11=21
所以输出6 21 11

3,printf ( "MAIN :x=%2d y=%2d n=%2d\n ",x,y,n);
这里x还是main里的x,当然还是5,y还是main里的y,当然还是1,n已经在fun函数里i改变成为11
所以输出5 1 11

4,printf ( "FUNC :x=%2d y=%2d n=%2d\n ",x,y,n);
x是static的,所以x是fun函数内部的x,已经为6,然后重复第二步的操作
x=6+2=8,n=n+10==11+10=21,y=y+n==10+21=31
所以输出8 31 21


要注意函数里的y不是static的