7-1 解方程 (10 分)
求解一元二次方程ax2+bx+c=0。输入a、b、c的值(a、b、c均为整数且a≠0),计算并输出方程的解x(保留3位小数)。如果方程无实数解,输出“no real solution”。
输入格式:
输入a、b、c的值(a、b、c均为整数,且a≠0)
输出格式:
输出方程的解,如果有实数解,保留3位小数,输出格式参照样例。如果方程无实数解,输出“no real solution”。
输入样例1:
1 4 3
结尾无空行
输出样例1:
x1=-3.000
x2=-1.000
结尾无空行
输入样例2:
1 -2 1
结尾无空行
输出样例2:
x=1.000
31.求解一元二次方程 ax2+bx+c=0 的跟(a 不等于 0),a,b,c 均为实数,其值由键盘输入。
#include<math.h>
#include<stdio.h>
#include<conio.h>
main() {
double a,b,c;
double s,x1,x2;
printf("please enter a,b,c:\n");
scanf("%lf%lf%lf",&a,&b,&c);
if(a>=-(1e-6)&&a<=(1e-6))
printf("sorry!you have a wrong numbera.\n");
else {
s=b*b-4*a*c;
if(s>(1e-6)) {
x1=(-b+sqrt(s))/(2*a);
x2=(-b-sqrt(s))/(2*a);
printf("there are two different
real:\nx1=%5.2f,x2=%5.2f\n",x1,x2);} else if(s>=-(1e-6)&&s<=(1e-6)) {
x1=x2=-b/(2*a);
printf("there are two equal
real:\nx1=x2=%5.2f\n",x1);
} else {
s=-s;
x1=-b/(2*a);
x2=fabs(sqrt(s)/(2*a));
printf("there are two different complex:\n");
printf("x1=%5.2f+%5.2fi,x2=%5.2f-%5.2fi\n",x1,x2,x1,x2);
}
}
getch();
}