问答题 下列给定程序中,函数proc()的功能是:求出以下分数序列的前m项之和。
2/1,3/2,5/3,8/5,13/8,21/13,…
和值通过函数值返回main()函数。例如,若m=6,则应输出10.007051。
请修改程序中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
//****found****
proc(int n)
{
int a=2, b=1, c, k;
double s=0.0;
for(k=1; k<=n; k++)
{
s=s+1.0*a/b;
//****found****
c=a; a+=b; b+=c;
}
return(s);
}
void main()
{
int m=5;
system("CLS");
printf("/nThe value of function is: %1f/n", proc(m)); }}
【正确答案】
【答案解析】(1)错误:proc(int n)
正确:double proc(int n)
(2)错误:c=a; a+=b; b+=c;
正确:c=a; a+=b; b=c; [解析] 由main()函数中的proc()函数调用可知,函数proc()的返回值为double型数据。因此,“proc(int n)”应改为“double proc(int n)”。根据数列的特点可知,下一项的分子是上一项的分子和分母之和,下一项的分母为上一项的分子。根据数列的这个特点,“c=a;a+=b;b+=c;”应改为“c=a;a+=b;b=c;”。