編寫函式jsValue(),它的功能是求Fibonacci數列中大於t的最小的一個數,結果由函式返回,其中Fibonacci數列F(n)的定義為:
F(0)=0,F(1)=1
F(n)=F(n-1)+F(n-2)
最後呼叫函式writeDat(),把結果輸出到檔案中。
例如:當t = 1000時,函式值為1597。
注意:部分源程式已給出。
請勿改動主函式main()和寫函式WriteDat()的內容。
試題程式:
#include
void writeDat();
int jsValue(int t)
{
}
void main()
{
int n;
n=1000;
printf("n=%d, f=%dn", n, jsValue(n));
writeDat();
}
void writeDat()
{
FILE *out;
int s;
out = fopen("", "w");
s = jsValue(1000); printf("%d",s);
fprintf(out, "%dn", s);
fclose(out);
}
【參考答案及解析】
int jsValue(int t)
{
int f1=0,f2=1,fn; /*定義變數儲存Fibonacci數,初始化數列的'前兩項*/
fn=f1+f2; /*計算下一個Fibonacci數*/
while(fn<=t)>
{
f1=f2;
f2=fn;
fn=f1+f2;
}
return fn; /*返回Fibonacci數列中大於t的最小的一個數*/
}
【解析】解答本題的關鍵是要充分理解題意,只有理解了題意本身的數學過程,才能把數學過程轉化為程式邏輯。根據已知數列,我們不難發現:在 Fibonacci數列中,從第三項開始,每一項都可以拆分為前兩項之和。本題要求找到該數列中"大於t的最小的一個數"。這裡可以藉助一個while迴圈來依次求數列中的數,直到出現某一項的值大於t,那麼這一項就是"大於t的最小的一個數"。