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

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

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

题目输入

a b c

题目输出

x1=? x2=?

输入/输出样例

输入格式

4 1 1

输出格式

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

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);
}

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;
}