编写函数jsvalue(),其功能是:求Fibonacci数列中大于t的最小的一个数,结果由该函数返回。其中,Fibonacci数列F(n)的定义如下。F(0)=0, F(1)=1F(n)=F(n-1)+F(n-2)最后,调用函数writeDat()读取10个数据t,分别得出结果,并把结果输出到文件out.dat中。例如:当t=1000时,函数值为1597。部分源程序已给出。请勿改动主函数main()和写函数writeDat()的内容。#include <stdio.h>int jsValue(int t

题目

编写函数jsvalue(),其功能是:求Fibonacci数列中大于t的最小的一个数,结果由该函数返回。其中,Fibonacci数列F(n)的定义如下。F(0)=0, F(1)=1F(n)=F(n-1)+F(n-2)最后,调用函数writeDat()读取10个数据t,分别得出结果,并把结果输出到文件out.dat中。例如:当t=1000时,函数值为1597。部分源程序已给出。请勿改动主函数main()和写函数writeDat()的内容。#include <stdio.h>int jsValue(int t){ }void writeDat(){ FILE *in, *out; int i, n, s; in = fopen("in.dat", "r"); out = fopen("out.dat", "w"); for (i=0; i<50; i++) { fscanf(in, "%d,", &n); s = jsValue(n); fprintf(out, "%d\n", s); } fclose(in); fclose(out);}main(){ int n; n = 1000; printf("t=%d,f=%d\n", n, jsValue(n)); writeDat();}


相似考题
更多“编写函数jsvalue(),其功能是:求Fibonacci数列中大于t的最小的一个数,结果由该函数返回。其中,Fibo ”相关问题
  • 第1题:

    编写函数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=0f2=1fn; fn=f1+f2; while(fn=t){f1=f2;f2=fn;fn=f1+f2;} /*如果当前的Fibonacci数不大于t则计算下一个Fibonacci数*/ return fn; /*返回Fibonacci数列中大于亡的最小的一个数*/
    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项的前面第一项。这就实现了变量的活用与巧用。

  • 第2题:

    请编写一个函数long Fibo(int n), 该函数返回n的Fibonacci数。规则如下:n等于1或者2时,Fibonacci数为1,之后每个Fibonacci数均为止前两个数之和, 即:F(n)=F(n-1)+F(n-2)

    注意:清使用递归算法实现该函数。

    部分源程序已存在文件test1_2.cpp中。

    请勿修改主函数main和其他函数中的任何内容,仅在函数Fibo的花括号中填写若干语句。如n=8时,结果是21。

    文件test1_2.cpp清单如下:

    include<iostream.h>

    corlsh int N=8;

    long Fibo(int n);

    void main()

    {

    long f=Fibo(N);

    couk<<f<<endl;

    }

    long Fibo(int n)

    {

    }


    正确答案:long Fibo(int n) { if(n==1)return 1L; else if(n==2) return 1L; else return Fibo(n-1)+Fibo(n-2); }
    long Fibo(int n) { if(n==1)return 1L; else if(n==2) return 1L; else return Fibo(n-1)+Fibo(n-2); } 解析:本题考查的是考生对于递归函数的熟练掌握。递归是指在调用函数的过程中出现调用该函数自身,这里递归的结束条件是n等于1或2,即已知数列前两项为1。其调用过程如下:如果函数的参数为l或者2就把返回值1返回调用函数;否则,就使用递推公式Fibo(n)=Fibo(n-1)+Fibo(n-2),把n-1和n-2作为参数调用原函数,即这是一个递归求值的过程(递推的过程)。

  • 第3题:

    请编写函数proc(),它的功能是求Fibonacci数列中小于n的最大的一个数,结果由函数返回。

    Fibonacci数列F(n)的定义为

    F(0)=O,F(1)=1

    F(n)=F(n-1)+F(n-2)

    例如,n=500时,函数值为377。

    注意:部分源程序给出如下。

    请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的花括号中填写所编写的若干语句。

    试题程序:


    正确答案:


    【解析】由题目中所给的公式可知,Fibonacci数列的第n项为第n-1项和第n-2项的和。要求Fibonacci数列中小于n的最大的一个数。首先根据公式求出Fibonacci数列的第n项的值,当第i项大于n,则返回第i-1项的值。

  • 第4题:

    编写函数,isValue(),它的功能是求Fibonacci数列中大于t的最小的一个数,结果由函数返回,其中 Fibonacci数列F(n)的定义为:

    F(0)=0,F(1)=1

    F(n)=F(n-1)+F(n-2)

    最后调用函数writeDat(),把结果输出到文件OUTl0.DAT中。

    例如:当t=1000时,函数值为1597。

    注意:部分源程序已给出。

    请勿改动主函数main()和写函数WriteDat()的内容。

    include <stdio.h>

    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;

    ut = fopen ("OUT10.DAT", "w");

    s = jsValue(1O00); printf("% d",s);

    fprintf(out, "%d\n", s);

    fclose (out);

    }


    正确答案:int jsValue(int t) { int f1=0f2=1fn; fn=f1+f2; while(fn=t) {f1=f2;f2=fn;fn=f1+f2;) /*如果当前的Fibonacci数不大于t 则计算下一个Fibonacci数*/ return fn; /*返回Fibonacci数列中大于t的最小的一个数*/ }
    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数列中大于t的最小的一个数*/ } 解析:解答本题的关键是要充分理解题意,只有理解了题意本身的数学过程,才能把数学过程转化为程序逻辑。根据已知数列,我们不难发现:Fibonacci数列中,从第三项开始,每一项都可以拆分为前两项之和。本题要求找到该数列中“大于t的最小的一个数”。这里可以借助一个while循环来依次取数列中的数,直到出现某一项的值大于t,那么这一项就是“大于t的最小的一个数”。注意:在循环体内部,我们用变量f1始终来表示第n项的前面第二项,用变量侵来始终表示第n项的前面第一项。这就实现了变量的活用与巧用。

  • 第5题:

    编写函数jsValue(int t),它的功能是:求Fibonacci数列中大于t的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为: F(0)=0,F(1)=1 F(n)=F(n-1)+F(n-2) (n≥2) 最后调用函数writeDat读取l0个数据t,分别得出结果且把结果输出到文件out.dat中。 例如:当t=1000时,函数值为:1597。 注意:部分源程序存在test.c文件中。 请勿改动数据文件in.dat中的任何数据、主函数main和写函数writeDat的内容。


    正确答案:
    【审题关键句】F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n2)。
    【解题思路】
    ①定义表示Fibonacci数列中第F(n-2)项的变量f0,第F(n-1)项的变量n,第F(n)项的变量f2。
    ②当Fibonacci数列中第F(n)项的值f2小于t时,把数列当前第F(n-1)项的值n赋给f0,把数列当前第F(n)项的值f2赋给n,根据Fibonacci数列的递推关系,第n项的值等于第n-1项的值与第n-2项值的和,计算数列当前第n+1项的值f2= f0+n。依次循环,当f2的值大于t时,退出while循环,把f2的值返回。
    【参考答案】