函数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;
}