1、问题及代码:
/* *copyright(c)2016,时缔实验室 *All rights reserved. *文件名称: fn.c *作 者: 时帝 *完成日期: 2016年4月2日 *版 本 号: v1.0 * *问题描述:求Fibonacci(斐波那契)数列前40个数; 0,1,1,2,3,5,8,13,21…(第三个数为前两个数之和) *输入描述:不需要输入; *程序输出:前40个数; */ #include <stdio.h> int main() { long f1,f2,fn; int i; f1=f2=1; printf("%ld\t%ld\t",f1,f2);//t,横向跳到下一制表符位置。 for(i=3; i<=40; i++) { fn=f1+f2; printf("%ld\t",fn); if(i%5==0)// 当i%5==0为真时执行下面的换行。 printf("\n"); f1=f2;//将原先后面的数赋值给另一组两个数的前一个数 f2=fn;//将前面两数之和赋值给下一组的第二个数。 } return 0; }
2、同上另解:
/* *copyright(c)2016,时缔实验室 *All rights reserved. *文件名称: f.c *作 者: 时帝 *完成日期: 2016年4月2日 *版 本 号: v1.0 * *问题描述:求Fibonacci(斐波那契)数列前40个数; 0,1,1,2,3,5,8,13,21…(第三个数为前两个数之和) *输入描述:不需要输入; *程序输出:前40个数; */ #include <stdio.h> int main() { long f1,f2;//到后面数会很大需用long; int i; f1=f2=1; for(i=1; i<=20; i++)//i=1定义初始值,1<=20,为何结果也是有40代 { printf("%ld\t%ld\t",f1,f2); if(i%2==0) printf("\n"); f1=f1+f2;//左f1代表第3个数,是第1、2数之和 f2=f1+f2;//左f2代表第4个数,是第2、3数之和 } return 0; }
3、求级数公式(精确到小数点后5位)
/* *copyright(c)2016,时缔实验室 *All rights reserved. *文件名称: sum.c *作 者: 时帝 *完成日期: 2016年4月2日 *版 本 号: v1.0 * *问题描述:求级数公式(精确到小数点后5位); *输入描述:输入一个值; *程序输出:输出结果; */ #include <stdio.h> #include <math.h> int main() { double x, sum=1, term=1; int i=1;//一定要赋初值 scanf("%lf", &x); while(fabs(term)>=1e-5)//fabs()函数表示,求浮点数绝对值的函数。 { term=term*(-1)*x/((2*i)); sum=sum+term; i++; } printf("输出sum的结果是%f\n", sum); return 0; }
4、另一个正解:
/* *copyright(c)2016,时缔实验室 *All rights reserved. *文件名称: sum.c *作 者: 时帝 *完成日期: 2016年4月2日 *版 本 号: v1.0 * *问题描述:求级数公式(精确到小数点后5位); 0,1,1,2,3,5,8,13,21…(第三个数为前两个数之和) *输入描述:输入一个数; *程序输出:输出结果; */ #include <stdio.h> int main() { double x, sum=1, term=1; int i=1;//一定要赋初值 scanf("%lf", &x); while(fabs(term)>=1e-5)//为何同样调用了该函数,却可以不用<math.h>头文件?没有调用怎么判断? { sum=sum+term; term=term*(-1)*x/((2*i)); i++; } printf("%f\n", sum); return 0; }
熟悉一个新的函数fabs();
学习心得:
对级数的概念不太清楚,需要多了解学习这方面的知识。
求级数公式的另一个正解里,为何不需要调用<math.h>,while()里不是有用fabs()函数吗,不调用如何判断真假呢。
还有,sum=sum+term;
term=term*(-1)*x*x/((2*i)*(2*i-1)); //即,相当于是前面的两个语句对调,这样sum的值为何会一样呢?