输入实数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的平方根。
C++编程问题,求一个实数的平方根。
答案:3 悬赏:20 手机版
解决时间 2021-02-09 22:09
- 提问者网友:战皆罪
- 2021-02-09 15:41
最佳答案
- 五星知识达人网友:第四晚心情
- 2021-02-09 16:31
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);
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);
全部回答
- 1楼网友:底特律间谍
- 2021-02-09 19:33
#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楼网友:孤独入客枕
- 2021-02-09 17:53
刚刚运行过,成功!(我也是个初学者,如果有一个错误是与预处理头文件有关的,可以点击project,选择c/c++,将debug改为预处理头文件,选择第一项即可。)没错的话,可以不用管。
#include
#include
void main()
{float sum,x,y,z;
cout<<"请输入第一个数的值:x=";
cin>>x;
cout<<"请输入第一个数的值:y=";
cin>>y;
cout<<"请输入第一个数的值:z=";
cin>>z;
sum=sqrt(x)+sqrt(y)+sqrt(z);
cout<<"求和结果:sum="<}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