首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下面的二分法C代码有什么问题,它没有显示实际的根,而是显示了0.000000。(我是初学者)

下面的二分法C代码有什么问题,它没有显示实际的根,而是显示了0.000000。(我是初学者)
EN

Stack Overflow用户
提问于 2022-09-19 17:16:53
回答 1查看 36关注 0票数 1

由于某些原因,我不知道是什么,它没有显示大约的根,应该作为一个非零浮点打印的avg值是0,因为它的值在结尾,我也不确定在这里是否有必要。帮帮我,p.s-我的第一个问题。

代码语言:javascript
复制
// C program for bisection method
#include<stdio.h>
#include<math.h>
#define F(x) (x*x*x-9*x+1)



int main(int argc, char const *argv[])
{
    double guess_1, guess_2,func, avg;
    
    printf("Enter values of 1st guess and 2nd guess : ");  //assumes the initial 2 values from user
    scanf("%lf%lf",&guess_1,&guess_2);

    for (int i = 1; fabs(F(avg)) < 0.001; i++)
    {
        avg=(guess_1+guess_2)/2;
        if (F(guess_1)*F(avg)<0)
        {
            guess_2=avg;
        }else
        {
            guess_1=avg;

        }
        
        
    }
    
printf("approximate root is : %lf",avg);

    return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-19 17:39:58

你有两个主要问题:

  1. avg没有像天气叶片在注释中指出的那样初始化。

  1. 您的条件终止到循环是不正确的。循环,直到错误变得太大。相反的情况应该是。

固定版本如下:

代码语言:javascript
复制
// C program for bisection method
#include<stdio.h>
#include<math.h>

#define F(x) ((x)*(x)*(x)-9*(x)+1)

int main(void)
{
    double guess_1, guess_2, avg;
    
    printf("Enter values of 1st guess and 2nd guess : ");  //assumes the initial 2 values from user
    scanf("%lf%lf",&guess_1,&guess_2);
    // TODO: Check if result == 2

    avg=(guess_1+guess_2)/2;
    while (fabs(F(avg)) > 0.001)
    {
        avg=(guess_1+guess_2)/2;
        if (F(guess_1)*F(avg)<0)
        {
            guess_2=avg;
        }else
        {
            guess_1=avg;
        }
    }
    
    printf("approximate root is : %lf",avg);
    return 0;
}

输出:

代码语言:javascript
复制
a)
Enter values of 1st guess and 2nd guess : 2.3 3.5
approximate root is : 2.942810

b)
Enter values of 1st guess and 2nd guess : -1.0 1.0
approximate root is : 0.111328

进一步改进:

variables

  • Changed

  • 将未使用的for循环移至宏定义中括号中的whileforx
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73777045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档