C语言问题,菜鸟一个求解救~~

有以下程序
  #include<stdio.h>
  int fun()
  { static int x=1;
  x*2; return x;
  }
  main()
  {int i,s=1,
  for(i=1;i<=2;i++) s=fun();
  printf("%d\n",s);
  }
  程序运行后的输出结果是
  A)0
  B)1
  C)4
  D)8
唉呀妈呀,肿么办,答案是C

第1个回答  2012-09-17
你好

首先楼主要知道:
用static关键词标示的变量是静态全局变量
在函数中只被初始化一次 再次进入函数时不会被初始化
而是执行上一次该函数后的值
首先从循环入手 显然循环执行2次
第一次:
s=fun() --> x=1(第一次被初始化为1) x*2不会改变x的值
return x --> s=x=1 此时x=1
第二次:
s=fun() --> x=1(虽然还是1 是因为上一次x的值依然还是1 其实x没被初始化)
x*2依然不会改变x的值
return x --> s=x=1
因此最终结果是s=1
那么运行结果就是1 选择B

希望能帮助你哈
第2个回答  2012-09-17
按你写的题,fun()每次返回的都是1,因此结果s=1;
根据这里的知识点,我想你有可能是写错了,可能是下面这样:
int fun()
{
static int x=1; //静态变量可视作全局变量,所不同的是,这里的初值只有第一次时起作用。
x*=2; //如果这里*=,则返回结果则不同 第一次,x=1 x*=2后x变为2,第二次,x=2 x*=2 后变成4
return x;
}

for(i=1;i<=2;i++) s=fun(); //循环两次,因此,s=4本回答被提问者和网友采纳
第3个回答  2012-09-17
答案应该是A(1)因为fun函数中的x是static变量的,存储储在静态数据区(全局变量和static变量)的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。

简单的说,就是不管你main函数调用几次的fun函数,static int x=1这行只有在第一次调用的时候被执行。
第4个回答  2012-09-17
额。。。如果你确定你题目没抄错的话这个题其实是选B的。。。因为fun()中x*2根本就没对x进行改变。这是个脑筋急转弯。。。。
如果题目是X*=2的话,这个题应该选C,因为x是静态变量,不管它被写在那里都只会声明一次,而且是在程序开始的时候,后来一直都是在已有的x上进行操作。追问

我也是这样觉得~~~X*2根本没赋值给X,但是答案是C,以致于我觉得自己是个菜鸟~~

追答

我运行了,按你给的结果是B无疑,应该是题目打错了。按理说也应当考察的是知识,不是大家来找茬~~~
都说了是题目有问题,运行结果摆在那里,别在这种题上耗费时间了

第5个回答  2012-09-17
B,不需要详解。
你的程序中错误百出,如果除去这些以你的格式为正确的编排,放VC上就是1.
因为x一直能于1,所以无论返回几次s=fun(),都一定是1.