C语言1维数组的问题,高手来指点下

#include<stido.h>
void main()
{
int i;
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]);
}
printf("\n");
}
那位高手帮看下,我怎么都看不懂,特别是int f[i]=f[i-2]+f[i-1]这一段!不知道咋回事!我是个新手啊!帮忙指点一下!
有人说就是数组里面有 f[1] f[2] 以后,f[3]是通过f[1]+f[2]这样的规则定义的,后面的也是一个道理!但还是不怎么懂!哪为高手能把算法说的仔细一点!谢谢了!

产生费波那契数:定义是
一个排列,排列里每一个数是前两个数的和.
如1 1 2 3 5 8 13 ......

你的个程序有两个问题
第一个是:#include<stido.h> 应该是stdio.h
第二个是:for(i=0;i<=20;i++) 数组只有20个,而你循环了21次,数组越界,这个是读的,如果是写的,就会有很多问题.应该改成for(i=0;i<20;i++)
下面是算法的解释:
#include "stdio.h"
void main()
{
int i;
int f[20]={1,1}; //先定义前两个数1,1,循环从第3个开始,因为这个算法的定义是每个数是前两个数的和,所以不先定义好,如果算第一个,那它前两个没有数字,数组会出错.
for(i=2;i<20;i++) /*从第三个数开始,循环18次.f[2]...f[19];(注意C++数组下标是从0开始的.*/
f[i]=f[i-2]+f[i-1] ; //当前数是前两个数的和.f[i-2],f[i-1]分别表示前两个数.
for(i=0;i<20;i++) //输出循环,从f[0]...f[19].
{
if(i%5==0) //每输出5个换行,i%5是求余,如何余数为0就换行.
printf("\n"); //输出换行的语句
printf("%12d",f[i]); //输出f[]里面的内容,12表示宽对齐.
}
printf("\n"); //这个不用解释了吧.
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2006-12-13
int i;
int f[20]={1,1};
for(i=2;i<20;i++)
{
f[i]=f[i-2]+f[i-1];
}
你已经定义了数组的前两个数为1,1
则在for循环中,i从2开始,f[i]=f[i-2]+f[i-1] 相当于 f[2]=f[0]+f[1]
即数组的第2个元素的值等于第0个元素和第1个元素的值之和。
然后i=3的时候,相当于f[3]=f[1]+f[2]
即数组的第3个元素的值等于第1个元素和第2个元素的值之和。
一次类推知道循环结束(i=19),即数组中从第2个元素开始,每一个元素的值都是前两个元素的值之和,这就是有名的斐波纳契(Fibonacci)数列。
1,1,2,3,5,8,...
第2个回答  2006-12-27
#include<stido.h>
void main()
{
int i;
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]);
}
printf("\n");
}
那位高手帮看下,我怎么都看不懂,特别是int f[i]=f[i-2]+f[i-1]这一段!不知道咋回事!我是个新手啊!帮忙指点一下!
第3个回答  2006-12-13
输出是1 1 2 3 5 8。。。么
每次循环f[i]都是前两个数之和
换成这样可能容易看一些
f[i]=f[i-1]+f[i-2];
第4个回答  2006-12-27
费波那契数列
f(n) = f(n-1)+f(n-2)

这个程序是这样的:
产生1到20的费波那契数,
输出,每行5个.
输出是1 1 2 3 5 8。。。么
每次循环f[i]都是前两个数之和
换成这样可能容易看一些
f[i]=f[i-1]+f[i-2];
回答者:nezhang - 江湖新秀 四级 12-13 14:44

int i;
int f[20]={1,1};
for(i=2;i<20;i++)
{
f[i]=f[i-2]+f[i-1];
}
你已经定义了数组的前两个数为1,1
则在for循环中,i从2开始,f[i]=f[i-2]+f[i-1] 相当于 f[2]=f[0]+f[1]
即数组的第2个元素的值等于第0个元素和第1个元素的值之和。
然后i=3的时候,相当于f[3]=f[1]+f[2]
即数组的第3个元素的值等于第1个元素和第2个元素的值之和。
一次类推知道循环结束(i=19),即数组中从第2个元素开始,每一个元素的值都是前两个元素的值之和,这就是有名的斐波纳契(Fibonacci)数列。
1,1,2,3,5,8,...
回答者:yw0031 - 助理 三级 12-13 15:24

产生费波那契数:定义是
一个排列,排列里每一个数是前两个数的和.
如1 1 2 3 5 8 13 ......

你的个程序有两个问题
第一个是:#include<stido.h> 应该是stdio.h
第二个是:for(i=0;i<=20;i++) 数组只有20个,而你循环了21次,数组越界,这个是读的,如果是写的,就会有很多问题.应该改成for(i=0;i<20;i++)
下面是算法的解释:
#include "stdio.h"
void main()
{
int i;
int f[20]={1,1}; //先定义前两个数1,1,循环从第3个开始,因为这个算法的定义是每个数是前两个数的和,所以不先定义好,如果算第一个,那它前两个没有数字,数组会出错.
for(i=2;i<20;i++) /*从第三个数开始,循环18次.f[2]...f[19];(注意C++数组下标是从0开始的.*/
f[i]=f[i-2]+f[i-1] ; //当前数是前两个数的和.f[i-2],f[i-1]分别表示前两个数.
for(i=0;i<20;i++) //输出循环,从f[0]...f[19].
{
if(i%5==0) //每输出5个换行,i%5是求余,如何余数为0就换行.
printf("\n"); //输出换行的语句
printf("%12d",f[i]); //输出f[]里面的内容,12表示宽对齐.
}
printf("\n"); //这个不用解释了吧.
}
回答者:hzfllj - 助理 二级 12-13 15:36

