有关c语言程序的问题?

来源:百度知道 编辑:UC知道 时间:2024/05/16 07:56:20
/* Note:Your choice is C IDE */
int a,b;
#include "stdio.h"
void main(void)
{
int c;
static int d;
a=b=2;
c=5;
printf("%d\n",a*b+c);
fun();
printf("%d\n",a*b+c);}
fun()
{
static int c=9;
int a=4;
b=8;
printf("%d\n",a*b+c);
}

答案:d=9
d=41
d=21
请问:21是怎么的出来的啊???

第一个printf("%d\n",a*b+c)
输出a*b+c的值,a和b是全局变量,c是main()中的局部变量,a=b=2,c=5,所以a*b+c=9;

调用fun(),该函数中的printf("%d\n",a*b+c),输出a*b+c的值,这里的a和c是fun()中的a和c,b是全局变量b,所以a=4,b=8,c=9,所以a*b+c=41

第二个printf("%d\n",a*b+c)
输出a*b+c的值的,a,b是全局变量,a=2(这个a和fun()中的a不是同一个变量),b=8(全局变量b的值在上一个调用fun()时变成了8),c是main()中的局部变量(这个c和fun()中的局部变量c不是同一个变量),c=5,所以a*b+c=21

这个题目主要是注意变量的作用域

楼上说的差不多了,我补充一点.
你在fun()中定义了int a=4;
编译时会自动屏蔽全局变量在fun()函数中的作用,也就是说fun()中的a,与main()中的a不是同一个a.
全局变量a,在fun()中不起作用,改变fun()中a的值不会影响全局变量a.

非常感谢!你也让我增长了知识.
这个题实在太好了!主要你要注意全局变量与局部变量的问题。这个地方经常出题,而且很容易出错。
fun函数中a,c是局部变量,因后面有了分号,所以,b=8;是对全局变量赋得值,在第三次输出时b就是8了。2*8+5=21.哈!就是这样了!
希望你满意!