C语言求解!!!请详细讲讲过程,谢谢!!!

#include<stdio.h>voidFUN(intS[]){staticintJ=0;do{S[J]+=S[J+1];}while(J<2);}main(){int... #include<stdio.h>
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]);
}
上面打错了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#include<stdio.h>
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]);
}
展开
 我来答
yiqiu2324
2012-10-22 · TA获得超过633个赞
知道小有建树答主
回答量:117
采纳率:100%
帮助的人:89.3万
展开全部
我刚运行下发现没出结果,仔细看了下.
do
{
S[J]+=S[J+1];
}
while(J<2)
J的值一直为0,也就是说while的循环条件J<2恒成立,死循环!
好吧,又看见改为++J了
#include<stdio.h>
void FUN(int S[])
{
static int J=0;//static 说明当再次调用函数FUN时,J的值为上次调用后的值
do
{
S[J]+=S[J+1];
}
while(++J<2);
}
main()
{
int K,A[10]={1,2,3,4,5};//定义整型变量K,整形数组A,对应A[0]~A[4],A[5]~A[9]值都为0
for(K=1;K<3;K++) FUN(A);
/*
看值变化:
K 1 2
J 0 1 2(注意此时的J值为上一次++J<2条件结束后的值)
S[J] 3(1+2) 5(2+3) 7(3+4)
S[0] S[1] S[2]
A[0] A[1] A[2]
*/
for(K=0;K<5;K++) printf("%d",A[K]);
//输出A[0]~A[4]也就是S[0]~S[4] 两者占有共同的连续存储单元
//也就是 3 5 7 4 5(我给你加的空格)
// A[0] A[1] A[2] A[3] A[4]
//输出结果应该为为 35745
}
追问
上面打错了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#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]);
}
追答
哪里不懂,详细说明下,我会回答的~
Tel有你有我
2012-10-22 · TA获得超过413个赞
知道答主
回答量:135
采纳率:100%
帮助的人:110万
展开全部
#include<stdio.h>
void FUN(int S[])
{
static int J=0;//定义静态的j
do
{
S[J]+=S[J+1];
}
while(++J<2); 这个循环实现的的是是s[0]=s[0]+s[1],s[1]=s[1]+s[2];
}
main()
{
int K,A[10]={1,2,3,4,5};
for(K=1;K<3;K++)这个是控制子函数循环的次数,假如没有这条语句输出的就是 3 5 3 4 5
FUN(A);
for(K=0;K<5;K++) printf(" %d",A[K]); 输出 3 5 7 4 5
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ahcc08
2012-10-22 · 知道合伙人软件行家
ahcc08
知道合伙人软件行家
采纳数:11853 获赞数:51941
拥有丰富的软件开发经验。

向TA提问 私信TA
展开全部
只要记住static变量只能被初始化一次,就行了。这个应该是此题的关键点。
只有第一次J=0。点到为止。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
逍亦丹
2012-10-22 · 超过10用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:22.6万
展开全部
我看的好像在do-while与距离缺少循环控制语句。
追问
#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]);
}
刚才打错了
追答
static int J=0;说明J是内部的静态变量,在函数退出之前函数的值一直存在,也就是每运行一次J的值都在变,他只被赋值一次,此后每运算一次J的值都在变,不会再被初始化成0.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式