第二题:一元三次方程求解(NOIP2009测试试题12.08)

来源:互联网 发布:家庭理财软件 编辑:程序博客网 时间:2024/05/17 06:53
   

一元三次方程求解

【问题描述】:有形如:ax3+bx2+cx+d=0  这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d  均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值>=1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。
提示:记方程f(x)=0,若存在2个数x1和x2,且x1<x2,f(x1)*f(x2)<0,则在(x1,x2)之间一定有一个根。

样例
【输入】:(equation.in)1   -5   -4   20
【输出】:(equation.out)-2.00   2.00   5.00
#include <stdio.h>#include <stdlib.h>double a, b, c, d;double fun(double x){    return a * x * x * x + b * x * x + c * x + d;}double my_abs(double x){    if (x < 0)        return -x;    return x;}int main(){    FILE *in,*out;    in = fopen("equation.in","rt");    out = fopen("equation.out","wt");     double i;    fscanf(in, "%lf%lf%lf%lf", &a, &b, &c, &d);    for (i = -100; i < 0.0; i += 0.001)        if (my_abs(fun(i)) < 0.00001)                fprintf(out, "%.2lf ", i);    int flag = 0;    for (i = 0; i <= 100; i += 0.001)        if (my_abs(fun(i)) < 0.00001) {                if (flag == 0) {                                flag = 1;                                fprintf(out, "%.2lf ", i);                 } else fprintf(out, "%.2lf\n", i);         }    system("pause");    fclose(in);    fclose(out);    return 0;}/*1 -5 -4 20*/

原创粉丝点击