問題:
求Fibonacci(斐波那契)數列前40個數。
分析:
這個數列有如下特點:第1,2兩個數爲1,1。從第三個數開始,該數是其前面兩個數之和。即該數列爲1,1,2,3,5,8,13,… ,用數學方式表示爲:
代碼:
#include <stdio.h>
int main() {
int f1 = 1,f2 = 1;
int i;
for (int i = 1; i<=20; i++) { //結束條件
printf("%12d %12d",f1,f2);
if(i%2 == 0) printf("\n"); //if語句作用是使輸出4個數後換行
f1 = f1+f2;
f2 = f2+f1;
}
return 0;
}
輸出結果:
改:
1、若想一行不止輸出4個數,只需要調整if語句中的條件。由於每次循環是輸出兩個數,所以if(i%2 == 0)
是循環兩次(輸出4個數)換一行,那麼循環三次(輸出6個數)換一行就可以寫成if(i%3 == 0)
,以此類推。
2、若想改變結束條件,則在for循環中修改即可。
for (int i = 1; i<=20; i++)
是循環輸出直到循環20次(輸出40個數)爲止,若想在輸出的值上作限制,此處還需考慮。
- 在此我只想到另一種方法。上面的代碼也是可以改的,但是改完會更加臃腫,我能想到的只有下面的方法:
#include <stdio.h>
int main() {
int f1 = 1,f2 = 1,f3;
int i;
printf("%12d%12d",f1,f2);
for (int i = 3; ; i++) { //此處要從第三個數開始計算i
f3 = f1 + f2;
if(f3>15) break; //此處用值來限制循環
printf("%12d",f3);
if(i%6 == 0) printf("\n"); //換行在此設置
f1 = f2;
f2 = f3;
}
return 0;
}
有好的想法歡迎留言!