C语言选择题解释 急 44

来源:百度知道 编辑:UC知道 时间:2024/06/01 12:22:20
44. # include <stdio.h>
main ( )
{ int x = 3, i ;
for (i = 0 ; i<3 ; i ++ )
printf (" %d ", f (x) ) ;
}
f ( int a )
{ int b = 0;
static int c = 3;
b ++ ; c ++ ;
return ( a + b + c ) ;
}
A) 8 8 8 B) 8 10 12 C) 8 11 14 D) 8 9 10

答案选D(8 9 10)
子函数中变量a是主函数x值传递过来的值,每次都是3,
变量b是子函数中的自动动态变量,每调用此函数都重新定义并初始化,b++后,每次都是1
变量c是子函数中的静态局部变量,只在第一次调用时定义并赋初值3,之后即使其子函数被调用后销毁,它也不会销毁,而且此子函数再被调用时,该静态变量不再被重新定义及赋初值,故其值连续地被保持,每一次调用经++后为4,第二次为5,第三次为6
故第一次输出1+3+4=8
第二次输出1+3+5=9
第三次输出1+3+6=10

选a

选D,一楼回答的不正确.
另外,此程序有瑕疵啊,应该把f(int a)以及后面的语句写到main()函数的上面,或者不用调整顺序,在main函数上加一条声明语句
f(int a);

选D

因为C定义的是静态变量。f(int a)每次运行后C的值都被保留了下来。
循环了三次所以以C也自加了三次。