C++编程问题,求一个实数的平方根。

输入实数x(x>0),求x的正平方根,结果保留五位小数。要求不用sqrt实现。
提示:设a为x的正平方根,程序的目标是求a的值,使得a*a=x。a的取值范围在[0, x]内。由于a2在a>0时是单调递增函数,所以可以重复以下步骤缩小a的取值范围:(假设x = 2)
(1) a = (0 + 2) / 2=1,因为a*a = 1*1 <= x,所以a的取值范围在[1, 2]内。
(2) a = (1 + 2) / 2 = 1.5,因为a * a = 1.5 * 1.5 > x,所以a的取值范围在[1, 1.5]内。
(3) a = (1+1.5)/2=1.25,因为a*a=1.25*1.25 <= x,所以a的取值范围在[1.25, 1.5]内
(4) ……
重复上述步骤,a的取值范围在不停缩小,当取值范围的上限减去下限等于0.00001时,可停止求解,此时a的值即为x的平方根。

第1个回答  推荐于2017-09-16
#include <stdio.h>
#include <math.h>

double Root(double da) {
double a = 0,b = da,root;
root = (a + da)/2;
while(fabs(root * root - da) > 1.0E-6) {
if(root * root < da) a = root;
else b = root;
root = (a + b)/2;
}
return root;
}

int main() {
double a;
while(scanf("%lf",&a) == 1)
printf("%lf = %.5lf\n",a,Root(a));
return 0;
}

本回答被提问者采纳
第2个回答  2014-11-17
double x; //输入值
double a; //结果
double l; //下限
double h; //上限
double t; //差值
printf("请输入X值:\n");
scanf("%lf",&x);

l = 0;
h = x;
do
{
a = (l+h)/2;
if (a*a <= x)
{
l = a;
}
else
{
h = a;
}
t = h-l;
}while(t>0.00001);

printf("结果:%f\n",a);本回答被网友采纳
相似回答