简单的C语言题目

请详细讲解,谢谢!
4. 请读程序:
#include
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]);
}
上面程序输出结果是
(3分)
A、 B、 C、 D、
A、34756
B、23445
C、35745
D、 12345
后面的人士请帮忙解决while( ++J<2); 这个式子是什么意思

#include<stdio.h> //包含必要的头文件
void FUN(int S[]) //定义函数名为FUN,参数为整型数组
{ static int J=0; //定义静态整型变量j,赋初值0
do //循环语句开始
{
S[J] +=S[J+1]; //S[J]=S[J]=S[J+1]
}
while( ++J<2); //如果J小于2,继续执行循环。此语句后J值变为J+1
}
main() //主函数
{ int K, A[10]={ 1,2,3,4,5}; //定义整型变量K,整型数组A,大小为10,并赋前五个初值
for( K=1;K<3;K++) FUN(A); //从K=1开始循环,K小于3都执行循环,每次循环后K自加1
//循环内容为调用FUN函数
for (K=0;K<5;K++) printf("%d",A[K]); //从K=0开始循环,K小于5都执行循环,每次循环后K自加1
} // 循环内容为打印出数组A的值,一个个地顺序打印出来
//现在来一步步地跟着计算机走
int K, A[10]={ 1,2,3,4,5};这里开始整型数组A有了前五个值1,2,3,4,5;
for( K=1;K<3;K++) FUN(A);这里当K=1时,然后进入循环,调用FUN(),把数组A当参数传递
进去,执行S[J]+=S[J+1]后,数组A里边的2变成了1+2,即为3……依次类推下去
for (K=0;K<5;K++) printf("%d",A[K]);这里上边已经说过,打印出来A的所有值。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-05-31
选c

第一遍执行FUN时
a[0]+=a[1] a[0]=3
a[1]+=a[2] a[1]=5
执行完时J=2

第二遍执行FUN时
a[2]+=a[3] a[2]=7
(因为J是static型 的,所以还是上次FUN的值)

所以最后答案为35745

int j=0;
while(++j<2)
{
//你的代码
}可以理解为:
int j=0;
j=j+1;
while(j<2)
{
//你的代码
j++;
}
第2个回答  2008-05-25
答案选C
这是因为J位静态变量
在一次调用之后再次调用,得到的值是先前函数运行之后的值,不会随着函数运行的结束而释放!本回答被提问者采纳
第3个回答  2008-05-25
C
J是静态变量,第一次调用的时候初始化为0,之后的值是上次运行的值