用c语言调用函数写个程序,求方程ax*x+bx+c=0的根,要求用3个函数分别求当b*b-4ac大于零、等于零 求大神

如题所述

这是我初学C时写的题,翻出来给你看看,三个函数无非就是你分三种情况,你自己加个if就好了,我这题是默认有两个不相同的解,不想改了,应该能看懂,不懂你问我
sqrt函数是math.h中提供的,是开根的意思
a,b,c是输入的
Description

编程计算并输出一元二次方程ax^2+bx+c=0的两个实根,其中a、b、c的值由用户从键盘输入,假设a、b、c的值能保证方程有两个不相等的实根(即b^2-4ac>0)。

Input

输入三个实数,以空格隔开。

Output

按从大到小的顺序输出两个实根,每个数据占7列、小数点后保留两位小数,不足7列右对齐

Sample Input

2 6 1

Sample Output

-0.18 -2.82

HINT
注意%m.nf的作用

#include<stdio.h>

#include<math.h>

int
main()

{
//x1,x2是结果

double a,b,c,x1,x2;

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

x1=(-b+sqrt(b*b-4*a*c))/(2*a);

x2=(-b-sqrt(b*b-4*a*c))/(2*a);

if(x1>x2)

{

printf("%7.2lf%7.2lf\n",x1,x2);

}

if(x1<x2)

{

printf("%7.2lf%7.2f\n",x2,x1);

}

return 0;

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-20
#include <stdio.h>
#include<math.h>
int e(int a,int b,int c)
{
     float x1,x2;
     x1=(-b+sqrt(b*b-4.0*a*c))/(2.0*a);
     x2=(-b-sqrt(b*b-4.0*a*c))/(2.0*a);
     printf("x1=%.3f x2=%.3f",x1,x2);
}
int f(int a,int b,int c)
{
    float x1=(-b+sqrt(b*b-4.0*a*c))/(2.0*a);
    printf("x1=%.3f x2=%.3f",x1,x1);
}
int g(int a,int b,int c)
{
    float x1,x2;
    x1=-b/(2.0*a);
    x2=sqrt(-(b*b-4.0*a*c))/(2.0*a);
    printf("x1=%.3f+%.3fi x2=%.3f-%.3fi",x1,x2,x1,x2);
}
int main()
{
    int a,b,c;
    while((scanf("%d%d%d",&a,&b,&c))!=EOF)
    {
    if(b*b-4*a*c>0)
        e(a,b,c);
    else if((b*b-4*a*c)==0)
        f(a,b,c);
    else g(a,b,c);
    }
}

第2个回答  2013-06-20
#include<stdio.h>
#include<math.h>
float fun1(float disc)
{
if (disc < 0)
printf("方程无解!");
return 0;
}
float fun2(float disc, float a, float b)
{
float p, q, x1, x2;
p = -b / (2 * a);
q = sqrt(disc) / (2 * a);
x1 = p q;
x2 = p - q;
printf("x1=%f\nx2=%f", x1, x2);
return 0;
}
float fun3(float a, float b)
{
float p;
p = -b / (2 * a);
printf("x1=x2=%f", p);
return 0;
}
int main()
{
float a, b, c, k, l, disc;
printf("输入二次函数的a,b和c:");
scanf("%f%f%f", &a, &b, &c);
k = b * b;
l = 4 * a * c;
disc = k - l;
if (disc < 0)
fun1(disc);
if (disc > 0)
fun2(disc, a, b);
if (disc == 0)
fun3(a, b);
return 0;
}
祝你愉快!本回答被提问者和网友采纳
相似回答