解一元三次方程

题目描述:
有形如:ax3+bx2+cx+d=0  这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d  均为实数),并约定该方程存在三个不同实根(根的范围在-10至10之间),并且根与根之差的绝对值 ≥ 1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后3位。
提示:记方程f(x) = 0,若存在2个数x1和x2,且x1 < x2,f(x1)*f(x2) < 0,则在(x1,x2)之间一定有一个根。
输入:
有一组数据包含4个实数,分别为a、b、c、d的值。
输出:
方程的根,保留3位小数。
样例输入:
2  -4  3  -6
样例输出:
2.000
  这个程序涉及了数学运算因此要在开始加上数学库,并将基本格式打好:
 

#include<stdio.h>
#include<math.h>
int main()
{
    return  0;  
}


由于题目要求要有三位小数点所以我们要用double来定义,而且我们输出时要用% lf来对应double,程序如下

double x1,x2,a,b,c,d,i,fx1,fx,x;
    x1=-10;
    x2=10;
    scanf("%lf %lf %lf %lf",&a,&b,&c,&d);


为了方便简洁我们接下来用for语句来进行循环先将i赋值为1,再让程序在i小于等于100时一直自增循环直到得到理想的精度值,并把x用x1,x2表示,把fx,fx1这两个方程表示出来。接下来用if嵌套语句来进行输出,在第一个if条件时要用1e-8来确认fx的精度。然后用第二和第三个if语句对fx和fx1的乘及正负值进行判断,假如fx和fx1的乘积为正,则x=x1;假如fx和fx1的乘积为负,则x2=x。程序如下:
 

for(i=1;i<=100;i++)
    {
        x=(x1+x2)/2;
        fx1=a*x1*x1*x1+b*x1*x1+c*x1+d;
        fx=a*x*x*x+b*x*x+c*x+d;
        if(fabs(fx)<1e-8){
             
        }
        else if(fx*fx1>0){
        x1=x;
    }
    else if(fx*fx1<0){
        x2=x;
    }


在最后输出时要看清题目保留3位小数,并用%lf来对应double,程序如下:
 

printf("%.3lf",x);


最后将代码总结输出:

#include<stdio.h>
#include<math.h>
int main()
{
    double x1,x2,a,b,c,d,i,fx1,fx,x;
    x1=-10;
    x2=10;
    scanf("%lf %lf %lf %lf",&a,&b,&c,&d);
    for(i=1;i<=100;i++)
    {
        x=(x1+x2)/2;
        fx1=a*x1*x1*x1+b*x1*x1+c*x1+d;
        fx=a*x*x*x+b*x*x+c*x+d;
        if(fabs(fx)<1e-8){
             
        }
        else if(fx*fx1>0){
        x1=x;
    }
    else if(fx*fx1<0){
        x2=x;
    }
    }printf("%.3lf",x);
    return 0;
}

这个解一元三次方程让我加深了对for语句,if的嵌套语句的熟练度,并让我对循环语句的理解更进一步,也让我对c语言产生了更浓厚的兴趣。让我有了学下去的动力,经过c语言的学习,我觉得万物皆可代码化,程序员就是要把世间的一切用代码表示出来。在一个到处是OOP的年代,为何面向过程的C语言依然可以如此活跃?这主要得益于C语言本身的语言特性。C语言小巧灵活,而且还有一个直接与硬件打交道的指针的存在,所以它是嵌入式开发唯有的高级语言;正因为他的小巧灵活,我们可以用它来开发一系列的小工具,Unix/Linux就是由这些小工具组成的操作系统;同时用C语言可以开发高性能的应用程序。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值