有以下程序 int a=2; int f(int n) { static int a=3; int t=0; if(n%2) {static int a=4; t+=a++;} el

admin2009-01-15  23

问题 有以下程序     int  a=2;     int f(int  n)     {  static int a=3;        int t=0;        if(n%2) {static int a=4;  t+=a++;}        else    {static int a=5;  t+=a++;}        return   t+a++;    }     main ( )     {  int  s=a, i;        for (i=0;i<3; i++)  s+=f (i)        print f ("%d\n" , s );     }    程序运行后的输出结果是

选项 A、26
B、28
C、29
D、24

答案4

解析 全局变量的生存期是整个程序的运行期间,作用域是从变量定义的位置开始,到整个源文件结束止。但是,若全局变量和某一函数或语句块中的局部变量同名,则在该函数或语句块中,此全局变量被屏蔽,即在该函数或语句块内,访问的是局部变量,与同名的全局变量不发生任何关系。静态局部变量的生存期与全局变量相同,作用域和局部变量一样都是整个函数成语旬块内有效。程序第一行定义了一个全局变量a,在f()函数开头也定义了一个静态局部变量a,而且在后面 if语句的两个子句中都定义了静态局部变量a。这4个变量a虽然名字一样,但却是4个独立的变量,而且在整个程序运行期都存在。在主函数中,在定义变量s时将s初始化为全局变量a的值2,然后使用一个for循环分别调用了3次f(0)、f(1)、f(2),并将得到的值累加到变量s中。第1次调用n=0为偶数,执行else子句,此时t累加的是else子句中的变量a,所以执行后else子句中的a变为6,t变为5,然后return语句中的a是函数f()开头定义的a,执行后函数开头的a变为4,所以返回值是5+3=8。第2次调用n为1是奇数,执行if子句,所以t变为4, if子句中的a变为5,然后返回时函数开头的a变为 5,返回值是4+4=8。第3次调用n为2是偶数,又执行else子句,else子句中的a现在还是上次执行后的值6,所以t=6,然后返回时加上函数开头的a的当前值5,  最后返回11。所以s最终的值是2+8+8+11=29。故应该选择C。
转载请注明原文地址:https://jikaoti.com/ti/3YS0FFFM
0

最新回复(0)