函数第五章pta训练


函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为( )。

int f(int m)
{  static int i=0;
   int s=0;

   for(;i<=m;i++)
     s+=i;

   return s;
}

为什么是15?

i是静态变量,当函数结束时,这个变量还一直存在,再次调用f函数时,这个i变量不会重新初始化,还是上次函数运行结束时的值
f函数功能是求1到m的累加和
f(5)=15,没问题。但函数调用结束后,i值为m+1,即i值为6。导致f(3)时,for循环条件无法满足,实际f(3)=0,因此最终两者相加结果为15

因为i为静态变量,在程序执行时一直存在,第一个f(5)计算出i从0到5累加的和15,f(5)返回15;

第二个f(3),for循环体不会执行,因为i为静态变量一直存在,它的值在第一次调用时变为了6,所以,i<=m即6<3为假,for循环不执行,f(3)返回0,所以f(5)+f(3)=15+0=15.

测试代码如下:

#include <stdio.h> 

int f(int m)
{  static int i=0;
   int s=0;
 
   for(;i<=m;i++){
           printf("i=%d,",i);
           s+=i;
   }
   printf("i=%d,m=%d,s=%d\n",i,m,s);  
     
     
   return s;
}

int main(void){
    
    int sum=f(5)+f(3);
    printf("sum=%d\n",sum);
    
    return 0;
}

img