首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

迭代法求sqrt。该如何解决

2012-10-20 
迭代法求sqrt。#include stdio.h#include math.hmain(){int nfloat a,x0,x1n0printf(输入a:) sc

迭代法求sqrt。
#include <stdio.h>
#include <math.h>
main()
{
int n;
float a,x0,x1;
n=0;
printf("输入a:");
scanf("%d",&a);
x0=a/2; // 初值
x1=(x0+a/x0)/2;  

while(fabs(x1-x0)<10e-5)
{
x0=x1;
  x1=(x0+a/x0)/2;
   
}
printf("x1=%f",x1);
}
输入a:4
输出 1
明显不对啊 还有就是x0和x1初值应该怎么赋值 啊 谢谢

[解决办法]
首先,问题问的不对,容易产生误解,如果我没理解错的话,你想做的是,用平方根迭代公式求平方根,而不是用迭代法求平方根,希望楼主以后注意。

然后是代码的问题
问题1:a是float型,你在输入的时候,使用的是%d,我猜这应该不是你故意为之吧。
问题2:while循环的判断条件写错了吧,你想做的是,当fabs的值小于这个数的时候,退出循环吧,而你现在所写的代码是在fabs的值小于10e-5的时候才进入while循环。
问题3:建议楼主先去看看平方根迭代公式,然后再来实现。

希望对您有帮助
[解决办法]
初始值为1;
新猜测值 = (a/猜测值+猜测值)/2;
代码修改如下:

C/C++ code
#include <stdio.h>#include <math.h>int main(){    int n;    float a,x0,x1;    n=0;    printf("输入a:");    scanf("%f",&a);                  //输入浮点数不能用%d    x0=1; // 初值    x1=(x0+a/x0)/2;    //猜测值    while(fabs(x1*x1-a)>10e-5)       //超过了误差范围,则重新猜测    {        //x0=x1;        x1=(x1+a/x1)/2;          //新猜测值    }    printf("x1=%f",x1);} 

热点排行