有下列程序  #include<stdio.h>  int a=5;  int func(int d)  {   int b=5;   static int c=5;   a--;b--;--c;--d;   return a+b+c+d:  }

admin2022-04-02  22

问题 有下列程序
 #include<stdio.h>
 int a=5;
 int func(int d)
 {
   int b=5;
   static int c=5;
   a--;b--;--c;--d;
   return a+b+c+d:
 }
 main()
 {
   int k,a=4;
   for(k=0;k<3;k++)
    printf("%d,",func(a--));
 }
 程序执行后的输出结果是(          )。

选项 A、15,12,9,
B、15,13,11,
C、15,11,7,
D、15,15,15,

答案A

解析 程序定义整型的全局变量a,初值为5,main函数定义整型局部变量a,初值也是5。所以在main函数中,局部变量a屏蔽全局变量a;func函数中定义局部变量b,初值为5,定义静态变量c,初值为5,并且在func函数中变量a引用的是全局变量a。综上,我们使用a_a代表全局变量a,使用m_a代表main函数中局部变量a。main函数中,k=0时,a_a=5,m_a=4,调用函数func(4),函数func巾d的值为4,b的值为5,c的值为5,执行表达式a_a--;b--;--c;--d;后,a_a的值为4,b的值为4,c的值为4,d的值为3,a+b+c+d的值为15,程序输出15。k=1时,a_a=4,m_a=3,调用函数func(3),函数func中d的值为3,b的值为5,c的值为4(静态变量使用上一次调用结束时的值),执行表达式a_--;b--;--c;--d;后,a_a的值为3,b的值为4,c的值为3,d的值为2,a+b+c+d的值为12,程序输出12。k=2时,a_a=3,m_a=2,调用函数func(2),函数func中d的值为2,b的值为5,c的值为3,执行表达式a_a--;b--;--c;--d后,a_a的值为2,b的值为4,c的值为2,d的值为1,a+b+c+d的值为9,程序输出9。本题答案为A选项。
转载请注明原文地址:https://kaotiyun.com/show/Qhkp777K
0

最新回复(0)