有以下程序: int a=4; int f(int n) { int t=0; static int a=5; if(n%2) {int a=6; t+=a++;} else {int a=7; t+=a++;}

admin2009-01-15  19

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

选项 A、24
B、28
C、32
D、36

答案2

解析 题目中第1行声明了一个全局变量a,在函数f()中,也声明了一个静态变量a,这时全局变量被屏蔽,即在f()函数中用到的a是其内部定义的这个静态变量a,而不是全局变量。但f()函数的if子句和else子句又分别了局部变量a,这时静态变量a又被屏蔽,即在if子句中使用的是if子句自己定义的a,else子句也是这样。在主函数中,通过for语句连续执行了2次f()函数,并将返回值累加到s中,且s被全局变量a初始化,即初始值是4。第1次调用f(),参数值为0,0能被2整除,执行if子句,t被自增6,a增1不会影响外面的变量a。函数返回t和静态变量a的和,即11,此时,静态变量a被增1,这次对a的改变会带入到下一次f()函数的调用小去。第2次调用f(),参数值为1,1不能被2整除,执行else子句,t被自增7,a增1不会影响外面的变量a。函数返回t和静态变量a的和,此时a的值为上次调用f()时增1后的值6,即返回7+6=13。所以,主函数中s现在的值为4+11+13=28。故应该选择B。
转载请注明原文地址:https://kaotiyun.com/show/r6Xp777K
0

最新回复(0)