1163028233 发表于 2021-8-11 23:09:38

用牛顿迭代法求方程2*x*x*x-4*x*x+3*x-6=0在1.5附近的解,要求误差小于1e-5

用do-while型写
#include<stdio.h>
#include<math.h>
int main(){
    float x0,x,f,f1;
    printf("请输入一个近似解:\n");
    scanf("%f",&x);
    do{
      x0=x;
      f=((2*x-4)*x+3)*x-6;
      f1=(6*x-8)*x+3;
      x=x-f/f1;
    }while(fabs(x-x0)>=1e-5);
    printf("牛顿迭代公式求得的近似解:%.4f\n",x);
    return 0;
}
输入1.5
输出2.0000

用while型写
#include<stdio.h>
#include<math.h>
int main(){
    float x0,x,f,f1;
    printf("请输入一个近似解:\n");
    scanf("%f",&x);
    x0=x;
    while(fabs(x-x0)>=1e-5){
      f=((2*x-4)*x+3)*x-6;
      f1=(6*x-8)*x+3;
      x=x-f/f1;
    }
    printf("牛顿迭代公式求得的近似解:%.4f\n",x);
    return 0;
}
输入1.5
输出1.5000
想问下为什么输出的不一样。是while型哪里写错了嘛?
我知道do-while是先首先执行语句即循环体

wp231957 发表于 2021-8-12 08:40:09

#include<stdio.h>
#include<math.h>
int main(){
    float x0,x,f,f1;
    printf("请输入一个近似解:\n");
    scanf("%f",&x);
    while(1){
      x0=x;
      f=((2*x-4)*x+3)*x-6;
      f1=(6*x-8)*x+3;
      x=x-f/f1;
      if (fabs(x-x0)<1e-5) break;
    }
    printf("牛顿迭代公式求得的近似解:%.4f\n",x);
    return 0;
}
页: [1]
查看完整版本: 用牛顿迭代法求方程2*x*x*x-4*x*x+3*x-6=0在1.5附近的解,要求误差小于1e-5