C语言中关于局部变量和全局变量的问题

请大侠能不能写写计算机计算的过程,越详细越好,我在电脑里用C FREE 5算得结果是29,但是书上说是28,可能是我计算机有问题,求答案究竟是多少,最重要的是写写过程,谢谢
for 循环里面的条件我改了,改回为i<3,得到结果29,书上说结果是28.
麻烦写循环一次的过程就好了。

应该是28吧,我没有在用真机测试,口算的,过程如下:
1、s = 2;此时用的是第二行的a=2
2、i=0时,f(i)的运行是第七行,t+=a++d的运算是t=4,a++为第七行的a加1,a由4变为5;然后到第九行t+a++,此时t=4,这行的a用的是第五行的a=3,所以,此时t+a++的运行为4+3=7,第五行的a由3变为4;
3、循环i=1时,情况跟步骤2一样,进入第八行的运算,t=5,第八行的a由5变为6,然后第九行为5+4=9;
4、循环i=2,t=5,t+a++为5+5=10
5、结果就是2+7+9+10=28;
这里注意的就是第2行、5行、7行、8行的a,都在自己的区间,不要弄乱就好了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-24
i<1循环一次,s+=f(i),这里的a,是全局变量,所以a=2,s=2+f(0),进入f,局部变量a,和外面的a=2无关,进入else部分,t+=a++,t==6,return t+a++==6+7==13,注意这里a又++了,所以a=7,所以main输出s=2+13,=15,

最重要的是,再次循环,f中的a追问

#include"stdio.h"
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<1;i++)s+=f(i);
printf("%d\n",s);
}

追答

匆忙,急着上课去了,呵呵,没有去运行哈,呵呵,再试试

第2个回答  2014-03-24
经反复推敲,此题得29是正确的。如果判断条件不是n%2而是!(n%2)或是n%2==0,则结果是28。你看看题抄得是不是有错……追问

没有抄错
能不能写写计算过程,救命啊,大神

追答

for循环3次:i=0、1、2
当i=0时:f(0),由于n=0,n%2=0,所以执行else{static int a=5;t+=a++;}使t=5,a=6;然后返回t+a++(此a是f函数的static int a=3的a)为5+3=8;返回后主函数中s=s+f(0)=2+8=10;
当i=1时:f(1),由于n=1,n%2!=0,所以执行{static int a=4;t+=a++;}使t=4,a=5;然后返回t+a++=4+4(a是静态变量,上次调用时由3增为4)=8;返回后主函数中s=s+f(1)=10+8=18;
当i=2时:f(2),由于n=2,n%2=0,所以执行else{static int a=5;t+=a++;}使t=6(上次的a值),a=7;然后返回t+a++(此a是f函数的static int a=3的a)=6+5=11;返回后主函数中s=s+f(0)=18+11=29。
你可以照猫画虎搞搞n%2==0的情况,是28。这时if执行2次,而else执行1次。

第3个回答  2014-03-24
能不能别放图啊,发代码追问

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

第4个回答  2019-09-16
局部变量(内部变量)就是在函数内部定义,作用域仅限于定义它的函数内部的变量
全局变量(外部变量)就是在函数外面定义,作用域是整个程序。
相似回答