问答题 下列给定程序中,函数proc()的功能是:应用递归算法求某数a的平方根。求平方根的迭代公式如下:
x1=(x0+a/x0)/2
例如,3的平方根为1.732051。
请修改程序中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<math.h>
#include<stdio.h>
//****found****
proc(double a, double x0)
{
double x1, y;
x1=(x0+a/x0)/2.0;
//****found****
if(fabs(x1-x0)>0.00001)
y=proc(a, x1);
else y=x1;
return y;
}
void main()
{
double s;
printf("Enter s:"); scanf("%1f", &s);
printf("The square root of %1f is %1f/n", s, proc(s, 1.0));
}
【正确答案】
【答案解析】(1)错误:proc(double a, double x0)
正确:double proc(double a, double x0)
(2)错误:if(fabs(x1-x0)>0.00001)
正确:if(fabs(x1-x0)>=0.00001) [解析] 由主函数中的proc函数调用可知,函数proc应该有一个double型的返回值。因此,“proc(double a, double x0)”应改为“double proc(doubk a, double x0)”;由double型数据的精确值可知,“if(fabs(x1-x0)>0.00001)”应改为“if(fabs(x1-x0)>=0.00001)”。