女生放屁给男生闻电影:请c语言高手给我讲解一下这个题

来源:百度文库 编辑:神马品牌网 时间:2024/04/29 18:15:48
我在学习c语言的时候,遇到了Fibonacci数列编写程序,主要就是这个,我知道题这个数列是怎么回事,但是他编译的我有点看不懂,希望知道的朋友给详细的解释一下

main()
{
long int f1,f2;
int i;
f1=1;f2=1;
for(i=1;i<=20;i++)
{
printf("%12ld %12ld ",f1,f2);
if(i%2==0)printf("\n");
f1=f1+f2;
f2=f2+f1;
}
}

还有一个问题,就是用一维数组的知识编译的这个程序,还是关于Fibonacci数列的,也看不怎么懂,希望高手给解释

main()
{
int i;
static int f[20]={1,1};
for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<20;i++)
{
if(i%5==0)printf("\n");
printf("%12d",f[i]);
}
}

main()
{
long int f1,f2; //长整形变量fi,f2
int i;
f1=1;f2=1; //赋初值
for(i=1;i<=20;i++) //循环
{
printf("%12ld %12ld ",f1,f2); //打印f1=1,f2=1
if(i%2==0)printf("\n"); //当i%2取模为0时打印空格,控制一行打多少个
f1=f1+f2;
f2=f2+f1;
}
//f1=f1+f2; 即 f1=1+1 f1为2
//做f2=f2+f1 即f2=1+2 f2为3
到下一次循环的时候
f1=f1+f2即为 f1=2+3 f1为5
f2=f2+f1既为 f2=3+5 f2为8
继续循环下去 5+8 13
8+13 21
..........

数组也一样
main()
{
int i;
static int f[20]={1,1}; //数组赋初值 1 1
for(i=2;i<20;i++) //做循环
f[i]=f[i-2]+f[i-1];
/当i=2时做第一次循环
即f[2]=f[2-2]+f[2-1];
得f[2]=f[0]+f[1]
的f[2]=1+1 f[2]为2 继续做下一循环
for(i=0;i<20;i++)
{
if(i%5==0)printf("\n"); // 控制每行打印几个数
printf("%12d",f[i]); // 打印f[0]......f[20]
}

这不是很容易明白么?

第一个题,把f1和f2两个临时变量来回用,可能会让人糊涂。20个循环里每个循环打印两个,所以共打印40项。在打印第n和n+1项时,原来的f1为n-2项,f2为n-1项,现在f1=f1+f2,就是第n项为第n-2项与第n-1项之和的意思;而f2=f2+f1是第n+1项等于第n-1项(即原来的f2)与第n项(新的f1)之和的意思。
第二个题更简单了。记住C语言的数组下标是0开头的。现在f[0]与f[1]为1,从第2项(用自然的数学语言说是第3项,因为C语言开头为0而不是1)起每项都等于前2项之和。

既然知道数列是怎么回事,楼上的解释的很清楚,楼主还有什么不懂的地方吗

第一个是交换两个变量的和,