编写函数jsValue(),它的功能是求Fibonacci数列中大于t的最小的一个数,结果由函数返回,其中Fibonacci数列F(n)的定义为:
F(0)=0,F(1)=1
F(n)=F(n-1)+F(n-2)
最后调用函数writeDat()把结果输出到文件OUT80.DAT中。
注意:部分源程序已给出。
请勿改动主函数main()和写函数WriteDat()的内容。
试题程序:
#include <stdio.h>
void writeDat();
int JsValue(int t)
void main()
int n;
n=1000;
printf("n=% d,f=% d\n",n,jsValue(n));
writeDat();
void writeDat()
FILE * out;
int s;
out=fopen("OUT80.DAT","w");
s=jsValue(1000);printf("% d",s);
fprintf(out,"% d\n",s);
fclose(out);
参考答案:int jsValue(int t)
{
int f1=0,f2=1,fn;/*定义变量存储Fibonacci数,初始化数列的前两项*/
fn=f1+f2; /*计算下一个Fibonacci数*/
while(fn<=t) /*如果当前的Fibonacci数不大于t,则继续计算下一个Fibonacci数*/
{
f1=f2;
f2=fn;
fn=f1+f2;
}
return fn; /*返回Fibonacci数列中大于t的最小的一个数*/
}
解析: 解答本题的关键是要充分理解题意,只有理解了题意本身的数学过程,才能把数学过程转化为程序逻辑。根据已知数列,我们不难发现:在Fibonacci数列中,从第三项开始,每一项都可以拆分为前两项之和。本题要求找到该数列中“大于t的最小的一个数”。这里可以借助一个while循环来依次求数列中的数,直到出现某一项的值大于t,那么这一项就是“大于t的最小的一个数”。