c语言问题,程序的输出结果并解释,回答的好加分

#include<stdio.h>
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);
}

#include<stdio.h>
int a=4;//全局变量a
int f(int n) //
{
int t=0;
static int a=5;//方法中静态变量a 当第一次调用方法里存在,当整个程序停止时销毁
if(n%2){ //
int a=6;t+=a++;//局布变量a 只在if里有做用
}else{
int a=7;t+=a++;//局布变量a 只在else里有做用
}

return t=a++;// 此时的a为方法中静态变量a ,当第一次返回时t=5,a++,a=6,当第二次返回时t=6,a=7
}
main()
{
int s=a,i=0,j; //此时的a为全局变量的a=4, s=4

for(;i<2;i++){ //
//两次循环后
s+=f(i);//这也就是4 + 5 + 6 = 15了。
}
printf("%d\n",s);
}追问

我已经找到我错在哪了,前面都没有错,是第二次循环的时候,我又把4赋值给s了,而事实上,此时s已经被赋值为9(第一次循环结果),所以刚好差5,15是正解,你的回答很详细,是我大意了,多谢,可是只能采纳一个,不好意思

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-02-25
15 考的是函数的调用追问

我想知道为什么,能详细解释下不?我算的是10啊

追答

static 静态变量 只能用一次,就是初始值。

追问

结果等于s=s+f(i),s=4是一定的对吧,所以结果=4+f(i),当i=0是s=4+5=9(因为static int a=5直接赋值给return t=a++)对吧,此时a=6,然后i=1,同理不用管if语句将a=6再赋值给return t=a++,f(i)=6,然后s=s+f(i)=4+6=10 ,那个5是从哪来的

追答

4+5+6正好啊,那个s第二次是9

追问

哦,当i=1时就不再执行int s=a,i=o这一行语句了,而是把刚才的s=9赋值给s,所以s=9+6=15.对吧,

追答

嗯,是的。它就运行下面的了

本回答被提问者采纳
相似回答
大家正在搜