1211 - C语言8.14
时间限制 : 1 秒
内存限制 : 32 MB
求方程ax2+bx+c=0的根,用3个函数分别求出当b2-4ac大于0、等于0和小于0时的根,并输出结果。
题目输入
3个用空格隔开的正整数a、b和c。
题目输出
若a=0,则输出“not a quadratic”;否则若方程有两个相等实根,输出“two equal roots:”和相等实根的值;否则若方程有两个不等实根,输出“distinct real roots:”和两个不等实根,用空格隔开;否则若方程有两个共轭复根,输出“complex roots:”和两个共轭复根,用空格隔开。所有的实数输出请使用C语言的默认舍入方式保留4位小数。
请注意行尾输出换行。
输入/输出样例
输入格式
1 2 2
输出格式
complex roots:-1.0000+1.0000i -1.0000-1.0000i
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); }
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); }