分类：教育/科学-职业教育
问题：全国二级C模拟题目1，请教C语言高手，急！！！1.以下程序的输出 
1.以下的输出结果是void fun(int*s){  static int j=0;  do    s[j]+=s[j+1];  while(++j<2);}main(){  int k,a[10]={1,2,3,4,5};        for(k=1;k<3;k++) fun(a);        for(k=0;k<5:k++) printf(“%d”,a[k]);}A) 34756      B)23345     C)35745       D)12345答案是C, 请问1.以下的输出结果是void fun(int*s){  static int j=0;  do    s[j]+=s[j+1];  while(++j<2);}main(){  int k,a[10]={1,2,3,4,5};        for(k=1;k<3;k++) fun(a);        for(k=0;k<5:k++) printf(“%d”,a[k]);}A) 34756      B)23345     C)35745       D)12345答案是C, 请问这道题目是怎么做出来的？ 请高手帮忙看下，如果觉得在这里看得不清楚或不舒服，可以粘贴到WORD里看
回答：呵呵~这道题我同学让我帮她解释过~
由于j是静态变量,所以该变量在整个程序执行期间不释放,也就是说,譬如你在执行了一次fun函数后j=1,在你再次执行fun函数时,j并不等于0,而是等于1.
接下来我们来看main函数中的第一个循环中变量变化的情况(见附件}          
由于这个循环中执行循环语句的条件是k<3,所以当k=3时,跳出循环,此时,a[0],a[1],a[2]中的数值分别已变化成为3,5,7(函数传递方式为按地址传递).