有以下程序: #include<stdio.h> int f(int n); main() {int a=3,s; S=f(a);s=s+f(a);printf("%d\n",s); } int f(int n) {statie int a=1; n+=a

admin2021-07-09  22

问题 有以下程序:
#include<stdio.h>
int f(int n);
main()
{int a=3,s;
S=f(a);s=s+f(a);printf("%d\n",s);
}
int f(int n)
{statie int a=1;
n+=a++:
return n;
}
程序运行后的输出结果是(  )。

选项 A、7
B、8
C、9
D、10

答案C

解析 首先main函数中的局部变量a和f()函数中的静态局部变量a的作用域都只限在其所在的函数中,相互之间不影响,看作两个小同的变量即可。另外,f()函数中的静态局部变量a只在第一次调用f()函数时初始化一次,其他调用都会保留上一次渊用结束时的值。分析main函数可知,第一次调用时将f(a)的返回值赋给s,所以语句可以改写为:s=f(a)+f(a),即main函数中调用两次f(a),传入的参数a取值都为3,第一次调用时,静态局部变量初始化为1,所以n=4并返回,a自增为2;第二次调用时静态局部变量a取上一次调用结束时的值2,所以n=5并返回,a自增为3,所以在main()函数中,s=4+5=9,所以函数执行完输出结果为9,答案为C。
转载请注明原文地址:https://kaotiyun.com/show/V4tp777K
0

最新回复(0)