问题
单项选择题
有以下程序: #include<stdio.h> int a=1; int fun(int c) {static int a=2; c=c+1; return(a++)+c; } main() { int i,k=0; for(i=0;i<2;i++){int a=3;k+=f(a);} k+=a; printf("%d\n",k); } 程序的运行结果是______。
A.14
B.15
C.16
D.17
答案
参考答案:A
解析: 本题考查的重点是对static变量以及全局变量的理解。static变量是函数或文件中的永久变量。本题中static int a=2语句定义了一个static局部变量,编译程序为其生成永久存储单元,即调用函数fun时,其值一直都保存着,而不是使用函数外所赋的值(尽管开头定义了一个同名的全局变量)。在主函数中,for循环进行两次,第一次循环得f(3)=3+1+2=6,从而k+=f(3)=6,第二次循环由于static局部变量a变成了3,从而f(3)的值为7,故k+=f(3)=13,再执行k+=a时,此时a的值为全局变量,其值为1,故k的值为14,选项A是正确的。