糯米文學吧

位置:首頁 > 計算機 > 計算機三級

2016計算機三級網絡技術上機題及答案

編寫函數jsValue(),它的功能是求Fibonacci數列中大於t的最小的一個數,結果由函數返回,其中Fibonacci數列F(n)的定義為:

2016計算機三級網絡技術上機題及答案

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的最小的一個數"。