改错题
下列给定程序中,函数proc()的功能是:计算并输出下列级数的前N项之和S
N,直到S
N+1大于q为止,q的值通过形参传入。
S
N=2/1+3/2+4/3+(N+1)/N
例如,若q的值为57,则函数值为59.593612。
请修改程序中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdlib.h>
#include<conio.h>
#include<stdio.h>
//****found****
double proc(double q)
{
int n;double sum,t;
n=2;
sum=2.0;
while(sum<=q)
{
t=sum;
//****found****
sum=sum+(n+1)/n;
n++;
}
//****found****
return sum;
}
void main()
{
system('CLS');
printf('%f\n',proc(60));
}
【正确答案】(1)错误:double proc(double q) 正确:double proc(int q) (2)错误:sum=sum+(n+1)/n; 正确:sum=sum+(double)(n+1)/n; (3)错误:return sum; 正确:return t;
【答案解析】由主函数中函数调用的实参可知,函数proc()的形参为int型,因此,“double proc(double q)”应改为“double proc(int q)”;变量sum为double型,因此表达式(n+1)/n要进行强制类型转换,因此,“sum=sum+(n+1)/n;”应改为“sum=sum+(double)(n+1)/n;”,由函数proc()可知,变量sum中存放的是SN+1项,而变量t表示SN项,因此,“return sum;”应改为“return t;”。