如下程序的运行结果是?

来源:百度知道 编辑:UC知道 时间:2024/06/05 15:45:00
#include<stdio.h>
f(int a)
{auto int b=0;
static int c=30;
b=b+10;
c=c+10;
return(a+b+c);

}
main()
{int a=20,k;
for(k=0;k<3;k++)
printf("%4d",f(a));
}

A.60 70 80 B.70 80 90 C.50 60 70 D.70 70 70

答案为什么不选D而选B呢???解释下!

因为f()函数中的c是静态变量,在退出函数后,c会保持上次退出函数时的值。

第一次时调用f()函数,会返回70,同时c的值变为40,第二次调用f()函数时,由于c==40,所以会返回80,同时c的值变为50,第三次调用f()函数时,由于c==50,所以会返回90。

因此,应该选择B

static int c=30;
是static在起作用,这样定义后,c只会在第一次进入该函数后初始化,再次进入该函数时,不在初始化,即第2次调用f(a)时,c已经是40,

故第一次 return 时 c是40,第2次是50,第3次是60.所以结果是B

static为静态变量,
第一次就是10+40+20=70;
第二次循环的时候,c还是为30,然后c=c+10;c=40,b=b+10,b=10;a=20;a+b+c=80;
第三次循环,c=30,c=c+10=40;a+b+c=90;

#include<stdio.h>

int f(int a)
{
auto int b=0;
static int c=30;
b=b+10;
c=c+10;
return(a+b+c);

}
main()
{
int a=20,k;
for(k=0;k<3;k++)
printf("%4d",f(a));
printf("\n");
}
中static 每次都保存了原来的值,而auto 则是缺省类型,就相当于不加。即auto int k的效果与int k的效果是一样的。
static int c = 30。c=c+10; 在下次时c的值则为40。