C语言,迭代法求平方根

#include<stdio.h>#include<math.h>intmain(void){doublea=0.0;doubleb=0.0;doublec=1.0;co... #include <stdio.h>
#include <math.h>

int main(void)
{
double a=0.0;
double b=0.0;
double c=1.0;
const double e=0.00001;

printf("请输入要求开方的数:\n");
scanf("%lf",&a);

while(fabs(c-b)>e)
b=0.5*(c+a/c);

if(a<0)
printf("%lf的平方根是%.3lfi\n",a,b);
else
printf("%lf的平方根是%.3lf\n",a,b);

getchar();
getchar();
return 0;
}

这段代码只有我输入1的时候能输出答案,其他数字就没有下文了....小弟新手,求各路大神指点一二!
展开
 我来答
kaixingui2012
推荐于2017-09-09 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6287万
展开全部
你的算法用的有问题

#include <stdio.h>
#include <math.h>

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:\n");
    scanf("%lf",&a);
    getchar();

    x=a; //负数时要进行处理
    if ( a< 0 ) a=-a;
    c=1,b=a;
    while(fabs(c-b)>e)
    {
        c=b;
        b=0.5*(c+a/c);
    }

    if(x<0)//----
        printf("sqrt(%lf) = %.3lfi\n",a,b);
    else
        printf("sqrt(%lf) = %.3lf\n",a,b);

    getchar();
    return 0;
}
TableDI
2024-07-18 广告
当我们谈到Python与Excel的拆分时,通常指的是使用Python的库来读取Excel文件中的数据,然后根据某种逻辑(如按行、按列、按特定值等)将数据拆分成多个部分或输出到新的Excel文件中。上海悉息信息科技有限公司在处理这类任务时,... 点击进入详情页
本回答由TableDI提供
乜耕顺牟媚
2019-04-16 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:33%
帮助的人:1050万
展开全部
三个错误:
1.不能用int型定义,用double型。
2.没有abs这么个语句,应该是fabs。
3.for循环中应该是
c=1.0/2*(b+a*1.0/b);
b=1.0/2*(c+a*1.0/c);
而不是
c=1/2*(b+a/b);
b=1/2*(c+a/c);
因为a,b,c都是实型了前面当然不能用整型。
然后再试试吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
haiyangfenghuo
2014-09-22 · TA获得超过2439个赞
知道大有可为答主
回答量:2388
采纳率:0%
帮助的人:788万
展开全部
while(fabs(c-b)>e)
b=0.5*(c+a/c);

这里的循环之后,b始终是一个值,没有对b有任何的修改,程序设计的有问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
情愫A288ecff64
2014-09-22 · TA获得超过102个赞
知道答主
回答量:126
采纳率:50%
帮助的人:124万
展开全部
因为上面的算法使用的是函数f(x)=x^2-c,求根;所以要想使牛顿迭代的序列收敛于c,则,必须满足f(x0)=x0^2-c>0;所以一般情况下,取x0大于等于根号c都可以。这个是逼近理论的内容了。具体证明你查资料吧。求根好的算法很多的·给你一个快速算法:#include<stdio.h>
#include<math.h>
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));}
是否可以解决您的问题?
追问
不好意思,我不是需要那个算法,而是想知道这个程序错在哪里?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乘纳蒿庄雅
2019-01-30 · TA获得超过3799个赞
知道大有可为答主
回答量:3191
采纳率:28%
帮助的人:230万
展开全部
程序写的有问题啊~~~~,while语句里边,X2的值是多少啊,在调用一个变量之前,应该先给他赋初始值的啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式