解题思路:

牛顿迭代法求平方根:
    假设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 条评论

Joker 2年前 回复TA
@Blank 随便假设一种关系,然后带入计算
Blank 2年前 回复TA
那个,我想问一下初始值为什么是a/2?这个值是看你要求的数的平方根是什么然后按情况设的嘛?
萌猫 2年前 回复TA
我都理解不了题目!。。。
xisoni 3年前 回复TA
@牧乔 是不是忘了加绝对值
牧乔 3年前 回复TA
为什么我的值 -0.000
没尾巴的兔子 3年前 回复TA
//输出n的所有因子
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
	double N ;
	double a , b ; 
	cin>>N ; //16
	
	a = N / 2 ; //8
	b = ( a + (N/a) ) / 2 ; // 8+2 / 2 = 5 ;

	while((a-b)>0.00001)
	{
		//a - b > 0.00001
		a = b ;
		
		b = ( b + N/b ) / 2 ;
		
	}
	
	cout<<fixed<<setprecision(3)<<b;
	

    return 0;
}
晴明 3年前 回复TA
@18软件白浩彤 c++输入
热爱美好 3年前 回复TA
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
   int main(){
   	double a,b,c;
   	cin >>a;
   	b=a/2;
   	while (1){
   		c=(b+a/b)/2;
   		if(fabs(c-b)<0.00001)
   		break;
   		b=c;
	   }
	cout <<fixed<<setprecision(3)<<c<<endl;
	   
   	return 0;
   }
zqz 3年前 回复TA
很棒,对迭代法做了一个详细的说明,比光有代码的好多了,赞
0114刁稳 4年前 回复TA
@嘻哈乐 对的啊