十甫天 发表于 2021-11-3 22:53:07

大佬们这个我实在看不懂什么意思

用牛顿迭代法求解一元三次方程ax^3+bx^2+cx+d=0在2.5附近的根。

输入
有一组数据包含4个实数,分别为a、b、c、d的值。
输出
方程的根。保留3位小数。

十甫天 发表于 2021-11-3 23:14:18

这个我看了同学的代码我有点看不懂了
#include<stdio.h>
#include<math.h>
int main()
{
    double a,b,c,d,x,f,f1,x1;
    scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
    x=2.5;
    do{
      x=x1;
      f=a*x1*x1*x1+b*x1*x1+c*x1+d;
      f1=3*a*x1*x1+2*b*x1+c;
      x=x1-(f/f1);
    }
    while(fabs(x-x1)<0.000001);
    printf("%.3lf",x);
    return 0;
}
哪个x1不是没赋值吗,为什么这个能编码

此方星河 发表于 2021-11-4 07:24:51

全局变量和局部静态变量如果没有初始化的话,会默认初始值为0,x1是局部变量,没有初始化,初始值会默认为0;
但是会有一个警告

但是,如果将x1初始化为0后没有警告
#include<stdio.h>
#include<math.h>
int main()
{
    double a,b,c,d,x,f,f1,x1;
    scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
    x=2.5;
    x1 = 0;
    do{
      x=x1;
      f=a*x1*x1*x1+b*x1*x1+c*x1+d;
      f1=3*a*x1*x1+2*b*x1+c;
      x=x1-(f/f1);
    }
    while(fabs(x-x1)<0.000001);
    printf("%.3lf",x);
    return 0;
}

傻眼貓咪 发表于 2021-11-5 20:33:25

此方星河 发表于 2021-11-4 07:24
全局变量和局部静态变量如果没有初始化的话,会默认初始值为0,x1是局部变量,没有初始化,初始值会默认为0 ...

只有全局变量和局部静态变量默认值才是 0,x1 是局部变量,怎样知道它是静态变量(static var)?

傻眼貓咪 发表于 2021-11-5 20:34:48

此方星河 发表于 2021-11-4 07:24
全局变量和局部静态变量如果没有初始化的话,会默认初始值为0,x1是局部变量,没有初始化,初始值会默认为0 ...

报错已经说明一切,表示 x1 没有初始化,不算静态啊~

此方星河 发表于 2021-11-6 07:49:43

傻眼貓咪 发表于 2021-11-5 20:34
报错已经说明一切,表示 x1 没有初始化,不算静态啊~

哦哦,好的,了解了,谢谢了大佬
页: [1]
查看完整版本: 大佬们这个我实在看不懂什么意思