1、计算机三级(数据库技术)上机考试 11 及答案解析(总分:-1.00,做题时间:90 分钟)1.编写函数 jsValue(),它的功能是求 Fibonacci 数列中大于 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 jsVal
2、ue(int t) main() int n; n=1000; printf(“n=%d, f=%dn“, n, jsValue(n); writeDat(); writeDat() FILE *in, *out; int n,s; out = fopen(“OUT10.DAT“, “w“); s = jsValue(1000); printf(“%d“,s); fprintf(out, “%dn“, s); fclose(out); (分数:-1.00)_计算机三级(数据库技术)上机考试 11 答案解析(总分:-1.00,做题时间:90 分钟)1.编写函数 jsValue(),它的功能是求
3、Fibonacci 数列中大于 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=%dn“, n, jsValue(n); w
4、riteDat(); writeDat() FILE *in, *out; int n,s; out = fopen(“OUT10.DAT“, “w“); s = jsValue(1000); printf(“%d“,s); fprintf(out, “%dn“, s); fclose(out); (分数:-1.00)_正确答案:(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
5、 fn; /*返回 Fibonacci 数列中大于 t 的最小的一个数*/ )解析:解答本题的关键是要充分理解题意,只有理解了题意本身的数学过程,才能把数学过程转化为程序逻辑。根据已知数列,我们不难发现:Fibonacci 数列中,从第三项开始,每一项都可以拆分为前两项之和。本题要求找到该数列中“大于 t 的最小的一个数”。这里可以借助一个 while 循环来依次取数列中的数,直到出现某一项的值大于 t,那么这一项就是“大于 t 的最小的一个数”。注意:在循环体内部,我们用变量 f1 始终来表示第 n 项的前面第二项,用变量 f2 来始终表示第 n 项的前面第一项。这就实现了变量的活用与巧用。