C语言:用迭代法求 x=根号a。

C语言:用迭代法求 x=根号a。,第1张

#include <stdioh>

#include <mathh>

void main()

{

double x1,x2=10,a;

printf("请输入a:");

scanf("%lf",&a);

do

{

x1=x2;

x2= (x1 + a/x1) / 2; //迭代的实质是循环

}while(fabs(x2-x1)>1e-1);

printf("结果为:%2f\n",x2);

}

我找了一段正确的程序,如下:

注意看,它的判断条件跟你的是不同的,还有就是你的代码,一开始x1=0的话,x2=2/3x1+a/(3x1x1); 分母为0了,当然出错了。

立方根的牛顿法基于如下事实,如果y是x的立方根的一个近似值,那么下式将给出一个更好的近似值:

(x/y2+2y)/3

代码:

#include<stdioh>

#include <mathh>

float fun(float guess,float x)

{

if(abs(guessguessguess-x)<00000001) return guess;

else

return fun((x/guess/guess+2guess)/3,x);

}

int main()

{

float a,b;

while(scanf("%f%f",&a,&b))

printf("%f\n",fun(a,b));

}

//a表示你猜测b的立方根大概等于几

float mysqrt(float a)

{

float x = a/2;

float d = 10000;

while ( d>1e-5 || d<-1e-5)

{

d = x;

x = (x + a/x) /2 ;

d -= x;

}

return x;

}

分类: 电脑/网络 >> 程序设计 >> 其他编程语言

问题描述:

#include "iostreamh"

#include "mathh"

void main()

{double a,x,y;

cin>>a;

x=a/2;

y=2/(3x)+a/(3xx);

do{x=y;

y=2/(3x)+a/(3xx);

}while(fabs(x-y)>=10e-5);

cout<<x<<endl;

}

已知公式为y=2/(3x)+a/(3xx);求A的立方根,这条程序错在哪呀?

解析:

公式错了

正确是: y=(x+x+a/(xx))/30;

另外,应该考虑a=0的特殊情况,否则会出现除数是0的例外

以上就是关于C语言:用迭代法求 x=根号a。全部的内容,包括:C语言:用迭代法求 x=根号a。、C++用迭代法求立方根、C语言,用迭代法求x=根号下a等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9415683.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存