解题思路:

牛顿迭代法求平方根:
    假设a。欲求a的平方根,首先猜测一个值X1=a/2,然后根据迭代公式 X(n+1)=(Xn+a/Xn)/2,
    算出X2,再将X2代公式的右边算出X3等等,直到连续两次算出的Xn和X(n+1)的差的绝对值小于
    某个值,即认为找到了精确的平方根
    
例:
假设a=4,
    x1=4/2=2; 
    x2=(2+4/2)/2=2   2-2<0.00001
    ==>平方根=2
    
假设a=9,
    x1=9/2=4.5; 
    x2=(4.5+9/4.5)/2=3.25   4.5-3.25>0.00001
    x3=(3.25+9/3.25)/2=3.00962   3.25-3.00962>0.00001
    x4=(3.00962+9/3.00962)/2=3.00002   3.00962-3.00002>0.00001
    ....
     ==>平方根=3
     
     利用循环,即可解题


注意事项:

    理解题意,善用循环,绝对值得差小于0.00001


参考代码:

#include"iostream" 
#include"cmath"     //调用求绝对值函数  fabs();
#include"cstdio"    //使用格式化输出printf();
using namespace std;

int main(){
	double x,b,c;
	cin>>x;
	b=x/2;
	while(1){
		c=(b+x/b)/2;
		if(fabs(c-b)<0.00001)
			break;
		b=c;
	}
	printf("%.3lf\n",c);
	return 0;
}


点赞(14)
 

0.0分

47 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 19 条评论

天尊沐笙 4年前 回复TA
@嘻哈乐 因为while中不可以用函数啊
菜鸟阿壹 4年前 回复TA
#include<stdio.h>
int main()
{
	float s,a;
	scanf("%f",&a);
	s=a/2.0;
	while(1){
		if((s+a/s)/2.0-s<0.00001){
		printf("%0.3f\n",(s+a/s)/2.0);break;
		}
	s=(s+a/s)/2.0;
	}

return 0;
}
嘻哈乐 4年前 回复TA
为什么
fabs(b-a)<0.00001  必须要在if里
while(fabs(b-a)>0.00001)  为什么会错?
苗蓉 5年前 回复TA
#include"iostream" 
#include"cmath"     
#include"cstdio"    
using namespace std;
 
int main(){
    double x,b,c;
    cin>>x;
    b=x/2;
    while(1){
        c=(b+x/b)/2;
        if(fabs(c-b)<0.00001)
            break;
        b=c;
    }
    printf("%.3lf\n",c);
    return 0;
}
jdd 5年前 回复TA
@18软件白浩彤 c++输入
与神明说 5年前 回复TA
@18软件白浩彤 噗,,不好意思 好久 没看这个网站了
interest 5年前 回复TA
dalao666
18软件白浩彤 6年前 回复TA
@18软件白浩彤 知道了知道了
18软件白浩彤 6年前 回复TA
cin>>x; 问一哈大神 这个是啥啊?