fdgsf
回答者:忍者B - 魔法学徒 一级 12-25 11:24

1
回答者:lin832020 - 助理 二级 12-25 18:31

1
回答者:xuhangxxxx - 试用期 一级 12-25 20:55

.
回答者:yishengbubai - 试用期 一级 12-26 15:42

#include<stido.h>
void main()
{
int i;
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]);
}
printf("\n");
}
那位高手帮看下,我怎么都看不懂,特别是int f[i]=f[i-2]+f[i-1]这一段!不知道咋回事!我是个新手啊!帮忙指点一下!
第5个回答  2006-12-13
费波那契数列
f(n) = f(n-1)+f(n-2)

这个程序是这样的:
产生1到20的费波那契数,
输出,每行5个.

C语言1维数组的问题,高手来指点下
void main(){ int i;int f[20]={1,1}; \/\/先定义前两个数1,1,循环从第3个开始,因为这个算法的定义是每个数是前两个数的和,所以不先定义好,如果算第一个,那它前两个没有数字,数组会出错.for(i=2;i<20;i++) \/*从第三个数开始,循环18次.f[2]...f[19];(注意C++数组下标是从...

C语言一维数组
C语言中的数组是一组在内存中连续存储的数据元素集合,用于组织和处理数据。以下是关于一维数组的几个关键点:首先,初始化数组时,可以直接在定义时赋值,如整型数组`int a[2] = {1, 2};`和字符数组`char str[20] = "hello world";`,这样每个元素会被赋予指定的值。其次,数组元素可以逐个赋...

C语言的数组和指针问题,谢谢高手的解答!
int (B[1])[4];int (B[2])[4]; 这时,对比一下第一题,(B[0])或者B[1] 或者B[2] 代替了原来的B,而原来的B是一个指向大小为四的一维数组的第一个元素,所以这里的B[0],就是一个指向大小为四的一维数组的第一个元素,(其实不单只是0,B[1],B[2]也是的,只是[0],[1],...

C语言编程问题(用一维数组)
include <stdio.h>void main(){int i,j,n,k,x,a[100];scanf("%d%d",&n,&x);k=n;for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n;i++)if(a[i]==x){j=i+1;for(j;j<n;j++)a[j-1]=a[j];k--;}for(i=0;i<k;i++)printf("%d ",a[i]);} ...

C语言 一维数组 中 a[i]=i不明白
每一次都运行一次a[i]=i 即当i=0时,a[0]=0,当i=1时,a[1]=1,……依次类推,共运行10次 使a[10]得以初始化 大概就是这么回事了 你的想法是对的,就是这么回事 至于那个输出命令,刚好是原来的逆过程 先输出了a[9]而a[9]=9这你是知道的,前面的赋值语句赋予的 你要输出单独的字符...

c语言数组大小的问题?
C语言中第一维大小是指数组第一维的长度:如下定义一个一维数组:int arr[10];则其长度可以使用sizeof(arr)来求得:printf("长度:%d",sizeof(arr));其结果为:10 二维数组的第一维大小是指数组的行数,第二维是数组的列数:定义一个二维数组:int arr[5][8];则其行数为5,列数为8,...

c语言问题:一个一维浮点型数组 arr1,元素数目为 4,从键盘输入各数组元素...
include<stdio.h>void main(){ int i=0; float arr1[4]; while(i<4) { printf("请输入数组第%d 元素:",i+1); scanf("%f",&arr1[i]); \/\/用循环给数组每个元素赋值 i++; } for(i=0;i<4;i++) printf("%.4f",5 * arr1[i]); \/\/循环输...

用C语言编一个程序,把一个一维数组中最大的数和第一个数调换,最小的...
k = i;} \/\/循环一遍后,arr[k]即为最小值得那个数,k为其下标 tmp = arr[N-1];arr[N-1] = arr[k];arr[k] = tmp;\/\/最大值和第一个数交换了 printf("交换后,各个数字为:\\n");for( i = 0; i < N; i ++ )printf("%d ", arr[i]);system("pause");return 0;} ...

C语言一维整型数组的输入输出,排序和归并函数急急急~~~
本文提供了一段C语言程序,该程序包含一维整型数组的输入输出、排序和归并函数。程序中使用冒泡排序算法对数组进行排序。具体实现步骤如下:首先,定义三个数组a[5]、b[10]、c[15],并分别对a和b进行输入操作。调用arrayio函数,输入数组a的值为9、1、4、2、5。输入数组b的值为8、3、6、4、7、...

c语言问题,请哪位大虾指教下!不胜感激! 我需要用到一个一维数组a[],括...
C语言不支持动态数组,即定义一个数组时,其大小必须确定,以方便操作系统为之分配内存空间。如果确定要使用动态数组,必须使用指针以及malloc系列函数实现(具体参考相关书籍关于链表的讲解章节)。另外面向对象程序设计语言中有相关的类,如C++和Java中的Vector类等,如需了解,请参考相关书籍。

相似回答
大家正在搜