问答题 编程题 请编写函数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 #include #include 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项*/ /*如果求得的数c比指定比较的数小,则计算下一个Fibonacci数,对a,b重新置数*/ do { c=a+b; a=b; b=c; } while (c
【答案解析】根据所给数列定义不难发现,该数列最终的结果是由两个数列之和组成,所以可以在循环内部始终把c看成是前两项之和(即第n项),而a始终代表第n-2项,b始终代表第n-1项(通过不断地重新赋值来实现)。应注意,退出循环时得到的数c是大于指定比较的数的最小的数,而它的前一个数就是小于指定比较的数的最大的数。