首页 > 留学知识库

问题: 全国二级C模拟题目1,请教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(函数传递方式为按地址传递).

附件:k.doc