C语言,迭代法求一个数的平方根。求大神看看代码,哪里出错了。万分感谢~

for(i=1;i<=10;i++)
{
a2 = 0.5*(a1 + x/a1);

}

对于给定的函数入参x,你别说循环10次,就是循环100次,你的输出结果也是固定值。
for循环中,唯一在递增的变量是i,可是a1,x的值每次循环值都没有变化,所以每次循环得到的a2的值都没有变化,循环一万次跟循环一次a2的值都是一样的。。。

C语言 迭代法求一个数的平方根

因为上面的算法使用的是函数f(x)=x^2-c,求根;所以要想使牛顿迭代的序列收敛于c,则,必须满足f(x0)=x0^2-c>0;所以一般情况下,取x0大于等于根号c都可以。这个是逼近理论的内容了。具体证明你查资料吧。求根好的算法很多的·给你一个快速算法:#include
#include
float SquareRootFloat(float number) {
long i;
float x, y;
const float f = 1.5F;

x = number * 0.5F;
y = number;
i = * ( long * ) &y;
i = 0x5f3759df - ( i >> 1 );
y = * ( float * ) &i;
y = y * ( f - ( x * y * y ) );
y = y * ( f - ( x * y * y ) );
return number * y;
}void main()
{
float x0,x1,a;
scanf("%f",&a);
printf("%.8f",SquareRootFloat(a));}

你的算法用的有问题#include #include int main(void){ double a=0.0; double b=0.0; double c=1.0; double x;//---- const double e=0.00001; printf("input num:
"); scanf("%lf",&a); getchar(); x=a; //负数时要进行处理 if ( ae) { c=b; b=0.5*(c+a/c); } if(x<0)//---- printf("sqrt(%lf) = %.3lfi
",a,b); else printf("sqrt(%lf) = %.3lf
",a,b); getchar(); return 0;}


迭代法求平方根,【c++】#include <iostream>
x=(x+a\/x)\/2;你可能比较有问题应该是在while里面,fabs的功能:求浮点数((x-a\/x)\/2)的绝对值,计算|((x-a\/x)\/2)|, 当((x-a\/x)\/2)不为负时返回((x-a\/x)\/2),否则返回-((x-a\/x)\/2);1e-7是精确值,循环条件是((x-a\/x)\/2)的绝对值不小于1e-7。算式是牛顿迭代法...

问一个C++迭代法求一个数平方根的问题
但是如果一个数小于1,那么它的平方根比它本身大,这个数字在它本身和1之间;而按你这句话:double x=(a>1?1:0),y=a,z;你把这个数字限制在了0和它本身之间,那再怎么迭代肯定也迭代不到结果了。为了不改后面的程序,你只要把第一句改成这样就OK,把结果限制在0和1之间迭代。double x=(a>...

C语言编程,求一个数平方根的近似值
3. 进入循环,计算`tmp`为`LG`和`N \/ LG`的平均值。4. 更新`NG`为`tmp`,`LG`为`NG`。5. 判断`NG`和`tmp`的差值是否小于`val`,如果大于,则继续循环,否则输出`NG`作为平方根近似值。通过这种方法,我们能够在C语言编程中实现对一个数求平方根的近似值功能。这种方法基于牛顿迭代法,...

不用sqrt如何在C语言中开平方
迭代法求a的平方根:temp=a\/temp时,temp为其平方根,计算机上表示当两者差小于10的负6次方,<1e-6,认为他们相等,temp 和 a\/temp 分别位于a的平方根的两头,一个大于,一个小于,取两者的平均值进行迭代。void main(){ int a;scanf("%d",&a);float temp=1;while(abs(temp-a\/temp)>1...

迭代法求平方根,【c++】#include <iostream>
定义这个数列 A(n+1)=(A(n)+a\/A(n))\/2.(式子1)显然A(n)就是经过n次迭代后的值。然后可以再设B(n)=a^2-A(n)^2.这样B(n)就表示n次迭代后的结果(也就是你想得到的近似平方根)的平方和被开方数a的差值。把式子1两端平方,然后带入B(n),就可以看到B(n)的数量级大概是...

求用C或C++语言计算平方根,要求不使用SQRT函数
一般我们求平方根使用牛顿迭代法,实现代码如下:double newtonMethod(double toBeSqrted) { double x = 1.0; while(abs(x * x - toBeSqrted) > 1e-5) { x = (x + toBeSqrted \/ x) \/ 2; } return x;}还可以用二分查找,这个原理较为简单,不过算法复杂度较高。flo...

C语言用迭代法求x-sinx-0.5=0。输入初值为1, 求平方根的迭代公式为x=...
x1 = sin(x0) + 0.5; \/\/ 打印迭代次数和x1 printf("%d: x1 = %lf\\n", i, x1); \/\/ 将x1赋值给x0,准备进行下一次迭代 x0 = x1;} return 0;} 在上面的代码中,我们定义了迭代次数为100,初值x0为1.0,并使用求平方根的迭代公式x1=sin(x0)+0.5进行迭代。这里的公式...

c语言迭代法求平方根,x=√a,迭代公式为Xn-1=1\/2(Xn+a\/Xn)
scanf("%d",&a);改为 scanf("%lf",&a);试试

迭代法求算数平方根 输入121 输出32.5 求找错 真的很急
include<stdio.h>#include<math.h>int main(){ double a,x0,x1; scanf("%lf",&a); x0=1;x1=a;\/\/这里改一下 while(fabs(x1-x0)>=1e-5)\/\/这里改一下 { x0=x1; x1=0.5*(x0+a\/x0); } printf("%lf的平方根为:%lf",a,x1);\/\/这里改一下 return 0;}运行...

关于C语言迭代法求平方根。程序运行没有结果,但编译成功,检查不出错...
程序没有问题,你按ctrl+f5运行试试