今天呢,并没有继续我们的排序算法,因为昨天的那题直接插入排序,还是比较难的,特别是对于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;
}
}
测试结果:
总结斐波那契数列还是蛮简单的,休闲之余写来可以当作放松一下,问题不是很大。
,