问题: 全国二级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
版权及免责声明
1、欢迎转载本网原创文章,转载敬请注明出处:侨谊留学(www.goesnet.org);
2、本网转载媒体稿件旨在传播更多有益信息,并不代表同意该观点,本网不承担稿件侵权行为的连带责任;
3、在本网博客/论坛发表言论者,文责自负。