C语言编程问题,初学者,麻烦简单点,可以看懂的,谢谢(*°∀°)=3?

设计一个程序,求出下列方程的根:ax2+bx+c = 0
系数a、b、c的值从键盘输入。当程序无解时输出“No solusions!”;当程序有两个解时输出两个解;当程序有1个解时输出1个解。
(开平方可以调用函数sqrt,并且需要包含头文件math.h,示例如下)
#include <stdio.h>
#include <math.h>
int main()
{
double c;
int d;
d = 10;
c = sqrt(d);
printf("10的开方等于=%lf", c);
}

首先分两种情况:

一、a为0,bx+c=0,求得一解。

二、a不为0,按照一元二次方程公式:

当判别式b^2-4ac,>0则两个解,=0则一个解,<0则无解。

最后,代入公式求解。

函数参数:a,b,c及存放结果的数组x。返回解的个数。

下面是代码:

#include <stdio.h>

#include <math.h>

int fun(double a,double b,double c,double *x);

int main()

{

    int n;

    double a,b,c,x[2];

    printf("请输入a,b,c的值:"),scanf("%lf%lf%lf",&a,&b,&c);

    n=fun(a,b,c,x);

    printf("一元二次方程%.2lfx^2+%.2lfx+%.2lf=0,",a,b,c);

    switch(n)

    {

        case 0: printf("无解!\n");break;

        case 1: printf("一个解:x=%lf!\n",x[0]);break;

        case 2: printf("两个解:x1=%lf,x2=%lf!\n",x[0],x[1]);break;

    }

    return 0;

}

int fun(double a,double b,double c,double *x)

{

    double delta;

    if(a==0)

    {

        x[0]=-1*c/b;

        return 1;

    }

    delta=b*b-4*a*c;

    if(delta<0) return 0;

    if(delta==0)

    {

        x[0]=-1*b/(2*a);

        return 1;

    }

    if(delta>0)

    {

        x[0]=(-1*b+sqrt(delta))/(2*a);

        x[1]=(-1*b-sqrt(delta))/(2*a);

        return 2;

    }

    return 0;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-05-24
#include <stdio.h>
#include <math.h>

int main(void) {

double a, b, c;
scanf("%lf %lf %lf", &a, &b, &c);

double delta = b * b - 4 * a * c;
if (delta > 0) {
double x1 = -b + sqrt(delta) / (2 * a);
double x2 = -b - sqrt(delta) / (2 * a);
printf("x1=%f,x2=%f\n", x1, x2);
}
else if (delta == 0) {
double x = -b / (2 * a);
printf("x=%f\n", x);
}
else
printf("No solutions!\n");

return 0;
}