C语言,结果为什么是7?谢谢。

Python09

C语言,结果为什么是7?谢谢。,第1张

首先执行func(9)

函数定义知func(9)= 9 -func(7);

func(7) = 7 -func(5);

func(5) =5-func(3);

func(3)= 3-func(1);

由func()函数定义知func(1) = 3;

代入上面三个式子得,

func(3) = 0;

func(5)=5;

func(7)=2;

func(9)=7;

由于n先为10,10大于7,则执行n--变成9,输出9,又判断9大于7又执行n--变为8,输出8,判断8大于7执行n--变为7,输出7,判断7大于7不成立,就跳出while循环。最后屏幕显示

9

8

7

传到函数f的a的值永远都是2,这点容易理解,现在关键就是b和c的值了

对于b,它是f()函数内部的一个局部变量,所以每次调用的时候,它的初始值都是0

执行b++之后,就变成了1,也就是每次计算a+b+c时都是1.

对于c,它是f()函数内部的局部静态变量,也就是它的作用域仅限于f()函数内部,

但由于它静态变量的特性,所以它只被初始化一次,也就是编译的时候就初始好了,初始值是3,以后每次调用f()的时候,就不会再初始化它了,它的值保存在静态区,下次调用f()的时候,会继续使用静态区保存的值。

所以第一次调用f()执行c++之后,它的值就变成了4,

结果就是2+1+4=7

第二次调用f()执行c++,之前,它的值是4(保存在静态区不会因为函数结束而被系统回收),累加完就是5了,结果当然就是2+1+5=8,

第三次就类似第二次,所以结果就是9

关键是要理解静态变量的意思,存放在内存静态区,仅在编译器编译的时候,调用一次初始化,运行时不会再进行初始化。

朋友,请【采纳答案】,您的采纳是我答题的动力,如果没有明白,请追问。谢谢。