C语言函数问题(二) 在线恭候

来源:百度知道 编辑:UC知道 时间:2024/05/17 20:51:50
有以下程序
int a=4;
int f(int n)
{int t=0; static int a=5;
if(n%2) {int a=6; t+=a++;}
else {int a=7 ;t+=a++;}
return t+a++;
}
main()
{int s=a,i=0;
for(;i〈2;i++) s+=f(i);
printf (“%d\n”,s);
}
程序运行后的输出结果是(B)
A)24 B)28 C)32 D)36

为什么?

好家伙,能整出这种题目来,真佩服出题者。
首先我想你要明白出题者出这么一道题的目的。按照我的理解,这道题目主要涉及到两个知识点:变量的作用域,++运算符。
如果把程序这样稍微改一下,我想你会容易懂一些。

int a1 = 4;
int f(int n)
{
int t = 0; static int a2 = 5;
if(n%2)
{
int a3 = 6; t = t + (a3 ++);
}
else
{
int a4 = 7; t = t + (a4 ++);
}
return t + (a2 ++);
}
main()
{
int s = a1, i = 0;
for( ; i〈 2; i ++)
s = s + f(i);
printf ("%d\n", s);
}

怎么样,自己能做出来了吗?好好回忆一下上面说的这两个知识点。

选b
因为int s=a s=4;a是全局变量;
第一此执行s+=f(i); 先执行f(0);
if(n%2) {int a=6; t+=a++;} 此时t=6 ,局部a=7,static a=5 不变.t+a++; 的值是返回(6+5)后 ,static a=6; s=4+11=15;
第一此执行s+=f(i); 先执行f(1);
else {int a=7 ;t+=a++;} 此时t=7 ,局部a=8,static a是上次值6.再t+a++; 的值是返回(7+6)后 ,static a=6; s=15+13
输出结果

s=a=4;
执行f(0)
n=0,进入else,局部变量a=7,所以t=t+a=7,然后这里的a就释放掉空间,return t=t+a,这里的a为static a,所以t=t+a=7+5=12,a自增变为6
s=s+f(