古诗送别长亭外:计算机 二级C语言的一道题

来源:百度文库 编辑:高考问答 时间:2024/04/29 09:07:00
45)有以下程序
?? int a=2;
?? int f(int n)
?? { static int a=3;
?? int t=0;
?? if(n%2){ static int a=4; t += a++; }
?? else { static int a=5; t += a++; }
?? return t+a++;
?? }
?? main()
?? { int s=a, i;
?? for( i=0; i<3; i++) s+=f(i);
?? printf("%d\n", s);
?? }
??程序运行后的输出结果是
?? A)26 B)28 C)29 D)24
请说明原因

选C
程序从main函数开始,先把a=2的值赋给s.然后由于在for循环中调用了自定义函数f(n),程序转到f(n)函数运行.
由于第一行"static int a=3;"定义了a为函数f(n)的局部变量.
第一次for循环使f(n)中的n=0,通过if语句判断n%2=0,所以执行else语句.
在else内,又用static定义了一个局部变量a=5.它的作用范围就只在else语句内部.那么t+=a++相当于:t=0+5++=5.
附带说一下,这时a的值由于++运算变成了6.
最后是return语句,程序运行到这里t的值为5,a的值是函数f(n)的全局变量值3.那么t+a++就是8.这时a的值由于++运算变成了4.在下面运行时请注意!

返回到for循环中:s+=8.那么s的值就是10了.
然后for循环中i++,变成i=1.再次调用f(n)函数.和上次差不多.只是这次判断n%2的值是非0的,那么将执行if后的语句.在if内,局部变量a=4.那么t+=a++就是4.
第二次return语句返回的值是:t+a++=4+4=8.(这时a的值又被++了,它变成5.要注意!!)返回到for中,s的值是上一次循环的值10加上8.即18

for内i++,i变成2.进入f(n)函数中,判断n%2=0.那么执行else语句.这个时候,由于第一次局部变量a的值经过++运算变成6了,使得t+=a++的值t=6.返回t+a++则是6+5=11.那么回到for循环中,s的值就是18+11=29.这样答案就出来了

^_^手好累啊...