蓝桥 1021迭代法求平方根

题目 1021: [编程入门]迭代法求平方根

时间限制: 1Sec 内存限制: 128MB 提交: 10184 解决: 5510

题目描述
用迭代法求 平方根

公式:求a的平方根的迭代公式为: X[n+1]=(X[n]+a/X[n])/2 要求前后两次求出的差的绝对值少于0.00001。 输出保留3位小数

输入
X

输出
X的平方根

样例输入
4
样例输出
2.000
一、何为迭代法
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。利用迭代算法解决问题,需要做好以下三个方面的工作:
a.确定迭代变量(本题可设 x[x+1]为x、x1为x[n])
b.建立迭代关系式(本题为 X[n+1]=(X[n]+a/X[n])/2)
c.对迭代过程加以控制(本题为 while(fabs(x-x1)>1E-5))
二、何为牛顿迭代法
牛顿迭代法(Newton’s method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。
公式即为 X[n+1]=(X[n]+a/X[n])/2
举例
例 1 :一个饲养场引进一只刚出生的新品种兔子,这种兔子从出生的下一个月开始,每月新生一只兔子,新生的兔子也如此繁殖。如果所有的兔子都不死去,问到第 12 个月时,该饲养场共有兔子多少只?
分析:这是一个典型的递推问题。我们不妨假设第 1 个月时兔子的只数为 u 1 ,第 2 个月时兔子的只数为 u 2 ,第 3 个月时兔子的只数为 u 3 ,……根据题意,“这种兔子从出生的下一个月开始,每月新生一只兔子”,则有
u 1 = 1 , u 2 = u 1 + u 1 × 1 = 2 , u 3 = u 2 + u 2 × 1 = 4 ,……
根据这个规律,可以归纳出下面的递推公式:
u n = u(n - 1)× 2 (n ≥ 2)
对应 u n 和 u(n - 1),定义两个迭代变量 y 和 x ,可将上面的递推公式转换成如下迭代关系:
y=x2
x=y
让计算机对这个迭代关系重复执行 11 次,就可以算出第 12 个月时的兔子数。参考程序如下:
cls
x=1
for i=2 to 12
y=x
2
x=y
next i
print y
end

#include<stdio.h>
int main()
{

    int a;
    scanf("%d",&a);
    double x=1.0,x1;//x=1是假想值
    while(x-x1>=0.00001||x-x1<=-0.00001)//结束条件:如果 要求前后两次求出的差的绝对值少于0.00001。则退出循环,得到平方根
    {
        x1=x;//这个语句一定要在x=(x1+a/x1)/2前面,不然x1和x的值就相同了
        x=(x1+a/x1)/2;
    }
    printf("%.3lf",x);
    return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值