问答题 下列给定程序中,函数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中存放的是S N+1 项,而变量t表示S N 项,因此,“return sum;”应改为“return t;”。