游客 Signup | Login
中文 | En

1320 - C语言程序设计教程(第三版)课后习题8.2

求方程ax^2+bx+c=0的根,用三个函数gz,ez和sz分别求当b^2-4ac大于0、等于0和小于0时的根,并输出结果。从主函数输入a、b、c的值。(输出保留3位小数)

Input

a b c

Output

x1=? x2=?

Examples

Input

4 1 1

Output

x1=-0.125+0.484i x2=-0.125-0.484i

Solution C

#include<stdio.h>
#include<math.h>
double dayu(double a,double b,double c)
{
	double m1=(-b+sqrt(b*b-4*a*c))/(a*2);
	double m2=(-b-sqrt(b*b-4*a*c))/(a*2);
	printf("x1=%.3lf x2=%.3lf",m1,m2);
}
double dengyu(double a,double b,double c)
{
	double m1=(-b)/(2*a);
	printf("x1=x2=%.3lf",m1);
}
double xiaoyu(double a,double b,double c)
{
	double m1=(-b)/(2*a);
	double t=sqrt(4*a*c-b*b)/(2*a);
	printf("x1=%.3lf+%.3lfi x2=%.3lf-%.3lfi",m1,t,m1,t);
}
int main()
{
    int i,j;
	double a,b,c;
	scanf("%lf%lf%lf",&a,&b,&c);
	if(pow(b,2)-4*a*c>0)  dayu(a,b,c);
	else if(pow(b,2)-4*a*c==0)  dengyu(a,b,c);
	else xiaoyu(a,b,c);
}

Solution C++

#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
double disc,x1,x2,p,q;
void big(int a,int b)	//>0
{
	x1=(-b+sqrt(disc))/(2.0*a);
	x2=(-b-sqrt(disc))/(2.0*a);
}
void small(int a,int b)	//<0
{
	p=-1.0*b/(2*a);
	q=sqrt(-disc)/(2*a);
}
void equal(int a,int b)	//==0
{
	x1=x2=-1.0*b/(2*a);
}
int main()
{
	int a,b,c;
	cin>>a>>b>>c;
	disc=b*b-4*a*c;
	if (disc>0)
	{
		big(a,b);
		printf("x1=%.3lf x2=%.3lf\n",x1,x2);
	}
	else if (disc==0)
	{
		equal(a,b);
		printf("x1=x2=%.3lf\n",x1);
	}
	else
	{
		small(a,b);
		printf("x1=%.3lf+%.3lfi x2=%.3lf-%.3lfi\n",p,q,p,q);
	}
	return 0;
}
Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题