【分析解答题】请编写函数fun(),它的功能是求Fibonacci数列中小于t的最大的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为   F(0)=0,F(1)=1   F(n)=F(n-1)+F(n-2)   例如:t=1000时,函数值为987。   注意:部分源程序给出如下。   请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。   试题程序:   #include  <conio.h>   #include  <math.h>   #include  <stdio.h>   int fun(int t)   {   }   main()   {int  n;clrscr();n=1000;printf("n=%d,  f=%d\n",n,  fun(n));   }
网考网解析:
试题答案: 答案解析:int fun(int t)
   {
    int a=1,b=1,c=0,i;   /*a代表第n-2项,b代表第n-1项,c代表第n项*/
                   /*如果求得的数。比指定比较的数小,则计算下一个Fibonacci数,对a,b得新置数*/
   do
      {
       c=a+b;
       a=b;
       b=c;
      }
    while(c<t);           /*如果求得的数c比指定比较的数大时,退出循环*/
   c=a;       /*此时数c的前一个Fibonacci数为小于指定比较的数的最大的数*/
   return  c;
   }
[解析]根据所给数列定义不难发现,该数列最终的结果是由两个数列之和组成,所以可以在循环内部始终把c看成是前两项之和(即第n项),而a始终代表第n-2项,b始终代表第n-1项(通过不断地重新赋值来实现)。应注意,退出循环时得到的数c是大于指定比较的数的最小的数,而它的前一个数就是小于指定比较的数的最大的数。 
                 
				 
                	document.getElementById("warp").style.display="none";
                	document.getElementById("content").style.display="block";
                 
                查看试题解析出处>>
							
	          			
发布评论 查看全部评论