游客 Signup | Login
中文 | En

1211 - C语言8.14

求方程ax2+bx+c=0的根,用3个函数分别求出当b2-4ac大于0、等于0和小于0时的根,并输出结果。

Input

3个用空格隔开的正整数a、b和c。

Output

若a=0,则输出“not a quadratic”;否则若方程有两个相等实根,输出“two equal roots:”和相等实根的值;否则若方程有两个不等实根,输出“distinct real roots:”和两个不等实根,用空格隔开;否则若方程有两个共轭复根,输出“complex roots:”和两个共轭复根,用空格隔开。所有的实数输出请使用C语言的默认舍入方式保留4位小数。

请注意行尾输出换行。

Examples

Input

1 2 2

Output

complex roots:-1.0000+1.0000i -1.0000-1.0000i

Solution C

#include<stdio.h>
#include<math.h>
void f1(int a,int b,int c);
void f2(int a,int b,int c);
void f3(int a,int b,int c);

int main()
{
	int s;
	unsigned int a,b,c;
	scanf("%d %d %d",&a,&b,&c);
	if(a==0)
		printf("not a quadratic\n");
	s=b*b-4*a*c;
	if(s>0)
		f1(a,b,c);
		else if(s==0)
			f2(a,b,c);
		else
			f3(a,b,c);
	return 0;
}

void f1(int a,int b,int c)
{
	double k,x1,x2;
	k=sqrt(b*b-4*a*c);
	x1=(-b+k)/(double)(2*a);
	x2=(-b-k)/(double)(2*a);
	printf("distinct real roots:%.4lf %.4lf\n",x1,x2);
}

void f2(int a,int b,int c)
{
	double x;
	x=-b/(double)(2*a);
	printf("two equal roots:%.4lf\n",x);
}

void f3(int a,int b,int c)
{
	double k,x1,x2;
	k=sqrt(4*a*c-b*b);
	x1=-b/(double)(2*a);
	x2=k/(double)(2*a);
	printf("complex roots:%.4lf+%.4lfi %.4lf-%.4lfi\n",x1,x2,x1,x2);
}

Solution C++

#include <stdio.h>
#include <math.h>
int main() {
	void t1(int a, int b, int c);
	void t2(int a, int b, int c);
	void t3(int a, int b, int c);
	int a, b, c, delta;
	double ans0, ans1, sqrt_delta, realpart, imagpart;
	scanf("%d %d %d", &a, &b, &c);
	/* 计算delta的值(b*b-4*a*c)并分类讨论 */
	delta = b * b - 4 * a * c;
	if (delta > 0) {
		t1(a, b, c);
	} else if (delta == 0) {
		t2(a, b, c);
	} else {
		t3(a, b, c);
	}
	return 0;
}
void t1(int a, int b, int c) {
	int delta;
	double sqrt_delta, ans0, ans1;
	delta = b * b - 4 * a * c;
	sqrt_delta = sqrt(delta);
	ans0 = (-b - sqrt_delta) / (2.0 * a);
	ans1 = (-b + sqrt_delta) / (2.0 * a);
	printf("distinct real roots:%.4f %.4f\n", ans0, ans1);
}
void t2(int a, int b, int c) {
	double ans0;
	ans0 = (-b) / (2.0 * a);
	printf("two equal roots:%.4f\n", ans0);
}
void t3(int a, int b, int c) {
	int delta;
	double realpart, imagpart;
	delta = b * b - 4 * a * c;
	realpart = -b / (2.0 * a);
	imagpart = sqrt(-delta) / (2.0 * a);
	printf("complex roots:%.4f+%.4fi %.4f-%.4fi\n", realpart, imagpart, realpart, imagpart);
}

Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题