优秀的编程知识分享平台

网站首页 > 技术文章 正文

用C语言实现斐波那契数列,并进行多种结果的打印,并考虑到数组

nanyue 2024-09-15 23:21:51 技术文章 4 ℃

今天呢,并没有继续我们的排序算法,因为昨天的那题直接插入排序,还是比较难的,特别是对于for循环方面的理解,需要花一些时间。

所以,我打算用一道较为简单的题目给大家涨涨信心,其实并没有那么难。

斐波那契数列,大家或多或少都听说过,也指的是黄金分割数列。

如{0,1,1,2,3,5,8,13,21,34,55}

这个数列指的就是斐波那契数列。

它具有很明显的特征,那就是从第三个元素开始,后面的元素都是前两个元素之和。

知道这一点的话,对于如何使用C语言来实现斐波那契数列就很容易了。

不过呢,仅仅只是输出斐波那契数列难度太低,在这里呢我给自己提了三个要求,分别是:

1、输出斐波那契数列10个元素并输出第十个元素,这个最简单,解释输出0,1,1,2,3,5,8,13,21,34,第十个元素是34。

2、输出斐波那契数列,在自己输入的指定数值大小前停下来,比方说我输入一个30,那么就应该在21这边停下,至于34就不会打印出来。

3、用数组的形式来进行存储元素并表现出来,这个就是用数组的形式来存储数据,并进行打印,特别需要注意的是数组的下标是从0开始的。

用流程图来理清逻辑

与我们之前遇到的题目相比,这道题着实很简单,不过呢,要完整按照这个要求把所有的结果给打印出来,还是锻炼自己的一个基本功。

要求一代码实现

首先是针对第一个要求,这就非常简单,要输出斐波那契数列的前十个数,只需要先用变量定义好前两个数,也就是0和1,那么第三个数就是0+1。

话不多说,直接把代码给放上来:

//输出几项
//斐波那契数列 0、1、1、2、3、5、8、13、21
#include<stdio.h>
int main() {
    int a = 0;
    int b = 1;
    int sum = 0;
    for(int i = 1; i<=10; i++){
        printf("%d ", sum);
        sum = a+b;
        b = a;
        a = sum;
    }
}

测试结果为:

如果是单独输出第十个元素,也就是34这个元素的话,只需要把sum的结果放在最外面,以及把循环的次数减少到9次,那么最后恰好可以输出第十个元素。

//输出几项
//斐波那契数列 0、1、1、2、3、5、8、13、21
#include<stdio.h>
int main() {
    int a = 0;
    int b = 1;
    int sum = 0;
    for(int i = 1; i<=9; i++){
        sum = a+b;
        b = a;
        a = sum;
    }
    printf("%d ", sum);
}

测试结果:

要求二代码实现

至于第二个要求,输出斐波那契数列,在自己输入的指定数值大小前停下来,这个难度也不大,最主要的就是在前面加一个需要自己输入的指定数值,也就是scanf输入,还有的话,就是需要在for循环里加一个和小于输入的值。

//输出几项
//斐波那契数列 0、1、1、2、3、5、8、13、21
#include<stdio.h>
int main() {
    int a = 0;
    int b = 1;
    int sum = 0;
    int number;
    scanf("%d", &number);
    for(int i = 1; i<=100&&sum<=number; i++){
        printf("%d ", sum);
        sum = a+b;
        b = a;
        a = sum;
    }
    printf("\n");
}

测试结果:

要求三代码实现

至于第三个要求,也就是用到了数组的形式来进行输出,首先,我们必须要在数组中定义两个数,也就是斐波那契数列最开始的两个数,分别为0和1,有这两个数之后,才可以打印第三个数。

其次,正如数组第一个元素是0,第二个元素是1,那么array[0]+array[1]=array[2],要注意这一点,再有,交换位置变化值的时候,需要一个临时变量来进行存储,所以像冒泡排序一样要用到一个Temp;

//输出几项
//斐波那契数列 0、1、1、2、3、5
#include<stdio.h>
int main() {
    int Temp = 0;
    int array[100] = {0,1};
    for(int i = 0; i< 10; i++){
        Temp = array[i+1];
        printf("%d ", array[i]);
        array[i+2] = array[i]+array[i+1];
        array[i] = Temp;
    }
}

测试结果:

总结

斐波那契数列还是蛮简单的,休闲之余写来可以当作放松一下,问题不是很大。

Tags:

最近发表
标签列表