解一段代码,循环结构

来源:百度知道 编辑:UC知道 时间:2024/05/14 17:22:27
main()
{int n,t,a=2,b=1,s=0;
for(n=1;n<=20;n++)
{
s+=a/b;
t=a;
a=a+b;
b=t;
}
printf("%d\n",s);
} 请帮我翻译一下
t=a;
a=a+b;
b=t;
是什么意思

看错了,不好意思
t=a;
a=a+b;
b=t;
意思是:
t是临时变量暂时存放a
a=a+b;如果a=2,b=1则a=a+b即a=2+1,运行后,a=3
b=t即b还是a没有改变时保存在t里的值
程序目的是数列求和
数列中,后项的分子是前项分母、分子之和,分母为前项分子
循环20次。即20项,第一项为2/1。

应该是:
2/1+3/2+5/3+8/5+13/8+21/13..........
即 第二个数的分子为上一个数的分子分母的和,分母为上一个数的分子,一共有二十项。

2/1+3/2+5/3+8/5+13/8+21/13..........

若你的本意是学习C语言,建议你画个变量表,让循环子n从1循环到3,看看每个变量的值,这样你就可以很直观的观察到循环体的意义。如:

n=1: s=2/1 t=2 a=3 b=2
n=2: s=2/1+3/2 t=3 a=5 b=3
n=3: s=2/1+3/2+5/3 t=5 a=8 b=5

由此可以看出:
t是一个中间变量,用来将上次循环的a值赋给本次的b。
为什么要使用t这个中间变量呢?
因为本次循环的a值会变更而且与上次循环的b值有关,而本次循环的b值又与上次循环的a值有关,直接赋值无法解决这两个关联的问题。为了解除关联,本例选择中间变量t来暂存上次循环的a值。
当然你也可以选择让t来暂存b,相关程序改为:

t = b;
b = a;
a = a + t;/*a += t;亦可*/

2/1+3/2+5/3+8/5+13/8+21/13.......... (总共20项)
问题补充:t=a; a的值给t
a=a+b; a+b的值给a
b=t; t的值给b

把a赋值给b
再把a+b赋值给a
然后参与下一次运算