哪位大哥能为我解答下面的c语言题 主要是不懂答案是怎么运算出来的还有static在这个程序的作用,运算过程

void main()
{int t=1;fun(fun(t));}
fun(int h)
{static int a[3]={1,2,3};
int k;
for(k=0;k<3;k++) a[k]+=a[k]-h;
for(k=0;k<3;k++) printf("%d",a[k]);
printf("\n");return(a[h]);
}这个答案是1 3 5 -1 3 7

fun(1): a[0]=a[0]+a[0]-1=1;
a[1]=a[1]+a[1]-1=3;

a[2]=a[2]+a[2]-1=5;

注意,static变量表示,数组a的各个值保存在一个内存中,在其生命期和作用域内不会被清除
fun(a[1]): a[0]=a[0](此时为1)+a[0]-3(即fun括号里的a[1])=-1;
a[1]=a[1](此时为3)+a[1]-3=3;

a[2]=a[2](此时为5)+a[2]-3=7;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-07
static 静态变量,就是每次进入函数对该变量的赋值都保存,相当于一个全局的变量追问

能把a[k]+=a[k]-h;中h怎么算 return(a[h]);返回值是多少告诉我吗,我还是初学者 得出答案的过程详细的
谢谢了

追答

#include

int fun(int h);

void main()
{
int t = 1;
fun(fun(t));
}
int fun(int h)
{
static int a[3] = { 1, 2, 3 };
int k;

for (k = 0; k < 3; k++)
a[k] += a[k] - h;
for (k = 0; k < 3; k++)
printf("%d", a[k]);
printf("\n");
return(a[h]);
}
/*
先计算f(1)
h=1;
k=0时
a[k] += a[k] - h;
既是啊a[0] += a[0] -1;
则a[0] = 1;
a[3] = { 1, 2, 3 };

k=1时
a[1] += a[1] -1;
则a[1] = 3;
a[3] = { 1, 3, 3 };

k=2时
a[2] += a[2] -1
a[2] = 5;
a[3] = { 1, 3, 5 };

输出a[0]=1, a[1] =3, a[2]=5
返回a[1] = 3;

*/
h=3同样的道理,但是a[3] = { 1, 3, 5 };保存了

相似回答