编写函数jsValue(),它的功能是求Pibonacci数列中大于t的最小的一个数,结果由函数返回,其小 Fibonacci数列F(n)的定义为: F(0)=0, F(1)=1 ’ F(n)=F(n-1)+F(n-2) 最

admin2009-02-19  33

问题 编写函数jsValue(),它的功能是求Pibonacci数列中大于t的最小的一个数,结果由函数返回,其小 Fibonacci数列F(n)的定义为:
      F(0)=0,  F(1)=1    ’
      F(n)=F(n-1)+F(n-2)
最后调用函数writeDat(),把结果输出到文件OUT10.DAT中。
例如:当t=1000时,函数值为1597。
注意:部分源程序已给出。
请勿改动主函数main()和写函数WriteDat()的内容。
试题程序:
      #include
      int jsValue(int t)
      {
      }
      main ( )
     {
            int n;
            n=1000;
            printf("n=%d,  f=%d\n",  n,  jsValue(n));
            writeDat();
     }
     writeDat()
     {
            FILE *in, *out;
            int   n,s;
            out = fopen("OUT10.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; fn=f1+f2; while(fn<=t){f1=f2;f2=fn;fn=f1+f2;} /*如果当前的Fibonacci数不大于t,则计算下一个Fibonacci数*/ return fn; /*返回Fibonacci数列中大于亡的最小的一个数*/

解析 解答本题的关键是要充分理解题意,只有理解了题意本身的数学过程,才能把数学过程转化为程序逻辑。根据已知数列,我们不难发现:Fibonacci数列中,从第三项开始,每一项都可以拆分为前两项之和。本题要求找到该数列中“大于t的最小的一个数”。这里可以借助一个while循环来依次取数列中的数,直到出现某一项的值大于t,那么这一项就是“大于t的最小的一个数”。注意:在循环体内部,我们用变量f1始终来表示第n项的前面第二项,用变量f2来始终表示第n项的前面第一项。这就实现了变量的活用与巧用。
转载请注明原文地址:https://kaotiyun.com/show/IzSZ777K
0

随机试题
最新回复(0)