c语言基础问题求解。

img


图上铅笔写的是我的思路过程,算出来是14,我搜出来的答案是15,但是书上写的答案是10,不知道到底哪一个对,还有自己的思路哪里错了,能不能详细指点下,谢谢各位!

答案是10
int s 是在函数f()中定义的,每次调用
f()是都会重新给方法里的 s 赋值 为1 不会随着外部调用次数改变,真正值发生改变的, 是i 由于i是静态变量,只在内存中存在一份,所以
for循环中循环,分别为
第一次 s=1 i=1 a=1
第二次 s=2 i=2 a=3
第三次 s=3 i=3 a=6
第四次 s=4 i=4 a=10

int f() 函数里的局部变量 i 是个静态局部变量,它的值是会被保留。
执行顺序如下:
i = 1: a+=f();===> f() ==> s+=i --> return s=1+0 = 1; i++ = 1; a+=f() = 0 + 1 = 1.
i = 2: a+=f();===> f() ==> s+=i --> return s=1+1 = 2; i++ =2; a+=f() = 1 + 2 = 3;
i = 3; a+=f();===> f() ==> s+=i --> return s=1+2 = 3; i++ =3; a+=f() = 3 + 3 = 6;
i = 4; a+=f();===> f() ==> s+=i --> return s=1+3 = 4; i++ =4; a+=f() = 6 + 4 = 10;
结束循环,输出:10

看看你的解题过程发现了错误的地方,你的s是累加项,但是程序中s每次要初始化为1

img

又碰到你,最近在刷题?
回归题目,

  1. 首先你需要确定,for 循环运行了几次? 答案是 4次,那么f() 会被调用4次
  2. 每一次f() 返回的s 值,要返回 4次,最后结果是 4次 s 的值相加
    ok,这两步确定后,就好办了
    第一次,s = 1 i++ 后变成1
    第二次,s = 2 i++后变成2
    第三次,s = 3 i++后变成3
    第四次,s = 4 i++后变成4
    1 + 2 + 3 + 4 = 10