ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

解一元三次方程

2021-12-25 15:31:22  阅读:183  来源: 互联网

标签:lf 一元 方程 10 fx fx1 x2 三次 x1


题目描述:
有形如: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语言可以开发高性能的应用程序。

标签:lf,一元,方程,10,fx,fx1,x2,三次,x1
来源: https://blog.csdn.net/qq_62997174/article/details/122144029

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有