题目:求ax^2+bx+c=0方程的根。a,b,c由键盘输入。
代码:
不用函数:
#include<stdio.h>
#include<math.h>
int main(){
double a,b,c,p,q,r,disc1,disc2,x1,x2; //ax^2+bx+c=0
scanf("%lf %lf %lf",&a,&b,&c);
disc1=b*b-4*a*c;
p=-b/(2*a);
q=sqrt(disc1)/(2*a);
if(disc1==0){ //只有一个根
printf("x=%.2f\n",p);
}
else if(disc1>0){ //有两个根
x1=p+q;
x2=p-q;
printf("x1=%.2f x2=%.2f\n",x1,x2);
}
else{ //复根
disc2=4*a*c-b*b;
r=sqrt(disc2)/(2*a);
printf("x1=%.2f+%.2fi x2=%.2f-%.2fi",p,r,p,r);
}
return 0;
}
用函数实现:
#include<stdio.h>
#include<math.h>
int main()
{
float a,b,c,m;
float root1(float a,float b,float c);
float root2(float a,float b,float c);
float root3(float a,float b,float c);
scanf("%f %f %f",&a,&b,&c);
m=b*b-4*a*c;
if(m>=0&&m<1e-6)
{
root1(a,b,c);
}
else if(m>1e-6)
{
root2(a,b,c);
}
else if(m<0)
{
root3(a,b,c);
}
return 0;
}
float root1(float a,float b,float c)
{
float x;
x=-b/(2*a);
printf("x=%.2f",x);
}
float root2(float a,float b,float c)
{
float x1,x2,p,r,w;
p=-b/(2*a);
r=b*b-4*a*c;
w=sqrt(r)/(2*a);
x1=p+w;
x2=p-w;
printf("x1=%.2f x2=%.2f",x1,x2);
}
float root3(float a,float b,float c)
{
float t,k,s;
t=-(b*b)+4*a*c;
k=sqrt(t)/(2*a);
s=-b/(2*a);
printf("x1=%.2f+%.2fi x2=%.2f-%.2fi",s,k,s,k);
}