选择题   有以下程序:
    #include<stdio.h>
    int fun(int x, int y)
    {
    static int m=0,i=2;
    i+=m+1;m=i+x+y;
    return m;
    }
    void main()
    {int j=1,m=1,k;
    k=fun(j,m);
    printf('%d,',k);
    k=fun(j,m);
    printf('%d\n',k);
    }
    程序运行后的输出结果是______。
 
【正确答案】 B
【答案解析】fun()函数中定义两个静态局部变量m、i,其中m初值为0,i初值为2,由于是静态局部变量,m、i只在第一次调用fun()函数时初始化,后续调用fun()函数时,m、i的值沿用上一次调用后的值。main()函数中j、m、k都是局部变量,作用域都只限在main()函数中,所以main()函数中的m与fun()函数中的m属于不同的变量。由源程序可知main()函数连续两次调用fun(1,1),第一次调用fun(1,1),fun()函数中x值为1,y值为1,m值为0,i值为2,所以执行i+=m+1后i的值为3。执行m=i+x+y后,m的值为5,函数返回值为5;第二次调用fun(1,1),fun()函数中x值为1,y值为1,m值为5,i值为3。所以执行i+=m+1后i的值为9。执行m=i+x+y后,m的值为11,函数返回值为11。故本题答案为B选项。